2.4.0 : gestion du sac — déséquiper, goinfrer (MIAM/CLONK/GRRROUAR), jeter à terre, sac classé par type avec effets visibles

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
perco
2026-06-12 23:23:01 +02:00
co-authored by Claude Fable 5
parent 031d64830c
commit 0ac2971f03
8 changed files with 392 additions and 46 deletions
+37
View File
@@ -400,6 +400,43 @@ assert.strictEqual(g.itemFromSpec({ x: 1, y: 1, kind: "armor", idx: 0 }).name, "
}
}
// Goinfre : les trois issues existent, X borné 1-3, effets temporaires posés
{
const counts = { MIAM: 0, CLONK: 0, GRRROUAR: 0 };
for (let i = 0; i < 300; i++) {
const t = { pv: 10, pvMax: 100, potionEffects: [] };
const r = p.goinfreItem(t, g.rollDice);
counts[r.cry]++;
if (r.cry === "MIAM") {
assert(t.pv > 10 && t.pv <= 10 + 9, "MIAM soigne entre 1 et 3D3");
} else {
const fx = t.potionEffects[0];
assert(fx && fx.turnsLeft >= 1 && fx.turnsLeft <= 3, "effet de 1 à 3 tours");
if (r.cry === "CLONK") assert(fx.armor >= 1 && fx.armor <= 3, "CLONK : armure +1 à +3");
if (r.cry === "GRRROUAR") assert(fx.degFlat >= 1 && fx.degFlat <= 3, "GRRROUAR : DEG +1 à +3");
}
}
assert(counts.MIAM && counts.CLONK && counts.GRRROUAR, "les trois cris sortent : " + JSON.stringify(counts));
}
// Déséquiper : retour au sac, PV max et modificateurs recalculés
{
const gearLib = require("../js/gear.js");
const t = { att: 3, esq: 3, deg: 3, reg: 1, vue: 3, armor: 0, armorDice: 0, degBonus: 0, pvMax: 30, pv: 30,
potionEffects: [], blockCamoTurns: 0, tour: 1, bag: [],
equip: { arme: null, armure: null, casque: null, bouclier: null, talisman: null, bottes: null }, gearMods: null };
g.equipGear(t, gearLib.gearItemByName("armure", "Armure de bois")); // arm +6, pv +15
assert.strictEqual(t.pvMax, 45, "PV max +15");
t.pv = 45;
const old = g.unequipToBag(t, "armure", () => {});
t.gearMods = gearLib.gearMods(t.equip);
assert.strictEqual(old.name, "Armure de bois", "pièce retirée");
assert.strictEqual(t.bag.length, 1, "revenue au sac");
assert.strictEqual(t.pvMax, 30, "PV max restaurés");
assert.strictEqual(t.pv, 30, "PV bornés au nouveau max");
assert.strictEqual(t.gearMods.arm, 0, "modificateurs recalculés");
}
// Validation serveur des niveaux
const srv = require("../server.js");
const goodGrid = [];