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.
eventName(string) — Deve corresponder a um dos eventos emEventHandlershandlerFunction(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