[Ajuda] RPC - Pawn.RakNet
#8

Quote:
PHP Code:
public OnIncomingPacket(playeridpacketidBitStream:bs)
{
    if(
packetid == ID_BULLET_SYNC)
    {
        new 
FakeMinigun[PR_BulletSync];
        
BS_IgnoreBits(bs8);
        
FakeMinigun[PR_weaponId] = 38;
        if(
GetPlayerWeapon(playerid) != 38)
        {
            if(
packetid == BS_ReadValue(bsFakeMinigun[PR_weaponId]))
            {
                for(new 
iMAX_PLAYERSi++)
                {
                    
SendClientMessage(i, -1"Xiter");
                }
            }
        }    
    }
    return 
1;

O cуdigo tб certo assim? Aliбs, qual a diferenзa de RPC pra um Packet? o que й offset?

Nгo, estб totalmente errado:

- Vocк nunca leu os dados do pacote, entгo nгo faz sentido ignorar 8 bits (Que sгo do identificador do pacote).
- Vocк criou a matriz FakeMinigun (que contйm a estrutura do pacote ID_BULLET_SYNC) sem necessidade alguma, pois eu nenhum momento vocк lк os dados do pacote nela, e muito menos os reescreve no bitstream.

Code:
if(packetid == BS_ReadValue(bs, FakeMinigun[PR_weaponId]))
{
	for(new i; i < MAX_PLAYERS; i++)
	{
		SendClientMessage(i, -1, "Xiter");
	}
}
O cуdigo acima tambйm deixa mais que evidente que vocк nгo tem idйia do que estб fazendo. O valor retornado por BS_ReadValue nгo deve ser comparado com o ID do pacote e nгo tem nenhuma relaзгo. Utilize BS_ReadValue para ler os dados no bitstream:

BS_ReadValue(bitstream, tipo, variбvel_passada_por_referкncia);

Tipos:

PHP Code:
    enum PR_ValueType
    
{
        
PR_INT8,
        
PR_INT16,
        
PR_INT32,
        
PR_UINT8,
        
PR_UINT16,
        
PR_UINT32,
        
PR_FLOAT,
        
PR_BOOL,
        
PR_STRING,
        
// compressed
        
PR_CINT8,
        
PR_CINT16,
        
PR_CINT32,
        
PR_CUINT8,
        
PR_CUINT16,
        
PR_CUINT32,
        
PR_CFLOAT,
        
PR_CBOOL,
        
PR_CSTRING,
        
PR_BITS
    
}; 
De qualquer forma, refiz seu cуdigo (Literalmente):

PHP Code:
public OnIncomingPacket(playeridpacketidBitStream:bs)
{
    if(
packetid == ID_BULLET_SYNC)
    {
        new 
FakeWeapon[PR_BulletSync]; // "Estrutura" do pacote de bala.
        
BS_IgnoreBits(bs8); // Ignoramos 8 bits antes de ler, pois nгo queremos ler o identificador do pacote.
        
BS_ReadBulletSync(bsFakeWeapon); // Vamos ler os dados do pacote de bala, que serгo escritos na matriz FakeWeapon (que contйm a estrutura do pacote de bala). 
        
if(FakeWeapon[PR_weaponId] != GetPlayerWeapon(playerid)) // Verificamos se o ID de arma que veio do pacote de bala nгo й o mesmo retornado por GetPlayerWeapon.
        
{
            return 
0// Retornamos 0, entгo o pacote nгo й processado. 
        
}    
    }
    return 
1;

Recomendo vocк a ler os tutoriais antes de tentar usar o plugin:

RPC: https://sampforum.blast.hk/showthread.php?tid=642644
Pacotes: https://sampforum.blast.hk/showthread.php?tid=644763
Offsets de leitura e escrita: https://sampforum.blast.hk/showthread.php?tid=652350
Handlers: https://sampforum.blast.hk/showthread.php?tid=647148

E vocк estб indo low-level sem necessidade.

Apenas use OnPlayerWeaponShot, e compare o ID retornado por GetPlayerWeapon com o parвmetro 'weaponid' da callback OnPlayerWeaponShot. Retorne 0 se necessбrio (Para o pacote de bala nгo ser enviado aos outros clientes).

Alйm disso, o que vocк viu nгo й novidade, tem um tуpico relacionado apenas a isso, e com soluзхes: https://sampforum.blast.hk/showthread.php?tid=633993

Quote:
Originally Posted by Ermanhaut
View Post
Nгo й uma funзгo, mas sim uma tag.

A tag declara que esta funзгo estб se referindo ao tipo de dado IPacket.

Й como se ele criasse uma Textdraw. Vocк deve declarar que o tipo de dado usado na variбvel й TextDraw: ou haverб erro, pois diferentes tipos de variбveis sгo controladas de formas diferentes.
E vocк obviamente nгo tem idйia do que estб falando.

IPacket й apenas uma macro para criar handlers para incoming packets (pacotes que vem do cliente para o servidor).

https://github.com/urShadow/Pawn.Rak...RakNet.inc#L96

PHP Code:
#define IPacket:%0(%1) \
        
forward pr_rip_%0(); \
        public 
pr_rip_%0() \
            
PR_RegHandler(%0"pr_ip_"#%0, PR_INCOMING_PACKET); \
        
forward pr_ip_%0(%1); \
        public 
pr_ip_%0(%1
Handlers: https://sampforum.blast.hk/showthread.php?tid=647148
Reply


Messages In This Thread
RPC - Pawn.RakNet - by Electrifying - 03.11.2018, 12:18
Re: RPC - Pawn.RakNet - by KoloradO - 03.11.2018, 13:32
Re: RPC - Pawn.RakNet - by Electrifying - 03.11.2018, 13:45
Re: RPC - Pawn.RakNet - by Ermanhaut - 03.11.2018, 14:44
Re: RPC - Pawn.RakNet - by Electrifying - 03.11.2018, 14:55
Re: RPC - Pawn.RakNet - by Ermanhaut - 03.11.2018, 15:12
Re: RPC - Pawn.RakNet - by Electrifying - 03.11.2018, 15:18
Re: RPC - Pawn.RakNet - by BrunoBM23 - 03.11.2018, 19:26
Re: RPC - Pawn.RakNet - by Electrifying - 03.11.2018, 22:03

Forum Jump:


Users browsing this thread: 1 Guest(s)