|
Форум Программирование C++/C Программирование [mod_sa] RakClient FYP'a |
[mod_sa] RakClient FYP'a |
Offline
Всем привет это опять урок по 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); ///И отправляем |
| |||
| |||