Код
typedef struct _ONFOOT_SYNC_DATA
{
#pragma pack ( 1 )
WORD lrAnalog;
WORD udAnalog;
WORD wKeys;
float vecPos[3];
float fQuaternion[4];
BYTE byteHealth;
BYTE byteArmour;
BYTE byteCurrentWeapon;
BYTE byteSpecialAction;
float vecMoveSpeed[3];
float vecSurfOffsets[3];
WORD wSurfInfo;
int iCurrentAnimationID;
} ONFOOT_SYNC_DATA;
С помощью данной синхранизации вы сможете отправить любую информацию о "ногах"
Допустим вам надо телепортироватся к какой-то кординате и ввести команду, после вернутся на место. но вы не можете сделать это обычнымм телепортом, так как это очень далеко от вашей текущей позиции и при телепорте будет прогружаться ного текстур ,соответственно лагать, вы боитесь что "спалитесь", а так же важно что бы сработало с 1-го раза и не надо было 100 раз ТПшится...
Сдесь то и понадобится отправка пакетов, при отправке вы не будете видить телепортов и вобще никаких действий, но эти действия будут видны другим игрокам. Сейчас я подробно опишу все параметры синхранизации.
Код
WORD lrAnalog;
WORD udAnalog;
Первые 2 параметра ИДы клавиш джойстика, к сожалению пр оних нечего неммогу сказать, некогда не играл с ПК с джойстиком.
Это ИД нажатой клавиши САМП'a, обратите внимание! Это ИД клавиши именно САМПа, клавиши C++ не будут отправлятся, ИД клавиши можно узнать на Pawno порталах, к сожалению их мало... По памяти могу сказать Энтер это 16, субмисия, тоесть "плюс" и 2-ка это ИД 2...
Это позиция X, Y, Z.
Это я хз, не использовал этот параметр, что-то мне подсказывает что это угол поворота...
Код
BYTE byteHealth;
BYTE byteArmour;
BYTE byteCurrentWeapon;
BYTE byteSpecialAction;
Это как понятно с названия, ХП игрока, Броня, ID оружия которе он держит и спец действие. Спец действие будет обновлятся сразу же при отправки синхры клиентом, так что не морочтесь особо с ними...
Код
float vecMoveSpeed[3];
Скорость двежения по осям X, Y, Z.
Код
float vecSurfOffsets[3];
Точно не уверен помойу скорость машины на которой стоите, хз вобще...
Подозреваю что ИД машины на которой стоите...
Код
int iCurrentAnimationID;
ИД анимации сампа, его можно узнать через серв с модом Grand Larercy.
Итак после того как вы знаете что за что отвечает, можно отмодить свою синхру...
Вот так выглядит стандартная от голубя, она находится в raksamp.cpp
Код
void SendFakeOnfootSyncData(float fPos[3], float Health, int byteCurrentWeapon, float speed[3])
{
ONFOOT_SYNC_DATA picSync;
memset(&picSync, 0, sizeof(ONFOOT_SYNC_DATA));
RakNet::BitStream bsOnfootSync;
picSync.iCurrentAnimationID = g_Players->pLocalPlayer->onFootData.iCurrentAnimationID;
picSync.byteHealth = Health;
picSync.byteCurrentWeapon = byteCurrentWeapon;
picSync.vecPos[0] = fPos[0];
picSync.vecPos[1] = fPos[1];
picSync.vecPos[2] = fPos[2];
picSync.vecMoveSpeed[0] = speed[0];
picSync.vecMoveSpeed[1] = speed[1];
picSync.vecMoveSpeed[2] = speed[2];
bsOnfootSync.Write((BYTE)ID_PLAYER_SYNC);
bsOnfootSync.Write((PCHAR)&picSync,sizeof(ONFOOT_SYNC_DATA));
g_SAMP->pRakClientInterface->Send(&bsOnfootSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);
}
Это функция отправки синхры, сюда можете добавить дополнительные параметры допустим нажатую клавишу...
Советую скопировать весь код и уже потом дополнять, это будет перегрузка функции. Это безопасно и ошибок не выдаст.
в параметры функции
Код
void SendFakeOnfootSyncData(float fPos[3], float Health, int byteCurrentWeapon, float speed[3])
Копируем и вставляем "WORD Key"
Код
void SendFakeOnfootSyncData(float fPos[3], float Health, int byteCurrentWeapon, float speed[3], WORD Key)
Теперь добавим установку значения...
допустим после: picSync.vecMoveSpeed[2] = speed[2];
Готово тепер ьобьявим новую синхру в raksamp.h
Вставте сразу после:
Код
void SendFakeOnfootSyncData(float fPos[3], float Health, int byteCurrentWeapon, float speed[3]);
это
Код
void SendFakeOnfootSyncData(float fPos[3], float Health, int byteCurrentWeapon, float speed[3], WORD Key);