Saltar al contenido principal

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));
}
  1. Línea 2 Lee los PV actuales.
  2. 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 }]
    }
  ]
  1. Líneas 7-11 Recibe 6 de daño: 10 menos 6 es 4.
  2. Líneas 12-16 Un golpe de 20 bajaría de cero. La regla escribe 0.
  3. Líneas 17-21 Cura 3 desde 0.

Siguiente