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

Страницы: [1] 2 3 ... 10
1
Общие вопросы / Re: Траектория движения направленного освещения
« Последний ответ от Shagg_E Август 19, 2019, 12:14:17 pm »
Попробуй этот плагин.
Это очень-очень WIP, но может сработать. Тут(помимо прочего мусора) удаляется стандартное освещение от солнца и создается отдельный Pointlight(точечный источник света, как у светофоров, фар, огня и т.д.), на удалении 5000м от центра карты(ты можешь выставить больше, если сработает).
Но чтобы такой далекий источник сработал - нужно было переписать немного функции CPointLightsAddLight и GenerateLightsAffectingObject(не только по этой причине - хочу еще затенение от препятствий запилить, пока всё криво).
2
Общие вопросы / Траектория движения направленного освещения
« Последний ответ от aleks926820 Август 19, 2019, 01:18:13 am »
Давненько хотелось видеть в игре другую траекторию движения солнца - в частности захотелось в вайсовской криминалке реализовать траекторию движения солнца как в GTA SA .
Поковырявшись в памяти удалось её немного "изменить" - солнце восходит теперь не на севере а на юге (почти как в СА).
https://www.youtube.com/watch?v=64ig3PsuJ7s
Вылез "косяк" с освещением - свет от солнца по-прежнему идет,так скажем, с севера.
Но потом посмотрев повнимательнее функцию CCoronas::DoSunAndMoon, понял что движение спрайта солнца никак не зависит от движения направленного источника света. Так вот у меня вопрос - есть ли у directional light какая-то траектория ? Где её искать ? Хотелось бы исправить этот "косяк" с освещением.
3
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от kenking Август 18, 2019, 03:08:20 pm »
Цитировать
только у авто модели MODEL_ENFORCER капот открывается в обратную сторону MODEL_ENFORCER
На модели влаг выставлен неверно. В файле handling.cfg найди строчку ENFORCER и замени 3 цифру с конца 27 на 23
4
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Август 18, 2019, 11:49:01 am »
Здравствуйте, всем. Удалось реализовать  открытия дверей автомобиля в lualoader. только у авто модели MODEL_ENFORCER капот открывается в обратную сторону MODEL_ENFORCER https://www.youtube.com/watch?v=Lb5UNBe_QtQ&t=2s ,https://vk.com/gtabuilder?w=wall-56513456_517

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

 
Код: Text
  1. const float ACTION_TIME_STEP = 0.05f;
  2. const unsigned int TIME_FOR_KEYPRESS = 500;
  3. struct Doorse {
  4.         static int componentByDoorId[6]; // Таблица перевода eDoors в Id компонента
  5.         static int m_nLastTimeWhenAnyActionWasEnabled; // Последнее время запуска события
  6.         enum eDoorEventType { // Тип события
  7.                 DOOR_EVENT_OPEN, DOOR_EVENT_CLOSE
  8.         };
  9.  
  10.         struct DoorEvent { // Класс события
  11.                 bool m_active;  eDoorEventType m_type;  float m_openingState;
  12.  
  13.                 DoorEvent() { m_active = false; m_type = DOOR_EVENT_CLOSE; }
  14.         };
  15.  
  16.         struct VehicleDoors {
  17.                 DoorEvent events[6]; // События для всех 6 дверей
  18.                 VehicleDoors(CVehicle*) {}
  19.         };
  20. };
  21. struct DoorsExample {
  22.         static int componentByDoorId[6]; // Таблица перевода eDoors в Id компонента
  23.         static int m_nLastTimeWhenAnyActionWasEnabled; // Последнее время запуска события
  24.  
  25.         enum eDoorEventType { // Тип события
  26.                 DOOR_EVENT_OPEN, DOOR_EVENT_CLOSE
  27.         };
  28.  
  29.         struct DoorEvent { // Класс события
  30.                 bool m_active;  eDoorEventType m_type;  float m_openingState;
  31.                 DoorEvent() { m_active = false; m_type = DOOR_EVENT_CLOSE; }
  32.         };
  33.  
  34.         struct VehicleDoors {
  35.                 DoorEvent events[6]; // События для всех 6 дверей
  36.                 VehicleDoors(CVehicle*) {}
  37.         };
  38.  
  39.         static VehicleExtendedData<VehicleDoors> VehDoors; // Наше расширение
  40.  
  41.         static void EnableDoorEvent(CAutomobile* automobile, eDoors doorId) { // Включить событие двери
  42.                 if (automobile->IsComponentPresent(componentByDoorId[doorId])) {
  43.                         CDamageManager* p;
  44.                         if (p->GetDoorStatus(doorId) != DAMSTATE_NOTPRESENT) {
  45.                                 DoorEvent& event = VehDoors.Get(automobile).events[doorId];
  46.                                 if (event.m_type == DOOR_EVENT_OPEN)
  47.                                         event.m_type = DOOR_EVENT_CLOSE; // Если последнее событие - открытие, то закрываем
  48.                                 else
  49.                                         event.m_type = DOOR_EVENT_OPEN; // Если последнее событие закрытие - то открываем
  50.                                 event.m_active = true; // Включаем обработку
  51.                                 m_nLastTimeWhenAnyActionWasEnabled = CTimer::m_snTimeInMilliseconds;
  52.                         }
  53.                 }
  54.         };
  55.  
  56.         static void ProcessDoors(CVehicle* vehicle) { // Обработка событий для конкретного авто
  57.                 if (vehicle->m_nVehicleClass == VEHICLE_AUTOMOBILE) {
  58.                         CAutomobile* automobile = reinterpret_cast<CAutomobile*>(vehicle);
  59.                         for (unsigned int i = 0; i < 6; i++) { // Обрабатываем все события
  60.                                 eDoors doorId = static_cast<eDoors>(i);
  61.                                 DoorEvent& event = VehDoors.Get(automobile).events[doorId];
  62.                                 if (event.m_active) { // Если событие активно
  63.                                         if (event.m_type == DOOR_EVENT_OPEN) {
  64.                                                 event.m_openingState += ACTION_TIME_STEP;
  65.                                                 if (event.m_openingState > 1.0f) { // Если полностью открыли
  66.                                                         event.m_active = false; // Отключаем обработку
  67.                                                         automobile->OpenDoor(componentByDoorId[doorId], doorId, 1.0f); // Полностью открываем
  68.                                                         event.m_openingState = 1.0f;
  69.                                                 }
  70.                                                 else
  71.                                                         automobile->OpenDoor(componentByDoorId[doorId], doorId, event.m_openingState);
  72.                                         }
  73.                                         else {
  74.                                                 event.m_openingState -= ACTION_TIME_STEP;
  75.                                                 if (event.m_openingState < 0.0f) { // Если полностью открыли
  76.                                                         event.m_active = false; // Отключаем обработку
  77.                                                         automobile->OpenDoor(componentByDoorId[doorId], doorId, 0.0f); // Полностью открываем
  78.                                                         event.m_openingState = 0.0f;
  79.                                                 }
  80.                                                 else
  81.                                                         automobile->OpenDoor(componentByDoorId[doorId], doorId, event.m_openingState);
  82.                                         }
  83.                                 }
  84.                         }
  85.                 }
  86.         };
  87. };
  88. int DoorsExample::componentByDoorId[6] = { CAR_BONNET, CAR_BOOT, CAR_DOOR_LF, CAR_DOOR_RF, CAR_DOOR_LR, CAR_DOOR_RR };
  89. int DoorsExample::m_nLastTimeWhenAnyActionWasEnabled = 0;
  90. VehicleExtendedData<DoorsExample::VehicleDoors> DoorsExample::VehDoors;
  91. class Message {//имя класса
  92. public: Message() {
  93.         Events::gameProcessEvent += [] {//обработчик событий игры
  94.                 Events::vehicleRenderEvent += DoorsExample::ProcessDoors; // Тут обрабатываем события, а также выключаем их
  95.                 CPed* player = FindPlayerPed();// найти игрока.
  96.                 if (!player) return;// проверка найден игрок
  97.                 static unsigned int time = 0;// обнулить таймер
  98.  
  99.                 if (reload == false) {
  100.                         if (CTimer::m_snTimeInMilliseconds - time > 500) {
  101.                                 this_thread::sleep_for(chrono::milliseconds(600));// задержка
  102.                                 time = 0;// обнулить таймер
  103.                                 reload = true;// флаг, что уже запущен поток.
  104.                         }
  105.                         thread th(second, std::ref(reload)); th.detach();// независимый поток.        
  106.                 };
  107.  
  108.         };
  109. }
  110. } message;
  111. int opendoorcar(lua_State* L) { // открыть дверь авто.
  112.         try {
  113.                 if (LUA_TUSERDATA == lua_type(L, -2) && LUA_TNUMBER == lua_type(L, -1)) {// указатель на авто.
  114.                         CVehicle* b = (CVehicle*)Userdata::get<CVehicle>(L, 1, false);// получить указатель на авто.
  115.                         CAutomobile* automobile = reinterpret_cast<CAutomobile*>(b); // опять же, приведение типов. Т.к. мы будет юзать damageManager, нам нужно убедиться, что транспорт - это автомобиль (CAutomobile)
  116.                        
  117.                         int door = Stack<int>::get(L, 2);
  118.                         switch (door)           {
  119.                         case 0: {DoorsExample::EnableDoorEvent(automobile, BONNET); // 0 капот
  120.                                 break;   }
  121.                         case 1: {DoorsExample::EnableDoorEvent(automobile, BOOT); // 1 багажник
  122.                                 break;   }
  123.                 case 2:  { DoorsExample::EnableDoorEvent(automobile, DOOR_FRONT_LEFT); // 2 левая передняя дверь
  124.                         break;   }
  125.                 case 3: {DoorsExample::EnableDoorEvent(automobile, DOOR_FRONT_RIGHT); // 3 правая передняя дверь
  126.                         break;   }
  127.                 case 4: {DoorsExample::EnableDoorEvent(automobile, DOOR_REAR_LEFT); // 4 левая задняя дверь
  128.                         break;   }
  129.                         case 5: {DoorsExample::EnableDoorEvent(automobile, DOOR_REAR_RIGHT); // 5 правая задняя дверь
  130.                         break; }
  131.                  default:{}
  132.                         }
  133.                         return 0;
  134.                 }
  135.                 else { throw "bad argument in function opendoorcar option of the vehicle"; }
  136.         }
  137.         catch (const char* x) { writelog(x); }
  138.         return 0;
  139. };
  140.  
5
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Август 13, 2019, 11:21:00 am »
Здравствуйте,  уважаемый kenking. Спасибо за ссылки.  Компоненты авто( капот,  багажник, двери) работаю.  Думаю, как это встроит в lua.
 Только в одной строке  выдает ошибку, ее пришлось закомментировать
Код: C++
  1.  
  2.                 //if (automobile->stDamage.GetDoorStatus(doorId) != DAMSTATE_NOTPRESENT) {
  3.                                 DoorEvent& event = VehDoors.Get(automobile).events[doorId];
  4.                                 if (event.m_type == DOOR_EVENT_OPEN)
  5.                                         event.m_type = DOOR_EVENT_CLOSE; // Если последнее событие - открытие, то закрываем
  6.                                 else
  7.                                         event.m_type = DOOR_EVENT_OPEN; // Если последнее событие закрытие - то открываем
  8.                                 event.m_active = true; // Включаем обработку
  9.                                 m_nLastTimeWhenAnyActionWasEnabled = CTimer::m_snTimeInMilliseconds;
  10.                         //}
  11.  

хотя функция есть  // Converted from thiscall uint CDamageManager::GetDoorStatus(eDoors door) 0x5A9810
unsigned int CDamageManager::GetDoorStatus(eDoors door) {
    return plugin::CallMethodAndReturn<unsigned int, 0x5A9810, CDamageManager *, eDoors>(this, door);
} здесь https://github.com/DK22Pac/plugin-sdk/blob/b4b8841561d4d8742b0e15a16d5096e1b56b31c2/plugin_vc/game_vc/CDamageManager.cpp

Может ее неправильно подключил. заново собрал sdk, обновил. он прогрессирует.

добавил в свой lua плагин пару новых функций, благодаря SDK Plugin.


6
Дополню чуть-чуть. Эти наборы координат называются KeepWaterOutVertices
Код: C++
  1. .bss:0077F850  ; RxObjSpace3DVertex KeepWaterOutVertices[4]
7
Делюсь информацией по адресам координат прямоугольника, который задает "непромокаемость" салона лодки, вода в этом месте не рендерится, и салон может погружаться ниже уровня воды без подтопления. При замене модели лодки этот прямоугольник остается стандартным и портит картину. Вот адреса координат для замены, по 4 координаты x, y, z для каждой лодки. Для лодки 202 координат 8, там задано два прямоугольника. Для лодки 223 координат я не обнаружил. Если скриптом менять, то например замена первой точки 136 лодки выглядит так:

Код: Text
  1. 05DF: write_memory 0x5A5166 size 4 value -1.3 virtual_protect 1  // x
  2. 05DF: write_memory 0x5A5170 size 4 value -1.016 virtual_protect 1  // y
  3. 05DF: write_memory 0x5A517A size 4 value 0.51 virtual_protect 1  // z

// 136
0x5A5166   -1.3
0x5A5170   -1.016
0x5A517A   0.51
0x5A5184   1.3
0x5A518E   -1.016
0x5A5198   0.51
0x5A51A2   -1.3
0x5A51AC   -2.832
0x5A51B6   0.51
0x5A51C0   1.3
0x5A51CA   -2.832
0x5A51D4   0.51
// 160
0x5A4FE6     -1.45
0x5A4FF0     1.9
0x5A4FFA     0.96
0x5A5004     1.45
0x5A500E     1.9
0x5A5018     0.96
0x5A5022     -1.45
0x5A502C     -3.75
0x5A5036     0.96
0x5A5040     1.45
0x5A504A     -3.75
0x5A5054     0.96
// 176
0x5A51E6   -1.222
0x5A51F0   2.004
0x5A51FA   1.409
0x5A5204   1.222
0x5A520E   2.004
0x5A5218   1.409
0x5A5222   -1.24
0x5A522C   -1.367
0x5A5236   0.846
0x5A5240   1.24
0x5A524A   -1.367
0x5A5254   0.846
// 182
0x5A4EE6   -1.15
0x5A4EF0   3.61
0x5A4EFA   1.03
0x5A4F04   1.15
0x5A4F0E   3.61
0x5A4F18   1.03
0x5A4F22   -1.15
0x5A4F2C   0.06
0x5A4F36   1.03
0x5A4F40   1.15
0x5A4F4A   0.06
0x5A4F54   1.03
// 183
0x5A4F66   -1.9
0x5A4F70   2.83
0x5A4F7A   1.0
0x5A4F84   1.9
0x5A4F8E   2.83
0x5A4F98   1.0
0x5A4FA2   -1.66
0x5A4FAC   -4.48
0x5A4FB6   0.83
0x5A4FC0   1.66
0x5A4FCA   -4.48
0x5A4FD4   0.83
// 184
0x5A52E6   -1.886
0x5A52F0   -2.347
0x5A52FA   0.787
0x5A5304   1.886
0x5A530E   -2.347
0x5A5318   0.787
0x5A5322   -1.886
0x5A532C   -4.67
0x5A5336   0.842
0x5A5340   1.886
0x5A534A   -4.67
0x5A5354   0.842
// 202
0x5A50E6   -0.663
0x5A50F0   3.565
0x5A50FA   0.382
0x5A5104   0.663
0x5A510E   3.565
0x5A5118   0.382
0x5A5122   -1.087
0x5A512C   0.831
0x5A5136   0.381
0x5A5140   1.087
0x5A514A   0.831
0x5A5154   0.381
// 202 - 2
0x5A5447   -1.087
0x5A5451   0.831
0x5A545B   0.381
0x5A5465   1.087
0x5A546F   0.831
0x5A5479   0.381
0x5A5483   -1.097
0x5A548D   -2.977
0x5A5497   0.381
0x5A54A1   1.097
0x5A54AB   -2.977
0x5A54B5   0.381
// 203
0x5A5066   -0.797
0x5A5070   1.641
0x5A507A   0.573
0x5A5084   0.797
0x5A508E   1.641
0x5A5098   0.573
0x5A50A2   -0.865
0x5A50AC   -1.444
0x5A50B6   0.509
0x5A50C0   0.865
0x5A50CA   -1.444
0x5A50D4    0.509
// 214
0x5A5266   -1.246
0x5A5270   -1.373
0x5A527A   0.787
0x5A5284   1.246
0x5A528E   -1.373
0x5A5298   0.787
0x5A52A2   -1.023
0x5A52AC   -5.322
0x5A52B6   0.787
0x5A52C0   1.023
0x5A52CA   -5.322
0x5A52D4   0.787
8
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от kenking Август 01, 2019, 12:10:13 pm »
Цитировать
Скажите, пожалуйста, с помощью какой функции можно открыть двери и капот, багажник.
1) Скрипт вот https://gta.com.ua/file_details.phtml?id=2832
2) В этой теме DK показывал код такого плагина для SA. Я переписал для VC https://github.com/kenkingGitHub/GTA-Projects/blob/master/VC_OpenComponent/VC_OpenComponent.cpp
(там только под более раннюю версию sdk, #include надо заменить)
9
Справочная информация / Re: Нижний цвет неба
« Последний ответ от xanser Август 01, 2019, 11:46:42 am »
Дополнение:
Есть предел прорисовки верхнего цвета неба на высоте 3000.0. Если нужно разместить локацию выше с сохранением привычного отображения цвета, то это меняется в адресе 0x69950C. Актуально для "параллельных миров". Может быть наоборот захочется увидеть другое небо без мелькающих остатков синего, тогда стоит отключить вызов функции 0x4A600B
10
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Август 01, 2019, 08:45:47 am »
спасибо Вам большое уважаемый kenking. Что Вы помогли мне разобраться с флагами миссий. их добавил в lua.  Смог написать первую  простую миссию  https://www.youtube.com/watch?v=z6BFxEsu4W4 https://vk.com/gtabuilder?w=wall-56513456_515

конечно, все уже неплохо для начало. но нужна многопоточность, что упростить этот процесс. будем работать.
Скажите, пожалуйста, с помощью какой функции можно открыть двери и капот, багажник. помню в cleo писали типа.

Код: C++
  1. :left_front_door
  2. 05E7: 10@ = car 10@ struct
  3. 0085: 11@ = 10@
  4. 05E4: call_function_method 6@ struct 11@ num_params 1 pop 0 0@ {1..19} 2@ // IsComponentPresent
  5. if
  6. 2@ == 1
  7. then
  8. 0085: 3@ = 10@
  9. 3@ += 0x2A0 // CDamageManager
  10. 05E4: call_function_method 7@ struct 3@ num_params 1 pop 0 1@ {0..5} 4@ // GetComponnetStatus
  11. if
  12. 4@ <> 3
  13. then
  14. for 12@ = 0.0 TO 1.0 step 0.1
  15. 05E3: call_function_method 9@ struct 10@ num_params 3 pop 0 12@ 1@ 0@ {1..19} // CAutomobile__OpenDoor ???
  16. wait 0
  17. end
  18. 05E3: call_function_method 9@ struct 10@ num_params 3 pop 0 12@ 1@ 0@ {1..19} // CAutomobile__OpenDoor ???
  19. end
  20. end
  21. return
  22.  

там было очень много тонкостей, транспорт должен быть авто и не гольф машиной. некоторые машины были двух дверными, при попытке открыть заднюю левую дверь, был вылет, также двери могло и быть.
Страницы: [1] 2 3 ... 10