Skip to content

EventQueue

Represents a queue that collects and manages events, providing methods to access the latest event, wait for the next event, or stop collection.

Fields

names: string[] Read-Only

The names of the events that this queue is collecting.

empty: boolean Read-Only

Returns true if the queue contains no events.

Methods

latest() event: any

Returns the newest event in this queue and discards all older events. If the queue is empty, nil is returned. Use this method when only the most recent event is relevant, such as in updates.

Example

local queue = spell:collect("ChatMessageEvent")
while true do
  local event = queue:latest()
  if event ~= nil then
    spell:execute("say " .. event.message)
  end
  sleep(5 * 20)
end

Returns

  • event: any — The latest event or nil if the queue is empty.

next(timeout: number|nil) event: any

Returns the next event in the queue, blocking until an event is available or the specified timeout (in game ticks) is reached. If no timeout is provided, this method blocks indefinitely until an event is available.

Example

local queue = spell:collect("ChatMessageEvent")
while true do
  local event = queue:next()
  spell:execute("say " .. event.message)
end

Parameters

Name Type Description
timeout number|nil Optional timeout in game ticks. If not provided, blocks indefinitely.

Returns

  • event: any — The next event or nil if the timeout is reached.

stop()

Stops the queue from collecting events, preventing further additions to it.

Example

local respawnQueue = spell:collect("AfterPlayerRespawnEvent")
spell:intercept({"ChatMessageEvent"}, function(evt)
  if evt.message == "stop" then
    respawnQueue:stop()
  end
end)
while true do
  local evt = respawnQueue:next(10)
  if evt then
    print(evt.newPlayer.name.." respawned")
  end
end