Aller au contenu principal

Frameworks de code

Recette : une statistique dérivée

Calculez une valeur à partir d'autres valeurs avec une fonction de registre.

Objectif

Affichez un Ward égal à la moitié des PV maximum, arrondie à l'inférieur.

Le changement

Déclarez la fonction dans le schéma.

schemas/keeper.json
  "ledgerFunctions": [
    {
      "id": "ward",
      "name": "Ward",
      "field": "ward",
      "source": "rules/ward.ts"
    }
  ]
  1. Lignes 19-22 field est la valeur stockée que Ward remplit.
rules/ward.ts
export function ward(currentValue: number, self: ElementRef): number {
  const max_hp: number = element.var(self, "max_hp") as number;
  return math.floor(max_hp / 2);
}
  1. Ligne 1 currentValue est la valeur actuelle. La plupart des valeurs dérivées l'ignorent.
  2. Ligne 2 Lisez ce dont vous avez besoin avec element.var.
  3. Ligne 3 Renvoie le nombre dérivé.

Le constructeur renvoie toujours le champ, avec une valeur de départ de 0.

rules/keeper.ts
export function construct(
  name: string,
  max_hp: number,
): { name: string; max_hp: number; hp: number; ward: number } {
  return { name: name, max_hp: max_hp, hp: max_hp, ward: 0 };
}
  1. Lignes 4-5 ward est renvoyé à 0. La fonction de registre le dérive juste après.

Testez-le

scenarios/new-keeper.json
  "ledger": [{ "function": "ward", "currentValue": 0, "expected": 5 }]
  1. Ligne 6 Vérifie la fonction : elle part de 0 et doit renvoyer 5.

Ajoutez aussi ward à expectedValues dans chaque scénario du Keeper.

Suite