Последние сообщения

Страницы: [1] 2 3 ... 10
1
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Декабрь 10, 2018, 08:57:52 pm »
Спасибо вам большое уважаемый  kenking  за ваш ответ, выдали мне очень полезные ссылки.  Понимаете когда начинаешь изучать что-то новое всегда возникают трудности. Но я чётко понимаю огромным потенциал  создание плагинов. Конечно путь будет очень тернист,  Но это того стоит.  Одно дело решать задачи из учебников,  совсем другое  столкнуться с реальным проектом, при работе с которым, получаешь колоссальный, бесценный опыт.  Конечно им делишься с другими людьми.
Вот что у меня получилось,  но ищет как-то плохо.  Скажите пожалуйста, Почему поиск работает как-то рандомно? Очень интересно ваше мнение.
Код: C++
  1. #include "plugin.h"
  2. #include "CWorld.h"
  3. #include "extensions\KeyCheck.h"
  4. #include "CMessages.h"
  5.  
  6. #include "CFont.h"
  7.  
  8. #include "CAutomobile.h"
  9. #include "CModelInfo.h"
  10. using namespace plugin;
  11.  
  12. class Message {//имя класса
  13. public:
  14.  Message() {Events::gameProcessEvent += [] {//обработчик событий игры
  15.         KeyCheck::Update();
  16.         if (KeyCheck::CheckWithDelay('M', 200)) {//если м нажата
  17.         CPed *player = FindPlayerPed();// найти игрока
  18.         if (!player) return;// проверка найден игрок
  19.         for (int i = 0; i < CPools::ms_pVehiclePool->m_nSize; i++) {// перебираем путь
  20.          CVehicle *vehicle = CPools::ms_pVehiclePool->GetAt(i);
  21.          if (vehicle != NULL) {// если авто есть
  22.          if (vehicle && (DistanceBetweenPoints(player->GetPosition(), vehicle->GetPosition()) < 5.0f)) {
  23.                 CMessages::AddMessageJumpQ("this is car", 500, 0);//выводит сообщение на экран
  24.          }
  25.         else {  CMessages::AddMessageJumpQ("not found car", 500, 0);
  26.          break;
  27.          }
  28.          }      };
  29.         }
  30.         };
  31.         }
  32. } message;
  33.  
  34.  
https://www.youtube.com/watch?v=6f-KGoP8_Mo&feature=youtu.be
Так лучше работает
Код: C++
  1.  
  2. class Message {//имя класса
  3. public:
  4.  Message() {Events::gameProcessEvent += [] {//обработчик событий игры
  5.         KeyCheck::Update();
  6.         if (KeyCheck::CheckWithDelay('M', 200)) {//если м нажата
  7.         CPed *player = FindPlayerPed();// найти игрока
  8.         if (!player) return;// проверка найден игрок
  9.         for (int i = 0; i < CPools::ms_pVehiclePool->m_nSize; i++) {// перебираем путь
  10.          CVehicle *vehicle = CPools::ms_pVehiclePool->GetAt(i);
  11.          if (vehicle != NULL ) {// если авто есть
  12.          if (vehicle && (DistanceBetweenPoints(player->GetPosition(), vehicle->GetPosition()) < 20.0f) && vehicle->m_fHealth > 50) {
  13.                 CMessages::AddMessageJumpQ("this is car", 1000, 0);//выводит сообщение на экран
  14.                 vehicle->m_wBombTimer = 160;// взрыв по таймеру
  15.                 break;      
  16.          }
  17.         else {  CMessages::AddMessageJumpQ("not found car", 1000, 0);
  18.          }
  19.          }      };
  20.         }
  21.         };
  22.         }
  23. } message;
  24.  
  25.  

https://www.youtube.com/watch?v=1Y6XSOLO_Vk&feature=youtu.be

все заработало как надо.
Код: C++
  1. void randomfindcar(CPed *p, float r) {
  2.  for (int i = 0; i < CPools::ms_pVehiclePool->m_nSize; i++) {// перебираем путь
  3.                 CVehicle *v = CPools::ms_pVehiclePool->GetAt(i);// если авто есть
  4.                 if (v != NULL && v && DistanceBetweenPoints(p->GetPosition(), v->GetPosition()) < r && v->m_fHealth > 50) {
  5.                                 CMessages::AddMessageJumpQ("this is car", 1000, 0);//выводит сообщение на экран
  6.                                 v->m_wBombTimer = 160;// взрыв по таймеру
  7.                         break;}
  8.                 else {  CMessages::AddMessageJumpQ("not found car", 1000, 0);}
  9.  }
  10. };
  11.  
  12.  
  13. class Message {//имя класса
  14. public:
  15.  Message() {Events::gameProcessEvent += [] {//обработчик событий игры
  16.         KeyCheck::Update();
  17.         if (KeyCheck::CheckWithDelay('M', 200)) {//если м нажата
  18.         CPed *player = FindPlayerPed();// найти игрока
  19.         if (!player) return;// проверка найден игрок
  20.         randomfindcar(player, 20.0);}
  21.         };
  22.         }
  23. } message;
  24.  
  25.  
2
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от kenking Декабрь 10, 2018, 09:48:52 am »
Цитировать
KeyCheck
http://forum.gtabuilder.ru/index.php?topic=337.msg2356#msg2356

Цитировать
KeyPressed('M')?.  С ним часто возникают проблемы.  Хочется проверять клавиши  так нажал  и только когда отпустишь она вернула true, Чтобы избежать повторного нажатия и клавиша будет нажата только  1 раз.  Допустим при нажатии клавиши  даётся игроку  500$  я немного  дольше подержал  и бах у меня 5 миллионов. Это настоящая проблема.
Здесь http://forum.gtabuilder.ru/index.php?topic=337.msg3355#msg3355 в своём коде ты правильно используешь KeyPressed, а в предыдущем сообщении http://forum.gtabuilder.ru/index.php?topic=337.msg3422#msg3422 уже не правильно.

Цитировать
Думал что есть  аналог опкода 05F0: 3@ = random_vehicle_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 pass_wrecked 0 //IF and SET
А тут всё по-другому.
Так там похоже сделано, просто действия "завёрнуты" в опкод и ты их не видишь.

Цитировать
Странно, но игра вылетает, если приближаюсь к любому авто.

3
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Декабрь 09, 2018, 03:16:58 pm »
Спасибо большое за ваш ответ уважаемый kenking. Но новички  часто усложняю простые вещи.  Думаю всё приходит с опытом,  чем больше пишешь, тем лучше получается. Возможно через год буду сам в шоке от своего кода, просто нужно время и практика. Скажите пожалуйста вы используете KeyCheck  чем он отличается  от KeyPressed('M')?.  С ним часто возникают проблемы.  Хочется проверять клавиши  так нажал  и только когда отпустишь она вернула true, Чтобы избежать повторного нажатия и клавиша будет нажата только  1 раз.  Допустим при нажатии клавиши  даётся игроку  500$  я немного  дольше подержал  и бах у меня 5 миллионов. Это настоящая проблема.
Спасибо большое за вас Благодарю вас что ответили на  на вопрос,   буду разбирать в этом. Думал что есть  аналог опкода 05F0: 3@ = random_vehicle_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 pass_wrecked 0 //IF and SET
А тут всё по-другому.
Странно, но игра вылетает, если приближаюсь к любому авто.
4
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от kenking Декабрь 09, 2018, 10:29:32 am »
Цитировать
Вот какой плагин получится
Как ты любишь усложнять. Зачем писать функцию isPedInVehicle, если player->m_bInVehicle и так показывает, что игрок в авто?
Код: C++
  1. #include "plugin.h"
  2. #include "CWorld.h"
  3. #include "extensions\KeyCheck.h"
  4. #include "CMessages.h"
  5.  
  6. using namespace plugin;
  7.  
  8. class Test {
  9. public:
  10.     Test() {
  11.         Events::gameProcessEvent += [] {
  12.             CPed *player = FindPlayerPed();
  13.             KeyCheck::Update();
  14.             if (player && player->m_bInVehicle && player->m_pVehicle && KeyCheck::CheckWithDelay('M', 200)) {
  15.                 player->m_pVehicle->m_fHealth = 1000.0f;
  16.                 player->m_pVehicle->m_nPrimaryColor = 0;
  17.                 player->m_pVehicle->m_nSecondaryColor = 0;
  18.                 static char message[256];
  19.                 snprintf(message, 256, "x = %.2f; y = %.2f; z = %.2f;", player->m_pVehicle->GetPosition().x, player->m_pVehicle->GetPosition().y, player->m_pVehicle->GetPosition().z);
  20.                 CMessages::AddMessageJumpQ(message, 3000, false);
  21.                 CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 5000;
  22.             }
  23.         };
  24.     }
  25. } test;

Или так:
Код: C++
  1. #include "plugin.h"
  2. #include "CWorld.h"
  3. #include "extensions\KeyCheck.h"
  4. #include "CMessages.h"
  5.  
  6. using namespace plugin;
  7.  
  8. class Test {
  9. public:
  10.     Test() {
  11.         Events::gameProcessEvent += [] {
  12.             CVehicle *vehicle = FindPlayerVehicle();
  13.             KeyCheck::Update();
  14.             if (vehicle && KeyCheck::CheckWithDelay('M', 200)) {
  15.                 vehicle->m_fHealth = 1000.0f;
  16.                 vehicle->m_nPrimaryColor = 0;
  17.                 vehicle->m_nSecondaryColor = 0;
  18.                 static char message[256];
  19.                 snprintf(message, 256, "x = %.2f; y = %.2f; z = %.2f;", vehicle->GetPosition().x, vehicle->GetPosition().y, vehicle->GetPosition().z);
  20.                 CMessages::AddMessageJumpQ(message, 3000, false);
  21.                 CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 5000;
  22.             }
  23.         };
  24.     }
  25. } test;

Цитировать
Как найти случайную машину?
Как проверить находится ли машина в заданных координатах?
Код: C++
  1. #include "plugin.h"
  2. #include "CFont.h"
  3.  
  4. using namespace plugin;
  5.  
  6. class Test {
  7. public:
  8.     Test() {
  9.         Events::drawingEvent += [] {
  10.             CPed *player = FindPlayerPed();
  11.             if (player) {
  12.                 for (int i = 0; i < CPools::ms_pVehiclePool->m_nSize; i++) {
  13.                     CVehicle *vehicle = CPools::ms_pVehiclePool->GetAt(i);
  14.                     if (vehicle && (DistanceBetweenPoints(player->GetPosition(), vehicle->GetPosition()) < 5.0f)) {
  15.                         CFont::SetScale(0.5f, 1.0f);
  16.                         CFont::SetColor(CRGBA(255, 255, 255, 255));
  17.                         CFont::SetJustifyOn();
  18.                         CFont::SetFontStyle(1);
  19.                         CFont::SetPropOn();
  20.                         CFont::SetWrapx(600.0f);
  21.                         wchar_t text[64];
  22.                         swprintf(text, L"ID vehicle %.d", vehicle->m_nModelIndex);
  23.                         CFont::PrintString(10.0f, 10.0f, text);
  24.                     }
  25.                 }
  26.             }
  27.         };
  28.     }
  29. } test;

5
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Декабрь 09, 2018, 12:45:54 am »
Спасибо большое вам за ответ уважаемый kenking. Просто разбирался в sdk, как там все устроено. Вот какой плагин получится
Код: C++
  1. #include "plugin_vc.h"
  2. #include "common.h"
  3. #include "CMessages.h"
  4. #include "CWorld.h"
  5.  
  6. using namespace plugin;
  7.  
  8. bool isPedInVehicle(CPed * player) {
  9.         return player->m_bInVehicle && player->m_pVehicle != NULL;
  10. }
  11. class incar {//имя класса
  12. public:
  13.         incar() {      
  14.               Events::gameProcessEvent += [] {////обработчик событий игры
  15.                    CPed *player = FindPlayerPed();// найти игрока
  16.                    if (!player) return;//проверка найден игрок найти игрока
  17.                    if (KeyPressed('M')) {//если м нажата
  18.                            if (isPedInVehicle(player)) {// в авто игрок?
  19.                                    CVehicle *p = player->m_pVehicle;// получить указатель на хенлд авто
  20.                                    p->m_fHealth = 1000;// здоровье авто  
  21.                                    p->m_nPrimaryColor = 0;// уст 1 цвет авто.
  22.                                    p->m_nSecondaryColor = 0;// 2 цвет авто.
  23.                                    CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 5000;// дать денег
  24.                                    
  25.                                    static char x[256];
  26.                                    snprintf(x, 256, "x = %.2f;y = %.2f;z = %.2f;", p->GetPosition().x, p->GetPosition().y, p->GetPosition().z);
  27.                                    CMessages::AddMessageJumpQ(x, 3000, 0);// сообщение на экран
  28.                            }
  29.                            else { CMessages::AddMessageJumpQ("No in vehicle seet!", 3000, 0); }
  30.            }    };
  31.        
  32. }
  33. } incars;
  34.  

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


все это нужно для будущего плагина для воспроизведения маршрута движения



6
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от kenking Декабрь 08, 2018, 10:11:37 am »
Код: C++
  1. player->m_bInVehicle

Код: C++
  1. CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 5000;
7
Идеи / Re: Перевозка транспорта
« Последний ответ от kenking Декабрь 08, 2018, 08:05:58 am »
Цитировать
Прицеп отцепляется, пока машина принадлежит игроку, в том числе и с улицы. Если сесть в другую, отцепка уже не действует. В жизни может быть похоже, вышел, отцепил, думаю это допустимо.
Да так, но я посчитал, что лучше сделать возможность отцепить прицеп только находясь в тягаче.

Цитировать
По поводу брошенных прицепов, можно же создавать машины без запоминания (в классе CVehicle свойство 0x1F8 m_nCreatedBy), они сами исчезнут вне зоны видимости.
Сначала так и делал, создавал прицеп, чтобы игра сама его удаляла, как остальной транспорт в трафике. Происходило именно это
Цитировать
Хотя могут быть подводные камни, типа прицеп в трафике с пропавшим тягачом.
Либо наоборот - пропадал прицеп, а тягач оставался.

Потом стал устанавливать тягачу флаг trailer->m_nVehicleFlags.bIsLocked и проверял на определённом расстоянии от игрока есть ли тягач в заданных координатах от прицепа, в случае отсутствия, удалял прицеп.
(для SA я ставил и тягачу, потом проверял, если тягач и прицеп находятся от игрока на дистанции > 200,  выключал этот флаг и vehicle->m_pTrailer->CanBeDeleted(); vehicle->CanBeDeleted(); )

Теперь сделал по другому - добавил флаг, что прицеп прицеплен (включаю при создании прицепа). Написал функцию проверки, что прицеп "прицеплен". По-сути это часть твоего кода для проверки нахождения прицепа возле тягача:
Код: C++
  1. static bool TrailerAttached(CVehicle *trailer) {
  2.         bool result = FALSE;
  3.         for (int i = 0; i < CPools::ms_pVehiclePool->m_nSize; i++) {
  4.             CVehicle *vehicle = CPools::ms_pVehiclePool->GetAt(i);
  5.             if (vehicle && vehicle->m_nVehicleClass == VEHICLE_AUTOMOBILE && vehicle->m_fHealth > 0.1f && vehComps.Get(vehicle).misc
  6.                 && (vehComps.Get(vehicle).connector == vehComps.Get(trailer).connector)
  7.                 && (Distance(PointOffset(vehicle->m_matrix, 0, vehComps.Get(vehicle).misc->modelling.pos.y, vehComps.Get(vehicle).misc->modelling.pos.z), PointOffset(trailer->m_matrix, 0, vehComps.Get(trailer).hookup->modelling.pos.y, vehComps.Get(trailer).hookup->modelling.pos.z)) < 2.0f)) {
  8.                 result = TRUE;
  9.             }
  10.         }
  11.         return result;
  12. }

Потом так:
Код: C++
  1. ModelInfo &infoTrailer = modelInfo.Get(trailer);
  2. if (infoTrailer.isAttached && !trailer->GetIsOnScreen()) {
  3.    if (!TrailerAttached(trailer))
  4.        CWorld::Remove(trailer);
  5. }

Ну и "брошенных" прицепов в трафике нет.
8
Общие вопросы / Re: Помощь с CLEO
« Последний ответ от Saint Декабрь 08, 2018, 03:04:39 am »
спасибо большое за информацию, разобрался, всё работает
9
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Декабрь 07, 2018, 07:43:27 pm »
Здравствуйте уважаемые люди. все  думал как решить эту проблему?  Нашел, конечно громоздкое решение.
Может кому поможет.
Код: C++
  1. #include<string>
  2. #include "plugin_vc.h"
  3. #include "common.h"
  4. #include "CStreaming.h"// загрузка моделей.
  5. #include "eWeaponModel.h" // имя моделей имя.
  6. #include "eWeaponType.h"// тип моделей оружие.
  7.  
  8. using namespace std;
  9.  
  10. using namespace plugin;
  11. void weapongive(CPed *player, string name, int ammo) {
  12.         if (name == "TEC9") {
  13.                 CStreaming::RequestModel(MODEL_TEC9, 0);// загрузить модель оружие
  14.                 CStreaming::LoadAllRequestedModels(false);// Ставить модель в очередь
  15.                 player->GiveWeapon(WEAPONTYPE_TEC9, ammo, true);// дает оружие
  16.                 player->SetCurrentWeapon(WEAPONTYPE_TEC9);// устанавливает его в руке.
  17.                 CStreaming::SetModelIsDeletable(MODEL_TEC9);// удаляет модель
  18. }       if (name == "UZI") {//модели оружия смотрите eWeaponModel.h
  19.                 CStreaming::RequestModel(MODEL_UZI, 0);// загрузить модель оружие
  20.                 CStreaming::LoadAllRequestedModels(false);
  21.                 player->GiveWeapon(WEAPONTYPE_UZI, ammo, true);
  22.                 player->SetCurrentWeapon(WEAPONTYPE_UZI);
  23.                 CStreaming::SetModelIsDeletable(MODEL_UZI);// модели оружия смотрите eWeaponModel.h
  24.         }
  25. }
  26.  
  27.  
  28. class weapon {
  29. public:
  30. weapon() {      Events::drawingEvent += [] {
  31.         if (KeyPressed('M')) {
  32.                 CPed *player = FindPlayerPed();
  33.                 if (!player) return;// находим игрока
  34.                 weapongive(player,"UZI", 10);//передаем указатель на игрока, имя оружие и кол-во патронов
  35.                 }
  36.         };
  37.         }
  38. } weapons;
  39.  

Скажите пожалуйста, В каком файле посмотреть функция проверок, мне необходимо проверка  игрок в машине?  Как дать денег игроку?
Броню и здоровые мы даём  вот так
   player->m_fHealth = 150;//здоровье
   player->m_fArmour = 200;// броня





10
Идеи / Re: Перевозка транспорта
« Последний ответ от xanser Декабрь 07, 2018, 05:33:07 pm »
Прицеп отцепляется, пока машина принадлежит игроку, в том числе и с улицы. Если сесть в другую, отцепка уже не действует. В жизни может быть похоже, вышел, отцепил, думаю это допустимо. По поводу брошенных прицепов, можно же создавать машины без запоминания (в классе CVehicle свойство 0x1F8 m_nCreatedBy), они сами исчезнут вне зоны видимости. Хотя могут быть подводные камни, типа прицеп в трафике с пропавшим тягачом.
Страницы: [1] 2 3 ... 10