Retour à la leçon
Mission

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.