Code-Frameworks
Rezept: einen Wert begrenzen
Halte einen Wert mit math.max und math.min in einem Bereich.
Ziel
Verhindere, dass hp unter null fällt, wenn ein Keeper Schaden nimmt.
Die Änderung
Lies den aktuellen Wert und schreibe dann das begrenzte Ergebnis.
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));
}- Zeile 2 Lies die aktuellen HP.
- Zeile 3 math.max hält das Ergebnis bei 0 oder darüber. Schreibe den Endwert mit ledger.set.
Nutze math.min(limit, value), um einen Wert auf oder unter einer Grenze zu halten.
Eine Grenze kann ein anderes Feld sein. Um Sanity auf oder unter einem Feld max_sanity zu halten, lies beide und schreibe math.min(max_sanity, sanity + amount). Die Heilungsregel im Schnellstart macht das mit max_hp. Teste den begrenzten Schritt.
Teste es
Die Regel setzt jetzt einen Wert, also ist der erwartete Schreibvorgang ledger.set statt ledger.add. Füge einen Schritt hinzu, der unter null fallen würde.
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 }]
}
]- Zeilen 7-11 Nimm 6 Schaden: 10 minus 6 ist 4.
- Zeilen 12-16 Ein Treffer von 20 würde unter null fallen. Die Regel schreibt 0.
- Zeilen 17-21 Heile 3 von 0 aus.

