SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Handlers - Pawn.RakNet

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031971
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Handlers - Pawn.RakNet Empty [Tutorial] Handlers - Pawn.RakNet

    Mensagem por Weslley_Script Ter 21 Mar 2023 - 10:34

    • Handlers - Pawn.RakNet
    Outros tutoriais de Pawn.RakNet: RPC - Pawn.RakNet | Pacotes - Pawn.RakNet

    Com handlers (manipuladores), vocк pode registrar uma callback para manipular pacotes e RPCs. Basicamente seria a mesma coisa que usar as callbacks originais OnIncomingRPC/Packet e OnOutcomingRPC/Packet, sendo que apenas o pacote/RPC especнfico utilizado por vocк ao registrar o handler, vai chegar na callback.

    Tipos de handlers:
    -PR_INCOMING_RPC: RPCs mandados pelo cliente ao servidor.
    -PR_INCOMING_PACKET: Pacotes mandados pelo cliente ao servidor.
    -PR_OUTCOMING_RPC: RPCs mandados pelo servidor ao cliente.
    -PR_OUTCOMING_PACKET: Pacotes mandados pelo servidor ao cliente.
    Funзгo:
    Code:
    PR_RegHandler(id, const publicname[], PR_HandlerType:type)
    id - O ID do Pacote/RPC que vai utilizar o handler.
    publicname - A callback que serб utilizada como handler (manipulador) do Pacote/RPC.
    type - O tipo de handler (manipulador) que vocк vai registrar.
    • Registrando um handler
    Registrar um handler й bem simples. Leve em consideraзгo que a callback de um handler deve ter dois parвmetros, sendo um para o jogador que vai receber/enviar o pacote/RPC (playerid) e outro para o BitStream (BitStream:bs).

    Código:
    #define ID_PLAYER_SYNC  207
    public OnGameModeInit()
    {
        PR_RegHandler(ID_PLAYER_SYNC, "OnFootSync", PR_INCOMING_PACKET);
        return 1;
    }
    forward OnFootSync(playerid, BitStream:bs);
    public OnFootSync(playerid, BitStream:bs)
    {
        new On_FootSync[PR_OnFootSync];
        BS_IgnoreBits(bs, 8);
        BS_ReadOnFootSync(bs, On_FootSync);
        printf("Minha arma atual tem o ID: %i", On_FootSync[PR_weaponId]);
        return 1;

    O exemplo acima й facil de entender, podemos manipular o pacote 207 na callback OnFootSync.

    Nгo vou explicar por que ignorar 8 bits, isso jб foi explicado no tutorial anterior sobre pacotes. Eu recomendo vocк a ler os ъltimos dois tutoriais sobre RPCs e Pacotes antes de chegar no assunto de handlers (manipuladores).
    • Erros relacionados com handlers
    Esses sгo dois erros que podem aparecer em seus logs ao tentar registrar um handler:
    n_PR_RegHandler: Public "Nome da callback que vocк usou" does not exist. - Bem уbvio, a callback que vocк registrou ao handler nгo existe, logo ele nгo funcionarб.
    n_PR_RegHandler: invalid array(T, N) subscript - O ID do RPC/Pacote й invбlido, como, por exemplo, um ID de RPC acima de MAX_RPC_MAP_SIZE (254).
    • Consideraзхes
    - Leve em consideraзгo que as callbacks originais (OnIncomingPacket/RPC e OnOutcomingPacket/RPC) sempre vгo ser chamadas antes das callbacks dos handlers. Entгo, se vocк tem um handler para o pacote 208 e retornar 0 na callback original, a callback do handler nгo serб chamada.

    -Sу pode haver um handler por RPC/Pacote. Se vocк criar dois handlers para um mesmo pacote/RPC, apenas o ъltimo handler criado funcionarб.

    -Se vocк registrar um handler e deixar o segundo parвmetro da funзгo vazio (a callback do handler), o servidor vai sofrer um crash.
    Creditos: Jelly23



    [Tutorial] Handlers - Pawn.RakNet D07Xwqb
    [Tutorial] Handlers - Pawn.RakNet Yjab9HN

      Data/hora atual: Qui 2 maio 2024 - 3:34