🚀Packet Functions

Envio Packets GameServer para Cliente

As funções de Packets permitem a comunicação entre o servidor de jogos (GameServer) e o cliente, criando, manipulando e enviando pacotes de dados. Esta documentação apresenta as funções de forma clara, intuitiva e com exemplos práticos e concisos para facilitar o uso. Para exemplos mais detalhados, consulte o arquivo JewelBank.lua.


Como Usar as Funções de Pacotes

  1. Criação de Pacotes: Use CreatePacket para iniciar um pacote, definindo seu nome e identificador.

  2. Manipulação: Use funções como SetBytePacket, SetWordPacket, SetDwordPacket ou SetCharPacket para adicionar dados ao pacote.

  3. Envio e Limpeza: Envie o pacote com SendPacket e limpe-o com ClearPacket após o uso.

  4. Observação: Sempre limpe o pacote após usá-lo para evitar problemas de memória ou dados residuais.


Funções de Pacotes

Abaixo estão todas as funções disponíveis, explicadas de forma simples com exemplos práticos:

1. CreatePacket(packetName, packet)

  • Descrição: Cria um pacote com o nome e identificador especificados.

  • Exemplo:

    CreatePacket("MyPacket", 0x01)
    LogAdd("[Packet] - Pacote MyPacket criado com ID 0x01", 0)

2. SetDwordPacket(packetName, position)

  • Descrição: Define um valor DWORD (32 bits) na posição especificada do pacote.

  • Exemplo:

    CreatePacket("MyPacket", 0x01)
    SetDwordPacket("MyPacket", 123456)
    LogAdd("[Packet] - Definido valor DWORD 123456 no pacote MyPacket", 0)

3. GetDwordPacket(packetName, position)

  • Descrição: Obtém o valor DWORD (32 bits) na posição especificada do pacote.

  • Exemplo:

    local value = GetDwordPacket("MyPacket", 0)
    LogAdd(string.format("[Packet] - Valor DWORD obtido do pacote MyPacket: %d", 0, value), 0)

4. SetWordPacket(packetName, position)

  • Descrição: Define um valor WORD (16 bits) na posição especificada do pacote.

  • Exemplo:

    CreatePacket("MyPacket", 0x01)
    SetWordPacket("MyPacket", 1234)
    LogAdd("[Packet] - Definido valor WORD 1234 no pacote MyPacket", 0)

5. GetWordPacket(packetName, position)

  • Descrição: Obtém o valor WORD (16 bits) na posição especificada do pacote.

  • Exemplo:

    local value = GetWordPacket("MyPacket", 0)
    LogAdd(string.format("[Packet] - Valor WORD obtido do pacote MyPacket: %d", 0, value), 0)

6. SetBytePacket(packetName, position)

  • Descrição: Define um valor BYTE (8 bits) na posição especificada do pacote.

  • Exemplo:

    CreatePacket("MyPacket", 0x01)
    SetBytePacket("MyPacket", 255)
    LogAdd("[Packet] - Definido valor BYTE 255 no pacote MyPacket", 0)

7. GetBytePacket(packetName, position)

  • Descrição: Obtém o valor BYTE (8 bits) na posição especificada do pacote.

  • Exemplo:

    local value = GetBytePacket("MyPacket", 0)
    LogAdd(string.format("[Packet] - Valor BYTE obtido do pacote MyPacket: %d", 0, value), 0)

8. SetCharPacket(packetName, string)

  • Descrição: Define uma string com até 10 caracteres no pacote.

  • Exemplo:

    CreatePacket("MyPacket", 0x01)
    SetCharPacket("MyPacket", "Hello")
    LogAdd("[Packet] - Definida string 'Hello' no pacote MyPacket", 0)

9. GetCharPacket(packetName, position)

  • Descrição: Obtém uma string do pacote na posição especificada.

  • Exemplo:

    local str = GetCharPacket("MyPacket", 0)
    LogAdd(string.format("[Packet] - String obtida do pacote MyPacket: %s", str), 0)

10. SetCharPacketLength(packetName, string, length)

  • Descrição: Define uma string com um tamanho específico no pacote.

  • Exemplo:

    CreatePacket("MyPacket", 0x01)
    SetCharPacketLength("MyPacket", "HelloWorld", 10)
    LogAdd("[Packet] - Definida string 'HelloWorld' com tamanho 10 no pacote MyPacket", 0)

11. GetCharPacketLength(packetName, string, length)

  • Descrição: Obtém uma string com um tamanho específico do pacote.

  • Exemplo:

    local str = GetCharPacketLength("MyPacket", 0, 10)
    LogAdd(string.format("[Packet] - String obtida do pacote MyPacket (tamanho 10): %s", str), 0)

12. SendPacket(packetName, aIndex)

  • Descrição: Envia o pacote para o jogador com o índice aIndex.

  • Exemplo:

    CreatePacket("MyPacket", 0x01)
    SetBytePacket("MyPacket", 255)
    SendPacket("MyPacket", 100)
    LogAdd("[Packet] - Pacote MyPacket enviado para jogador com aIndex 100", 0)

13. ClearPacket(packetName)

  • Descrição: Limpa o pacote após o uso para evitar resíduos de dados.

  • Exemplo:

    CreatePacket("MyPacket", 0x01)
    SetBytePacket("MyPacket", 255)
    SendPacket("MyPacket", 100)
    ClearPacket("MyPacket")
    LogAdd("[Packet] - Pacote MyPacket limpo", 0)

Exemplo Prático Completo

Abaixo está um exemplo fictício que utiliza várias funções de pacotes em uma única função para criar, configurar, enviar e limpar um pacote para um jogador. Este código pode ser usado como base para comunicação entre servidor e cliente.

-- Sistema de envio de pacotes
PACKET_MANAGER = {}

function PACKET_MANAGER.SendCustomPacket(aIndex)
    local player = User.new(aIndex)
    local playerName = player:getName()

    -- Cria o pacote
    CreatePacket("CustomPacket", 0xF1)
    LogAdd(string.format("[PacketManager] - [%s] Criou pacote CustomPacket com ID 0xF1", playerName), 0)

    -- Define valores no pacote
    SetBytePacket("CustomPacket", 1) -- Estado (ex.: 1 para ativo)
    SetWordPacket("CustomPacket", 1000) -- Valor de exemplo
    SetDwordPacket("CustomPacket", 123456) -- Outro valor de exemplo
    SetCharPacket("CustomPacket", "Teste") -- String curta
    SetCharPacketLength("CustomPacket", "HelloWorld", 10) -- String com tamanho definido

    -- Loga os valores configurados
    local byteValue = GetBytePacket("CustomPacket", 0)
    local wordValue = GetWordPacket("CustomPacket", 0)
    local dwordValue = GetDwordPacket("CustomPacket", 0)
    local charValue = GetCharPacket("CustomPacket", 0)
    local charLengthValue = GetCharPacketLength("CustomPacket", 0, 10)
    LogAdd(string.format("[PacketManager] - [%s] Pacote configurado: BYTE=%d, WORD=%d, DWORD=%d, CHAR=%s, CHAR_LENGTH=%s",
        playerName, byteValue, wordValue, dwordValue, charValue, charLengthValue), 0)

    -- Envia o pacote para o jogador
    SendPacket("CustomPacket", aIndex)
    LogAdd(string.format("[PacketManager] - [%s] Pacote CustomPacket enviado", playerName), 0)

    -- Limpa o pacote
    ClearPacket("CustomPacket")
    LogAdd(string.format("[PacketManager] - [%s] Pacote CustomPacket limpo", playerName), 0)
end

-- Exemplo de chamada da função
PACKET_MANAGER.SendCustomPacket(100) -- Substitua 100 pelo aIndex do jogador

return PACKET_MANAGER

Resumo

  • As funções de pacotes permitem criar, manipular e enviar dados entre o servidor e o cliente.

  • Use CreatePacket para iniciar, funções Set para adicionar dados, SendPacket para enviar e ClearPacket para limpar.

  • As funções Get permitem recuperar dados do pacote para verificação.

  • O exemplo prático mostra como criar, configurar, enviar e limpar um pacote em uma única função.

Last updated