Code frameworks
Receta: limitar un valor
Mantén un valor dentro de un rango con math.max y math.min.
Objetivo
Evita que los HP bajen de cero cuando un Keeper recibe daño.
El cambio
Lee el valor actual y luego escribe el resultado limitado.
rules/hurt.ts
export function hurt(self: ElementRef, amount: number): void {
const hp: number = element.var(self, "hp") as number;
ledger.set(self, "hp", math.max(0, hp - amount));
}- Línea 2 Lee los PV actuales.
- Línea 3 math.max mantiene el resultado en 0 o más. Escribe el valor final con ledger.set.
Usa math.min(limit, value) para mantener un valor en un límite o por debajo.
Un límite puede ser otro campo. Para mantener la Cordura en un campo max_sanity o por debajo, lee ambos y escribe math.min(max_sanity, sanity + amount). La regla de curar del inicio rápido hace esto con max_hp. Prueba el paso limitado.
Pruébalo
La regla ahora establece un valor, así que la escritura esperada es ledger.set en lugar de ledger.add. Añade un paso que bajaría de cero.
scenarios/heal.json
"actions": [
{
"action": "hurt",
"parameters": { "amount": 6 },
"expectedWrites": [{ "op": "ledger.set", "key": "hp", "value": 4 }]
},
{
"action": "hurt",
"parameters": { "amount": 20 },
"expectedWrites": [{ "op": "ledger.set", "key": "hp", "value": 0 }]
},
{
"action": "heal",
"parameters": { "amount": 3 },
"expectedWrites": [{ "op": "ledger.set", "key": "hp", "value": 3 }]
}
]- Líneas 7-11 Recibe 6 de daño: 10 menos 6 es 4.
- Líneas 12-16 Un golpe de 20 bajaría de cero. La regla escribe 0.
- Líneas 17-21 Cura 3 desde 0.

