v2.9.0 : cases x2, portee d'attaque = meme case (sauf Projectile Magique), PvP
mp-client.js : MP_TILE 24->48 + polices de coins proportionnelles. mp.js : action attack ne porte que sur la meme case (cheby 0) et dispatch monstre/troll ; actAttackTroll (PvP : combat, +1 PX/coup, kill -> killTrollMP, pas de butin) ; comp/sort portee 0 (meme case) sauf sort Tomawak (Projectile Magique, portee = Vue) ; stateFor envoie l'id des trolls. Client : cibles = monstres + trolls sur ta case, deroulant pour choisir. Tests : combat meme case, deplacement libre, PvP. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+19
-1
@@ -135,7 +135,7 @@ function makeWorld(over = {}) {
|
||||
const { troll: t } = mp.newTroll(w, "Tueur", "Kastar");
|
||||
t.att = 50; t.deg = 20; // écrasant
|
||||
const m = w.monsters[0];
|
||||
m.x = t.x + 1; m.y = t.y;
|
||||
m.x = t.x; m.y = t.y; // même case : l'attaque ne porte que sur sa propre case
|
||||
m.pv = 5;
|
||||
t.pa = 6;
|
||||
const r = mp.action(w, t, { type: "attack", target: m.id });
|
||||
@@ -422,6 +422,24 @@ function makeWorld(over = {}) {
|
||||
assert(ra.ok, "attaque explicite possible sur la même case");
|
||||
}
|
||||
|
||||
// PvP : un troll peut attaquer un autre troll sur sa case (et le terrasser)
|
||||
{
|
||||
const w = makeWorld({ monsterTarget: 0, itemTarget: 0 });
|
||||
const { troll: a } = mp.newTroll(w, "Agresseur", "Kastar");
|
||||
const { troll: b } = mp.newTroll(w, "Victime", "Skrim");
|
||||
a.att = 50; a.deg = 20; a.pa = 6;
|
||||
b.x = a.x; b.y = a.y; b.pv = 5; b.esq = 1;
|
||||
// pas sur la même case → refusé
|
||||
b.x = a.x + 5;
|
||||
assert(mp.action(w, a, { type: "attack", target: b.id }).error, "PvP refusé hors de la case");
|
||||
// sur la même case → combat, mise à mort
|
||||
b.x = a.x; b.y = a.y;
|
||||
const r = mp.action(w, a, { type: "attack", target: b.id });
|
||||
assert(r.ok, "PvP résolu sur la même case");
|
||||
assert(b.dead, "le troll visé est terrassé");
|
||||
assert(a.kills === 1, "kill comptabilisé pour l'attaquant");
|
||||
}
|
||||
|
||||
// Base de référence : les retouches survivent au redémarrage (seed non destructif)
|
||||
{
|
||||
const os = require("os");
|
||||
|
||||
Reference in New Issue
Block a user