Всем привет это опять урок по 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(stOnfoot Data)); ////
Ну и все упаковываем
////
Все это в пакет
g_RakClient->Send(&bsOnfootSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);
///
И отправляем
С вами былJesus, урок написан по просьбе RickAstley
Специально для сайта BlastHack.Net
При копировании указывать источникBlastHack.Net