Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - kenking

Страницы: [1] 2 3 ... 15
1
Цитировать
Вряд ли кто-то будет менять флаг в файле при использовании плагина. возможно, есть способ обойти его.
Никто не играет со стандартными моделями давно. А в заменяемых моделях авторы указывают свои настройки, где это исправлено.   

Цитировать
Потоки работают, но есть сильное ограничение, нельзя передать указатели на педа, авто и объект. Дело в том, что у запуска функции в новом потоке есть очень сильное ограничение. Мы не можем передать указатели, потому что между состояниями нельзя передавать объекты, которые занимают память. Я думал, как это ограничение обойти? Решил, указатель преобразовать в строку, передать в новый поток, потом эту строку передать в функцию, которая обратно конвертирует строку в числовой указатель и ищет её в пуле. Но, опять произошла проблема, адреса в пуле являются не разыминованные, в отличие от числового указателя. Поэтому поиск никогда не даёт результатов. Буду очень рад, если Вы подскажите как решить эту проблему.
Вообще не понял, что ты хочешь сделать.

2
Цитировать
может можно обойти этот баг, без внесение изменений в файл.
Это просто ошибка разработчиков. Без исправления этого флага не обойдёшься. В чём проблема заменить одну цифру?

Цитировать
которая возвращает булевое значение подобран ли пикап? как-то работает некорректно. Может что-то напутал
С пикапами я не работал. Посмотрел в main, эта проверка вроде для другого пикапа, созданного опкодом 0517

Цитировать
Пытался написать гоночный чекпойнт, есть идея написать миссию гонку
Думаю, что это тоже надо смотреть в main.

Цитировать
как воспроизвести звуковой файл
Код: C++
  1. #include "plugin.h"
  2. #include "extensions\ScriptCommands.h"
  3. #include "eScriptCommands.h"
  4. #include "extensions\KeyCheck.h"
  5.  
  6. using namespace plugin;
  7.  
  8. class Test {
  9. public:
  10.     enum eAudioState { STATE_LOAD, STATE_PLAY, STATE_CLEAR };
  11.     static eAudioState m_currentState;
  12.    
  13.     Test() {
  14.         Events::gameProcessEvent += [] {
  15.             switch (m_currentState) {
  16.             case STATE_LOAD:
  17.                 KeyCheck::Update();
  18.                 if (KeyCheck::CheckWithDelay('M', 2000)) {
  19.                     Command<COMMAND_LOAD_MISSION_AUDIO>(1, "FIN_1a");
  20.                     m_currentState = STATE_PLAY;
  21.                 }
  22.                 break;
  23.             case STATE_PLAY:
  24.                 if (Command<COMMAND_HAS_MISSION_AUDIO_LOADED>(1)) {
  25.                     Command<COMMAND_PLAY_MISSION_AUDIO>(1);
  26.                     m_currentState = STATE_CLEAR;
  27.                 }
  28.                 break;
  29.             case STATE_CLEAR:
  30.                 if (Command<COMMAND_HAS_MISSION_AUDIO_FINISHED>(1)) {
  31.                     Command<COMMAND_CLEAR_MISSION_AUDIO>(1);
  32.                     m_currentState = STATE_LOAD;
  33.                 }
  34.                 break;
  35.             }
  36.         };
  37.     }
  38. } test;
  39.  
  40. Test::eAudioState Test::m_currentState = STATE_LOAD;



3
Цитировать
только у авто модели MODEL_ENFORCER капот открывается в обратную сторону MODEL_ENFORCER
На модели влаг выставлен неверно. В файле handling.cfg найди строчку ENFORCER и замени 3 цифру с конца 27 на 23

4
Дополню чуть-чуть. Эти наборы координат называются KeepWaterOutVertices
Код: C++
  1. .bss:0077F850  ; RxObjSpace3DVertex KeepWaterOutVertices[4]

5
Цитировать
Скажите, пожалуйста, с помощью какой функции можно открыть двери и капот, багажник.
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 надо заменить)

6
Флаг миссии устанавливается так:
Код: C++
  1. CTheScripts::ScriptSpace[CTheScripts::OnAMissionFlag] = 1
Переменная CTheScripts::OnAMissionFlag для VC в sdk пока не добавлена
Пока можно так:
Код: C++
  1. #include "plugin.h"
  2. #include "CTheScripts.h"
  3. #include "extensions\KeyCheck.h"
  4.  
  5. unsigned int &OnAMissionFlag = *(unsigned int *)0x978748;
  6.  
  7. using namespace plugin;
  8.  
  9. class Test {
  10. public:
  11.     Test() {
  12.         Events::drawingEvent += [] {
  13.             gamefont::Print({
  14.                 Format("OnAMissionFlag = %d", CTheScripts::ScriptSpace[OnAMissionFlag])
  15.             }, 10, 200, 1, FONT_DEFAULT, 0.75f, 0.75f, color::Orange);
  16.            
  17.             CPed *player = FindPlayerPed();
  18.             if (player) {
  19.                 KeyCheck::Update();
  20.                 if (KeyCheck::CheckWithDelay('M', 1000)) {
  21.                     if (CTheScripts::ScriptSpace[OnAMissionFlag])
  22.                         CTheScripts::ScriptSpace[OnAMissionFlag] = 0;
  23.                     else
  24.                         CTheScripts::ScriptSpace[OnAMissionFlag] = 1;
  25.                 }
  26.             }
  27.         };
  28.     }
  29. } test;
Цитировать
как проверить флаг миссии? И установить его, что миссия запущена.
Перед запуском своей миссии проверяешь значение CTheScripts::ScriptSpace[OnAMissionFlag], если оно равно 0, никакая миссия в данным момент не запущена. Запускаешь свою миссию, устанавливаешь значение CTheScripts::ScriptSpace[OnAMissionFlag] в 1. Миссия запущена. Когда миссия заканчивается, ставишь CTheScripts::ScriptSpace[OnAMissionFlag] в 0.

7
Общие вопросы / Re: Экстры транспорта
« : Июль 12, 2019, 03:15:47 pm »
Цитировать
Но обратный вариант слотов 1f103432 проблем не выявил, рекомендую его. Возможно перестановкой я намного снизил вероятность появления пустышки, хорошо если бы исключил, но пока она мне не попалась.
Прописывать постоянные экстры в первый слот, а необязательные дополнительные во второй или наоборот - это без разницы. Если попадается пустышка в слоте с обязательным нахождением одной из первых двух экстр, то пропиши вместо f первую экстру на эту позицию 11103432.

Цитировать
В дополнение скажу, что есть еще такой момент. Например нужно создать исключительную машину без экстры или с 6 экстрой, это можно сделать принудительно скриптом/кодом даже при 4fff, но кажется сбивается правило 4fff и в трафике начинают ездить пустышки, с этим надо быть осторожнее.
Надо перед установкой экстры на создаваемую машину, считать значение переменной (два значения) CVehicleModelInfo::ms_compsToUse[2]. Установить свой вариант экстры на модель, создать машину и записать в эту переменную значение, которое там было. Думаю это решит вопрос.

8
Общие вопросы / Re: Экстры транспорта
« : Июль 12, 2019, 10:03:58 am »
Проверил сейчас на модели caddy. У неё 3 экстры слева, 3 справа. Очень удобно для тестов. Для "чистоты" тестов написал код, выводящий на экран номера экстр в слотах на транспорте возле игрока и спаунил эту модель.
Действительно, при настройке 1f10 не получается всегда нужного сочетания. Думаю, что дело в том, что во второй слот при такой настройке выбирается экстра выборочно из всех имеющихся вариантов (включая отсутствие второй экстры), поскольку не задан конкретный режим для второго слота.
Значит надо задать для второго слота своё правило.
Исходя из этого:
1) 35431f10 экстра 3 здесь получается исключается, можно её прописать во второй слот вместо любой из 4-6 или в первый, тогда получается настройка как для второго варианта
2) 35431210 прям идеальная настройка для этого варианта
3) здесь - да вариант 4fff для 5 экстр, либо изменять функцию, если 6 экстра какие-либо мелкие детальки или, например, груз в кузов, то можно эту экстру закинуть во второй слот с типом рандомного появления
3ff54fff - правда такой вариант я не тестировал

9
Общие вопросы / Re: Экстры транспорта
« : Июль 11, 2019, 12:53:29 pm »
Цитировать
По моим тестам получается, что экстру 1 в трафике не увидеть.
Надо поменять расклад экстр в наборе 30123345 на такой 31203345, экстра 1 должна появиться.

Цитировать
Выложу сюда результаты своих многочисленных тестов для вайса
В остальном всё соответствует и моим тестам.

Цитировать
Тип 4 (Comprules 4fff) - 1, 2, 3, 4, 5. Никогда не проявляется экстра 6.
В самой функции такое ограничение для этого типа.

10
Код: C++
  1. #include "plugin.h"
  2. #include "CMessages.h"
  3. #include "CWorld.h"
  4. #include "extensions\ScriptCommands.h"
  5. #include "eScriptCommands.h"
  6. #include "extensions\KeyCheck.h"
  7.  
  8. using namespace plugin;
  9.  
  10. class Test {
  11. public:
  12.     Test() {
  13.  
  14.         Events::gameProcessEvent += [] {
  15.             CPed *player = FindPlayerPed();
  16.             if (player) {
  17.                 CVector point = { 241.6f, -1283.0f, 10.9f };
  18.                 if (Command<COMMAND_LOCATE_PLAYER_ANY_MEANS_3D>(CWorld::PlayerInFocus, point.x, point.y, point.z, 2.0, 2.0, 2.0))
  19.                     CMessages::AddMessageJumpQ(L"Yes", 1000, 1);
  20.                 //
  21.                 static int sphere;
  22.                 KeyCheck::Update();
  23.                 if (KeyCheck::CheckWithDelay('M', 2000)) {
  24.                     CVector pos = FindPlayerPed()->TransformFromObjectSpace(CVector(0.0f, 5.0f, 0.0f));
  25.                     Command<COMMAND_ADD_SPHERE>(pos.x, pos.y, pos.z, 2.0, &sphere);
  26.                     CMessages::AddMessageJumpQ(L"Create", 2000, 1);
  27.                 }
  28.                 if (KeyCheck::CheckWithDelay('N', 2000)) {
  29.                     Command<COMMAND_REMOVE_SPHERE>(sphere);
  30.                     CMessages::AddMessageJumpQ(L"Delete", 2000, 1);
  31.                 }
  32.             }
  33.         };
  34.     }
  35. } test;

11
Цитировать
Вообще таймеров много, чем они отличаются?
Надо смотреть каждую из этих переменных в базе, в каких функциях используются, тогда можно понять чем они отличаются и для чего используются.

Цитировать
Мне нужна именно функция таймер, например, передаешь 1000 мс, получаешь задержку в 1 сек, пробовал через рекурсии не выходит.
Задержку по времени между выполнением действий в теме была показана ранее на примере нажатия клавиши. Вот такой пример. Загрузка модели и создание педа вынесены в отдельные функции.
Код: C++
  1. #include "plugin.h"
  2. #include "CMessages.h"
  3. #include "CWorld.h"
  4. #include "CStreaming.h"
  5. #include "CTimer.h"
  6. #include "ePedModel.h"
  7. #include "ePedType.h"
  8. #include "CCivilianPed.h"
  9.  
  10. using namespace plugin;
  11.  
  12. class Test {
  13. public:
  14.     static bool LoadModel(int model) {
  15.         unsigned char oldFlags = CStreaming::ms_aInfoForModel[model].m_nFlags;
  16.         CStreaming::RequestModel(model, GAME_REQUIRED);
  17.         CStreaming::LoadAllRequestedModels(false);
  18.         if (CStreaming::ms_aInfoForModel[model].m_nLoadState == LOADSTATE_LOADED) {
  19.             if (!(oldFlags & GAME_REQUIRED)) {
  20.                 CStreaming::SetModelIsDeletable(model);
  21.                 CStreaming::SetModelTxdIsDeletable(model);
  22.             }
  23.             return true;
  24.         }
  25.         return false;
  26.     }
  27.  
  28.     static CPed *CreatePed(ePedType pedType, unsigned int modelIndex) {
  29.         CPed *ped = nullptr;
  30.         if (LoadModel(modelIndex)) {
  31.             ped = new CCivilianPed(pedType, modelIndex);
  32.             if (ped) {
  33.                 ped->SetPosition(FindPlayerPed()->TransformFromObjectSpace(CVector(0.0f, 2.0f, 0.0f)));
  34.                 CWorld::Add(ped);
  35.             }
  36.         }
  37.         return ped;
  38.     }
  39.  
  40.     Test() {
  41.         static int keyPressTime = 0;
  42.  
  43.         Events::gameProcessEvent += [] {
  44.             CPed *player = FindPlayerPed();
  45.             if (player) {
  46.                 if (KeyPressed('M') && CTimer::m_snTimeInMilliseconds > (keyPressTime + 5000)) {
  47.                     keyPressTime = CTimer::m_snTimeInMilliseconds;
  48.                     CPed *ped = CreatePed(PEDTYPE_CIVFEMALE, MODEL_HFYST);
  49.                     if (ped)
  50.                         CMessages::AddMessageJumpQ(L"CreatePed", 1000, 0);;
  51.                 }
  52.             }
  53.         };
  54.     }
  55. } test;

Как я уже писал ранее, по работе с lua ничего подсказать не могу.
Зачем ты смешиваешь код lua и плагин? Что такого можно сделать в lua, чего нельзя сделать в плагине? Хотя в lua я не разбираюсь, может чего и можно.

12
Общие вопросы / Re: Части Тела
« : Июнь 28, 2019, 10:55:35 am »
Цитировать
но базы под gta3 у меня нет

http://public.sannybuilder.com/gtasa_exe_idb/gta_3/

13
Общие вопросы / Re: Экстры транспорта
« : Июнь 21, 2019, 10:26:59 am »
Цитировать
Интересует такой вопрос - у экстр почему-то отключен хром, даже если присутствует в модели.
Есть такое дело. Причину не разбирал.

Инфа по экстрам https://gta.com.ua/forum/index.php?showtopic=4952

Код переписанной функции ChooseComponent https://github.com/kenkingGitHub/GTA-Projects/blob/master/VC_NewChooseComponent/VC_NewChooseComponent.cpp

14
Цитировать
Скажите, пожалуйста, у вас есть список типа для каждого педа
\GTA Vice City\data\default.ide раздел peds Default pedtype

в sdk есть enum ePedType
https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_vc/game_vc/ePedType.h

15
К сожалению, по работе с lua скриптами ничего подсказать не могу.

Страницы: [1] 2 3 ... 15