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

Страницы: [1] 2 3 ... 10
1
Программирование / Re: Сложные модели объектов
« Последний ответ от Shagg_E Сентябрь 17, 2019, 01:35:31 pm »
Цитировать
А персонажа-часы можно застрелить, он убежит от выстрелов?
Если убрать коллизию, прописать иммунитеты и соответствующее поведение - всё будет ок ;)

Цитировать
Так-то можно и машину закрепить в виде тряпки, ох как все костыльно выходит.
Ну, тут либо костылить, либо делать обширные взломы и переписывание кода. Лично для меня второй вариант применим лишь в крайних случаях(вот работаю над кое-какими графическими улучшениями и анимационной фигней), для мелочевки же просто времени не хватит, поэтому - тут только костыли, увы))

Конечно, если таких "мелочевок" у тебя планируется гора и еще кучка - тогда, наверное и стоит подумать о каком-то универсальном методе, но... лучше всё же 10 раз подумать, стоит ли тратить на это время...
2
Программирование / Re: Сложные модели объектов
« Последний ответ от xanser Сентябрь 17, 2019, 04:35:17 am »
А персонажа-часы можно застрелить, он убежит от выстрелов? :P Так-то можно и машину закрепить в виде тряпки, ох как все костыльно выходит. Для часов есть еще вариант рендерить стрелки примитивами по аналогии как рендерится мусор. Я так сделал рендер мультика при появлении экрана, а вот тряпки таким способом получатся только плоскими. Есть у меня еще игрушки-вертолетики с вращающимися винтами, собранные из разных кусков-моделей. Что бы такое универсальное для всего этого придумать...

3
Скриптинг / Re: Новые опкоды(ваши предложения)
« Последний ответ от Shagg_E Сентябрь 16, 2019, 05:22:47 pm »
Решил выложить 13 опкодов(в аттаче), т.к. остальная разработка(самый сок) пока затянулась:
0E10: rotate_actor $PLAYER_ACTOR type 0 boneindex 5 angles 0.0 0.0 0.0 blending_time 500 freeze_time 2000 release_time 1000
0E11: store_actor $PLAYER_ACTOR type 0 boneindex 5 world_coords 1 rotation_to 1@ 2@ 3@
0E12: store_actor $PLAYER_ACTOR type 0 boneindex 5 world_coords 1 position_to 4@ 5@ 6@ offset 0.0 0.0 0.0
0E20: enable_vehicle 0@ flying_control_type 3
0E21: disable_vehicle 0@ flying_control
0E22: store_object 0@ rotation_to 1@ 2@ 3@
0E23: set_object 0@ rotation 0.0 0.0 0.0
0E24: store_vehicle 0@ rotation_to 1@ 2@ 3@
0E25: set_vehicle 0@ rotation 0.0 0.0 0.0
0E26: store_actor 0@ rotation_to 1@ 2@ 3@
0E27: set_actor 0@ rotation 0.0 0.0 0.0
0E30: camera_on_object $666 mode 15 switchstyle 2
0E31: draw_hud 0
Описание в архиве
4
Моды / Re: Сцена Главного Меню
« Последний ответ от Shagg_E Сентябрь 16, 2019, 05:17:50 pm »
Альфа-бета-гамма недорелиз(0.9, т.к. есть еще вещи, которые хочу добавить)
Версия рабочая и вроде без багов, но несовместима с последними версиями Ultimate ASI Loader(из-за этого разработка и встала в 2016 году), оттого распространяется с лоадером от DK(с его разрешения).
Установка: просто кидайте файлы и папки в папку с игрой.
После установки у вас должно появиться меню, как на видео из предыдущего сообщения
5
Программирование / Re: Сложные модели объектов
« Последний ответ от Shagg_E Сентябрь 16, 2019, 04:06:07 pm »
xanser>
Если можешь получить доступ через память к управлению компонентами катсценовой модели - то можно просто запускать катсцену в этом месте, когда игрок в радиусе 100 метров(а до этого(в радиусе 300м) скриптом пусть спавнится статическая модель).
И уже в этой катсцене спавни катсценовый объект и бери его под управление(старт как тут(там уже обновлен пример - камера теперь свободная), только объекты загружаются опкодами 02F3 и 0248).
Т.е., для этого всего, как и в том примере, модели прописывать нигде не нужно(нужно лишь кинуть модель+текстуру в gta3.img, а ifp(с 2 кадрами анимации) и dat(можно прям из того примера взять, т.к. камера не нужна будет) - в cuts.img).

Колхозен ли этот вариант?
О, даа!....

Возможные проблемы?
Только если кто-то попытается запустить другую катсцену в этом радиусе 100м, либо вообще в этом радиусе будет происходить какая-то заставка с перемещением игрока в/за пределы этого радиуса(в том запуске катсцены происходит сбивание камеры). Т.е., например, в обычном Вайсе никаких негативных последствий быть не должно(катсцен там нет, а существующие заставки не предполагают преодоление игроком этой границы 100м).


Есть еще один вариант. Закостить персонажа, как часы и закрепить его в нужное место, как тут в примере с развевающимися на ветру тряпками. Если нужно программное управление костями - это расписано тут. Способ рабочий - у меня получилось написать опкод для управления поворотом костей.
6
Программирование / Re: Сложные модели объектов
« Последний ответ от xanser Сентябрь 16, 2019, 01:46:19 pm »
Решил продолжить тему. Сделал одной моделью часы со стрелками на здании полицейского участка, показывают игровое время. Как было предложено выше, использовал секцию [hier] в ide для иерархии и окончания компонентов в модели _L0, _L1, _L2, прописал модель в object.dat, только так все это заработало. Поиск компонентов модели использован аналогично транспорту, предложен DK в одной из тем, не помню где, через функцию RwFrameForAllChildren(parent, 0x5411E0, data).

Мод во вложении, собран "на коленке" только для тестов и не является дополнением к оригинальной игре!!!
Из минусов:
1. В секции [hier] нет возможности настраивать дальность и флаги прозрачности.
2. В секции [hier] лимит на 5 записей, все они нужны для кат-сцен.
3. Из-за расположения в [hier] объект исчезает и больше никогда не появляется, как только камера/игрок отдаляется за радиус примерно в 130 метров от объекта. Это главный минус, поэтому предложенный вариант кажется не имеет развития. Придется вернуться к варианту с лавочками и секции [objs], который не имеет иерархии, но при этом у лавок как-то происходит смена моделей при поломке. С этим бы хотелось разобраться и вызывать "на лету".

7
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от kenking Сентябрь 07, 2019, 11:30:03 am »
Цитировать
Вряд ли кто-то будет менять флаг в файле при использовании плагина. возможно, есть способ обойти его.
Никто не играет со стандартными моделями давно. А в заменяемых моделях авторы указывают свои настройки, где это исправлено.   

Цитировать
Потоки работают, но есть сильное ограничение, нельзя передать указатели на педа, авто и объект. Дело в том, что у запуска функции в новом потоке есть очень сильное ограничение. Мы не можем передать указатели, потому что между состояниями нельзя передавать объекты, которые занимают память. Я думал, как это ограничение обойти? Решил, указатель преобразовать в строку, передать в новый поток, потом эту строку передать в функцию, которая обратно конвертирует строку в числовой указатель и ищет её в пуле. Но, опять произошла проблема, адреса в пуле являются не разыминованные, в отличие от числового указателя. Поэтому поиск никогда не даёт результатов. Буду очень рад, если Вы подскажите как решить эту проблему.
Вообще не понял, что ты хочешь сделать.
8
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Сентябрь 06, 2019, 11:00:42 am »
Спасибо за Ваш ответ  kenking. Вряд ли кто-то будет менять флаг в файле при использовании плагина. возможно, есть способ обойти его.

Благодарю Вас, что показали как воспроизводить реплики, добавил в lua.
Буду с пикапом и гоночными чекпойнтами  разобраться, ох, трудностей всегда хватает.


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

Код: Text
  1.  
  2.                         string str  = lua_tostring(L, -1);
  3. for (auto ped : CPools::ms_pPedPool) {
  4.                                         int p = (int)ped;
  5.                                         std::string sped = to_string(p);
  6.                                         if (str == sped) {
  7.                                                 Stack<bool>::push(L, true); Stack<CPed*>::push(L, ped);// отправить в стек и получить из стека можно
  8.                                                 return 2;
  9.                                         }
  10.                                 }
  11.  
Решил вывести указатели в файл.
Передаем в функцию 10EA92A8

В пуле такие адреса.

Код: Text
  1. 0C47DE08
  2. 0C47EBB8
  3. 0C47F290
  4. 0C47F968
  5. 0C480040
  6. 0C480718
  7.  
9
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от kenking Август 28, 2019, 06:58:25 pm »
Цитировать
может можно обойти этот баг, без внесение изменений в файл.
Это просто ошибка разработчиков. Без исправления этого флага не обойдёшься. В чём проблема заменить одну цифру?

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


10
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Август 28, 2019, 02:35:05 pm »
Kenking может можно обойти этот баг, без внесение изменений в файл.

Добавил несколько функций в lualoader.
У нас есть скриптовая функция ((Command<COMMAND_HAS_PICKUP_BEEN_COLLECTED>(s))), которая возвращает булевое значение подобран ли пикап? как-то работает некорректно. Может что-то напутал

Код: Text
  1.                                         CVector pos = player->m_placement.pos;
  2.                                         pos += player->m_placement.up * 10;
  3.                                         Command<COMMAND_REQUEST_MODEL>(335);
  4.                         Command<COMMAND_LOAD_ALL_MODELS_NOW>(false);
  5.                                 if (Command<COMMAND_HAS_MODEL_LOADED>(335)) {
  6.                                         Command<COMMAND_CREATE_PICKUP>(335, 3, pos.x, pos.y, pos.z, &s);
  7.                                         }
  8.  
  9.                                 }
  10.                         }      
  11.                         if (Command<COMMAND_HAS_PICKUP_BEEN_COLLECTED>(s)) {
  12.                                 CMessages::AddMessageJumpQ(L"message", 2000, false);
  13.                         }
  14.                 };
  15.  

Пытался написать гоночный чекпойнт, есть идея написать миссию гонку, вспомнил опкод 024F: create_corona_with_radius 2.0 type 9 lensflares 0 with_color 0 255 0 at 2490.4514 -1674.7673 13.3359. все равно нужно потом удалить чекпойнт.
Код: Text
  1. Command<COMMAND_DRAW_CORONA>(5.5, 6, 0, 0, 255, 0, pos.x, pos.y, pos.z);
  2.  

Так думаю как воспроизвести звуковой файл. На cleo было так
Код: Text
  1. wait 0  
  2. 03CF: load_wav 'FIN_1a' as 1
  3. wait 0
  4. if 03D0:  wav 1 loaded
  5. jf @sound
  6. 03D1: play_wav 1
  7. :intro5
  8. wait 0
  9. if 03D2:  wav 1 ended
  10. jf @Intro5
  11. 040D: unload_wav 1  
  12.  

Думал на sdk можно так? Подскажите, пожалуйста.
Код: Text
  1.                 Command<COMMAND_LOAD_MISSION_AUDIO>(152, &s);// = 0x3CF,
  2.                                         if (Command<COMMAND_HAS_MISSION_AUDIO_LOADED>(s)){;// = 0x3D0,
  3.                                         Command<COMMAND_PLAY_MISSION_AUDIO>(s);// = 0x3D1,
  4.                                         if (Command<COMMAND_HAS_MISSION_AUDIO_FINISHED>(s)) {// = 0x3D2,
  5.                                                 Command<COMMAND_CLEAR_MISSION_AUDIO>(s);//      040D: unload_wav 1
  6.                
  7.  
Страницы: [1] 2 3 ... 10