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

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


Сообщения - kenking

Страницы: 1 [2] 3 4 ... 16
16
Цитировать
как работает скриптовая команда Command<COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_STRING>(0,"R_TIME", 1);
Посмотрел как устроен опкод и класс COnscreenTimer. Пример работы с таймерами:
Код: C++
  1. #include "plugin.h"
  2. #include "extensions\KeyCheck.h"
  3. #include "CUserDisplay.h"
  4.  
  5. int &var_$3402 = *(int *)0x8247A8;
  6.  
  7. using namespace plugin;
  8.  
  9. class Test {
  10. public:
  11.     static int timer;
  12.     enum eTimerState { STATE_ADD, STATE_CLEAR };
  13.     static eTimerState m_currentState;
  14.  
  15.     Test() {
  16.         Events::drawingEvent += [] {
  17.             gamefont::Print({
  18.                 Format("id %d", CUserDisplay::OnscnTimer.m_aClocks[0].m_nVarId),
  19.                 Format("direction %d", CUserDisplay::OnscnTimer.m_aClocks[0].m_nTimerDirection),
  20.                 Format("enabled %d", CUserDisplay::OnscnTimer.m_aClocks[0].m_bEnabled),
  21.                 Format("text %s", CUserDisplay::OnscnTimer.m_aClocks[0].m_acDisplayedText),
  22.                 Format("key %s", &CUserDisplay::OnscnTimer.m_aClocks[0].m_acDescriptionTextKey),
  23.                 Format("var $3402 %d", var_$3402)
  24.             }, 10, 10, 1, FONT_DEFAULT, 0.75f, 0.75f, color::White);
  25.  
  26.             KeyCheck::Update();
  27.             switch (m_currentState) {
  28.             case STATE_ADD:
  29.                 if (!CUserDisplay::OnscnTimer.m_aClocks[0].m_bEnabled) {
  30.                     if (KeyCheck::CheckWithDelay('M', 1000)) {
  31.                         var_$3402 = 120000; //in CLEO $3402 = 120000
  32.                         CUserDisplay::OnscnTimer.AddClock(timer, "R_TIME", 1); //03C3: set_timer_with_text_to $3402 type 1 text 'R_TIME'
  33.                         m_currentState = STATE_CLEAR;
  34.                     }
  35.                     if (KeyCheck::CheckWithDelay('U', 1000)) {
  36.                         CUserDisplay::OnscnTimer.AddClock(timer, "R_TIME", 0); //03C3: set_timer_with_text_to $3402 type 0 text 'R_TIME'
  37.                         m_currentState = STATE_CLEAR;
  38.                     }
  39.                 }
  40.                 break;
  41.             case STATE_CLEAR:
  42.                 if (KeyCheck::CheckWithDelay('N', 1000) || var_$3402 > 121000 || var_$3402 < 1) {
  43.                     CUserDisplay::OnscnTimer.ClearClock(timer); //014F: stop_timer $3402
  44.                     var_$3402 = 0; //$3402 = 0
  45.                     m_currentState = STATE_ADD;
  46.                 }
  47.                 break;
  48.             }
  49.         };
  50.     }
  51. } test;
  52.  
  53. int Test::timer = 13608;
  54. Test::eTimerState Test::m_currentState = STATE_ADD;

17
Цитировать
можно создать тему 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;

18
Код: 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;

19
Цитировать
Как можно узнать через  функцию, то  что мы в него передали, является классом, например, 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;
В транспорте должен быть водитель.

20
Так же ищу функция арестован игрок или нет. 
Код: C++
  1. CWorld::Players[CWorld::PlayerInFocus].m_nPlayerState == PLAYERSTATE_HASBEENARRESTED

21
Попробуй так:
Код: C++
  1. car->m_autoPilot.m_nCarMission = MISSION_NONE;

22
К сожалению, подсказать не могу.

23
Цитировать
вчера обновил visual studio 2019 при этом изменилась цветовая палитра. С ней неприятно работать, можете скинуть конфиг с прежней цветовой палитрой.
Настроить: Сервис->Параметры->Окружение->Общие->Цветовая тема
У меня 2017

Цитировать
как в sdk заставить стрелять ракетами и пулеметом вертолет hunter?
Не знаю, не изучал этот вопрос.

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

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

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

Цитировать
которая возвращает булевое значение подобран ли пикап? как-то работает некорректно. Может что-то напутал
С пикапами я не работал. Посмотрел в 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;



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

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

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

29
Флаг миссии устанавливается так:
Код: 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.

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

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

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