Pular para o conteúdo principal

Eventos do jogo

Os eventos permitem que um script reaja a dados recebidos pelo cliente, interações com a interface, estados do CaveBot e recursos do ZeroBot.

Registrando e removendo eventos

local function onMagicEffect(effectType, x, y, z)
print("effect", effectType, x, y, z)
end

Game.registerEvent(Game.Events.MAGIC_EFFECT, onMagicEffect)

-- Use a mesma referência de função quando ela não for mais necessária.
Game.unregisterEvent(Game.Events.MAGIC_EFFECT, onMagicEffect)

Game.registerEvent e Game.unregisterEvent retornam o callback recebido. Mantenha callbacks em variáveis locais quando o script puder removê-los mais tarde.

Eventos disponíveis

EventoArgumentos do callbackQuando é acionado
Game.Events.TALKauthorName, authorLevel, type, x, y, z, text, channelIdUma mensagem de fala é recebida. type usa Enums.TalkTypes; channelId identifica o canal quando aplicável.
Game.Events.MAGIC_EFFECTtype, x, y, zUm magic effect é recebido.
Game.Events.HUD_CLICKidUm HUD criado por script é clicado.
Game.Events.HOTKEY_SHORTCUT_PRESSkey, modifierUm atalho de teclado suportado é pressionado. Compare os dois valores com HotkeyManager.parseKeyCombination.
Game.Events.TEXT_MESSAGEmessageDataUma mensagem de texto do servidor é recebida. messageData.messageType pode ser comparado com Enums.MessageTypes, mas os tipos podem variar conforme a versão do cliente.
Game.Events.MODAL_WINDOWmodalWindowDataO servidor abre uma janela modal do jogo.
Game.Events.CUSTOM_MODAL_WINDOW_BUTTON_CLICKmodalId, buttonIndexUm botão de uma CustomModalWindow criada por script é clicado.
Game.Events.IMBUEMENT_DATAimbuementDataOs dados da janela de imbuement são recebidos.
Game.Events.IMBUEMENT_OPEN_WINDOWnenhumA janela de imbuement é aberta. Disponível no cliente 15.10 ou mais recente.
Game.Events.QUEST_LOGquestsOs dados do quest log são recebidos após a solicitação do cliente ou do script.
Game.Events.QUEST_LINESquestId, missionsAs missões de uma quest são recebidas.
Game.Events.DISTANCE_SHOOT_EFFECTtype, fromX, fromY, fromZ, toX, toY, toZUm efeito de distância é recebido.
Game.Events.PARTY_HUNToutputA saída de Party Hunt é capturada. A opção Party Hunt da aba Engine precisa estar ativada.
Game.Events.LABELwpId, labelO CaveBot chega a um waypoint Label. Ele fica pausado até o callback continuar a execução com CaveBot.pause(0).
Game.Events.OPEN_STASHstashDataOs dados do stash são recebidos quando ele é aberto.
Game.Events.HUD_DRAGid, x, yUm HUD arrastável é solto em uma nova posição da tela.
Game.Events.STORE_CATEGORIESstoreCategoriesDataOs dados de categorias da Game Store são recebidos.
Game.Events.STORE_OFFERSstoreOffersDataOs dados de ofertas da Game Store são recebidos.
Game.Events.OPEN_DAILY_REWARDdailyRewardDataOs dados da janela de Daily Reward são recebidos.
Game.Events.DAILY_REWARD_DAYS_DATAdailyRewardDaysDataOs dados dos dias de Daily Reward são recebidos.
Game.Events.ALARMalarmTypeUm alarme do ZeroBot é acionado. Compare alarmType com Enums.AlarmType.
Game.Events.TASK_HUNTING_DATAtaskHuntingDataDados de Hunting Tasks ou uma atualização de slot são recebidos. Interprete taskHuntingData.state com Enums.PreyTaskDataState.

Payloads estruturados

Vários eventos entregam uma tabela Lua cujos campos dependem do pacote e, em alguns casos, da versão do cliente. Inspecione o payload completo antes de depender de campos opcionais:

local function onTextMessage(messageData)
print(JSON.encode(messageData))
end

Game.registerEvent(Game.Events.TEXT_MESSAGE, onTextMessage)

Payloads comuns incluem:

  • TEXT_MESSAGE: canal, tipo, texto, posição, cores e valores numéricos fornecidos pelo cliente.
  • MODAL_WINDOW: ID, título, mensagem, botões, escolhas, botões padrão e prioridade.
  • OPEN_STASH: stashItems, com entradas contendo itemId e count, além de freeSlots.
  • TASK_HUNTING_DATA: ID do slot, estado e campos de Hunting Tasks específicos desse estado. Veja a seção Hunting Tasks na API Game.

Sempre proteja o acesso a campos opcionais e dados específicos de cada estado:

local function onHuntingTasks(data)
if data.state == Enums.PreyTaskDataState.PREY_TASK_DATA_STATE_ACTIVE then
print("slot", data.slotId, "kills", data.currentKills)
end
end

Game.registerEvent(Game.Events.TASK_HUNTING_DATA, onHuntingTasks)

Exemplos de interação

Hotkey

local valid, expectedModifier, expectedKey =
HotkeyManager.parseKeyCombination("Ctrl+F8")

local function onShortcut(key, modifier)
if valid and key == expectedKey and modifier == expectedModifier then
print("Ctrl+F8 pressionado")
end
end

Game.registerEvent(Game.Events.HOTKEY_SHORTCUT_PRESS, onShortcut)

Label do CaveBot

local function onLabel(waypointId, label)
print("Label alcançado", waypointId, label)

-- O CaveBot fica pausado enquanto este handler executa a ação do label.
CaveBot.pause(0)
end

Game.registerEvent(Game.Events.LABEL, onLabel)

Clique e arraste de HUD

local hud = HUD(40, 40, "Arraste ou clique", true)
hud:setDraggable(true)

local function onHudClick(id)
if id == hud:getId() then
print("clicado")
end
end

local function onHudDrag(id, x, y)
if id == hud:getId() then
print("solto em", x, y)
end
end

Game.registerEvent(Game.Events.HUD_CLICK, onHudClick)
Game.registerEvent(Game.Events.HUD_DRAG, onHudDrag)