GameServerFunctions

Documentação das Funções do GameServer para Lua

As funções do GameServerFunctions são chamadas automaticamente pelo servidor de jogo em eventos específicos e podem ser "hookadas" em scripts Lua para personalizar comportamentos. Esta documentação explica cada função de forma clara, intuitiva e com exemplos práticos e concisos.


Como Usar as Funções do GameServer

  1. Declaração: Crie uma função Lua que será chamada quando o evento correspondente ocorrer.

  2. Registro: Use GameServerFunctions.NomeDoEvento(Função) para associar sua função ao evento.

  3. Observação:

    • Cada função é disparada automaticamente pelo servidor em situações específicas (ex.: morte de monstro, level up, etc.).

    • Use a classe User para obter informações sobre jogadores ou monstros.


Funções do GameServerFunctions

Abaixo está a lista de funções, com descrições simples e exemplos práticos de uso:

1. PlayerDropItem(aIndex, x, y, slot)

  • Descrição: Chamada quando o jogador solta um item no chão. O slot pode ser usado com a classe Inventory para identificar o item.

  • Exemplo:

    Copy

    function OnPlayerDropItem(aIndex, x, y, slot)
        local player = User.new(aIndex)
        LogAdd(string.format("[DropItem] - [%s] soltou item no slot %d em (%d, %d)", player:getName(), slot, x, y), 0)
    end
    GameServerFunctions.PlayerDropItem(OnPlayerDropItem)

2. CharacterSet(aIndex)

  • Descrição: Chamada quando o personagem do jogador é atualizado (ex.: atributos como ataque ou defesa).

  • Exemplo:

    Copy

    function OnCharacterSet(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[CharacterSet] - [%s] teve atributos atualizados", player:getName()), 0)
    end
    GameServerFunctions.CharacterSet(OnCharacterSet)

3. MonsterDie(Player, Monster)

  • Descrição: Chamada quando um monstro morre.

  • Exemplo:

    Copy

    function OnMonsterDie(Player, Monster)
        local player = User.new(Player)
        local monster = User.new(Monster)
        LogAdd(string.format("[MonsterDie] - [%s] matou %s", player:getName(), monster:getName()), 0)
    end
    GameServerFunctions.MonsterDie(OnMonsterDie)

4. MonsterDieGiveItem(Player, Monster)

  • Descrição: Chamada quando um monstro solta um item após morrer.

  • Exemplo:

    Copy

    function OnMonsterDieGiveItem(Player, Monster)
        local player = User.new(Player)
        LogAdd(string.format("[MonsterDieGiveItem] - [%s] recebeu item de monstro", player:getName()), 0)
    end
    GameServerFunctions.MonsterDieGiveItem(OnMonsterDieGiveItem)

5. PlayerDie(aIndex, TargetIndex)

  • Descrição: Chamada quando o jogador morre.

  • Exemplo:

    Copy

    function OnPlayerDie(aIndex, TargetIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerDie] - [%s] morreu", player:getName()), 0)
    end
    GameServerFunctions.PlayerDie(OnPlayerDie)

6. PlayerAttack(aIndex, TargetIndex)

  • Descrição: Chamada quando o jogador ataca um alvo.

  • Exemplo:

    Copy

    function OnPlayerAttack(aIndex, TargetIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerAttack] - [%s] atacou um alvo", player:getName()), 0)
    end
    GameServerFunctions.PlayerAttack(OnPlayerAttack)

7. PlayerSendTrade(aIndex, TargetIndex)

  • Descrição: Chamada quando o jogador envia uma solicitação de troca (trade).

  • Exemplo:

    Copy

    function OnPlayerSendTrade(aIndex, TargetIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerSendTrade] - [%s] enviou solicitação de troca", player:getName()), 0)
    end
    GameServerFunctions.PlayerSendTrade(OnPlayerSendTrade)

8. PlayerLevelUp(aIndex)

  • Descrição: Chamada quando o jogador sobe de nível.

  • Exemplo:

    Copy

    function OnPlayerLevelUp(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerLevelUp] - [%s] subiu de nível", player:getName()), 0)
    end
    GameServerFunctions.PlayerLevelUp(OnPlayerLevelUp)

9. PlayerRingEquiped(aIndex)

  • Descrição: Chamada quando o jogador equipa um anel.

  • Exemplo:

    Copy

    function OnPlayerRingEquiped(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerRingEquiped] - [%s] equipou um anel", player:getName()), 0)
    end
    GameServerFunctions.PlayerRingEquiped(OnPlayerRingEquiped)

10. PlayerTradeOk(aIndex, TargetIndex)

  • Descrição: Chamada quando o jogador confirma uma troca (trade) clicando em "OK".

  • Exemplo:

    Copy

    function OnPlayerTradeOk(aIndex, TargetIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerTradeOk] - [%s] confirmou a troca", player:getName()), 0)
    end
    GameServerFunctions.PlayerTradeOk(OnPlayerTradeOk)

11. PlayerLogout(aIndex)

  • Descrição: Chamada quando o jogador sai do jogo.

  • Exemplo:

    Copy

    function OnPlayerLogout(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerLogout] - [%s] saiu do jogo", player:getName()), 0)
    end
    GameServerFunctions.PlayerLogout(OnPlayerLogout)

12. GuildWarProc(GuildName1, GuildPoints1, GuildName2, GuildPoints2)

  • Descrição: Chamada durante uma guerra de guildas, com os nomes e pontos das guildas.

  • Exemplo:

    Copy

    function OnGuildWarProc(GuildName1, GuildPoints1, GuildName2, GuildPoints2)
        LogAdd(string.format("[GuildWarProc] - %s (%d) vs %s (%d)", GuildName1, GuildPoints1, GuildName2, GuildPoints2), 0)
    end
    GameServerFunctions.GuildWarProc(OnGuildWarProc)

13. EnterCharacter(aIndex)

  • Descrição: Chamada quando o jogador entra no jogo.

  • Exemplo:

    Copy

    function OnEnterCharacter(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[EnterCharacter] - [%s] entrou no jogo", player:getName()), 0)
    end
    GameServerFunctions.EnterCharacter(OnEnterCharacter)

14. CharacterMove(aIndex, map, x, y)

  • Descrição: Chamada quando o jogador teleporta.

  • Exemplo:

    Copy

    function OnCharacterMove(aIndex, map, x, y)
        local player = User.new(aIndex)
        LogAdd(string.format("[CharacterMove] - [%s] teleportou para mapa %d (%d, %d)", player:getName(), map, x, y), 0)
    end
    GameServerFunctions.CharacterMove(OnCharacterMove)

15. PlayerMove(aIndex, map, x, y, sx, sy)

  • Descrição: Chamada quando o jogador caminha no mapa.

  • Exemplo:

    Copy

    function OnPlayerMove(aIndex, map, x, y, sx, sy)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerMove] - [%s] moveu-se no mapa %d para (%d, %d)", player:getName(), map, x, y), 0)
    end
    GameServerFunctions.PlayerMove(OnPlayerMove)

16. RunningSkill(aIndex, TargetIndex, SkillNumber)

  • Descrição: Chamada quando o jogador usa uma habilidade.

  • Exemplo:

    Copy

    function OnRunningSkill(aIndex, TargetIndex, SkillNumber)
        local player = User.new(aIndex)
        LogAdd(string.format("[RunningSkill] - [%s] usou habilidade %d", player:getName(), SkillNumber), 0)
    end
    GameServerFunctions.RunningSkill(OnRunningSkill)

17. NpcTalk(NpcIndex, PlayerIndex)

  • Descrição: Chamada quando o jogador fala com um NPC.

  • Exemplo:

    Copy

    function OnNpcTalk(NpcIndex, PlayerIndex)
        local player = User.new(PlayerIndex)
        LogAdd(string.format("[NpcTalk] - [%s] falou com NPC %d", player:getName(), NpcIndex), 0)
    end
    GameServerFunctions.NpcTalk(OnNpcTalk)

18. PlayerSellItem(aIndex, slot)

  • Descrição: Chamada quando o jogador tenta vender um item.

  • Exemplo:

    Copy

    function OnPlayerSellItem(aIndex, slot)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerSellItem] - [%s] tentou vender item no slot %d", player:getName(), slot), 0)
    end
    GameServerFunctions.PlayerSellItem(OnPlayerSellItem)

19. PlayerRepairItem(aIndex, slot)

  • Descrição: Chamada quando o jogador repara um item.

  • Exemplo:

    Copy

    function OnPlayerRepairItem(aIndex, slot)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerRepairItem] - [%s] reparou item no slot %d", player:getName(), slot), 0)
    end
    GameServerFunctions.PlayerRepairItem(OnPlayerRepairItem)

20. PlayerCanMove(aIndex)

  • Descrição: Chamada quando o jogador tenta se mover.

  • Exemplo:

    Copy

    function OnPlayerCanMove(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerCanMove] - [%s] tentou se mover", player:getName()), 0)
    end
    GameServerFunctions.PlayerCanMove(OnPlayerCanMove)

21. PlayerMoveItem(aIndex, SourceSlot, TargetSlot, Type)

  • Descrição: Chamada quando o jogador move um item no inventário.

  • Exemplo:

    Copy

    function OnPlayerMoveItem(aIndex, SourceSlot, TargetSlot, Type)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerMoveItem] - [%s] moveu item do slot %d para %d", player:getName(), SourceSlot, TargetSlot), 0)
    end
    GameServerFunctions.PlayerMoveItem(OnPlayerMoveItem)

22. PlayerVaultOpen(aIndex)

  • Descrição: Chamada quando o jogador abre o cofre.

  • Exemplo:

    Copy

    function OnPlayerVaultOpen(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerVaultOpen] - [%s] abriu o cofre", player:getName()), 0)
    end
    GameServerFunctions.PlayerVaultOpen(OnPlayerVaultOpen)

23. DeclareWar(aIndex)

  • Descrição: Chamada quando o jogador declara guerra.

  • Exemplo:

    Copy

    function OnDeclareWar(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[DeclareWar] - [%s] declarou guerra", player:getName()), 0)
    end
    GameServerFunctions.DeclareWar(OnDeclareWar)

24. PlayerUseItem(aIndex, SourceSlot, TargetSlot)

  • Descrição: Chamada quando o jogador usa um item (clique direito).

  • Exemplo:

    Copy

    function OnPlayerUseItem(aIndex, SourceSlot, TargetSlot)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerUseItem] - [%s] usou item no slot %d", player:getName(), SourceSlot), 0)
    end
    GameServerFunctions.PlayerUseItem(OnPlayerUseItem)

25. PlayerVaultClose(aIndex)

  • Descrição: Chamada quando o jogador fecha o cofre.

  • Exemplo:

    Copy

    function OnPlayerVaultClose(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerVaultClose] - [%s] fechou o cofre", player:getName()), 0)
    end
    GameServerFunctions.PlayerVaultClose(OnPlayerVaultClose)

26. PlayerSendTradeX(aIndex, TargetIndex)

  • Descrição: Chamada quando o jogador envia uma solicitação de TradeX.

  • Exemplo:

    Copy

    function OnPlayerSendTradeX(aIndex, TargetIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerSendTradeX] - [%s] enviou solicitação de TradeX", player:getName()), 0)
    end
    GameServerFunctions.PlayerSendTradeX(OnPlayerSendTradeX)

27. PlayerTradeXOk(aIndex, TargetIndex)

  • Descrição: Chamada quando o jogador confirma um TradeX clicando em "OK".

  • Exemplo:

    Copy

    function OnPlayerTradeXOk(aIndex, TargetIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerTradeXOk] - [%s] confirmou TradeX", player:getName()), 0)
    end
    GameServerFunctions.PlayerTradeXOk(OnPlayerTradeXOk)

28. PlayerOpenShop(aIndex)

  • Descrição: Chamada quando o jogador abre uma loja pessoal.

  • Exemplo:

    Copy

    function OnPlayerOpenShop(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerOpenShop] - [%s] abriu uma loja pessoal", player:getName()), 0)
    end
    GameServerFunctions.PlayerOpenShop(OnPlayerOpenShop)

29. PlayerCloseShop(aIndex)

  • Descrição: Chamada quando o jogador fecha uma loja pessoal.

  • Exemplo:

    Copy

    function OnPlayerCloseShop(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerCloseShop] - [%s] fechou a loja pessoal", player:getName()), 0)
    end
    GameServerFunctions.PlayerCloseShop(OnPlayerCloseShop)

30. PlayerCanEquipItem(aIndex, SourceSlot, TargetSlot)

  • Descrição: Chamada quando o jogador tenta equipar um item.

  • Exemplo:

    Copy

    function OnPlayerCanEquipItem(aIndex, SourceSlot, TargetSlot)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerCanEquipItem] - [%s] tentou equipar item do slot %d", player:getName(), SourceSlot), 0)
    end
    GameServerFunctions.PlayerCanEquipItem(OnPlayerCanEquipItem)

31. GameServerProtocol(aIndex, Packet, PacketName)

  • Descrição: Chamada quando o jogador recebe um pacote personalizado do cliente.

  • Exemplo:

    Copy

    function OnGameServerProtocol(aIndex, Packet, PacketName)
        local player = User.new(aIndex)
        LogAdd(string.format("[GameServerProtocol] - [%s] recebeu pacote %s", player:getName(), PacketName), 0)
    end
    GameServerFunctions.GameServerProtocol(OnGameServerProtocol)

32. MacAddressPlayer(aIndex, HWID)

  • Descrição: Chamada para receber o HWID do jogador do cliente.

  • Exemplo:

    Copy

    function OnMacAddressPlayer(aIndex, HWID)
        local player = User.new(aIndex)
        LogAdd(string.format("[MacAddressPlayer] - [%s] HWID: %s", player:getName(), HWID), 0)
    end
    GameServerFunctions.MacAddressPlayer(OnMacAddressPlayer)

33. PlayerAttackFenrirSkill(aIndex, TargetIndex)

  • Descrição: Chamada quando o jogador usa a habilidade Fenrir em um alvo.

  • Exemplo:

    Copy

    function OnPlayerAttackFenrirSkill(aIndex, TargetIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[PlayerAttackFenrirSkill] - [%s] usou habilidade Fenrir", player:getName()), 0)
    end
    GameServerFunctions.PlayerAttackFenrirSkill(OnPlayerAttackFenrirSkill)

34. RespawnUser(aIndex)

  • Descrição: Chamada quando o jogador morre e o tipo de respawn é 5.

  • Exemplo:

    Copy

    function OnRespawnUser(aIndex)
        local player = User.new(aIndex)
        LogAdd(string.format("[RespawnUser] - [%s] foi ressuscitado (tipo 5)", player:getName()), 0)
    end
    GameServerFunctions.RespawnUser(OnRespawnUser)

35. MonsterReload()

  • Descrição: Chamada quando os monstros são recarregados no servidor.

  • Exemplo:

    Copy

    function OnMonsterReload()
        LogAdd("[MonsterReload] - Monstros foram recarregados no servidor", 0)
    end
    GameServerFunctions.MonsterReload(OnMonsterReload)

Exemplo Prático Completo

Abaixo está um exemplo fictício que combina várias funções do GameServerFunctions em um único script para monitorar ações de um jogador, como entrada no jogo, morte de monstros e level up.

Copy

-- Sistema de monitoramento de eventos
EVENT_MONITOR = {}

-- Monitora quando o jogador entra no jogo
function EVENT_MONITOR.OnEnterCharacter(aIndex)
    local player = User.new(aIndex)
    local playerName = player:getName()
    LogAdd(string.format("[EventMonitor] - [%s] entrou no jogo", playerName), 0)
end

-- Monitora quando o jogador mata um monstro
function EVENT_MONITOR.OnMonsterDie(Player, Monster)
    local player = User.new(Player)
    local monster = User.new(Monster)
    local playerName = player:getName()
    local monsterName = monster:getName()
    if monster:getClass() == 500 then
        LogAdd(string.format("[EventMonitor] - [%s] matou o monstro %s (classe 500)", playerName, monsterName), 0)
        SendMessageGlobal(string.format("Jogador %s matou %s!", playerName, monsterName), 1)
    end
end

-- Monitora quando o jogador sobe de nível
function EVENT_MONITOR.OnPlayerLevelUp(aIndex)
    local player = User.new(aIndex)
    local playerName = player:getName()
    LogAdd(string.format("[EventMonitor] - [%s] subiu de nível", playerName), 0)
end

-- Registra as funções
GameServerFunctions.EnterCharacter(EVENT_MONITOR.OnEnterCharacter)
GameServerFunctions.MonsterDie(EVENT_MONITOR.OnMonsterDie)
GameServerFunctions.PlayerLevelUp(EVENT_MONITOR.OnPlayerLevelUp)

return EVENT_MONITOR

Resumo

  • As funções do GameServerFunctions são disparadas automaticamente em eventos específicos do servidor, como morte de monstros, level up, ou trocas.

  • Para usá-las, crie uma função Lua e registre-a com GameServerFunctions.NomeDoEvento(Função).

  • O exemplo prático mostra como monitorar eventos como entrada no jogo, morte de monstros e level up, usando logs com LogAdd.

Atualizado