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

Оффлайн kenking

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

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 175
  • Репутация: +6/-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

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

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 175
  • Репутация: +6/-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.  



Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 233
  • Репутация: +16/-0
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #304 : Октябрь 23, 2019, 02:57:12 pm »
Цитировать
Как можно узнать через  функцию, то  что мы в него передали, является классом, например, CVehicle.
Код: C++
  1. #include "plugin.h"
  2. #include "extensions\KeyCheck.h"
  3. #include "CMessages.h"
  4. #include "CModelInfo.h"
  5.  
  6. using namespace plugin;
  7.  
  8. class Test {
  9. public:
  10.  
  11.     static void EntityType(CEntity *entity) {
  12.         if (CModelInfo::ms_modelInfoPtrs[entity->m_nModelIndex]->m_nType == MODEL_INFO_PED)
  13.             CMessages::AddMessageJumpQ(L"ped", 2000, 0);
  14.         if (CModelInfo::ms_modelInfoPtrs[entity->m_nModelIndex]->m_nType == MODEL_INFO_VEHICLE)
  15.             CMessages::AddMessageJumpQ(L"vehicle", 2000, 0);
  16.     }
  17.  
  18.     Test() {
  19.         Events::gameProcessEvent += [] {
  20.             KeyCheck::Update();
  21.             if (KeyCheck::CheckWithDelay('M', 2000)) {
  22.                 CPed *player = FindPlayerPed();
  23.                 if (player) {
  24.                     if (player->m_pVehicle && player->m_bInVehicle)
  25.                         EntityType(player->m_pVehicle);
  26.                     else
  27.                         EntityType(player);
  28.                 }
  29.             }
  30.         };
  31.     }
  32. } test;

Цитировать
Есть ли способ заставить ехать машину назад?
Код: C++
  1. vehicle->m_autoPilot.m_nAnimationId = TEMPACT_REVERSE;
  2. vehicle->m_autoPilot.m_nAnimationTime = 20000;
В транспорте должен быть водитель.

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 175
  • Репутация: +6/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #305 : Октябрь 26, 2019, 05:50:04 am »
Благодарю вас kenking за помощь. плагин скоро  будет допилен))))))))))) надеюсь на это.

что-то у  меня  не вышло, заставить авто ехать назад, может  какого-то флага не  хватает. происходит вылет.

Код: Text
  1.  
  2. bool wait(unsigned int key) {
  3.         if (!KeyCheck::CheckWithDelay(key, 200)) { return true; }
  4.         else { return false; }
  5. }
  6. CVehicle* createcar(int modelID, float distance = 10.f) {// создать авто
  7.         char reference = 2;
  8.         CPed* player = FindPlayerPed();
  9.         CVector position = player->m_placement.pos;
  10.         position += player->m_placement.up * distance; // Вектор оси прямо от игрока умножаем на 10 метров и прибавляем к позиции.
  11.         CStreaming::RequestModel(modelID, 0); // ANGEL 166 ModelID
  12.         CStreaming::LoadAllRequestedModels(false);
  13.         CVehicle* v;
  14.         if (CModelInfo::IsCarModel(modelID))// если создаем авто.
  15.                 v = new CAutomobile(modelID, reference);
  16.         if (CModelInfo::IsBikeModel(modelID))
  17.                 v = new CBike(modelID, reference);
  18.         if (CModelInfo::IsBoatModel(modelID))
  19.                 v = new CBoat(modelID, reference);
  20.         CCarCtrl::JoinCarWithRoadSystem(v);// ии машина в системе.
  21.         v->m_nState = 4;
  22.         v->CVehicle::m_nCreatedBy = reference; // Если один то транспорт будет удален позже...
  23.         v->m_placement.SetRotate(0, 0, 3.5f);
  24.         v->m_placement.pos.x = position.x;
  25.         v->m_placement.pos.y = position.y;
  26.         v->m_placement.pos.z = position.z + v->GetDistanceFromCentreOfMassToBaseOfModel();
  27.         CWorld::Add(v);
  28.         return v;
  29. };
  30.  
  31. bool iscar(CPhysical* en) {
  32.         if (CModelInfo::ms_modelInfoPtrs[en->m_nModelIndex]->m_nType == MODEL_INFO_PED) {
  33.                 CMessages::AddMessageJumpQ(L"ped", 2000, 0);
  34.                 return false;
  35.         }
  36.  
  37.         if (CModelInfo::ms_modelInfoPtrs[en->m_nModelIndex]->m_nType == MODEL_INFO_VEHICLE){
  38.                 CMessages::AddMessageJumpQ(L"vehicle", 2000, 0);
  39.                 return false;
  40.         }
  41. };
  42. class Test {
  43. public:
  44.    
  45.     Test() {
  46.                 Events::gameProcessEvent += [] {
  47.                         CVehicle* car = nullptr;
  48.                         CPed* player = FindPlayerPed();// найти игрока
  49.                         if (!player) return;// проверка найден игрок
  50.                         KeyCheck::Update();
  51.                         if (KeyCheck::CheckWithDelay('N', 200)) {//если N нажата
  52.                                 if (wait('N')) return; {//если N нажата
  53.  
  54.                                 CPed* ped = nullptr;
  55.                                  car = createcar(MODEL_INFERNUS);
  56.                                 Command<COMMAND_REQUEST_MODEL>(MODEL_ARMY);
  57.                                 Command<COMMAND_LOAD_ALL_MODELS_NOW>(false);
  58.                                 if (Command<COMMAND_HAS_MODEL_LOADED>(MODEL_ARMY)) {
  59.                                                 Command<COMMAND_CREATE_CHAR_INSIDE_CAR>(CPools::GetVehicleRef(car), 4, MODEL_ARMY, &ped);
  60.                                                 //car->m_autoPilot.m_nCarMission = MISSION_NONE;
  61.                                         }
  62.                                 }
  63.                         }
  64.                         if (KeyCheck::CheckWithDelay('M', 200)) {//если M нажата
  65.                                 CMessages::AddMessageJumpQ(L"this is car", 10000, 0);
  66.                                         car->m_autoPilot.m_nAnimationId = TEMPACT_REVERSE;
  67.                                         car->m_autoPilot.m_nAnimationTime = 20000;
  68.                         }
  69.                 };
  70.         }
  71. } test;
  72.  
  73.  

Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 233
  • Репутация: +16/-0
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #306 : Октябрь 26, 2019, 08:21:23 am »
Код: C++
  1. #include "plugin.h"
  2.  
  3. using namespace plugin;
  4.  
  5. class Test {
  6. public:
  7.     Test() {
  8.         Events::gameProcessEvent += [] {
  9.             CPed *player = FindPlayerPed();
  10.             if (player) {
  11.                 for (int i = 0; i < CPools::ms_pVehiclePool->m_nSize; i++) {
  12.                     CVehicle *vehicle = CPools::ms_pVehiclePool->GetAt(i);
  13.                     if (vehicle && (DistanceBetweenPoints(player->GetPosition(), vehicle->GetPosition()) < 7.0f)) {
  14.                         vehicle->m_autoPilot.m_nAnimationId = TEMPACT_REVERSE;
  15.                         vehicle->m_autoPilot.m_nAnimationTime = 20000;
  16.                     }
  17.                 }
  18.             }
  19.         };
  20.     }
  21. } test;

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 175
  • Репутация: +6/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #307 : Ноябрь 04, 2019, 05:10:17 am »
спасибо большое за Ваш ответ kenking. удалось реализовать управление авто следующим образом.
Код: C++
  1. int setcaraction(lua_State* L) {// установить поведение авто.
  2.         try {
  3.                 if (LUA_TUSERDATA == lua_type(L, -3)) {// указатель на авто.
  4.                         if (LUA_TNUMBER == lua_type(L, -2) && LUA_TNUMBER == lua_type(L, -1)) {
  5.                                 CVehicle* car = (CVehicle*)Userdata::get<CVehicle>(L, 1, false);// получить указатель на авто.
  6.                                 int style = Stack<int>::get(L, 2);// если число.
  7.                                 unsigned int t = Stack<int>::get(L, 3);// если число.
  8.                                 unsigned int time = t * 10;
  9.  
  10.                                 for (int i = 0; i < CPools::ms_pVehiclePool->m_nSize; i++) {
  11.                                         CVehicle* vehicle = CPools::ms_pVehiclePool->GetAt(i);
  12.                                         if (vehicle == car) {
  13.  
  14.                                                 if (style == 0) {
  15.                                                         Command<COMMAND_SET_CAR_TEMP_ACTION>(CPools::GetVehicleRef(vehicle), TEMPACT_NONE, time);
  16.                                                         return 0;
  17.                                                 }
  18.                                                 if (style == 1) {
  19.                                                         Command<COMMAND_SET_CAR_TEMP_ACTION>(CPools::GetVehicleRef(vehicle), TEMPACT_WAIT, time);
  20.                                                         return 0;
  21.                                                 }                                                                                                                                                                      
  22. .........................
  23.  

пытался написать подобие миссии "Водитель" вышло криво https://vk.com/gtabuilder?w=wall-56513456_524
не хватает таймера  гонки.  Vital в видео показывал так https://www.youtube.com/watch?v=YzGGZM_KyjQ&t=1256s
но в vice city он не работает на cleo.
хотелось узнать как сделать таймер на sdk, чтобы потом перенести в lua.
можно создать тему lualoader? чтобы выкладывать туда наработки?
как этот раздел http://forum.gtabuilder.ru/index.php?board=28.0
Скажите, пожалуйста, как помочь сайту материально?

Код: C++
  1. {$CLEO}
  2. 0000:    
  3. const
  4.  TEXT_X = 608.0 //timer X position (0.0–640.0)
  5.  TEXT_Y = 136.0 //timer Y position (0.0–448.0)
  6.  TEXT_R = 144 //timer red colour (0–255)
  7.  TEXT_G = 96 //timer green colour (0–255)
  8.  TEXT_B = 16 //timer blue colour (0–255)
  9.  TEXT_A = 255 //timer alpha (0–255)
  10.  TEXT_FONT = 3 //0 (Gothic),1 (Standard),2 (Menu),3 (Pricedown)
  11.  LETTER_H = 2.3 //letter height
  12.  LETTER_W = 0.6 //letter width
  13.  OUTLINE_R = 0 //outline red colour (0–255)
  14.  OUTLINE_G = 0 //outline green colour (0–255)
  15.  OUTLINE_B = 0 //outline blue colour (0–255)
  16.  OUTLINE_A = 200 //outline alpha (0–255)
  17.  OUTLINE_W = 1 //outline width (1 & 2 are optimal values)
  18. end // const
  19.                            
  20. :1
  21. while true
  22. wait 0 ms  
  23. 03F0: enable_text_draw 1
  24. 03E4: set_text_draw_align_right 1
  25. 0340: set_text_draw_RGBA TEXT_R TEXT_G TEXT_B TEXT_A
  26. 0349: set_text_draw_font TEXT_FONT
  27. 033F: set_text_draw_letter_size LETTER_W LETTER_H
  28. 045B: draw_text_2numbers TEXT_X TEXT_Y GXT 'TIME' numbers 0 0 //~1~:~1~
  29.   03F0: enable_text_draw 0  
  30.   end
  31. jump @1
  32.  




Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 233
  • Репутация: +16/-0
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #308 : Ноябрь 04, 2019, 09:46:41 am »
Цитировать
можно создать тему lualoader? чтобы выкладывать туда наработки?
Форум для того и существует, чтобы научиться чему-то новому и показать свои разработки, которые могут пригодиться другим пользователям.

Цитировать
Скажите, пожалуйста, как помочь сайту материально?
Обратись к владельцу ресурса Sektor'у через личное сообщение.

Цитировать
хотелось узнать как сделать таймер на sdk, чтобы потом перенести в lua.
Таймер можно реализовать по-разному, зависит от конкретной ситуации, например, так:
Код: C++
  1. #include "plugin.h"
  2. #include "extensions\KeyCheck.h"
  3. #include "CTimer.h"
  4.  
  5. using namespace plugin;
  6.  
  7. class Test {
  8. public:
  9.     enum eTimerState { STATE_START, STATE_PLAY };
  10.     static eTimerState m_currentState;
  11.     static int m_min, m_sec, m_millisec;
  12.  
  13.     Test() {
  14.         Events::drawingEvent += [] {
  15.             switch (m_currentState) {
  16.             case STATE_START:
  17.                 KeyCheck::Update();
  18.                 if (KeyCheck::CheckWithDelay('M', 2000)) {
  19.                     m_min = 0; m_sec = 0; m_millisec = CTimer::m_snTimeInMilliseconds;
  20.                     m_currentState = STATE_PLAY;
  21.                 }
  22.                 break;
  23.             case STATE_PLAY:
  24.                 if (CTimer::m_snTimeInMilliseconds > (m_millisec + 1000)) {
  25.                     m_millisec = CTimer::m_snTimeInMilliseconds;
  26.                     if (m_sec < 59)
  27.                         m_sec++;
  28.                     else {
  29.                         m_sec = 0;
  30.                         if (m_min < 2)
  31.                             m_min++;
  32.                         else
  33.                             m_currentState = STATE_START;
  34.                     }
  35.                 }
  36.                 gamefont::Print({
  37.                     Format("min %02d : sec %02d", m_min, m_sec)
  38.                 }, 10, 10, 1, FONT_DEFAULT, 0.75f, 0.75f, color::White);
  39.                 break;
  40.             }
  41.         };
  42.     }
  43. } test;
  44.  
  45. Test::eTimerState Test::m_currentState = STATE_START;
  46. int Test::m_min = 0;
  47. int Test::m_sec = 0;
  48. int Test::m_millisec = 0;

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 175
  • Репутация: +6/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #309 : Ноябрь 06, 2019, 11:30:00 pm »
kenking спасибо очередной раз за Вашу неоцененную помощь,  таймер пока не перенес, хочется, чтобы нормально работало. тему создам, может прогресс ускорится. времени часто не хватает.

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 175
  • Репутация: +6/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #310 : Февраль 11, 2020, 12:31:27 pm »

Хотел написать миссию “Вечеринка” на чистом с++ sdk plugin, чтобы лучше понимать, как там все устроено. Какой принцип? Запускается из основного потока, независимый поток, чтобы можно было использовать задержки, аналог wait. Вся миссия находится в бесконечном цикле? пока флаг миссии не будет изменён. Но всё вылетает, как только игрок находится на маркере. С помощью тестов установил, что причина вылета происходит из-за проверки, находится ли на точке пешком в радиусе. Как исправить эту ситуацию? Подскажите, пожалуйста. Самое интересное, что все раньше работало нормально.

Ошибка


Код: Javascript
  1.  
  2.         // 1 этап.
  3.         while (getflagmission()) {this_thread::sleep_for(chrono::milliseconds(10));
  4.         if (ped_in_point(player, 95.4, -1136.2, 10.5, 3.0,3.0, 2.0) && !player->m_bInVehicle){// если в точке и не в авто.
  5.                 remove_sphere_and_blip(marker, sphere);// удалить маркер и сферу.
  6.  
Вот как выглядит вся миссия

Код: Javascript
  1. void mission(){ CPed* player = FindPlayerPed();// найти игрока
  2.         static int marker, sphere; //id маркера.
  3.         Command<COMMAND_SET_PLAYER_COORDINATES>(CWorld::PlayerInFocus, 118.0, -825.9, 10.5);
  4.         Command<COMMAND_SET_PLAYER_HEADING>(CWorld::PlayerInFocus, 54.0);
  5.         CVehicle* car = createcar(MODEL_ANGEL, 123.8, -810.9, 10.5, 320.0); // создать авто
  6.  
  7.         Command<COMMAND_DO_FADE>(1500, 1);// просветление.
  8.         CMessages::AddMessageJumpQ(L"~r~Go get some new threads from Rafael's clothes shop", 5000, 1);// вывести сообщение на экран.
  9.         create_blip_and_sphere(marker, sphere, 95.4, -1136.2, 10.5);// создать маркер на карте и создать сферу.
  10.  
  11.         // 1 этап.
  12.         while (getflagmission()) {this_thread::sleep_for(chrono::milliseconds(10));
  13.         if (ped_in_point(player, 95.4, -1136.2, 10.5, 3.0,3.0, 2.0) && !player->m_bInVehicle){// если в точке и не в авто.
  14.                 remove_sphere_and_blip(marker, sphere);// удалить маркер и сферу.
  15.                 Command<COMMAND_SWITCH_WIDESCREEN>(CWorld::PlayerInFocus, 1);// вкл/выкл широкий экран.
  16.                 Command<COMMAND_DO_FADE>(1500, 0);
  17.                 this_thread::sleep_for(chrono::milliseconds(2500));
  18.                 set_skin(player, "PLAYER9");
  19.                 Command<COMMAND_POINT_CAMERA_AT_POINT>(92.39, -1131.74, 16.724, 2);// переместить камеру в координатах.  
  20.                 Command<COMMAND_SET_FIXED_CAMERA_POSITION>(91.813, -1131.116, 17.251, 0.0, 0.0, 0.0); //уст камеру в координатах.
  21.                 Command<COMMAND_DO_FADE>(1500, 1);
  22.                 create_blip_and_sphere(marker, sphere, -251.2, -1360.8, 8.1);// создать маркер на карте и сферу.
  23.  
  24.                 this_thread::sleep_for(chrono::milliseconds(1500));
  25.                 Command<COMMAND_RESTORE_CAMERA>();
  26.                 Command<COMMAND_RESTORE_CAMERA_JUMPCUT>();      // восстановить камеру.
  27.                 Command<COMMAND_SWITCH_WIDESCREEN>(CWorld::PlayerInFocus, 0);// вкл/выкл широкий экран.
  28.                 CMessages::AddMessageJumpQ(L"~r~Get to then Colonel's boat", 5000, 1);// вывести сообщение на экран.
  29.                 break;}
  30.         };
  31.         CPed* ped;
  32.         // 2 этап.
  33.         while (getflagmission()) {this_thread::sleep_for(chrono::milliseconds(10));
  34.         if (ped_in_point(player, -251.2, -1360.8, 8.1, 3.0, 3.0, 2.0 && !player->m_bInVehicle)) {// если в точке и не в авто.
  35.                 remove_sphere_and_blip(marker, sphere);// удалить маркер и сферу.
  36.                 Command<COMMAND_DO_FADE>(1500, 0);
  37.                 this_thread::sleep_for(chrono::milliseconds(2500));
  38.                 Command<COMMAND_SET_PLAYER_COORDINATES>(CWorld::PlayerInFocus, -241.7, -1362.3, 8.1);
  39.                 Command<COMMAND_SET_PLAYER_HEADING>(CWorld::PlayerInFocus, 269.0);
  40.                 CMessages::AddMessageJumpQ(L"~r~Take the Colonel's daughter to the Pole Position club", 5000, 1);// вывести сообщение на экран., 3000, 1);// вывести сообщение на экран.
  41.                 create_blip_and_sphere(marker, sphere, 100.7, -1477.6, 10.1);// создать маркер на карте, создать сферу
  42.  
  43.                 ped = create_spec_ped("IGMERC", -241.7, -1360.3, 8.1); // создать спец педа.    
  44.                 ped->SetObjective(OBJECTIVE_SET_LEADER, player);
  45.                 Command<COMMAND_DO_FADE>(1500, 1);// просветление.
  46.                 break;  }
  47.         };
  48.  
  49.         // 3 этап.
  50.         while (getflagmission()) {      this_thread::sleep_for(chrono::milliseconds(10));
  51.         if (ped_in_point(player, 100.7, -1477.6, 10.1, 3.0, 3.0, 2.0)) {// если в точке и не в авто.
  52.                 remove_sphere_and_blip(marker, sphere);// удалить маркер и сферу.
  53.                 miss(100);      break;  }      
  54.         if (!ped->m_fHealth > 0.10f){ CMessages::AddMessageJumpQ(L"~r~Mercedes is dead", 5000, 1);// вывести сообщение на экран
  55.             fail_mission();     break;  }
  56.         };
  57.         ped->SetObjective(OBJECTIVE_LEAVE_CAR); // выйти из авто.
  58.         while(ped->m_bInVehicle) { this_thread::sleep_for(chrono::milliseconds(10)); };
  59.         destroy();// удалить маркер и сферу.
  60. };
  61.  

Вот исходник. Есть ли функция для проверки нахождения педа в точке с радиусом?

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 175
  • Репутация: +6/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #311 : Февраль 27, 2020, 09:17:22 am »
вот написал кастомную миссию "вечеринка" на lua.

есть функция ped->SetObjective(OBJECTIVE_SET_LEADER, player); пед следует за игроком.

но если мы выстрелим около педа, он перестанет за нами следовать. Скажите пожалуйста как это исправить?

 Уже почти год работаю над плагином, не могу никак его довести до ума. Очень буду рад если вы подскажите функции работы с камерой.

 Видео https://www.youtube.com/watch?v=tS_IdkQ11NE&feature=youtu.be

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 580
  • Репутация: +84/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #312 : Февраль 28, 2020, 10:49:50 am »
Ради чего столько мучений? По идее ты переписываешь стандартный скрипт на другом языке, вся последовательность команд должна быть та же самая. И что будет в результате, та же самая игра, только с вероятными проблемами. Какие функции с камерой подсказать? Ну вот например (в SDK аналогично):

Код: C++
  1. void CCamera::SetBehindPlayer() {
  2.         ((void(__thiscall *)(CCamera *))0x46BADE)(this);
  3. }
  4. void CCamera::Restore() {
  5.         ((void(__thiscall *)(CCamera *))0x46BC7D)(this);
  6. }
  7. void CCamera::SetPosition(CVector pos, CVector rotation) {
  8.         ((void(__thiscall *)(CCamera *, CVector *, CVector *))0x46BA72)(this, &pos, &rotation);
  9. }
  10. void CCamera::SetTarget(CVector point, signed int mode, signed int flag) {
  11.         ((void(__thiscall *)(CCamera *, CVector *, signed int, signed int))0x46A494)(this, &point, mode, flag);
  12. }
  13. void CCamera::SetRadius(float value, bool flag) {
  14.         this->nearClipPlain = value;
  15.         this->nearClipPlainOn = flag;
  16. }
  17.  
  18. auto Camera = (CCamera *)0x7E4688;
  19. // установка камеры
  20. Camera->SetRadius(0.02f, 1);
  21.  
  22. Camera->cams[Camera->activeCam].target.x = Camera->pos.x + (float)(-X1 * cos(U) + Y1 * sin(U));
  23. Camera->cams[Camera->activeCam].target.y = Camera->pos.y + (float)(-Y1 * cos(U) - X1 * sin(U));
  24. Camera->cams[Camera->activeCam].target.z = Camera->cams[Camera->activeCam].target.z + R0 * Mouse->Y / 100;
  25.  
  26. Camera->pos.x = Camera->cams[Camera->activeCam].target.x + R2*(float)(X1 * cos(U) - Y1 * sin(U));
  27. Camera->pos.y = Camera->cams[Camera->activeCam].target.y + R2*(float)(Y1 * cos(U) + X1 * sin(U));
  28. Camera->pos.z = Camera->pos.z - R0 * Mouse->Y / 100;
  29.  
  30.  
  31. Camera->SetPosition(Camera->pos, CVector(0, 0, 0));
  32. Camera->SetTarget(Camera->cams[Camera->activeCam].target, 2, 1);
  33.  
  34. // восстановление камеры
  35. Camera->SetRadius(0.9f, 0);
  36. Camera->Restore();
  37. Camera->SetBehindPlayer();
  38.  

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 175
  • Репутация: +6/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #313 : Март 09, 2020, 05:25:07 pm »
Спасибо большое за ответ уважаемый  xanser. Конечно мучений много, но это того стоит, например, миссии писать  легко. Ещё  можно как-то упростить, чтобы  ускорить написание кода скрипта.
Функции, которые вы написали, нет в "CCamera.h", может просто ещё не добавляли в репозиторий.
Скажите, пожалуйста, что делает эта функции?
Понимаю, что она принимает числа, где посмотреть какие именно ?
Код: Javascript
  1. CCamera* c;
  2.                                         c->SetNewPlayerWeaponMode(3,1,3);
  3. SetNearClipScript(float fNearClipScript);
  4.         void SetNewPlayerWeaponMode(short Mode, short MinZoom, short MaxZoom);
  5.         void SetZoomValueCamStringScript(short mode);
  6.         void SetZoomValueFollowPedScript(short mode);
  7.         void StartTransition(short mode);
  8.  

Допустим, установили камеру в нужных нам координатах, но нужно её развернуть по вертикальной оси или наклонить от себя или от себя, для хорошего операторского ракурса, какие функции для этого использовать?


Скажите, пожалуйста, функцию, которая проверяет игрок целиться в педа?

Почему-то не могу получить 5 или 6 звёзд розыска с помощью скриптовой команды , 
Command<COMMAND_ALTER_WANTED_LEVEL>(CWorld::PlayerInFocus, wanted); только максимум 4 звезды розыска можно получить.


Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 580
  • Репутация: +84/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #314 : Март 13, 2020, 04:33:27 pm »
Функции, которые вы написали, нет в "CCamera.h", может просто ещё не добавляли в репозиторий.

Поищи по адресам в CCamera.cpp, у меня другие названия.

Допустим, установили камеру в нужных нам координатах, но нужно её развернуть по вертикальной оси или наклонить от себя или от себя, для хорошего операторского ракурса, какие функции для этого использовать?

Функция 0x46A494 устанавливает точку, в которую камера смотрит.