Skip to main content

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.