[Tutorial] Handlers - Pawn.RakNet
#1

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

PHP Code:
#define ID_PLAYER_SYNC  207
public OnGameModeInit()
{
    
PR_RegHandler(ID_PLAYER_SYNC"OnFootSync"PR_INCOMING_PACKET);
    return 
1;
}
forward OnFootSync(playeridBitStream:bs);
public 
OnFootSync(playeridBitStream:bs)
{
    new 
On_FootSync[PR_OnFootSync];
    
BS_IgnoreBits(bs8);
    
BS_ReadOnFootSync(bsOn_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.
Reply
#2

Muito Bom. Poderia Fazer um "Tutorial " Desse Pawn.Ranknet Para em portuguкs para termos mais projetos como esse.
Reply
#3

Bom tutoriais, aprendi muito neles.
Reply
#4

Quote:
Originally Posted by Jelly23
View Post
Obrigada.
Vocк й feminina?
Reply
#5

Muito bom.
Reply
#6

VEjo que andas a explorar bem o rank net


Bom trabalho
Reply
#7

Muito bom.
Reply
#8

Й possivel saber que arma o player tem e quantas balas tem e getar quantas balas restam apos ele atirar:
Reply
#9

Quote:
Originally Posted by LincoN_
View Post
Й possivel saber que arma o player tem e quantas balas tem e getar quantas balas restam apos ele atirar:
Sobre a arma da pra fazer com o pacote OnFootSync mesmo.
Jб sobre as balas acredito que nгo dб utilizando OnFootSync mas com AimSync й possнvel. (Se eu estiver errado me corrijam)
https://github.com/urShadow/Pawn.Rak...ion-structures
Reply
#10

Quote:
Originally Posted by ViDaLoKa1
View Post
Sobre a arma da pra fazer com o pacote OnFootSync mesmo.
Jб sobre as balas acredito que nгo dб utilizando OnFootSync mas com AimSync й possнvel. (Se eu estiver errado me corrijam)
https://github.com/urShadow/Pawn.Rak...ion-structures
Sim, vocк estб errado. PR_AimSync nгo tem exatamente NADA a ver com a quantidade de balas.

Vocк pode obter essa informaзгo usando o pacote 204 (ID_WEAPONS_UPDATE). Exemplo:

PHP Code:
public OnIncomingPacket(playeridpacketidBitStream:bs)
{
    new 
slotarmas[13][2];
    
    if (
packetid == 204)
    {
        
BS_IgnoreBits(bs8);
        
        for (new 
013i++)
        {
             
BS_ReadValue(
                 
bs,
                 
PR_UINT8slot,
                 
PR_UINT8armas[i][0],
                 
PR_UINT16armas[i][1]
             );
               
             
printf("%i %i %i"slotarmas[i][0], armas[i][1]);
        }
    }
    return 
1;

Reply
#11

Quote:
Originally Posted by Jelly23
Посмотреть сообщение
Sim, vocк estб errado. PR_AimSync nгo tem exatamente NADA a ver com balas.

Vocк pode obter essa informaзгo usando o pacote 204 (ID_WEAPONS_UPDATE). Exemplo:

PHP код:
public OnIncomingPacket(playeridpacketidBitStream:bs)
{
    new 
slotarmas[13][2];
    
    if (
packetid == 204)
    {
        
BS_IgnoreBits(bs8);
        
        for (new 
013i++)
        {
             
BS_ReadValue(
                 
bs,
                 
PR_UINT8slot,
                 
PR_UINT8armas[i][0],
                 
PR_UINT16armas[i][1]
             );
               
             
printf("%i %i %i"slotarmas[i][0], armas[i][1]);
        }
    }
    return 
1;

Tб mais e no caso de AimSync "PR_weaponState" й sobre o que entгo? Ainda estou me aprofundando sobre esse assunto que й bem novo pra mim.
Reply
#12

Quote:
Originally Posted by ViDaLoKa1
Посмотреть сообщение
Tб mais e no caso de AimSync "PR_weaponState" й sobre o que entгo? Ainda estou me aprofundando sobre esse assunto que й bem novo pra mim.
https://sampwiki.blast.hk/wiki/Weaponstates
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)