Packet Funcions

Documentação de Pacotes Cliente-GameServer

As funções de pacotes permitem a comunicação do cliente para o servidor de jogos, criando, manipulando e enviando pacotes de dados, além de receber pacotes do servidor. 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. Recebimento: Use as funções Get para processar dados recebidos de um pacote do servidor.

  5. Observação: Sempre limpe o pacote após o uso para evitar problemas de memória ou dados residuais. No cliente, não há suporte para exibição de logs.


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 para enviar ao servidor.

  • Exemplo:

    CreatePacket("ClientPacket", 0x02)

2. SetDwordPacket(packetName, position)

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

  • Exemplo:

    CreatePacket("ClientPacket", 0x02)
    SetDwordPacket("ClientPacket", 987654)

3. GetDwordPacket(packetName, position)

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

  • Exemplo:

    local value = GetDwordPacket("ClientPacket", 0)

4. SetWordPacket(packetName, position)

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

  • Exemplo:

    CreatePacket("ClientPacket", 0x02)
    SetWordPacket("ClientPacket", 5678)

5. GetWordPacket(packetName, position)

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

  • Exemplo:

    local value = GetWordPacket("ClientPacket", 0)

6. SetBytePacket(packetName, position)

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

  • Exemplo:

    CreatePacket("ClientPacket", 0x02)
    SetBytePacket("ClientPacket", 128)

7. GetBytePacket(packetName, position)

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

  • Exemplo:

    local value = GetBytePacket("ClientPacket", 0)

8. SetCharPacket(packetName, string)

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

  • Exemplo:

    CreatePacket("ClientPacket", 0x02)
    SetCharPacket("ClientPacket", "Action")

9. GetCharPacket(packetName, position)

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

  • Exemplo:

    local str = GetCharPacket("ClientPacket", 0)

10. SetCharPacketLength(packetName, string, length)

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

  • Exemplo:

    CreatePacket("ClientPacket", 0x02)
    SetCharPacketLength("ClientPacket", "ClientData", 10)

11. GetCharPacketLength(packetName, string, length)

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

  • Exemplo:

    local str = GetCharPacketLength("ClientPacket", 0, 10)

12. SendPacket(packetName, aIndex)

  • Descrição: Envia o pacote para o servidor, direcionado ao jogador com o índice aIndex.

  • Exemplo:

    CreatePacket("ClientPacket", 0x02)
    SetBytePacket("ClientPacket", 128)
    SendPacket("ClientPacket", 100)

13. ClearPacket(packetName)

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

  • Exemplo:

    CreatePacket("ClientPacket", 0x02)
    SetBytePacket("ClientPacket", 128)
    SendPacket("ClientPacket", 100)
    ClearPacket("ClientPacket")

Exemplo Prático Completo

Abaixo está um exemplo fictício que combina o recebimento de um pacote do servidor, processamento de seus dados e envio de uma resposta do cliente para o servidor. Este código pode ser usado como base para comunicação bidirecional.

-- Sistema de gerenciamento de pacotes cliente-servidor
CLIENT_PACKET_MANAGER = {}

function CLIENT_PACKET_MANAGER.HandleClientPacket(aIndex, packetName, packetId)
    local player = User.new(aIndex)

    -- Processa pacote recebido do servidor
    local byteValue = GetBytePacket(packetName, 0)
    local wordValue = GetWordPacket(packetName, 1)
    local dwordValue = GetDwordPacket(packetName, 2)
    local charValue = GetCharPacket(packetName, 3)
    local charLengthValue = GetCharPacketLength(packetName, 4, 10)

    -- Cria um pacote de resposta para o servidor
    CreatePacket("ResponsePacket", 0xF2)

    -- Define valores no pacote de resposta
    SetBytePacket("ResponsePacket", 2) -- Estado de resposta (ex.: 2 para confirmação)
    SetWordPacket("ResponsePacket", 2000) -- Valor de exemplo
    SetDwordPacket("ResponsePacket", 654321) -- Outro valor de exemplo
    SetCharPacket("ResponsePacket", "Reply") -- String curta
    SetCharPacketLength("ResponsePacket", "ClientReply", 10) -- String com tamanho definido

    -- Envia o pacote de resposta para o servidor
    SendPacket("ResponsePacket", aIndex)

    -- Limpa os pacotes
    ClearPacket(packetName)
    ClearPacket("ResponsePacket")
end

-- Exemplo de chamada da função
CLIENT_PACKET_MANAGER.HandleClientPacket(100, "ServerPacket", 0xF1) -- Substitua 100 pelo aIndex do jogador

return CLIENT_PACKET_MANAGER

Resumo

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

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

  • O exemplo prático mostra como processar um pacote recebido do servidor, extrair seus dados e enviar uma resposta ao servidor.

  • No cliente, não há suporte para exibição de logs, então o foco está nas operações de manipulação e envio de pacotes.

Last updated