Events and Cleanup
Event registration returns an identifier. Keep it so the listener can be removed when the workflow completes.
function hexis.main()
local finished = false
local listener_id = hexis.events.on("chat", "OBJECTIVE COMPLETE", function()
finished = true
end)
hexis.timer.start()
while hexis.script.is_running() and not finished do
if hexis.timer.elapsed() >= 60 then
break
end
hexis.wait(0.1)
end
hexis.events.remove(listener_id)
if finished then
hexis.log.info("Objective completed")
else
hexis.log.warn("Stopped before completion")
end
end
Use a narrow pattern, keep callbacks short, and remove listeners that no longer belong to the active workflow.