Ir para o conteúdo

Estrutura de Scripts

ScriptCore.lua — O Despachante de Eventos

ScriptCore.lua é carregado automaticamente pelo GameServer. Ele gerencia todos os manipuladores de eventos através de um registro central.

-- Internal event handler registry (inside ScriptCore.lua)
local EventHandlers = {
    OnReadScript = {},
    OnShutScript = {},
    OnTimerThread = {},
    OnCommandManager = {},
    OnCharacterEntry = {},
    OnCharacterClose = {},
    OnNpcTalk = {},
    OnMonsterDie = {},
    OnUserDie = {},
    OnUserRespawn = {},
    OnCheckUserTarget = {},
    OnCheckUserKiller = {},
    OnPacketRecv = {},
    OnConnectDataBase = {},
    OnItemGet = {},
    OnItemDrop = {},
    OnGremoryCaseReady = {},
}

BridgeFunctionAttach()

Registra um callback no despachante de eventos.

BridgeFunctionAttach(eventName, handlerFunction)
  • eventName (string) — Deve corresponder a um dos eventos em EventHandlers
  • handlerFunction (function) — Sua função de callback

Múltiplos Manipuladores

Você pode registrar múltiplos manipuladores para o mesmo evento. Eles executam na ordem de registro:

-- File: Welcome.lua
BridgeFunctionAttach("OnCharacterEntry", function(aIndex)
    GCNoticeSend(aIndex, 1, "Welcome!")
end)

-- File: DailyReward.lua
BridgeFunctionAttach("OnCharacterEntry", function(aIndex)
    -- Give daily login reward
    ItemGive(aIndex, 100)
end)

-- Both handlers run when a player logs in

Eventos Disponíveis

Evento Parâmetros Retorno Descrição
OnReadScript Scripts carregados/recarregados
OnShutScript Servidor desligando
OnTimerThread Tick do timer (~1/seg)
OnConnectDataBase Banco de dados conectado
OnCharacterEntry aIndex Jogador entra no jogo
OnCharacterClose aIndex Jogador desconecta
OnGremoryCaseReady aIndex Dados do Gremory carregados
OnUserDie aIndex, bIndex Jogador morre
OnUserRespawn aIndex, killerType Jogador ressuscita
OnMonsterDie aIndex, bIndex 0/1 Monstro morre
OnCommandManager aIndex, code, arg 0/1 Comando customizado usado
OnNpcTalk aIndex, bIndex 0/1 Interação com NPC
OnCheckUserTarget aIndex, bIndex 0/1 Validação de alvo PvP
OnCheckUserKiller aIndex, bIndex 0/1 Verificação de penalidade PK
OnItemGet aIndex, index, item 0/1 Coleta de item
OnItemDrop aIndex, slot, item 0/1 Drop de item
OnPacketRecv aIndex, head, packet 0/1 Pacote customizado recebido

Estrutura de Arquivos Recomendada

LuaScript/
  System/
    ScriptCore.lua          # Event dispatcher (don't modify)
    ScriptDefine.lua        # Constants (CLASS_DW, MAP_LORENCIA, etc.)
    ScriptReader.lua        # File parser utility
  Welcome.lua               # Your custom scripts
  DailyReward.lua
  CustomCommands.lua
  BossEvent.lua

Ciclo de Vida do Script

Server Start
  ├─► OnReadScript()         — Inicialize seus dados
  ├─► OnConnectDataBase()    — Configure conexões SQL
  │   [Jogo Rodando]
  ├─► OnTimerThread()        — A cada ~1 segundo
  ├─► OnCharacterEntry()     — Jogador entra
  ├─► OnGremoryCaseReady()   — Gremory carregado (seguro para dar itens)
  ├─► OnNpcTalk()            — NPC clicado
  ├─► OnMonsterDie()         — Monstro morto
  ├─► OnUserDie()            — Jogador morto
  ├─► OnCharacterClose()     — Jogador sai
  └─► OnShutScript()         — Servidor parando, faça limpeza