Retour à la leçon
Mission

Mission : la quête qui saute une réplique

Analyser précisément le cycle resume/yield d'une séquence de dialogue de quête et choisir la bonne stratégie de gestion d'erreur.

Contexte

Une séquence de dialogue de quête utilise une coroutine :

lua
local function questSequence()
  print("PNJ: Bonjour aventurier !")
  local reponse = coroutine.yield("attente_reponse_1")
  print("PNJ: Tu as dit " .. reponse)
  coroutine.yield("attente_reponse_2")
  print("PNJ: Merci, voici ta récompense !")
  return "quete_terminee"
end

local co = coroutine.create(questSequence)
print(coroutine.resume(co))              -- ok, "attente_reponse_1"
print(coroutine.resume(co, "bonjour"))    -- ok, "attente_reponse_2"
print(coroutine.status(co))

Un testeur signale qu'un joueur qui répond très vite provoque parfois une erreur "cannot resume dead coroutine" en jeu.