🚦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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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:

    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.

-- 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.

Last updated