Всем привет это опять урок по RakClient FYP'a
1-й пакет который разберем SendDeath
Код:
if (KEY_DOWN('8') && KEY_DOWN('9'))
{
///////////////////////////////////////////
/////////////////1-й способ//////////////////////////
///////////////////////////////////////////
BitStream bsDeath;
bsDeath.Write( reason );
bsDeath.Write( killerId );
g_RakClient->RPC( RPC_Death, &bsDeath );
///////////////////////////////////////////
////////////////2-й способ///////////////////////////
///////////////////////////////////////////
g_RakClient->SendDeath( killerId , reason );
}
if (KEY_DOWN('8') && KEY_DOWN('9')) ////Для тех кто в танке тут я написал активацию на 2 кнопки 8 и 9
{
/// С помощью этого можно сделать Fake Kill
/// reason (причина) это оружие допустим rand()%45 будет рандомное оружие в пределе45
/// kilerid это ид убийцы это можно сделать циклом и проверкой на существование игрока
/// Ну и отправка самого пакета
///////////////////////////////////////////
/////////////////1-й способ//////////////////////////
///////////////////////////////////////////
BitStream bsDeath;////Регистрируем пакет
bsDeath.Write( reason );///Тут напишите ID оружия или как я уже говорил рандом
bsDeath.Write( killerId );///Здесь ID убийцы можно циклом
g_RakClient->RPC( RPC_Death, &bsDeath ); /// В этом случае мы используем RPC пакет RPC_Death который равен 12
///////////////////////////////////////////
////////////////2-й способ///////////////////////////
///////////////////////////////////////////
g_RakClient->SendDeath( killerId , reason ); /// А тут мы отправляем готовую функцию
////Примечание g_RakClient->SendDeath( killerId , reason ); это нужно отправлять только такой строчкой
}
2-й пакет который разберем SendPickup
Код:
if (KEY_DOWN('8') && KEY_DOWN('9'))
{
///////////////////////////////////////////
/////////////////1-й способ/////////////////////////
///////////////////////////////////////////
BitStream bsPickup;
bsPickup.Write( pickupId );
g_RakClient->RPC( RPC_PickedUpPickup, &bsPickup );
///////////////////////////////////////////
////////////////2-й способ///////////////////////////
///////////////////////////////////////////
g_RakClient->SendPickUp( int pickupId );
}
{
////Этот пакет даже проще чем предыдущий
//// Он принимает всего 1 аргумент
///////////////////////////////////////////
////////////////1-й способ///////////////////////////
///////////////////////////////////////////
BitStream bsPickup;
bsPickup.Write( pickupId );//// pickupId это ид пикапа который мы собираемся подбирать
g_RakClient->RPC( RPC_PickedUpPickup, &bsPickup );///Ну и сама отправка
///////////////////////////////////////////
////////////////2-й способ///////////////////////////
///////////////////////////////////////////
g_RakClient->SendPickUp( int pickupId ); /// А тут мы отправляем готовую функцию
////Примечание g_RakClient->SendPickUp( int pickupId ); это нужно отправлять только такой строчкой
}
3-й пакет который разберем SendFakeOnfootSyncData
Код:
stOnfootData sync;
memset(&sync, 0, sizeof(stOnfootData));
BitStream bsOnfootSync;
sync.byteHealth = Health;
sync.byteCurrentWeapon = byteCurrentWeapon;
sync.vecPos[0] = fPos[0];
sync.vecPos[1] = fPos[1];
sync.vecPos[2] = fPos[2];
sync.vecMoveSpeed[0] = speed[0];
sync.vecMoveSpeed[1] = speed[1];
sync.vecMoveSpeed[2] = speed[2];
bsOnfootSync.Write((BYTE)ID_PLAYER_SYNC);
bsOnfootSync.Write((PCHAR)&picSync,sizeof(stOnfootData));
g_RakClient->Send(&bsOnfootSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);
stOnfootData sync; ///Объявляем синхру
memset(&sync, 0, sizeof(stOnfootData)); ////Указываем ей размер
BitStream bsOnfootSync; ///Объявляем пакет
sync.byteHealth = Health; ///Вот тут устанавливается ХП игроку
///Если мы используем еще
///struct actor_info *self = actor_info_get( ACTOR_SELF, ACTOR_ALIVE );
///То можно написать так
///sync.byteHealth = self->hitpoints; в таком случаее
///Будет устанавливать хп столько сколько у нас было
sync.byteCurrentWeapon = byteCurrentWeapon;///Это оружие аналогично ХП
///Можно записать sync.byteCurrentWeapon = self->weapon;
sync.vecPos[0] = fPos[0];///Это позиция можно создать масив с позицеей игрока
///И тащить от туда позицию, а можно
sync.vecPos[1] = fPos[1];
sync.vecPos[2] = fPos[2];
///Записать позицию так
///vect3_copy(&self->base.matrix[12], sync.vecPos);
/// И уже использовать sync.vecPos[2] += 0.0012; это позиция по Z координате
sync.vecMoveSpeed[0] = speed[0];
sync.vecMoveSpeed[1] = speed[1];
sync.vecMoveSpeed[2] = speed[2];
///Со скоростью работа аналогична
///vect3_copy(&self->base.matrix[12], sync.vecMoveSpeed);
/// self->speed[2] += 10; это разгонит перса по Z координате
///Можете найти у меня в уроках как использовать разгон в сторону камеры
bsOnfootSync.Write((BYTE)ID_PLAYER_SYNC);///Тут мы говорим то что используем
///PLAYER_SYNC
bsOnfootSync.Write((PCHAR)&picSync,sizeof(stOnfootData)); ////Ну и все упаковываем
////Все это в пакет
g_RakClient->Send(&bsOnfootSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);
///И отправляем
С вами был Jesus, урок написан по просьбе RickAstley
Специально для сайта BlastHack.Net
При копировании указывать источник BlastHack.Net