Retour à la leçonMission
Mission : des effets de poison qui se mélangent entre joueurs
Corriger un système d'effets de statut où tous les joueurs empoisonnés semblent partager la même intensité, et fiabiliser une fonction récursive.
Contexte
Un système d'effets de statut RP génère un gestionnaire d'effet par type, mais un développeur a écrit ce code qui pose problème :
lua
local activeIntensity = 0 -- variable globale au fichier, PAS locale à chaque effet
local function makePoisonEffect(intensity)
activeIntensity = intensity
return function(entity)
entity.hp = entity.hp - activeIntensity
end
end
local poisonWeak = makePoisonEffect(5)
local poisonStrong = makePoisonEffect(20)
poisonWeak(playerA) -- inflige 20 dégâts au lieu de 5 !Le développeur pensait, comme dans la leçon sur les closures, que chaque appel à makePoisonEffect créerait un environnement indépendant. Ce n'est visiblement pas le cas ici.