fix: ReferenceError bloquait le ciblage d'Accord royal/Épidémie, laissant la carte jouée indéfiniment en main
Régression introduite par le précédent refactor (commit 34d1bbe) qui a
remplacé le paramètre 'token' (référence Phaser) par 'eventId' (string)
dans _onEventCardPlay, mais avait oublié de mettre à jour les 2 appels
internes à this._startTargeting(token, ...) pour les événements Accord
royal et Épidémie (variante Trousse) — 'token' n'existait plus dans ce
scope, provoquant un ReferenceError JavaScript non capturé au moment
précis où l'utilisateur cliquait sur JOUER pour un événement nécessitant
un ciblage.
Conséquence concrète : l'exception interrompait l'exécution de
_onEventCardPlay avant d'atteindre _startTargeting, donc aucune séquence
de ciblage ne démarrait jamais, playEventCard n'émettait jamais
'play-event' au serveur, pendingEventPlayId restait null côté serveur, et
la carte réapparaissait comme "jouable" en main indéfiniment — exactement
le symptôme rapporté ("les événements ne semblent pas être résolus et
restent dans la seconde main même si joués").
Reproduit et confirmé via un test E2E de trace ciblé (game-state +
_renderEventHand loggés à chaque appel) : avant le fix, pendingEventPlayId
restait null malgré le clic sur JOUER + les 2 clics de ciblage ; après le
fix, pendingEventPlayId=royal_accord est bien transmis au serveur et la
carte disparaît correctement de la main après résolution du tour.
Fix trivial : this._startTargeting(token, ...) -> this._startTargeting(eventId, ...)
sur les 2 appels concernés. 54 tests unitaires client + 166 tests
unitaires serveur toujours au vert (ce bug, une ReferenceError dans un
chemin de code jamais exercé par les tests unitaires existants — qui ne
peuvent pas simuler un vrai clic Phaser sur le bouton JOUER + la séquence
de ciblage — n'était détectable que par test E2E ou lecture manuelle).
This commit is contained in:
1 parent
34d1bbe37f
commit
4fe9cf4393
1 file changed
+2
-2
@@ -830,12 +830,12 @@ export class GameScene extends Phaser.Scene {
|
||||
// server/src/game/Room.js) — le ciblage transite par teamIndex
|
||||
// (identifiant public), jamais par socketId (donnée serveur interne
|
||||
// jamais exposée au client).
|
||||
this._startTargeting(token, ['gainTargetTeamIndex', 'loseTargetTeamIndex'], {
|
||||
this._startTargeting(eventId, ['gainTargetTeamIndex', 'loseTargetTeamIndex'], {
|
||||
gainTargetTeamIndex: 'Choisissez un joueur qui gagnera 1 Diplomatie',
|
||||
loseTargetTeamIndex: 'Choisissez un joueur qui perdra 1 Diplomatie'
|
||||
})
|
||||
} else if (eventData.id === 'epidemic') {
|
||||
this._startTargeting(token, ['targetTeamIndex'], {
|
||||
this._startTargeting(eventId, ['targetTeamIndex'], {
|
||||
targetTeamIndex: 'Choisissez l\'adversaire qui perdra 2 Santé (Trousse du Médecin)'
|
||||
})
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user