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

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


Сообщения - kenking

Страницы: [1] 2 3 ... 16
1
Общие вопросы / Re: Помощь с CLEO
« : Январь 09, 2020, 02:26:11 pm »
Судя по состоянию базы на данный момент, это:
0x1D1 (3b)
0x209 (3b)
0x235 (3b)

2
Общие вопросы / Re: Помощь с CLEO
« : Январь 09, 2020, 08:01:30 am »
В структуре транспорта есть неиспользуемые байты. Можно записывать количество бензина в них.
Для SA делали подобные моды. Почитай здесь:

https://sannybuilder.com/forums/viewtopic.php?pid=11512#p11512
https://sannybuilder.com/forums/viewtopic.php?pid=4482#p4482

3
Общие вопросы / Re: Ошибка
« : Декабрь 27, 2019, 10:41:57 am »
фастман лимит аджастер стоит
У меня игра с тем аджастером вообще не запускается. Использую III.VC.SA.LimitAdjuster. Попробуй поменять аджастер.

4
Общие вопросы / Re: Ошибка
« : Декабрь 26, 2019, 09:08:34 am »
CARCOLS.DAT

5
Плагин для игры GTA Vice City (версии 1.0)  https://gta.com.ua/forum/index.php?showtopic=4982&page=7#entry2245903
Плагин написан на основе plugin-sdk https://github.com/DK22Pac/plugin-sdk
Код https://github.com/kenkingGitHub/GTA-Projects/blob/master/VC_AddSpecialCars/VC_AddSpecialCars.cpp

Возможности плагина:
1)  Дополнительный транспорт полиции с дополнительными копами будут в соответствующих районах карты игры. Дополнительные модели приезжают при наличии соответствующего уровня розыска и задействуются в дорожных блоках аналогично стандартным моделям. 
2)  На дополнительном транспорте сирена и маячки работают аналогично стандартным.
3)  Дополнительные модели ambulan и firetruk, а также стандартные такие модели задействованы в трафик.
4)  Количество дополнительных моделей персонажей и транспорта в секции не ограничено.
5)  Выбор дополнительной модели транспорта из соответствующей секции происходит случайным образом.
6)  Не обязательно задействовать все секции файла SpecialCars.dat. Можно прописывать интересующие вас модели в соответствующую секцию, остальные оставить пустыми.
7)  На всех дополнительных моделях спецтранспорта можно выполнять соответствующие миссии.
8 )  Модели patriot, fbicar задействованы в погонях при наличии соответствующего уровня розыска.
9)  Возможность отключать/включать модели пожарных и скорых в трафике. # Emergency Services: enable 1; disable 0; В файле SpecialCars.dat изначально генерация отключена (emergency = 0). Время между генерацией таких моделей в трафик можно настроить (time = 30).
10) Разные персонажи спецслужб в одном транспорте. Если персонажей четыре, то какие-то из них будут одинаковыми.
11) Возможность выдать персонажам силовых структур разное оружие из этих ID: 274, 277-280, 282, 284. У всех персонажей силовых структур, кроме персонажей cop, в первом слоте для оружия пистолет. Количество патронов - семь. Когда закончатся эти боеприпасы, персонаж меняет оружие на дополнительное (имеется ввиду дополнительно прописанное стандартное, а не дополнительно установленное в игру) или стандартное, если дополнительное не было прописано в соответствующую секцию.
12) Возможность установить дополнительные модели медиков и пожарных.

Видео https://www.youtube.com/watch?v=AxTNslmakDk&feature=emb_logo

Версия для GTA San Andreas https://gta.com.ua/forum/index.php?showtopic=4982&page=1#entry2244938

Версия для Grand Theft Auto III https://gta.com.ua/forum/index.php?showtopic=4982&page=1#entry2244957

6
Цитировать
сколько не бился, никак не получилось создать специального актера через скриптовые команды
Можно обойтись без скриптовых команд, все нужные для этого функции в sdk есть. Только обрати внимание, что в отличие от опкода, здесь надо использовать специальный слот на 1 меньше при том же ID спецактёра
Код: C++
  1. #include "plugin.h"
  2. #include "extensions\KeyCheck.h"
  3. #include "CStreaming.h"
  4. #include "CCivilianPed.h"
  5. #include "CWorld.h"
  6.  
  7. using namespace plugin;
  8.  
  9. class Test {
  10. public:
  11.     Test() {
  12.         Events::gameProcessEvent += [] {
  13.             KeyCheck::Update();
  14.             if (KeyCheck::CheckWithDelay('M', 2000)) {
  15.                 CStreaming::RequestSpecialChar(20, "SAM", 6); // 023C: load_special_actor 21 'SAM'
  16.                 if (CStreaming::HasSpecialCharLoaded(20)) {   // 023D: special_actor 21 loaded
  17.                     CPed *ped = new CCivilianPed(PEDTYPE_CIVMALE, 129);
  18.                     if (ped) {
  19.                         ped->SetPosition(FindPlayerPed()->TransformFromObjectSpace(CVector(0.0f, 2.0f, 0.0f)));
  20.                         CWorld::Add(ped);
  21.                     }
  22.                     CStreaming::SetMissionDoesntRequireSpecialChar(20); // 0296: unload_special_actor 21
  23.                 }
  24.             }
  25.         };
  26.     }
  27. } test;

Цитировать
Например, починка шин.
Код: C++
  1. #include "plugin.h"
  2. #include "extensions\KeyCheck.h"
  3. #include "CMessages.h"
  4.  
  5. using namespace plugin;
  6.  
  7. class Test {
  8. public:
  9.     Test() {
  10.         Events::gameProcessEvent += [] {
  11.             KeyCheck::Update();
  12.             if (KeyCheck::CheckWithDelay('N', 2000)) {
  13.                 CVehicle *vehicle = FindPlayerVehicle();
  14.                 if (vehicle && vehicle->m_nVehicleClass == VEHICLE_AUTOMOBILE) {
  15.                     CAutomobile *automobile = reinterpret_cast<CAutomobile *>(vehicle);
  16.                     if (!automobile->m_carDamage.GetWheelStatus(0)) {
  17.                         automobile->m_carDamage.SetWheelStatus(0, 1);
  18.                         CMessages::AddMessageJumpQ(L"damage", 2000, false);
  19.                     }
  20.                     else {
  21.                         automobile->m_carDamage.SetWheelStatus(0, 0);
  22.                         CMessages::AddMessageJumpQ(L"fix", 2000, false);
  23.                     }
  24.                 }
  25.             }
  26.         };
  27.     }
  28. } test;

Добавлено:
Цитировать
стараюсь найти способ смены скина педа.
Посмотрел опкоды, получается так:
Код: C++
  1. #include "plugin.h"
  2. #include "extensions\KeyCheck.h"
  3. #include "extensions\ScriptCommands.h"
  4. #include "eScriptCommands.h"
  5. #include "CStreaming.h"
  6. #include "CWorld.h"
  7.  
  8. using namespace plugin;
  9.  
  10. class Test {
  11. public:
  12.     Test() {
  13.         Events::gameProcessEvent += [] {
  14.             KeyCheck::Update();
  15.             if (KeyCheck::CheckWithDelay('N', 2000)) {
  16.                 CPed *player = FindPlayerPed();
  17.                 if (player) {
  18.                     //Command<COMMAND_UNDRESS_CHAR>(CPools::GetPedRef(player), "STRIPA");
  19.                     int modelIndex = player->m_nModelIndex;
  20.                     player->DeleteRwObject();
  21.                     if (player->IsPlayer())
  22.                         modelIndex = 0;
  23.                     CStreaming::RequestSpecialModel(modelIndex, "STRIPA", 6);
  24.                     CWorld::Remove(player);
  25.                     //Command<COMMAND_LOAD_ALL_MODELS_NOW>();
  26.                     CTimer::Stop();
  27.                     CStreaming::LoadAllRequestedModels(false);
  28.                     CTimer::Update();
  29.                     //Command<COMMAND_DRESS_CHAR>(CPools::GetPedRef(player));
  30.                     player->m_nModelIndex = -1;
  31.                     player->SetModelIndex(modelIndex);
  32.                     CWorld::Add(player);
  33.                 }
  34.             }
  35.         };
  36.     }
  37. } test;

7
Есть какие подвижки в этом вопросе? Тоже хочется глянуть код реализации того плагина.

8
Цитировать
не знаю как выводить gtx записи
Класс CText пока в sdk не добавлен. Пока можно скриптовыми командами:
Код: C++
  1. #include "plugin.h"
  2. #include "eScriptCommands.h"
  3. #include "extensions\ScriptCommands.h"
  4. #include "extensions\KeyCheck.h"
  5.  
  6. using namespace plugin;
  7.  
  8. class Test {
  9. public:
  10.     Test() {
  11.         Events::gameProcessEvent += [] {
  12.             KeyCheck::Update();
  13.             if (KeyCheck::CheckWithDelay('M', 2000)) {
  14.                 Command<COMMAND_LOAD_MISSION_TEXT>("GENERA1");
  15.                 Command<COMMAND_PRINT_NOW>("GEN1_A", 2000, 1);
  16.             }
  17.         };
  18.     }
  19. } test;

Цитировать
ищу аналоги 0A8C: write_memory 0xC0BC15 size 1 value 1 virtual_protect 0
и 0A8D: $result = read_memory 1@ size 4 virtual_protect 0
чтобы поработать с памятью
Для этого есть patch::Set и patch::Get
Но можно просто работать через свою переменную, например, как показал выше в примере с таймерами.
Код: C++
  1. int &var_$3402 = *(int *)0x8247A8;

9
Цитировать
как в данной функции обойтись без использования скриптовой команды?
Код: C++
  1. CPed *ped; CVehicle *vehicle;
  2. ped->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, vehicle);
  3. ped->WarpPedIntoCar(vehicle);

10
Цитировать
как работает скриптовая команда 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;

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

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

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

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

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

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