SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 30/12/2017, 04:58 PM   #1
Jelly23
Guest
 
Posts: n/a
Default Handlers - Pawn.RakNet

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

Last edited by Jelly23; 31/12/2017 at 12:06 PM.
  Reply With Quote
Old 30/12/2017, 05:11 PM   #2
TUIDAN
Little Clucker
 
Join Date: Oct 2015
Posts: 19
Reputation: 0
Default Re: Handlers - Pawn.RakNet

Muito Bom. Poderia Fazer um "Tutorial " Desse Pawn.Ranknet Para em português para termos mais projetos como esse.
TUIDAN is offline   Reply With Quote
Old 31/12/2017, 03:28 AM   #3
IlanZ
High-roller
 
IlanZ's Avatar
 
Join Date: Jul 2016
Location: Brasil
Posts: 1,381
Reputation: 75
Default Re: Handlers - Pawn.RakNet

Bom tutoriais, aprendi muito neles.
IlanZ is offline   Reply With Quote
Old 31/12/2017, 10:11 AM   #4
SpikeCompiler
Huge Clucker
 
SpikeCompiler's Avatar
 
Join Date: Dec 2017
Location: Rio de Janeiro - RJ
Posts: 262
Reputation: 14
Default Re: Handlers - Pawn.RakNet

Quote:
Originally Posted by Jelly23 View Post
Obrigada.
Você é feminina?
SpikeCompiler is offline   Reply With Quote
Old 31/12/2017, 10:59 AM   #5
Delete_
High-roller
 
Delete_'s Avatar
 
Join Date: Mar 2011
Location: Gurupi - TO
Posts: 1,716
Reputation: 109
Default Re: Handlers - Pawn.RakNet

Muito bom.
__________________

CD
Delete_ is offline   Reply With Quote
Old 31/12/2017, 12:04 PM   #6
PT
Godfather
 
PT's Avatar
 
Join Date: Nov 2012
Location: Portugal
Posts: 7,197
Reputation: 775
Default Re: Handlers - Pawn.RakNet

VEjo que andas a explorar bem o rank net


Bom trabalho
__________________
"Quem caiu e se levantou honrado era e honrado ficou..."


CVU vai voltar e.e


http://steamcommunity.com/id/pt_player/
PT is offline   Reply With Quote
Old 31/12/2017, 04:44 PM   #7
Relaxed
Huge Clucker
 
Relaxed's Avatar
 
Join Date: Oct 2016
Location: Torres-RS
Posts: 407
Reputation: 18
Default Re: Handlers - Pawn.RakNet

Muito bom.
Relaxed is offline   Reply With Quote
Old 02/01/2018, 11:37 AM   #8
LincoN_
Big Clucker
 
Join Date: Jan 2013
Posts: 68
Reputation: 31
Default Re: Handlers - Pawn.RakNet

É possivel saber que arma o player tem e quantas balas tem e getar quantas balas restam apos ele atirar:
LincoN_ is offline   Reply With Quote
Old 02/01/2018, 07:07 PM   #9
ViDaLoKa1
Big Clucker
 
ViDaLoKa1's Avatar
 
Join Date: Feb 2015
Location: Krasnoyarsk, Rússia
Posts: 189
Reputation: 18
Default Re: Handlers - Pawn.RakNet

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
__________________
ViDaLoKa1 is offline   Reply With Quote
Old 02/01/2018, 08:10 PM   #10
Jelly23
Guest
 
Posts: n/a
Default Re: Handlers - Pawn.RakNet

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;


Last edited by Jelly23; 02/01/2018 at 10:28 PM.
  Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Plugin] Pawn.RakNet YourShadow Plugin Development 202 03/08/2018 07:29 PM
[Tutorial] Pacotes - Pawn.RakNet Jelly23 Lançamentos/Releases 33 23/06/2018 09:49 PM
[Tutorial] RPC - Pawn.RakNet Jelly23 Tutorials 21 13/12/2017 09:51 PM
[Tutorial] Packets - Pawn.RakNet Jelly23 Tutorials 2 16/11/2017 05:46 PM
Should I make handlers? Miguel Help Archive 6 02/01/2010 10:49 PM


All times are GMT. The time now is 09:18 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.