Автор Тема: Написание плагина. Настройка проекта  (Прочитано 31985 раз)

Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 219
  • Репутация: +14/-0
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #300 : Октябрь 08, 2019, 12:43:05 pm »
Попробуй так:
Код: C++
  1. car->m_autoPilot.m_nCarMission = MISSION_NONE;

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 153
  • Репутация: +5/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #301 : Октябрь 13, 2019, 05:06:49 am »
Спасибо вам большое уважаемый kenking за Ваш ответ. Всё работает как надо. Наконец-то смог переписать миссию "Опека" из gta vice city long night. Теперь можно задать машины точный маршрут следования.
  Но всё же далеко от идеала.  Например, если  начать новую игру, то происходит вылет, пытаюсь  найти  событие "если  новая игра начата, ждать  пока  заставка кончится".  Так же ищу функция арестован игрок или нет.  Конечно,  много приходится костылить)))))))))))))
https://vk.com/gtabuilder?w=wall-56513456_522

Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 219
  • Репутация: +14/-0
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #302 : Октябрь 13, 2019, 09:48:54 am »
Так же ищу функция арестован игрок или нет. 
Код: C++
  1. CWorld::Players[CWorld::PlayerInFocus].m_nPlayerState == PLAYERSTATE_HASBEENARRESTED

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 153
  • Репутация: +5/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #303 : Октябрь 22, 2019, 02:06:25 pm »

Спасибо вам большое уважаемый kenking, Вы мне очень сильно помогли. Теперь смог написать полноценную миссию. https://vk.com/gtabuilder?w=wall-56513456_523

Всего 50 строк кода, стараюсь его сделать более полиморфизмым, чтобы писать более короче.
Есть класс  CPhysical от него наследуются классы CVehicle и CPed. Как можно узнать через  функцию, то  что мы в него передали, является классом, например, CVehicle.
Код: C++
  1. bool wait(unsigned int key) {
  2.         if (!KeyCheck::CheckWithDelay(key, 200)) { return true; }
  3.         else { return false; }
  4. }
  5. CVehicle* createcar(int modelID, float distance = 10.f) {// создать авто
  6.         char reference = 2;
  7.         CPed* player = FindPlayerPed();
  8.         CVector position = player->m_placement.pos;
  9.         position += player->m_placement.up * distance; // Вектор оси прямо от игрока умножаем на 10 метров и прибавляем к позиции.
  10.         CStreaming::RequestModel(modelID, 0); // ANGEL 166 ModelID
  11.         CStreaming::LoadAllRequestedModels(false);
  12.         CVehicle* v;
  13.         if (CModelInfo::IsCarModel(modelID))// если создаем авто.
  14.                 v = new CAutomobile(modelID, reference);
  15.         if (CModelInfo::IsBikeModel(modelID))
  16.                 v = new CBike(modelID, reference);
  17.         if (CModelInfo::IsBoatModel(modelID))
  18.                 v = new CBoat(modelID, reference);
  19.         CCarCtrl::JoinCarWithRoadSystem(v);// ии машина в системе.
  20.         v->m_nState = 4;
  21.         v->CVehicle::m_nCreatedBy = reference; // Если один то транспорт будет удален позже...
  22.         v->m_placement.SetRotate(0, 0, 3.5f);
  23.         v->m_placement.pos.x = position.x;
  24.         v->m_placement.pos.y = position.y;
  25.         v->m_placement.pos.z = position.z + v->GetDistanceFromCentreOfMassToBaseOfModel();
  26.         CWorld::Add(v);
  27.         return v;
  28. };
  29.  
  30. bool iscar(CPhysical* en) {
  31.         /*if (en->)
  32.         {
  33.  
  34.         }*/
  35. };
  36. class Test {
  37. public:
  38.    
  39.     Test() {
  40.                 Events::gameProcessEvent += [] {
  41.                         static int s;
  42.                         CPed* player = FindPlayerPed();// найти игрока
  43.                         if (!player) return;// проверка найден игрок
  44.                         KeyCheck::Update();
  45.                         if (KeyCheck::CheckWithDelay('N', 200)) {//если N нажата
  46.                                 if (wait('N')) return; {//если м нажата
  47.                
  48.                         CVehicle* car = createcar(MODEL_INFERNUS);
  49.                         if (iscar(car)) {
  50.                                 CMessages::AddMessageJumpQ(L"this is car", 10000, 0);
  51.                         }
  52.                                 }
  53.                         }
  54.                 };
  55.         }
  56. } test;
  57.  

Зачем это нужно? Чтобы на lua осуществить перегрузку функций, что упростить процесс написание скриптов.

Есть ли способ заставить ехать машину назад? Хочу реализовать дистанционное управление авто. Пытался через скриптовую команду не вышло.

Код: C++
  1.  
  2. Command<COMMAND_SET_CAR_TEMP_ACTION>(CPools::GetVehicleRef(car), 22,20000);
  3.  

Разбирал функции, вот, что вышло.

Код: C++
  1. car->FireFixedMachineGuns();//  починка авто от огневого оружия?
  2. //      car->ExtinguishCarFire();// выход из горящего авто?
  3. //      unsigned char c = car->m_nLastWeaponDamage;// последнее оружия наносящее урон авто?
  4. car->DoSunGlare();//авто едет в воду.
  5.