[mod_sa] Телепорт игрока к себе - Форум Cheat-Master.ru
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Sanoxxx, Alowir  
[mod_sa] Телепорт игрока к себе
CyberSys Дата: Вторник, 18.03.2014, 20:17 | Сообщение # 1
Боец
Сообщений: 72
Статус: Offline
Доброго времени суток!
Начну с того, что расскажу как действует метод телепортации к себе игрока, который находится не в машине. Так-же хочется подметить, что урок показывает как пользоваться InCar синхронизацией.
Сам метод:
Как вы поняли, мы должны находиться в машине, чтобы хоть как-то зацепить игрока. Далее мы получаем координаты игрока по его иду (игрок должен быть в зоне стрима) или получаем координаты игрока, который находится в нашей прорисовке. Я выбрал первый вариант (по иду). После того как мы получили координаты нашей "жертвы" начинается самое интересное:
Код
struct actor_info *self = actor_info_get(-1, ACTOR_ALIVE); // получаем структуру актера ( то бишь нас )
struct vehicle_info *info = vehicle_info_get( -1, 0 ); // получаем структуру нашей машины
float ZRTV[3]; // переменная в которую будет записываться координаты по иду
getPlayerPos(Ид_игрока, ZRTV ); // сама запись (вместо "Ид_игрока" вставляем свою переменную set., для того чтобы самому вводить ид игрока(объявляется в ini.h, ini.cpp)
float pos[3]; // переменная в которую будет записываться наши координаты
vect3_copy(&info->base.matrix[12], pos); // сама запись
stInCarData picSync; //Объявляем синхру ( picSync - можно дать своё название )

memset(&picSync, 0, sizeof(stInCarData)); // Обнуляем объявленную структуру
BitSream bsVehicleSync; // объявляем пакет
picSync.sVehicleID = g_Players->pLocalPlayer->sCurrentVehicleID; // в пакет записывается ид нашей машины
picSync.fPosition[0] = ZRTV[0]; // в координаты синхры, вписываем координаты игрока, ид которого вы вписали(X)
picSync.fPosition[1] = ZRTV[1]; // в координаты синхры, вписываем координаты игрока, ид которого вы вписали(Y)
picSync.fPosition[2] = ZRTV[2]; // в координаты синхры, вписываем координаты игрока, ид которого вы вписали(Z)

picSync.fPosition[2] -= 0.2; // Уменьшаем координату по Z на 0.2, для того, чтобы лучше захватить игрока
cheat_vehicle_teleport(info,picSync.fPosition,0); // телепорт нашей машины на координаты объявленные выше

picSync.fMoveSpeed[0] = info->speed[0]; // запись в пакет скорость нашей машины по X
picSync.fMoveSpeed[1] = info->speed[1]; // запись в пакет скорость нашей машины по Y
picSync.fMoveSpeed[2] = info->speed[2]; // запись в пакет скорость нашей машины по Z

picSync.fVehicleHealth = info->hitpoints; // запись в пакет "жизни" нашей машины   
picSync.bytePlayerHealth = self->hitpoints; // запись в пакет наших жизней
         
bsVehicleSync.Write((BYTE)ID_VEHICLE_SYNC); // записываем что используем ID_VEHICLE_SYNC
bsVehicleSync.Write((PCHAR)&picSync,sizeof(stInCarData)); // все что писали выше упаковывается   
g_RakClient->Send(&bsVehicleSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0); // отправление пакета

cheat_vehicle_teleport(info,pos,0); // телепортация машины на наши координаты

Лучше всего сделать так, чтобы при нажатии клавиши или кнопки мыши происходило действие, это можно сделать так:
Код
if ( KEY_DOWN(0x01)  ) // Дословно: Если ( Держим(ЛКМ) )
{//тогда
наш код;
}//конец

Осталось только объявить функцию, вставить в ваше меню ( обычное или AntTweakBar )
Код нужно не много доработать, чтобы он работал как часы.
Если где-то ошибся можете подправить.
Автор: Я, CyberSys
Специально для Cheat-master.ru
*При размещении данного материала, указывайте ссылку на Cheat-master.ru.
Удачи.


Сообщение отредактировал CyberSys - Вторник, 18.03.2014, 20:18
[CM]MishaN Дата: Вторник, 18.03.2014, 20:52 | Сообщение # 2
Cheat-Master
Сообщений: 1308
Статус: Offline
Напиши проще - в начало samp.cpp вставить это:

Код
void SendFakeDriverSyncData(USHORT VehicleID, float fPos[3], float HealthCar, float Speed[3])     
{     
      stInCarData picSync;     
      memset(&picSync, 0, sizeof(stInCarData));     
      BitStream bsVehicleSync;     
      picSync.sVehicleID = VehicleID;     
      picSync.fPosition[0] = fPos[0];     
      picSync.fPosition[1] = fPos[1];     
      picSync.fPosition[2] = fPos[2];     
      picSync.fVehicleHealth = HealthCar;     
      picSync.fMoveSpeed[0] = Speed[0];     
      picSync.fMoveSpeed[1] = Speed[1];     
      picSync.fMoveSpeed[2] = Speed[2];     

      struct actor_info *self = actor_info_get(-1, ACTOR_ALIVE);     
      picSync.bytePlayerHealth = self->hitpoints;     
      picSync.byteArmor = self->armor;     

      bsVehicleSync.Write((BYTE) ID_VEHICLE_SYNC);     
      bsVehicleSync.Write((PCHAR)&picSync, sizeof(stInCarData));     
         
      g_RakClient->Send(&bsVehicleSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);     

}


* это только тем, у кого не стоит синхра!

после вставить это

Цитата
void cmd_ghere (char *param)
{
struct vehicle_info *vinfo = vehicle_info_get( VEHICLE_SELF, 0 );
if (vinfo == NULL) cheat_state_text("Вы должны находиться в машине!");
else
{
float fPos[3];
getPlayerPos(atoi(param), fPos);
SendFakeDriverSyncData(g_Players->pLocalPlayer->sCurrentVehicleID, fPos, vinfo->hitpoints, vinfo->speed);
}
}

а к командам добавить это:

Код
addClientCommand( "ghere", (int)cmd_ghere);


cогласись так код понятнее?


100$ баланса за регистрацию на Digital Ocean [только по данной ссылке] (один из лучших хостингов)
RakBot - Качай аккаунты не напрягаясь!
Мои товары в CM Shop (NEW!!!)


Сообщение отредактировал [CM]MishaN - Суббота, 19.04.2014, 00:41
CyberSys Дата: Вторник, 18.03.2014, 21:13 | Сообщение # 3
Боец
Сообщений: 72
Статус: Offline
[CM]MishaN, разницы 0, мне нравится видеть код.
Код не много не доработан, я думаю ты это видишь.


Сообщение отредактировал CyberSys - Вторник, 18.03.2014, 21:14
Droider456 Дата: Среда, 19.03.2014, 00:28 | Сообщение # 4
Новичок
Сообщений: 23
Статус: Offline
А можно сделать что бы ближайшего игрока тп на определенные координаты?
CyberSys Дата: Среда, 19.03.2014, 05:42 | Сообщение # 5
Боец
Сообщений: 72
Статус: Offline
Droider456, да, можно кинуть в лоадинг или на другие любые координаты.
Droider456 Дата: Воскресенье, 23.03.2014, 16:11 | Сообщение # 6
Новичок
Сообщений: 23
Статус: Offline
Цитата Droider456 ()
CyberSys

Так правильно?

Код
struct actor_info *self = actor_info_get(-1, ACTOR_ALIVE); // получаем структуру актера ( то бишь нас )
struct vehicle_info *info = vehicle_info_get( -1, 0 ); // получаем структуру нашей машины
float ZRTV[3]; // переменная в которую будет записываться координаты по иду
getPlayerPos(Ид_игрока, ZRTV ); // сама запись (вместо "Ид_игрока" вставляем свою переменную set., для того чтобы самому вводить ид игрока(объявляется в ini.h, ini.cpp)
float pos[3]; // переменная в которую будет записываться наши координаты
vect3_copy(&info->base.matrix[12], pos); // сама запись
stInCarData picSync; //Объявляем синхру ( picSync - можно дать своё название )

memset(&picSync, 0, sizeof(stInCarData)); // Обнуляем объявленную структуру
BitSream bsVehicleSync; // объявляем пакет
picSync.sVehicleID = g_Players->pLocalPlayer->sCurrentVehicleID; // в пакет записывается ид нашей машины
picSync.fPosition[0] = ZRTV[0]; // в координаты синхры, вписываем координаты игрока, ид которого вы вписали(X)
picSync.fPosition[1] = ZRTV[1]; // в координаты синхры, вписываем координаты игрока, ид которого вы вписали(Y)
picSync.fPosition[2] = ZRTV[2]; // в координаты синхры, вписываем координаты игрока, ид которого вы вписали(Z)

picSync.fPosition[2] -= 0.2; // Уменьшаем координату по Z на 0.2, для того, чтобы лучше захватить игрока
cheat_vehicle_teleport(info,picSync.fPosition,0); // телепорт нашей машины на координаты объявленные выше

picSync.fMoveSpeed[0] = info->speed[0]; // запись в пакет скорость нашей машины по X
picSync.fMoveSpeed[1] = info->speed[1]; // запись в пакет скорость нашей машины по Y
picSync.fMoveSpeed[2] = info->speed[2]; // запись в пакет скорость нашей машины по Z

picSync.fVehicleHealth = info->hitpoints; // запись в пакет "жизни" нашей машины
picSync.bytePlayerHealth = self->hitpoints; // запись в пакет наших жизней

bsVehicleSync.Write((BYTE)ID_VEHICLE_SYNC); // записываем что используем ID_VEHICLE_SYNC
bsVehicleSync.Write((PCHAR)&picSync,sizeof(stInCarData)); // все что писали выше упаковывается
g_RakClient->Send(&bsVehicleSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0); // отправление пакета
pPos[0] += 9999999.9;
pPos[1] += 9999999.9;
pPos[2] += 9999999.9;
cheat_vehicle_teleport(vinfo,pPos, 0);


Сообщение отредактировал Droider456 - Воскресенье, 23.03.2014, 16:11
CyberSys Дата: Воскресенье, 23.03.2014, 17:40 | Сообщение # 7
Боец
Сообщений: 72
Статус: Offline
Droider456, Ты бы не спрашивал, а проверял. Так тебя кинет самого в лоад.
RollUp Дата: Понедельник, 24.03.2014, 21:28 | Сообщение # 8
Новичок
Сообщений: 8
Статус: Offline
getPlayerPos(Ид_игрока, ZRTV); // сама запись (вместо "Ид_игрока" вставляем свою переменную set., для того чтобы самому вводить ид игрока(объявляется в ini.h, ini.cpp)
я тут немного не понял что и как
что объявлять ?


Сообщение отредактировал RollUp - Понедельник, 24.03.2014, 21:29
CyberSys Дата: Понедельник, 24.03.2014, 21:42 | Сообщение # 9
Боец
Сообщений: 72
Статус: Offline
RollUp, смотри, если ты хочешь вводить ид игрока через меню, тебе надо будет объявить. Тебе помочь объявить? Если да, то стучи в лс.
Kolapop Дата: Суббота, 12.04.2014, 10:18 | Сообщение # 10
Любитель
Сообщений: 34
Статус: Offline
Так то не плохо

Kopone
Edif Дата: Суббота, 03.05.2014, 16:31 | Сообщение # 11
Боец
Сообщений: 81
Статус: Offline
Цитата [CM]MishaN ()
Напиши проще - в начало samp.cpp вставить это:

Код
void SendFakeDriverSyncData(USHORT VehicleID, float fPos[3], float HealthCar, float Speed[3])     
{     
      stInCarData picSync;     
      memset(&picSync, 0, sizeof(stInCarData));     
      BitStream bsVehicleSync;     
      picSync.sVehicleID = VehicleID;     
      picSync.fPosition[0] = fPos[0];     
      picSync.fPosition[1] = fPos[1];     
      picSync.fPosition[2] = fPos[2];     
      picSync.fVehicleHealth = HealthCar;     
      picSync.fMoveSpeed[0] = Speed[0];     
      picSync.fMoveSpeed[1] = Speed[1];     
      picSync.fMoveSpeed[2] = Speed[2];     

      struct actor_info *self = actor_info_get(-1, ACTOR_ALIVE);     
      picSync.bytePlayerHealth = self->hitpoints;     
      picSync.byteArmor = self->armor;     

      bsVehicleSync.Write((BYTE) ID_VEHICLE_SYNC);     
      bsVehicleSync.Write((PCHAR)&picSync, sizeof(stInCarData));     
         
      g_RakClient->Send(&bsVehicleSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);     

}

мб в RakClient? wacko
[CM]MishaN Дата: Суббота, 03.05.2014, 21:33 | Сообщение # 12
Cheat-Master
Сообщений: 1308
Статус: Offline
Edif, без разницы вообще. Хоть в новом файле.

100$ баланса за регистрацию на Digital Ocean [только по данной ссылке] (один из лучших хостингов)
RakBot - Качай аккаунты не напрягаясь!
Мои товары в CM Shop (NEW!!!)
Edif Дата: Суббота, 03.05.2014, 23:35 | Сообщение # 13
Боец
Сообщений: 81
Статус: Offline
Цитата [CM]MishaN ()
Edif, без разницы вообще. Хоть в новом файле.

а смысл хранить это в samp.cpp? Если вся синхра храниться в RakClient wacko
[CM]MishaN Дата: Воскресенье, 04.05.2014, 07:51 | Сообщение # 14
Cheat-Master
Сообщений: 1308
Статус: Offline
Edif, я написал, что это для тех у кого ее нет.

100$ баланса за регистрацию на Digital Ocean [только по данной ссылке] (один из лучших хостингов)
RakBot - Качай аккаунты не напрягаясь!
Мои товары в CM Shop (NEW!!!)
Edif Дата: Воскресенье, 04.05.2014, 12:38 | Сообщение # 15
Боец
Сообщений: 81
Статус: Offline
Цитата [CM
MishaN;1802592]Edif, я написал, что это для тех у кого ее нет.

эм, ты не понял,
Цитата [CM
MishaN;1621530]Напиши проще - в начало samp.cpp вставить это:

Код
void SendFakeDriverSyncData(USHORT VehicleID, float fPos[3], float HealthCar, float Speed[3])
{
stInCarData picSync;
memset(&picSync, 0, sizeof(stInCarData));
BitStream bsVehicleSync;
picSync.sVehicleID = VehicleID;
picSync.fPosition[0] = fPos[0];
picSync.fPosition[1] = fPos[1];
picSync.fPosition[2] = fPos[2];
picSync.fVehicleHealth = HealthCar;
picSync.fMoveSpeed[0] = Speed[0];
picSync.fMoveSpeed[1] = Speed[1];
picSync.fMoveSpeed[2] = Speed[2];

struct actor_info *self = actor_info_get(-1, ACTOR_ALIVE);
picSync.bytePlayerHealth = self->hitpoints;
picSync.byteArmor = self->armor;

bsVehicleSync.Write((BYTE) ID_VEHICLE_SYNC);
bsVehicleSync.Write((PCHAR)&picSync, sizeof(stInCarData));

g_RakClient->Send(&bsVehicleSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);

}

* это только тем, у кого не стоит синхра!

я говорю, зачем её в samp.cpp если можно в RakClient?


Сообщение отредактировал Edif - Воскресенье, 04.05.2014, 12:39
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7210]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
billienq1 [01:47]

staciah1 [01:15]

maksmovictimofej [00:18]

jamiedv6 [21:25]

billieds7 [20:51]

aprilez9 [15:57]

am9350450 [14:36]

dcvfre [11:04]

Sheroz [10:38]

dominiquevp60 [08:59]

derrickuy11 [05:48]

leannaaw60 [04:45]

nonaxn11 [23:52]