03.11.2018, 19:26
(
Last edited by BrunoBM23; 03/11/2018 at 08:27 PM.
)
Quote:
PHP Code:
|
- 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"); } }
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
};
PHP Code:
public OnIncomingPacket(playerid, packetid, BitStream:bs)
{
if(packetid == ID_BULLET_SYNC)
{
new FakeWeapon[PR_BulletSync]; // "Estrutura" do pacote de bala.
BS_IgnoreBits(bs, 8); // Ignoramos 8 bits antes de ler, pois nгo queremos ler o identificador do pacote.
BS_ReadBulletSync(bs, FakeWeapon); // 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;
}
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:
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. |
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)