Это популярное сообщение. Graff46 598 Опубликовано 5 Октября 2017 Это популярное сообщение. Поделиться Опубликовано 5 Октября 2017 (изменено) Думаю тема будет востребована. В данной теме будут описываться аспекты работы с транспортом во всех аддонах "Сталкера". Возвращение боеспособности БТР. Автор - @lychagin0 Источник Скрытый текст Для возвращения БТР способности атаковать противника и выполнить другие задачи в игре потребуются распакованные Тени Чернобыля.ИЗ gamedata ТЧ из папки scripts копируем файлы : ph_car.script и se_car.script в одноимённую папку ЗП.Теперь необходимо зарегистрировать файлы ph_car.script и ph_minigun.script (этот файл есть в ЗП,его копировать не нужно) в modules.script, добавив после : Код load_scheme("ph_oscillate","ph_oscillate",stype_item) Вот эти строки: Код load_scheme("ph_car","ph_car",stype_item) load_scheme("ph_minigun","ph_minigun",stype_item) Теперь в файле class_registrator.script после:GENERAL Эту строку: cs_register (object_factory, "CCar", "se_car.se_car", "SCRPTCAR", "car_s") Всё на этом со скриптами закончили.Дальнейшие действия описаны для родной модели ЗП : попути: gamedata\meshes\physics\vehicles\btrположить скопированную из ТЧ папку part. Если этого не сделать при уничтожении вылет. Теперь необходимо правильно заспавнить будем спавнить через алспавн(можно через скрипт,но это для отдельного урока) секция для спавна: Код [1251] ; cse_abstract properties section_name = m_car name = esc_attack_btr position = -145.99313354492,-14.00541137695,-182.73930358887 direction = 0,3.3020263,0 version = 128 script_version = 12 ; cse_alife_object properties game_vertex_id = 2072 distance = 0 level_vertex_id = 106971 object_flags = 0xffffffba custom_data = <<END [story_object] story_id = esc_attack_btr [logic] active = ph_car [ph_car] path_walk = esc_btr_way target = actor fire_range = 80 fire_repeat = 50 auto_fire = true track_target = true on_death_info = esc_btr_dead [spawner] cond = {+my_stalker_dead} END ; cse_visual properties visual_name = physics\vehicles\veh_btr80\veh_btr_script_u_01.ogf ; cse_ph_skeleton properties ;cse_alife_car properties health = 1 Здесь координаты Кордон SGM-2.2.И обратите внимание если Вы используете родную модель то путь к визуалу нужно указать так:dynamics\vehicles\btr\veh_btr_script_u_01.ogf Вот описание возможной логики с Вики: Настройка управления наземным транспортом. [ph_car] usable = {+info -info =func !func ~number} - условия для юзабелености объекта. show_tips = true/false - отображать ли подсказку. По умолчанию - true. tip_use = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text. Подсказка, в случае, если условия для usable выполнились. По умолчанию - tip_car_use. tip_locked = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text. Подсказка, в случае, если условия для usable не выполнились. По умолчанию - tip_car_locked. В случае, если параметр usable не установлен, то возможна настройка самостоятельного поведения транспорта, а именно БТР. path_walk = <имя_пути> - путь движения транспорта. path_fire = <имя_пути> - вероятно, точки пути по которым возможна стрельба. auto_fire = true/false - разрешить стрелять на ходу. По умолчанию - false. fire_time = <number> - время непрерывной стрельбы в миллисекундах. По умолчанию - 0. fire_rep = inf/<number> - вероятно, время через которое возможна повторная стрельба. inf = -1. fire_range = <number> - сектор стрельбы. По умолчанию - 50 градусов. target = <параметр> - цель для стрельбы. Возможны следующие параметры: points - стрелять в первую точку патрульного пути. Если путь не указан - вылет. Стоит по умолчанию; actor - без комментариев; story_id - персонаж с указанным story_id. track_target = true/false - Некое подобие предупредительной стрельбы, не по цели, а чуть выше. По умолчанию - false. on_target_vis = <параметр>|{+info -info =func !func ~number} %+info -info =func% <название_схемы> - что произойдёт, если цель будет в прямой видимости. В качестве параметра возможны два значения: actor, story_id персонажа. on_target_nvis = <параметр>|{+info -info =func !func ~number} %+info -info =func% <название_схемы> - что произойдёт, если цель пропадёт из области прямой видимости. В качестве параметра возможны два значения: actor, story_id персонажа. invulnerable = true/false - неуязвимость. Если true, транспорт игнорирует все хиты. По умолчанию false. headlights = on/off - вкл./выкл. свет от фар. on_death_info = {+info -info =func !func ~number} %+info -info =func% - что произойдёт при уничтожении транспорта. Поддерживается сигнал arrived. Вот вроде и всё удачи. --------------------------------------------- Прошу прощёния,но совершенно забыл добавить ложку дёгтя к уроку 47.При спавне не через SDK, 90% вероятность,что ездить по патрульному пути не будет.Дело в том что требуется идеально ровное направление на точку патрульного пути относительно первоначального положения объекта, отклонение в несколько градусов приводит к остановке.В отличие от НПС не может доворачивать на требующееся направление. * Есть исправление! Логика транспорта автор - @lychagin0 Источник Скрытый текст [ph_car] usable = {+info -info =func !func ~number} - условия для юзабелености объекта. show_tips = true/false - отображать ли подсказку. По умолчанию - true. tip_use = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text. Подсказка, в случае, если условия для usable выполнились. По умолчанию - tip_car_use. tip_locked = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text. Подсказка, в случае, если условия для usable не выполнились. По умолчанию - tip_car_locked. В случае, если параметр usable не установлен, то возможна настройка самостоятельного поведения транспорта, а именно БТР. path_walk = <имя_пути> - путь движения транспорта. path_fire = <имя_пути> - вероятно, точки пути по которым возможна стрельба. auto_fire = true/false - разрешить стрелять на ходу. По умолчанию - false. fire_time = <number> - время непрерывной стрельбы в миллисекундах. По умолчанию - 0. fire_rep = inf/<number> - вероятно, время через которое возможна повторная стрельба. inf = -1. fire_range = <number> - сектор стрельбы. По умолчанию - 50 градусов. target = <параметр> - цель для стрельбы. Возможны следующие параметры: points - стрелять в первую точку патрульного пути. Если путь не указан - вылет. Стоит по умолчанию; actor - без комментариев; story_id - персонаж с указанным story_id. track_target = true/false - Некое подобие предупредительной стрельбы, не по цели, а чуть выше. По умолчанию - false. on_target_vis = <параметр>|{+info -info =func !func ~number} %+info -info =func% <название_схемы> - что произойдёт, если цель будет в прямой видимости. В качестве параметра возможны два значения: actor, story_id персонажа. on_target_nvis = <параметр>|{+info -info =func !func ~number} %+info -info =func% <название_схемы> - что произойдёт, если цель пропадёт из области прямой видимости. В качестве параметра возможны два значения: actor, story_id персонажа. invulnerable = true/false - неуязвимость. Если true, транспорт игнорирует все хиты. По умолчанию false. headlights = on/off - вкл./выкл. свет от фар. on_death_info = {+info -info =func !func ~number} %+info -info =func% - что произойдёт при уничтожении транспорта. Поддерживается сигнал arrived. Пример использования схемы: [logic] active = ph_car@fire [ph_car@fire] path_walk = pri_wave3_btr_walk path_fire = pri_wave3_btr_look fire_repeat = inf auto_fire = true on_target_vis = actor | ph_car@fight_actor2 on_death_info = pri_wave3_btr_dead on_signal = arrived | ph_car@hunt_actor %+pri_wave3_btr_arrived% Файл: gamedata\scripts\ph_car.script p1:name = wp01|ff=true|fb=true Не полное описание класса CCar из Lua_help ТЧ. Описание - @singapur22 Источник Скрытый текст C++ class CCar : CGameObject,holder { const eWpnActivate = 3; --активация башни 'Action(CCar.eWpnActivate, number)' (0\1) const eWpnAutoFire = 5; --автоматическая стрельба 'Action(CCar.eWpnAutoFire, number)' (0\1) const eWpnDesiredDir = 1; --не фурычит const eWpnDesiredPos = 2; --точка прострела 'SetParam(CCar.eWpnDesiredPos, vector)' (position) const eWpnFire = 4; --открыть\прекратить огонь 'Action(CCar.eWpnFire, number)' (0\1) const eWpnToDefaultDir = 6; --вернуть дуло в дефолтовую позицию 'Action(CCar.eWpnToDefaultDir, number)' (0\1) CCar (); function _construct(); function GetfHealth() const; --какое текущее здоровье у тачки? (0...1) function CurrentVel(); function getVisible() const; function net_Spawn(cse_abstract*); function SetParam(number, vector); --установка координат, для точки прострела. Где, number = const(2) function net_Export(net_packet&); function Visual(); function IsObjectVisible(game_object*); --находится ли объект в зоне видимости тачки? (true\false) function SetExplodeTime(number); function net_Import(net_packet&); function HasWeapon(); function SetfHealth(number); --установить текущее здоровье (0...1) function engaged(); function ExplodeTime(); function FireDirDiff(); function CarExplode(); --взорвать тачку function CanHit(); function getEnabled() const; function Action(number1, number2); --работы с башней. Где, number1 = const(3...6); number2 = 0\1 function use(CGameObject*); -- (вероятно) сделать юзающимся для указанного объекта (но при спавне через скрипт, юзается всегда. ---------------------------------- --бтр xr_logic.mob_capture(obj, true) action(obj, move(move.on + move.fwd, 30), cond(cond.move_end, 3000)) --движение --move.on -завести двигатель --move.fwd -начать движение вперёд --move.off -заглушить двигатель --move.back -начать движение назад --move.handbrake -остановить машину --move.left -повернуть руль на лево --move.right -повернуть руль на право --move.line -повернуть руль прямо obj:get_car():Action(CCar.eWpnActivate, 1) --активация башню (1\0) obj:get_car():SetParam(CCar.eWpnDesiredPos, vector*) --повернуть башню в сторону вектора(позиция) obj:get_car():Action(CCar.eWpnAutoFire, 1) --автоматическая стрельба (1\0) (чёта всё время шмаляет) obj:get_car():Action(CCar.eWpnFire, 1) --открыть огонь (1); прекратить огонь (0) --наработки --синхронный поворот дула с камерой актора obj:get_car():SetParam(CCar.eWpnDesiredPos, vector():set(device().cam_pos:mad(device().cam_dir, 100))) Исправление скрипта ph_car.script [ТЧ], что бы машины корректно ехали к 1-й точке пути и при запрокидывании на бок пытались восстановиться. Автор - @Graff46 Ссылка. Новая логика вертолётов в ТЧ от @Kirag: http://www.amk-team.ru/forum/topic/7977-ai-vertoletov/ Урок по созданию и настройке машин в "Сталкере" (Автор: @Saruman) Скрытый текст Добавление нового транспорта в Сталкер Автор: Saruman. В данной статье я попробую описать все этапы добавления новых моделей автомобилей в игру Для этого нам понадобится: MilkShape 3D 1.8.4 с установленными плагинами импорта и экспорта моделей сталкера, SDK 0.4 или выше ( для ЧН и ЗП подойдет даже 0.4 так как для моделей транспорта это безразлично), любой текстовый редактор (блокнота достаточно будет), пара рук не будут лишними J Для начала нам нужна модель машины, которую мы собираемся перенести в сталкер Я буду использовать вот эту измененную ниву: Вначале убедимся, что модель расположена в правильном направлении, то есть, направлена она должна быть так: Далее начнем создавать скелет, главное, что в нем должно присутствовать это суставы осей колес (желательны, но не обязательны), колес, руля, фар, дверей, выхлопной трубы, сиденья и основной сустав, к которому все это будет крепиться. Это минимальный состав, без которого не получится добавить машину в игру. Но это очень скудный состав, но об этом по порядку. Если вы в первый раз открыли MilkShape 3D, то для начала нужно настроить размер суставов, чтобы в итоге не получился непонятный клубок из линий. Для этого в программе заходив в File\Preferences\Misc и выставляем значение для Joint size равным 0.01 и ставим галочку напротив Show skeleton ,чтобы они вообще показывались: Приступим к созданию самого скелета. Для создания первого сустава выделяем кнопку Joint: И ставим его где-нибудь посередине машины, примерно так: Все остальные суставы будут крепиться к нему, свободных суставом в модели быть не может. Далее переходим на вкладку Joints и видим там наш сустав: Выделяем его нажатием и создаем следующий сустав, например, для выхлопной трубы (от этого сустава в игре будет идти партикл дыма) и перемещаем его туда, где расположена выхлопная труба, нажав кнопку Move: Далее создадим суставы для осей колес и суставы самих колес: Суставы колес должны быть по центр колеса, чтобы в игре они ровно крутились, а так же суставы передних колес должны быть по внутреннему краю колеса, чтобы их поворот в игре выглядел реалистичнее. Далее создадим суставы для дверей, расположение их может быть произвольным по краям машины например так: Лучще всего немного отодвинуть их от края машины чтобы в игре не было проблем застревания ГГ при выходе из машины. На очереди сустав руля, его нужно расположить по центру той части руля которая будет поворачиваться: Далее создадим сустав для сиденья, в оригинальных моделях их два но второй без надобности: Это примерное его расположение, потом в сдк можно быдет его переместить так, чтобы ГГ сидел в машине ровнее и держал руль правильно. Остались пожалуй только суставы фар, от них будет исходить луч света в игре, поэтому расположить их нужно на месте фар машины, сделаем две фары спереди и четыре сверху: Далее выделяем стекла фар, делаем их копии с помощью ctrl+d и сдвигаем эту копию чуть вперед чтоб она не сливалалась с оригинилом. После этого создаем новый материал во вкладке Materials задаем для него туже текстуру что используется для оригинала фар, выделяем группы наших копий фар и задаем для них этот материал, это делается для того чтобы потом в сдк задать для этого материала особый шейдер свечения: Дальше делаем конусы вокруг фар и шлейф света: Сделал только для передних фар так как не хочу особо лепить друг на друга их на верхних фарах Теперь нужно переименовать суставы чтобы не путаться, называть их можно как угодно так как нужные суставы в конфиге можно будет перезаписать: И скорее всего последний шаг – это привязка модели к скелету. Главное что нужно привязать это колеса, руль и вданном случае еще и фары, остальное привязывать не обязатьельно, смотрите по обстоятельствам. Например выделяем геометрию колеса, на вкладке Joints выделяем нужный сустав и жмем кнопку Assign: Так же выделяем и привязываем все остальные колеса и руль. К суставам фар нужно привязать те копии стекл фар что мы делали раньше, а так же конусы вокруг фар и шлейф света, все это в игре будет скрыто в то время когда фары не будут включены: Напоследок создадим еще один сустав и назовем его, например, cabina, лишним не будет: Как я сказал, это скудный скелет, можно еще сделать суставы для стекл, зеркал, бамперов и тд, но учтите что скелет может состоять максимум из 64 суставов, иначе модель в сдк просто не скомпилируется. Дальше я буду использовать для примера модель с этим скелетов, но в конце выложу модель со сложным скелетом. Пожалуй здесь все, экспортируем модель в формат object: Сохраняем куда удобно. Переходим в СДК. Загружаем модель чезез file\load: Первым делом заходим в настройки и ставим этидве галочки: Теперь приступим к настройкам текстур. Вначале убедитесь что все текстуры есть в сдк и что при экспорте все текстуры задались правильно для модели. Начнем с фар. Для текстур иммитации света задаем материал models\lightplanes: Параметры Compil и Game Mtl изменять не нужно, это параметры для моделей используемых на локациях (типа деревьев, домов, заборов и тд). Для стекл фар ставим материал самосвечения models\selflight: Для текстуры стекла выставляем материал models\window: Закончили с текстурами, переходим на вкладку Bones, выделяем все колеса и ставим для них такие настройки: Поясню: Game Material – материал, в данном случае материал колеса машины. Mass – масса, для колеса больше 50 можно не ставить, можно вообще не править в данном случае Center Of Mass – точка центра массы относительно координат сустава, здесь править не нужно. Bind Position – координаты сустава относительно сустава к которому он привязан ( у основного сустава – относительно начала координат) здесь править не нужно, это мы уже настроили при создании скелета. Bind Rotation – поворот сустава, здесь это делать обязательно чтобы колоса в игре крутились в правильном направлении. Настройки шейпов: No pickable – на практике не использовал, точное назначение не знаю. No phisics – шейп не будет имет коллизии, веса и тд. Remove After Break – настройка для тех тех шейпов которым задана возможноть разрушения, с ней при разрушении меш просто пропадет на не отвалется как двери и бампера в оригинальных машинах. Type – тип формы шейпа, в данном случае цилиндр. Center –координаты центра шейпа относительно координат сустава. Aligt Axis – основная ось расположения шейпа. Hihgt и Radius – настройки формы цилиндра ( при другой форме другие параметры) Настройки сустава: Breakble - делает возможность разрушения даного сустава, (для колеса не нужно включать, возможен вылет) при активации появляются параметры Break Force и Break Torque точного назначания каждого незнаю но при увеличение значений сложнее «отломать» сустав. Type –тип сустава, в данном случае wheel, от типа зависят последующие параметры, в данном случае: Friction – сила трения, для колеса лучше значения 0.01-0.1, например при значении 2 колеса будут очень сильно скользить. Spring Factor – от этого параметра зависит жесткость крепления, так сказать, при маленьких значениях кузов будет сильно проседать и раскачиваться, это главная «болезнь» оригинальных машин (его нужно повышать при повышении общей массы машины). Dumping Factor – точного значения непомню, делаю раза в два меньше предыдущего параметра Limit Min и Limit Max – минимальный и максимальный поворот колеса (измеряется в градусах), их значения нужно изменить для передних колес, до значений 20-25(для Min значение должно быть отрицательное, оба значения для колеса должны быть равны(по модулю естественно )). Разобрались с настройками, теперь жмем кнопку Bind Pose над этими настройками и наблюдаем такую картину: Не надо беспокоиться, просто сохраняем и снова загружаем модель, это нужно делать всегда при изменении параметров Bind Rotation и Bind Position чтобы изменения появились (можно было не нажимать кнопку, а сразу перезагрузить модель). Далее жмем кнопку Selected (она находится рядом с предыдущей кнопкой), тем самым мы автоматически создадим шейпы для выделеных суставов (потом можно будет их изменить исправляя соответствующие параметры шейпов): Автоматически шейпы можно создать если к суставу что то привязано, в остальных случаях они настраиваются вручную. Приступим к настройке руля. В игре руль будет поворачиваться по оси Z, поэтому сустав нужно будет повернуть так чтобы ось Z была направлена перпендикулярно плоскости руля, иначе он будет поворачиваться криво: Для этого нужно будет в параметре Bind Rotation изменить поворот по оси X (тоесть первое число), в данном случае на 35 градусов, также настроим и другие параметры: Создавать шейп для руля не обязательно, но с помощью его видно правильно ли мы повернули сустав, тип сустава менять не нужно. Теперь нужно распределить массу нашего авто. Чтобы машина была устойчивая, вся ее основная масса должна находиться как можно ниже, я для этого использую суставы осей колес, так же масса не должна быть маленькой (~1000), и ее распределение по осям будет влиять на дальнейшие настройки торможения в конфиге. Для начала самостоятельно создадим шейпы для осей и вес поставим к примеру по 1000 на каждую: Можно еще центр массы переннести немного ниже . И еще учтите , без шейпа безполезно суставу назначать массу, в игре она учитываться не будет. На очереди выхлопная труба. Если сустав не развернуть, то в игре дым будет идти ни назад, а вперед. Потому разворачиваем сустав на 180 градусов по оси Y (второе число в параметре Bind Rotation), в данном случае труба повернута не совсем назад, потому повернем сустав на -135 градусов ( или 225 градусов, кому как удобнее, результат один всеравно): В данном случае шейп можно было не делать, я его сделал лишь для того чтоб показать что сустав повернулся в нужном направлении. Для фар шейпы не нужны, так как они всеравно не учитываются в игре, можно и не править их суставы вообще. Далее создадим шейпы для дверей: Для суставов root и cabina тоже создадим шейпы: Шейпы являются для модели неким «силовым полем» ,с помощью которого она взаимодействует с окружающим миром. Как видим форма этого «поля» не идеальна и не полностью повторяет силует машины, но и скелет у нас тут простой. Вот здесь скелет усложнен, что позволило более точно воссоздать форму: Не забываем об лимите в 64 сустава (здесь 61 J). С настройкой скелета покончено, перейдем к конфигу . Для начала создадим копию оригинального конфига нивы(конфиги нашин находятся в папке gamedata\config\models\vehicles) и назовем его например veh_niva_offroad . Теперь нужно его задать для машины. Заходим во вкладку Object и меняем параметр User Data: Все, теперь можно экспортировать модель в формат ogf: Сохраняев в папку meshes\physics\vehicles, хотя можно в любую папку в пределах папки meshes. Займемся конфигом. Берем оригинальный конфиг нивы и начинаем разбирать. [disable] linear_factor = 0.3 angular_factor = 0.3-понятия не имею за что это отвечает camera_pos = -0.4,1.45,0.2 ; – позиция камеры driving_wheels = back_left_wheel,back_right_wheel,front_left_wheel,front_right_wheel; ведущие колёса steering_wheels = front_left_wheel,front_right_wheel; рулевые колёса breaking_wheels = front_left_wheel,front_right_wheel,back_left_wheel,back_right_wheel; тормозящие колёса doors = left_door,right_door; двери steer = stearing_wheel; руль driver_place = seat_left; место водителя exhausts = exhausts; выхлопная труба -здесь все понятно,только выхлопных труб можно сделать тоже несколько exhaust_particles = vehiclefx\exhaust_1 ; – партикл выхлопа fuel_tank = 80; L fuel_consumption = 1; L/(100k R); liters per 100 000 rotations -размер топливного бака и расход топлива ; – параметры еще с билдов,в финалке не на что не влияют engine_power = 8 мощность двигателя,при маленьких значениях машина будет плохо переодолевать даже самые легкие препятствия типа маленьких склонов(вес машины тоже влияет на это)при этом «глохнуть»,но не нужно ставить значение больше 300,тогда при езде,если отпустить «газ» колеса будут блокироваться моментально и машину будет заносить(странная зависимость правда),данное значение(8)не тянет даже для запорожца J max_power_rpm = 4000 max_torque_rpm = 3000 -в данных параметрах не уверен точно,как то влияют на частоту оборотов «двигателя» power_increment_factor = 0.02 power_decrement_factor = 0.1 rpm_increment_factor = 0.1 rpm_decrement_factor = 0.4 -в даных параметрах тоже не уверен,они вроде влияют на повышение и понижение мощности и частоты оборотов двигателя,и при таких значениях мощность и частота оборотов будут быстрее падать нежели расти m_power_neutral_factor = 0.25 ; – тоже не совсем понял назначение этого параметра,что то вроде коеффициента мошности в нейтральной позиции,возможно нейтральная позиция-это в момент остановки max_engine_rpm = 5000-максимальная частота оборотов двигателя вроде как,от нее напрямую зависит общая скорость,параметр max_power_rpm должен быть меньше чем этот параметр иначе машина просто не сдвинется с места idling_engine_rpm = 850-вроде как начальная частота оборотов двигателя reference_radius = 0.38; Радиус колеса,используемый при просчёте двигателя ; – напрямую влияет на общую скорость axle_friction = 0.1; Ослабление скорости в неетральной позиции.(N*m)– действие этого параметра я не смог выявить steering_speed = 1.0; Время поворота рулевого колеса,в максимум.rps(1)– вообще то это именно сторость поворота руля,а не время,лучше значение 0.8 чтоб небыло резких поворотов,которые на большой скорости могут привести к перевороту машины steering_torque = 900; Сила гидроусилителя руля.(N*m)-желательны не маленькие значения break_torque = 0.012; Сила тормозных колодок.(N*m) -основной параметр ; – точную настройку лучше делать для каждого колеса(это ниже) hand_break_torque = 0.012; сила торможения пробелом(по умолчанию) -основной параметр ; – точную настройку лучше делать для каждого колеса(это ниже) break_time = 1.0; время нарастания силы торможения до максимума,при подтормаживании(стрелка назад)– нет особой нужды до правки этого параметра main_gear_ratio = 7.63; Передаточное отношение ; – основное передаточное число auto_transmission = on; Автоматическая коробка(on/off)– лучше всего именно ручная,у меня не получилось настроить плавное переключение передач на автоматической R = 3.73,2500,4250 N1 = 3.73,2500,4250 N2 = 2.29,2500,4250 N3 = 1.39,2500,4250 N4 = 0.96,2500,4250 -первое значение это передаточное число для каждой передачи(R ; – задняя передача)количество передач может быть сколько угодно,назначение остальных двух чисел мне не ясно,возможно это именно для автоматической передачи минамальная и максимальная частота оборотов [lights] headlights = f1,f2 ; – секции фар(может быть сколько угодно) [f1]-первая фара bone = left_light ; – сустав фары color = 1.0,1.0,1.0,1.0 –цвет света фары,максимальные значения 2.9 вроде бы range = 25-дальность свечения фар cone_angle = 60 ; – угол освещения spot_texture = lights\lights_blamplight-текстура пятна света glow_texture = glow\glow_Yellow-текстура ореола вокруг фары,появляющегося при свечении ее в глаза,появляется только на статическом освещении,потому мы уже сделали в модели его аналог который будет виден при любом освещении glow_radius = 1.5 –радиус этого ореола(в метрах,1.5 это очень много,достаточно 0.5) [f2]–вторая фара bone = right_light color = 1.0,1.0,1.0,1.0 range = 25 cone_angle = 60 spot_texture = lights\lights_blamplight glow_texture = glow\glow_Yellow glow_radius = 1.5 [car_sound] snd_volume = 1.0 ; – громкость звуков двигателя(помоему не работает) snd_name = car\car1 –основной звук работы двигателя engine_sound_start_dellay = 0.5 ; – похоже на начальную громкость работы двигателя(с повышение мошности звук увеличивается) engine_start = car\test_car_start ; – звук включения двигателя engine_stop = car\test_car_stop ; – звук глушения двигателя transmission_switch = car\car_gearchange ; – звук переключения передач explosion_sound = -звук взрыва машины,здесь почему то не указан,наверное используется какой то дефолтный,а возможно используется совсем другой параметр в параметрах взрыва relative_pos = 0.0,0.5,1.5.-точка от которой исходят все эти звуки(относительно начала координат модели) [doors] open_torque_factor = 3.-похоже это тоже еще с билдов осталось [animations] driver_animation_type = 0; тип анимаций актера для данной машины.– есть два значения 0 и 1,при значении 0 обычная анимация гг в машине,при значении 1 анимация как для грузовых машин [damage_particles explosion_particles = explosions\expl_car-партикл взрыва машины car_damage_particles1 = explosions\expl_car_smoke_small ; – партикл дыма при повреждении машины(появляющийся примерно при 60%прочности) car_damage_particles2 = explosions\expl_car_smoke_big ; – партикл дыма при горении машины(при 30%прочности,прочность при этом начинает уменьшается сама) wheels_damage_particles1 = vehiclefx\exhaust_1 wheels_damage_particles2 = vehiclefx\exhaust_1 -какие то партиклы повреждения колес,пару раз видел их в игре при совсем не ординарных ситуациях particle_bones1 = front_bamper ; – сустав относительно которого исходит дым повреждения particle_bones2 = root-сустав относительно которого исходит дым горения [particle_bones]-здесь нужно написывать суставы которые заданы выше,иначе дум идти не будет root = 0,-0.5,1-отклонение координат партикла от координат сустава(в метрах) front_bamper = 0,0,0 [damage_items]–понятия не имею что это,записывать можно(а возможно и нужно)только суставы колес и дверей back_left_wheel = 5000 back_right_wheel = 5000 front_left_wheel = 5000 front_right_wheel = 5000 left_door = 2000 right_door = 2000 [collision_damage] root = 0.0001 ; – коэффициент урона от удара машины шейпом данного сустава об препятствие,лучше поставить значения поменьше,чтоб машина меньше разрушалась при столкновении [damage_bones]; аналогично секции в актере,но без анимаций; bone_name = <hit_scale>,<-1>,<wound_scale>; <hit_scale>-коэфф.изменения хита(уменьшения здоровья); <wound_scale>-коэфф.изменения величины открытой раны-незадействован default = 1,-1,0.1 ; – коэфициент получения урона(дефолтное значение,можно ниже добавить для каждого сустава свое,чтоб например некоторые части получали больше урона,а какие то меньше),последние два значения вроде не используются [immunities] burn_immunity = 0.5; коэффициенты иммунитета ; – этим все сказано,чем меньше значение тем меньше урон от соответсвующих воздействий strike_immunity = 0.1 shock_immunity = 0.0 wound_immunity = 0.01 radiation_immunity = 0.0 telepatic_immunity = 0.0 chemical_burn_immunity = 0.0 explosion_immunity = 0.5 fire_wound_immunity = 0.001 [explosion]–параметры взрыва blast = 1 ; – сила урона от взрывной волны blast_r = 15 –радиус взрывной волны blast_impulse = 350 ; – импульс взрывной волны frags = 15 ; – количество осколков от взрыва frags_r = 30 ; – радиус разлета осколков frag_hit = 0.5 ; – урон от попадания осколков frag_hit_impulse = 350 ; – импульс от осколков hit_type_blast = explosion ; – тип воздействия взрывной волны hit_type_frag = fire_wound ; – тип воздействия осколков up_throw_factor = 0.25 ; – какой то параметр подъема осколков вроде wm_size = 0.1-размер отметен на земле при попадании осколков explode_particles = explosions\expl_car ; – еще один какой то партикл взрыва light_color = 0.6,0.5,0.3 –цвет вспышки при взрыва light_range = 15.0-дальность освещения отой вспышкой light_time = 0.5 ; – время вспышки; трассы от осколков fragment_speed = 76 ; – похоже на скорость разлетов осколков fragment_tracer_max_length = 3 размер трасера воответственно explode_duration = 50; подолжительность взрыва(с)-после этого времени пропадет партикл взрыва; звуки snd_explode = weapons\heli_explosion ; – похоже именно этот параметр и отвечает за звук взрыва; wallmarks wallmark_section = explosion_marks-вроде тип следов от осколков(не уверен) [explode_effector] effect_sect_name = effector_explode_hit-эффект от взрыва [air_resistance]– какое то сопративление воздуха,понятия не имею как работает,и работает ли вообще linear_factor = 500.f angular_factor = 500.f [wheels_params]– общие параметры для колес,лучше настраивать для каждого колеса(ниже) damping_factor = 10; spring_factor = 1 ; – не смог определить как эти параметры влияют на подобные параметры в настройках сустава,потому ставлю значения 2 и 3 соответственно friction_factor = 1.0 ; – это коефициент трения,лучше использовать значения от 1.5 до 2(при 2 уже давольно большая сила трения получается,машина в повороты будет входить жестко и терять сильно скорость),трение на задних колесах лучше всего делать больше чем на передних [front_left_wheel] break_torque = 0.015; Сила тормозных колодок.(N*m hand_break_torque = 0.015; сила торможения пробелом(по умолчанию = break_torque) damping_factor = 10 spring_factor = 1 friction_factor = 0.9 ….….….…. [collide] not_collide_parts = 1 – по идее должен включать/отключать колизию между какими то частями модели,но похоже не на что не влияет [destroyed] – секция,в которой указываются модели деталей машины появляющихся во время взрыва,если нет таких моделей то можно просто удалить эту секцию,тогда после взрыва останется старая модель машины(в нее даже можно сесть,но не ехать J) [autoremove_parts] time = 30 -время исчезновения частей машины(если предыдущая секция удалена то модель машины после взрыва исчезнет только после перезагрузки сейва) [impulse_transition_to_parts]-параметры разлета частей машины(если они были заданы в секции destroyed) random_min = 10.0; величина случайно направленного импульса пропорционально массе нового объекта random_hit_imp = 1.0; величина случайно направленного импульса пропорционально разрушающему хиту; ref_bone = ; кость из по которой определяется скорость для частей у который связь не задана,по умолчанию рут imp_transition_factor = 1.0; фактор с которым прикладывается хит по исходному объекту ко всем частям lv_transition_factor = 0.5; коэффициент передачи линейной скорости av_transition_factor = 0.5; коэффициент передачи угловой скорости Теперь настроим конфиг под нашу модель.Вот что получилось: [disable] linear_factor = 0.3 angular_factor = 0.3; -------------------------------------------------------------------------------; ------Общие параметры--------------------------------------------------------- [car_definition] camera_pos = -0.37,1.61,-0.2; позиция камеры актора в машине driving_wheels = back_left_wheel,back_right_wheel,front_left_wheel,front_right_wheel; ведущие колёса steering_wheels = front_left_wheel,front_right_wheel; рулевые колёса breaking_wheels = front_left_wheel,front_right_wheel,back_left_wheel,back_right_wheel; тормозящие колёса doors = left_door,right_door; двери steer = stearing_wheel; руль driver_place = seat_left; место водителя exhausts = exhaust; выхлопная труба; exhaust_particles = vehiclefx\exhaust_1; -------------------------------------------------------------------------------; ------Factory parameters of Engine------------------------------------------- fuel_tank = 80; L fuel_consumption = 1; L/(100k R); liters per 100 000 rotations engine_power = 70; horse_power(kW = hp*0.808)max power max_power_rpm = 4500; (nominal rpm)on this rpm value engine power reaches maximum max_torque_rpm = 3000; on this rpm engine torque reaches maximum power_increment_factor = 0.01 power_decrement_factor = 0.01 rpm_increment_factor = 0.02 rpm_decrement_factor = 0.01 m_power_neutral_factor = 0.75; additional engine parameters max_engine_rpm = 4600; rpm(5000)rpm will never be more idling_engine_rpm = 750; rpm(750)min rpm-starts from this rpm value; -------------------------------------------------------------------------------; ------Adjustment a wheel----------------------------------------------------- reference_radius = 0.4; Радиус колеса,используемый при просчёте двигателя axle_friction = 0.001; Ослабление скорости в нетральной позиции.(N*m) steering_speed = 0.8; Скорость поворота рулевого колеса,в максимум.rps(1) steering_torque = 9000; Сила гидроусилителя руля.(N*m) break_torque = 0.052; Сила тормозных колодок.(N*m) break_time = 1.0; Время нарастания силы торможения до максимума,при подтормаживании(стрелка назад) hand_break_torque = 0.022; Сила торможения пробелом(по умолчанию = break_torque); -------------------------------------------------------------------------------; ------Gearbox---------------------------------------------------------------- main_gear_ratio = 6.5; Передаточное отношение auto_transmission = off; Автоматическая коробка(on/off) [transmission_gear_ratio]; shift down/shift up.(rpm,необходимое для переключения) R = 3.34,1000,4800 N1 = 3.23,1000,2400 N2 = 1.99,1800,2800 N3 = 1.29,2700,3850 N4 = 1,3600,4800; -------------------------------------------------------------------------------; ------Rest Adjustment-------------------------------------------------------- [lights] headlights = f1,f2,f3,f4,f5,f6 [f1] bone = left_light color = 1.5,1.5,1.5,0.5 range = 40 cone_angle = 40 spot_texture = internal\internal_light_attpoint glow_texture = glow\glow_white glow_radius = 0.5 [f2] bone = right_light color = 1.5,1.5,1.5,0.5 range = 40 cone_angle = 40 spot_texture = internal\internal_light_attpoint glow_texture = glow\glow_white glow_radius = 0.5 [f3] bone = top_right_light color = 0.5,0.5,0.5,0.5 range = 30 cone_angle = 40 spot_texture = internal\internal_light_attpoint glow_texture = glow\glow_white glow_radius = 0.5 [f4] bone = top_right2_light color = 0.5,0.5,0.5,0.5 range = 30 cone_angle = 40 spot_texture = internal\internal_light_attpoint glow_texture = glow\glow_white glow_radius = 0.5 [f5] bone = top_left_light color = 0.5,0.5,0.5,0.5 range = 30 cone_angle = 40 spot_texture = internal\internal_light_attpoint glow_texture = glow\glow_white glow_radius = 0.5 [f6] bone = top_left2_light color = 0.5,0.5,0.5,0.5 range = 30 cone_angle = 40 spot_texture = internal\internal_light_attpoint glow_texture = glow\glow_white glow_radius = 0.5; -------------------------------------------------------------------------------; ------Звуки------------------------------------------------------------------ [car_sound] snd_volume = 1.0 snd_name = car\niva_run engine_sound_start_dellay = 0.5 engine_start = car\niva_start engine_stop = car\niva_stop transmission_switch = car\car_gearchange explosion_sound = weapons\heli_explosion relative_pos = 0,1.1,1.1; -------------------------------------------------------------------------------; ------animations params------------------------------------------------------ [doors] open_torque_factor = 3.; множитель момента сил для открывания двери(default = 2) [animations] driver_animation_type = 0; тип анимаций актера для данной машины.; -------------------------------------------------------------------------------; ------damage params---------------------------------------------------------- [damage_particles] explosion_particles = explosions\expl_car car_damage_particles1 = explosions\expl_car_smoke_small car_damage_particles2 = explosions\expl_car_smoke_big wheels_damage_particles1 = vehiclefx\exhaust_1 wheels_damage_particles2 = vehiclefx\exhaust_1 particle_bones1 = kapot particle_bones2 = kapot; -------------------------------------------------------------------------------; ------particle bones--------------------------------------------------------- [particle_bones] kapot = 0,0,0; -------------------------------------------------------------------------------; ------damage items----------------------------------------------------------- [damage_items] back_left_wheel = 5000 back_right_wheel = 5000 front_left_wheel = 5000 front_right_wheel = 5000 left_door = 2000 right_door = 2000; -------------------------------------------------------------------------------; ------collisiondamage-------------------------------------------------------- [collision_damage] root = 0.00001 front_bamper = 0.00001 kapot = 0.00001; -------------------------------------------------------------------------------; ------damage bones----------------------------------------------------------- [damage_bones]; аналогично секции в актере,но без анимаций; bone_name = <hit_scale>,<-1>,<wound_scale>; <hit_scale>-коэфф.изменения хита(уменьшения здоровья); <wound_scale>-коэфф.изменения величины открытой раны-незадействован default = 0.3,-1,0.1; -------------------------------------------------------------------------------; ------Иммунитеты------------------------------------------------------------- [immunities] burn_immunity = 0.005 strike_immunity = 0.0001 shock_immunity = 0.0001 wound_immunity = 0.005 radiation_immunity = 0.0 telepatic_immunity = 0.0 chemical_burn_immunity = 0.001 explosion_immunity = 0.0001 fire_wound_immunity = 0.005 wound_2_immunity = 0.0; -------------------------------------------------------------------------------; ----------------explosion params----------------------------------------------- [explosion] blast = 20 blast_r = 8 blast_impulse = 350 frags = 44 frags_r = 20 frag_hit = 1.7 frag_hit_impulse = 350 hit_type_blast = explosion hit_type_frag = fire_wound up_throw_factor = 0.25 wm_size = 0.1 explode_particles = explosions\expl_car light_color = 0.6,0.5,0.3 light_range = 15.0 light_time = 0.5; трассы от осколков fragment_speed = 76 fragment_tracer_max_length = 3 explode_duration = 60; подолжительность взрыва(с) snd_explode = weapons\heli_explosion wallmark_section = explosion_marks [explode_effector] effect_sect_name = effector_explode_hit; -------------------------------------------------------------------------------; ------Others params---------------------------------------------------------- [air_resistance] linear_factor = 500.f; angular_factor = 500.f; [wheels_params] damping_factor = 2; spring_factor = 3; friction_factor = 1.7; [front_left_wheel] break_torque = 0.075; Сила тормозных колодок.(N*m) hand_break_torque = 0.05; сила торможения пробелом(по умолчанию = break_torque) damping_factor = 2; spring_factor = 3; friction_factor = 1.65; [front_right_wheel] break_torque = 0.075; Сила тормозных колодок.(N*m) hand_break_torque = 0.05; сила торможения пробелом(по умолчанию = break_torque) damping_factor = 2; spring_factor = 3; friction_factor = 1.65; [back_left_wheel] break_torque = 0.05; Сила тормозных колодок.(N*m) hand_break_torque = 0.02; сила торможения пробелом(по умолчанию = break_torque) damping_factor = 2; spring_factor = 3; friction_factor = 1.8; [back_right_wheel] break_torque = 0.05; Сила тормозных колодок.(N*m) hand_break_torque = 0.02; сила торможения пробелом(по умолчанию = break_torque) damping_factor = 2; spring_factor = 3; friction_factor = 1.8; [collide] not_collide_parts = 1; -------------------------------------------------------------------------------; ------destroyed part--------------------------------------------------------- [autoremove_parts] time = 60; время удаления обломков(c); -------------------------------------------------------------------------------; ---part impulse_transition--------------------------------------------------- [impulse_transition_to_parts] random_min = 1.0; величина случайно направленного импульса пропорционально массе нового объекта random_hit_imp = 1.5; величина случайно направленного импульса пропорционально разрушающему хиту; ref_bone = ; кость из по которой определяется скорость для частей у который связь не задана,по умолчанию рут imp_transition_factor = 1.0; фактор с которым прикладывается хит по исходному объекту ко всем частям lv_transition_factor = 0.5; коэффициент передачи линейной скорости av_transition_factor = 0.5; коэффициент передачи угловой скорости; -------------------------------------------------------------------------------; ------End params------------------------------------------------------------- Теперь осталось только заспаунить машину в игре Создаем в папке gamedata\config\creatures файл, назовем его vechicles, в нем пишем: [vehicle_niva_offroad] $spawn = "vehicles\veh_niva_offroad" GroupControlSection = spawn_group class = SCRPTCAR cform = skeleton ef_equipment_type = 3 ph_mass = 100000 script_binding = bind_physic_object.init visual = physics\vehicles\veh_niva_offroad.ogf actor_visual = physics\vehicles\veh_niva_offroad.ogf Теперь в файл system.ltx добавляем строчку: #include "creatures\vechicles.ltx" Теперь создаем новый скрипт (в папке scripts), называем его например spawn_car и вписываем в него: function car_spawn() alife():create("vehicle_niva_offroad ",vector():set(-63.113,-9.931,-41.508),212929,78) end Теперь в файле info_portions.ltx ищем строчки: <game_information_portions> <info_portion id="storyline_actor_start"> <task>storyline_eliminate_gunslinger</task> </info_portion> И заменяем их на: <game_information_portions> <info_portion id="storyline_actor_start"> <task>storyline_eliminate_gunslinger</task> <action> spawn_car. car_spawn </action> </info_portion> Заходим в игру, начинаем новую игру и лицезреем нашу машину на кордоне около вагончика. Усе… Этот урок *.doc файлом. Ссылка. Усложнённый вариант создания моделей колёсной техники в 3DSMax. Для более "низкоуровнего" понимания управления техникой https://www.amk-team.ru/forum/topic/14212-upravlenie-obektami-igrovogo-mira/ Изменено 14 Мая 2020 пользователем Graff46 Добавлял уроки 1 2 2 Ссылка на комментарий
DarkSnowder 900 Опубликовано 6 Октября 2017 Поделиться Опубликовано 6 Октября 2017 Было бы неплохо сделать тутор по возвращению в ТЧ и его аддонах способности ГГ, сидящего в БТР, стрелять по противникам как в LA. А так туторы хороши, а то техника уже давно развития не получает. Лучше сделать мод с 0, чем пытаться залатать багованный. Ссылка на комментарий
Murarius 10 533 Опубликовано 6 Октября 2017 Поделиться Опубликовано 6 Октября 2017 Почему не получает? @Дизель вроде занимался этим, даже результаты какие-то были. Конкретизировать не могу, просто сам факт помню. 1 Литературка (избранное): "Координаты избушки" (2023) --- "Колобок времени" (2019) --- "Пиво и жлоб" (2018) --- "Лекарство против морщин" (2013) --- "Когда все пройдет" (2013) Креатив (бесперспективное): Dominanta --- Сон на земле Досвиданьице (слезное): Смена администратора (2024) Ссылка на комментарий
Graff46 598 Опубликовано 6 Октября 2017 Автор Поделиться Опубликовано 6 Октября 2017 1 час назад, Han Sola сказал: способности ГГ, сидящего в БТР, стрелять по противникам как в LA Если использовать X-Ray extensions, то могу попробовать сделать. Ссылка на комментарий
DarkSnowder 900 Опубликовано 7 Октября 2017 Поделиться Опубликовано 7 Октября 2017 (изменено) 22 часа назад, Graff46 сказал: могу попробовать сделать. Я всего лишь предложил, решать то тебе 22 часа назад, Murarius сказал: Почему не получает? @Дизель вроде занимался этим, даже результаты какие-то были. Конкретизировать не могу, просто сам факт помню. Ну не знаю. Учитывая большинство модов с авто, могу сказать что оно там чисто для галки: "ни физики, ни химии"(даже в OLR и LA). Не знаю почему ещё на АМК никто не додумался перенести авто из Build 1558 с полным функционалом и настроенной физикой и выложить как отдельный проэкт. Изменено 7 Октября 2017 пользователем Han Sola 3 Лучше сделать мод с 0, чем пытаться залатать багованный. Ссылка на комментарий
Graff46 598 Опубликовано 7 Октября 2017 Автор Поделиться Опубликовано 7 Октября 2017 В шапку добавлен урок по тонкостям создания моделей машин и их настройке от СДК до конфигов от @Saruman Ссылка на комментарий
Expropriator 2 118 Опубликовано 7 Октября 2017 Поделиться Опубликовано 7 Октября 2017 (изменено) В 06.10.2017 в 14:09, Han Sola сказал: Было бы неплохо сделать тутор по возвращению в ТЧ и его аддонах способности ГГ, сидящего в БТР, стрелять по противникам как в LA. А так туторы хороши, а то техника уже давно развития не получает. Сделано на ЗП, даже лучше чем в Лост-Альфа. https://www.youtube.com/watch?v=osyTSDq-F1g http://www.amk-team.ru/forum/topic/13331-bazovaya-platforma-dlya-razrabotki-modov-zp/?do=findComment&comment=1055355 Изменено 7 Октября 2017 пользователем Дизель 2 1 1 Ссылка на комментарий
_Val_ 2 225 Опубликовано 8 Октября 2017 Поделиться Опубликовано 8 Октября 2017 (изменено) Поспрашиваю народ...Если над Террой работы не ведутся, могу выложить и скрипты и логику для бэтра. Смысл. БТР атакует любую враждебную цель. Если это бтр Долга, то атакует мутантов, свободовцев и т.д...ГГ по поршням:-) Надеюсь понятно объяснил. Если кому нужно конечно:-) Изменено 8 Октября 2017 пользователем _Val_ 2 Ссылка на комментарий
Marafon6540 757 Опубликовано 8 Октября 2017 Поделиться Опубликовано 8 Октября 2017 Конечно нужно. Интересная схема. 1 Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
Graff46 598 Опубликовано 8 Октября 2017 Автор Поделиться Опубликовано 8 Октября 2017 Только что, _Val_ сказал: могу выложить и скрипты и логику для бэтра. Не плохо было бы... 1 Ссылка на комментарий
_Val_ 2 225 Опубликовано 8 Октября 2017 Поделиться Опубликовано 8 Октября 2017 6 часов назад, Graff46 сказал: было бы Бью челом. Созвонился по скайпу - разработка продолжается. Извиняйте за неоправданные надежды...И кикните мои посты. Ссылка на комментарий
Graff46 598 Опубликовано 12 Октября 2017 Автор Поделиться Опубликовано 12 Октября 2017 (изменено) Вопрос по машинам, так Ccar:CurrentVel() получаем вектор скорости, как с его помощью узнать машина едет вперёд или назад? Изменено 12 Октября 2017 пользователем Graff46 Ссылка на комментарий
Graff46 598 Опубликовано 12 Октября 2017 Автор Поделиться Опубликовано 12 Октября 2017 (изменено) Использую такой код (ph_car [ТЧ]) для управления движением транспорта Скрытый текст local diff_angle = angle_xz(self.object, self.path_walk:point(pt)) local accel = move.none local napr = math.abs(self.car:CurrentVel():getH() - self.object:direction():getH()) < math.pi/2 local curVel= self.car:CurrentVel():magnitude() printf2("car <move>: curVel = %f, speed = %f", curVel, self.speed) nt.logfile('spdDir_'..math.abs(self.car:CurrentVel():getH() - self.object:direction():getH()).."_"..curVel.."_"..tostring(napr).."__"..self.target_walk_pt or-1) get_console():execute('napr__'..tostring(napr)) self.val = 0 if (curVel*1.15 < self.speed and napr) or (curVel/1.2 > self.speed*1.10 and not napr) then accel = move.fwd self.moving2 = 'fwd' self.val = self.speed nt.logfile('fwd__'..self.val) printf2("car <move>: forward") elseif curVel/1.15 > self.speed and napr then -- or diff_angle >= math.pi then accel = move.back self.moving2 = 'back' self.val = curVel - self.speed nt.logfile('back__'..self.val) printf2("car <move>: backward") end --printf2("car <move>: diff_angle = %f, katet = %f", diff_angle, get_katet(self.object, self.path_walk:point(pt))) --if utils.no_need_to_rotate_xz(self.object, self.path_walk:point(pt)) then if diff_angle < def_not_rotating_angle then if self.state_moving ~= state_moving_fwd and accel ~= move.none then printf2("car <move>: no_need_to_rotate. speed = %f, time = %f", self.speed, self.fc_upd_avg) xr_logic.mob_capture(self.object, true) action(self.object, move(accel, self.val), cond(cond.time_end, time_infinite)) --self.fc_upd_avg)) self.state_moving = state_moving_fwd end else Но машина постоянно чудит, после 1 - 2го поинта едет задним ходом... Вот лог от ф-ции: nt.logfile() Скрытый текст spdDir_0.014278559014201_0.012593886815012_true__0 fwd__2 spdDir_0.10564518719912_0.013725337572396_true__0 fwd__2 spdDir_0.16357761621475_0.014542282558978_true__0 fwd__2 spdDir_0.17467115819454_0.015221426263452_true__0 fwd__2 spdDir_0.17532566189766_0.015817334875464_true__0 fwd__2 spdDir_0.1566367149353_0.016169246286154_true__0 fwd__2 spdDir_0.1813700646162_0.016585187986493_true__0 fwd__2 spdDir_0.20307944715023_0.016763366758823_true__0 fwd__2 spdDir_0.20176222920418_0.01673267967999_true__0 fwd__2 spdDir_0.22335065901279_0.016573859378695_true__0 fwd__2 spdDir_0.14550393819809_0.40132910013199_true__0 fwd__2 spdDir_0.23000739514828_0.81769108772278_true__0 fwd__2 spdDir_0.24969735741615_1.4038903713226_true__0 fwd__2 spdDir_0.25723189115524_2.0576894283295_true__0 spdDir_0.25095126032829_2.5990877151489_true__0 back__0.59908771514893 spdDir_0.25007790327072_3.1547276973724_true__0 back__1.1547276973724 spdDir_0.25154742598534_3.9149827957153_true__0 back__1.9149827957153 spdDir_0.24882689118385_4.828022480011_true__0 back__2.828022480011 spdDir_0.23291353881359_5.3724675178528_true__0 back__3.3724675178528 spdDir_0.21924336254597_6.0753960609436_true__0 back__4.0753960609436 spdDir_0.20914486050606_6.4568724632263_true__0 back__4.4568724632263 spdDir_0.20305776596069_6.7635250091553_true__0 back__4.7635250091553 spdDir_0.20184892416_6.8378591537476_true__0 back__4.8378591537476 spdDir_0.20586559176445_6.9034485816956_true__0 back__4.9034485816956 spdDir_0.20724061131477_6.9416508674622_true__0 back__4.9416508674622 spdDir_0.20298582315445_6.9373550415039_true__0 back__4.9373550415039 spdDir_0.20326516032219_6.941219329834_true__0 back__4.941219329834 spdDir_0.19856858253479_6.9626235961914_true__0 back__4.9626235961914 spdDir_0.19630861282349_7.0131068229675_true__0 back__5.0131068229675 spdDir_0.19596612453461_7.0552797317505_true__0 back__5.0552797317505 spdDir_0.18721562623978_7.0483746528625_true__0 back__5.0483746528625 spdDir_0.18676716089249_7.023868560791_true__0 back__5.023868560791 spdDir_0.19103157520294_6.9666819572449_true__0 back__4.9666819572449 spdDir_0.19434398412704_6.9083924293518_true__0 back__4.9083924293518 spdDir_0.19337069988251_6.8574771881104_true__0 back__4.8574771881104 spdDir_0.20116680860519_6.8349704742432_true__0 back__4.8349704742432 spdDir_0.2014587521553_6.8226747512817_true__0 back__4.8226747512817 spdDir_0.20201289653778_6.7937660217285_true__0 back__4.7937660217285 spdDir_0.20645320415497_6.7399320602417_true__0 back__4.7399320602417 spdDir_0.20132666826248_6.6989431381226_true__0 back__4.6989431381226 spdDir_0.20871663093567_6.7068982124329_true__0 back__4.7068982124329 spdDir_0.20818889141083_6.7211627960205_true__0 back__4.7211627960205 spdDir_0.2035756111145_6.7344326972961_true__0 back__4.7344326972961 spdDir_0.20062345266342_6.7292413711548_true__0 back__4.7292413711548 spdDir_0.2007098197937_6.7114443778992_true__0 back__4.7114443778992 spdDir_0.20298433303833_6.6987447738647_true__0 back__4.6987447738647 spdDir_0.20703864097595_6.6826496124268_true__0 back__4.6826496124268 spdDir_0.20734083652496_6.6802382469177_true__0 back__4.6802382469177 spdDir_0.20508444309235_6.690637588501_true__0 back__4.690637588501 spdDir_0.21080636978149_6.7201986312866_true__0 back__4.7201986312866 spdDir_0.20921266078949_6.7728290557861_true__0 back__4.7728290557861 spdDir_0.21102285385132_6.7501544952393_true__0 back__4.7501544952393 spdDir_0.21078491210938_6.7966079711914_true__0 back__4.7966079711914 spdDir_0.21505081653595_6.756739616394_true__0 back__4.756739616394 spdDir_0.21179342269897_6.8156423568726_true__0 back__4.8156423568726 spdDir_0.20776951313019_6.8232393264771_true__0 back__4.8232393264771 spdDir_0.21900999546051_6.8700222969055_true__0 back__4.8700222969055 spdDir_0.21817624568939_6.866322517395_true__0 back__4.866322517395 spdDir_0.21759152412415_6.8795208930969_true__0 back__4.8795208930969 spdDir_0.22012257575989_6.8073749542236_true__0 back__4.8073749542236 spdDir_0.22133100032806_6.8302326202393_true__0 back__4.8302326202393 spdDir_0.21625578403473_6.8755927085876_true__0 back__4.8755927085876 spdDir_0.2174631357193_7.0232238769531_true__0 back__5.0232238769531 spdDir_0.21651208400726_7.1242933273315_true__0 back__5.1242933273315 spdDir_0.20888197422028_7.1175470352173_true__0 back__5.1175470352173 spdDir_0.20989835262299_7.1508145332336_true__0 back__5.1508145332336 spdDir_0.20822584629059_7.1389827728271_true__0 back__5.1389827728271 spdDir_0.20488214492798_7.1264429092407_true__0 back__5.1264429092407 spdDir_0.20534896850586_7.1147756576538_true__0 back__5.1147756576538 spdDir_0.20833885669708_7.0819401741028_true__0 back__5.0819401741028 wwwwwwwwwwwwwwwwwwwwwwww_1 spdDir_0.20579493045807_7.1045432090759_true__1 back__5.1045432090759 spdDir_0.20074760913849_7.0890364646912_true__1 back__5.0890364646912 spdDir_0.19134199619293_7.064197063446_true__1 back__5.064197063446 spdDir_0.18451285362244_7.0116362571716_true__1 back__5.0116362571716 spdDir_0.17204594612122_6.9820795059204_true__1 back__4.9820795059204 spdDir_0.16188251972198_6.8498477935791_true__1 back__4.8498477935791 spdDir_0.15140998363495_6.7013721466064_true__1 back__4.7013721466064 spdDir_0.14383172988892_6.5214047431946_true__1 back__4.5214047431946 spdDir_0.13515758514404_6.3070130348206_true__1 back__4.3070130348206 spdDir_0.12569952011108_6.0582032203674_true__1 back__4.0582032203674 spdDir_0.11634206771851_5.775089263916_true__1 back__3.775089263916 spdDir_0.10601568222046_5.4569234848022_true__1 back__3.4569234848022 spdDir_0.097358226776123_5.1434535980225_true__1 back__3.1434535980225 spdDir_0.086802959442139_4.7616248130798_true__1 back__2.7616248130798 spdDir_0.069137334823608_4.3303918838501_true__1 back__2.3303918838501 spdDir_0.061870336532593_4.1496620178223_true__1 back__2.1496620178223 spdDir_0.052635431289673_3.7341251373291_true__1 back__1.7341251373291 spdDir_0.025105476379395_3.0095956325531_true__1 back__1.0095956325531 spdDir_0.0010528564453125_2.5038666725159_true__1 back__0.50386667251587 spdDir_0.0028626918792725_2.2433774471283_true__1 spdDir_0.040377378463745_1.7403585910797_true__1 spdDir_0.16569304466248_1.0046521425247_true__1 fwd__2 spdDir_0.48556566238403_0.33452045917511_true__1 fwd__2 spdDir_1.8806613683701_0.039005003869534_false__1 spdDir_3.2030577659607_0.12685026228428_false__1 spdDir_3.2801151275635_0.12406108528376_false__1 spdDir_3.2418644428253_0.25637617707253_false__1 spdDir_3.2423577308655_0.25332534313202_false__1 spdDir_3.1935448646545_0.40179154276848_false__1 spdDir_3.2046048641205_0.55949348211288_false__1 spdDir_3.216498374939_0.72475647926331_false__1 spdDir_3.2254552841187_0.8962824344635_false__1 spdDir_3.2393260002136_0.89285469055176_false__1 spdDir_3.237811088562_1.2546104192734_false__1 spdDir_3.2597358226776_1.4386873245239_false__1 spdDir_3.2750196456909_1.8076652288437_false__1 spdDir_3.2900087833405_2.0003640651703_false__1 spdDir_3.3051905632019_2.1831839084625_false__1 spdDir_3.3166151046753_2.1786217689514_false__1 spdDir_3.3226108551025_2.3381934165955_false__1 spdDir_3.3375580310822_2.3282976150513_false__1 spdDir_3.354811668396_2.4341387748718_false__1 spdDir_3.3511562347412_2.5794146060944_false__1 spdDir_3.3788588047028_2.7372453212738_false__1 fwd__2 spdDir_3.3963308334351_2.7207510471344_false__1 fwd__2 spdDir_3.3990802764893_2.8657197952271_false__1 fwd__2 spdDir_3.3948802947998_3.0158286094666_false__1 fwd__2 spdDir_3.3998560905457_3.0056970119476_false__1 fwd__2 spdDir_3.3915410041809_3.1430704593658_false__1 fwd__2 spdDir_3.3892650604248_3.278801202774_false__1 fwd__2 spdDir_3.3894000053406_3.409893989563_false__1 fwd__2 spdDir_3.3919291496277_3.536333322525_false__1 fwd__2 spdDir_3.3940272331238_3.6579532623291_false__1 fwd__2 spdDir_3.3917193412781_3.9046683311462_false__1 fwd__2 spdDir_3.3872005939484_4.0168089866638_false__1 fwd__2 spdDir_3.3908843994141_4.1254572868347_false__1 fwd__2 spdDir_3.3911888599396_4.2294950485229_false__1 fwd__2 spdDir_3.3907384872437_4.2202839851379_false__1 fwd__2 spdDir_3.3869478702545_4.3205819129944_false__1 fwd__2 spdDir_3.3937392234802_4.3042583465576_false__1 fwd__2 spdDir_3.3964858055115_4.3973317146301_false__1 fwd__2 spdDir_3.3996336460114_4.4956760406494_false__1 fwd__2 spdDir_3.3964476585388_4.5908389091492_false__1 fwd__2 spdDir_3.3973870277405_4.6888566017151_false__1 fwd__2 spdDir_3.3965511322021_4.7855639457703_false__1 fwd__2 spdDir_3.3960857391357_4.8836588859558_false__1 fwd__2 spdDir_3.3926334381104_5.0923743247986_false__1 fwd__2 spdDir_3.3921775817871_5.1860175132751_false__1 fwd__2 spdDir_3.3969693183899_5.1772346496582_false__1 fwd__2 spdDir_3.396000623703_5.2680969238281_false__1 fwd__2 spdDir_3.3939912319183_5.5775437355042_false__1 fwd__2 spdDir_3.3981552124023_5.6723847389221_false__1 fwd__2 spdDir_3.3955965042114_5.7607016563416_false__1 fwd__2 spdDir_3.3976972103119_5.8536715507507_false__1 fwd__2 spdDir_3.4034459590912_5.9453749656677_false__1 fwd__2 spdDir_3.3961353302002_6.01447057724_false__1 fwd__2 spdDir_3.3821568489075_6.0519909858704_false__1 fwd__2 spdDir_3.3832612037659_6.1053676605225_false__1 fwd__2 spdDir_3.4034616947174_6.0990056991577_false__1 fwd__2 spdDir_3.4175896644592_6.1682257652283_false__1 fwd__2 spdDir_3.430356502533_6.1639246940613_false__1 fwd__2 spdDir_3.4264390468597_6.2174115180969_false__1 fwd__2 spdDir_3.4136743545532_6.2696933746338_false__1 fwd__2 spdDir_3.4104566574097_6.3369078636169_false__1 fwd__2 spdDir_3.403915643692_6.2521319389343_false__1 fwd__2 spdDir_3.3794322013855_6.2006282806396_false__1 fwd__2 spdDir_3.3866925239563_6.2710909843445_false__1 fwd__2 spdDir_3.4127614498138_6.3465104103088_false__1 fwd__2 spdDir_3.4184236526489_6.4273796081543_false__1 fwd__2 spdDir_3.4165344238281_6.5196442604065_false__1 fwd__2 spdDir_3.40758061409_6.6010370254517_false__1 fwd__2 spdDir_3.4174399375916_6.5879955291748_false__1 fwd__2 spdDir_3.4233107566833_6.6506128311157_false__1 fwd__2 spdDir_3.4314329624176_6.7216076850891_false__1 fwd__2 spdDir_3.4374225139618_6.7910814285278_false__1 fwd__2 spdDir_3.463399887085_6.8171052932739_false__1 fwd__2 spdDir_3.488737821579_6.8414516448975_false__1 fwd__2 spdDir_3.5069146156311_6.8880858421326_false__1 fwd__2 spdDir_3.5217008590698_6.9454188346863_false__1 fwd__2 spdDir_3.4746375083923_6.7659616470337_false__1 fwd__2 spdDir_3.4480004310608_6.8539276123047_false__1 fwd__2 spdDir_3.4673225879669_6.6928520202637_false__1 fwd__2 spdDir_3.4791007041931_6.7703886032104_false__1 fwd__2 spdDir_3.4988927841187_6.8475456237793_false__1 fwd__2 spdDir_3.5070905685425_7.0104117393494_false__1 fwd__2 spdDir_3.5133385658264_6.7567710876465_false__1 fwd__2 spdDir_3.5526218414307_6.7480139732361_false__1 fwd__2 spdDir_3.5789239406586_6.7874455451965_false__1 fwd__2 spdDir_3.7533893585205_5.8628263473511_false__1 fwd__2 spdDir_3.7798776626587_5.7585072517395_false__1 fwd__2 spdDir_3.7789680957794_5.7500395774841_false__1 fwd__2 spdDir_3.7783184051514_5.7492747306824_false__1 fwd__2 spdDir_3.7712998390198_5.7721290588379_false__1 fwd__2 spdDir_3.7600162029266_5.7460551261902_false__1 fwd__2 spdDir_3.7228600978851_5.565272808075_false__1 fwd__2 spdDir_3.6702909469604_5.2024545669556_false__1 fwd__2 spdDir_3.6583609580994_4.9212460517883_false__1 fwd__2 spdDir_3.6697671413422_4.7693629264832_false__1 fwd__2 Изменено 12 Октября 2017 пользователем Graff46 Ссылка на комментарий
Expropriator 2 118 Опубликовано 18 Октября 2017 Поделиться Опубликовано 18 Октября 2017 (изменено) @Graff46, вот пример, наподобие твоего. Машина едит по вейпоинтам и превращается в машину для ГГ. https://www.youtube.com/watch?v=XXjxQnhGZYM Логика работает в рамках двух пакетов. Вернее трёх. Старт, езда, дестрой. В рамках езды можно использовать один вейпоинт для цели. Изменено 19 Октября 2017 пользователем Дизель Ссылка на комментарий
Graff46 598 Опубликовано 20 Октября 2017 Автор Поделиться Опубликовано 20 Октября 2017 В 19.10.2017 в 02:24, Дизель сказал: наподобие твоего Я кстати доделал, с горем пополам, научил машины адекватно ездить, (пытаться объезжать препятствия, если машина во что то упётся), при завале на бок - машина поворачивает колёса вниз (к грунту) и пытается "встать", машина расчитывывает угол между точкой в которую стремиться и последующей точкой учитывая расстояния до точки - притормаживает что бы не "пролететь" поворот и не кружить потом вокруг поинта. p.s. Раньше ГГ мог мог "подруливать" находясь в едущей машине, после применения моей схемы это стало не возможно, но хотелось бы... (Я вот придумал, но сделать не могу т. к. движок, сделайте кто умеет...) Я немного посвещён в систему навигации НПС в игре (ноды, граф, поинты и тд), так вот я подумал: мы же можем получить геометрические размеры машинки (на крайняк длину\ширину можно в конфиге писать) так вот, по размеру машины (округляем вверх до метра) проецируем на XZ и собираем прямоугольник нодов (если машина Шр-на\Длина - 2\3м, а нод у нас 0.7, то получим прямоуг-к со сторонами (округ. до целого вверх): 3 и 4 нода) и теперь пусть происходит крутой алгоритм просчёта путей (вроде из GPS), только не для отдельного нода, а для прямоугольника нодов. Тут засада в диком изменении алгоритма и математике, но это я так, к сведению... Ссылка на комментарий
Graff46 598 Опубликовано 21 Октября 2017 Автор Поделиться Опубликовано 21 Октября 2017 Новый скрипт остался в городе на ноутбуке, в рабочие дни выложу с описанием... Ссылка на комментарий
Graff46 598 Опубликовано 25 Октября 2017 Автор Поделиться Опубликовано 25 Октября 2017 (изменено) Обещанный скрипт в "СиКВере". Описание Скрытый текст Модернизированная логика для наземной техники в "Сталкере" Скрипт ph_car.script из ТЧ. Что нового: Если установить параметр логики detour в true, то если машина упрётся в препятствие - она будет пытаться объехать препятствие отъезжая ~1 метр назад и продолжать движение вперед. Если машина завалится на бок (=<0.65 радиан), то колёса будут повернуты в сторону крена (к земле) и машина, таким образом, будет пытаться встать на колёса. Вы можете не указывать максимальную скорость, скрипт сам высчитывает скорость исходя из следующих параметров: Угол между точкой в которую стремится машина (ожидается, что в этой точке вектор поворота в пространстве машины равен вектору скорости машины сейчас) и следующей точкой*; Расстояние до точки, * Если следующая точка отсутствует, то следующая точка берется первой если есть параметр циклически проходить путь, иначе скорость ограничится до 12 км/ч. Переделан алгоритм управления скоростью и рулению, теперь машина более адекватно себя ведет на высоких скоростях. Новые поля схемы логики (ph_car): lvs - Отладочное поле, не рекомендую использовать в релизах. Принимает специально формированную строку с набором левел вертексов и параметров, вертексы используются в качестве точек пути. Пример строки :lvs = 272977(spd=8), 249813(key=val), 234389(key=val), 187050(key=val), 152164(key=val), 134690(key=val) левелВертекс(ключ=значение),... Пара ключ-значение аналогичны значеням пареметрам задающихся вэй\лук поинтам в all.spawn p8:name = wp8|spd=5|key=value. Если хотите задать вертекс без параметров, то напишите пустые скобки ()!!! speed - Задаёт максимальную скорость, если нет иного ограничения в конфигурациях вэй-поинтов или в строке поля lvs. От автора: Когда расставляете точки пути - старайтесь распологать их так, что бы путь был максимально простым, без резких поворотов, иначе делайте больше точек. Так-же машана едет строго от точки к точке, смотрите, что бы небыло препятствий между точками. Если машина кружит вокруг одной точки, это значит, что она проскочила поинт и не может на него заехать, если это повторяется, то переместите поинт в другое место, также можно ограничить скорость или "разбавить" путь другими точками... Изменено 25 Октября 2017 пользователем Graff46 2 Ссылка на комментарий
Graff46 598 Опубликовано 25 Октября 2017 Автор Поделиться Опубликовано 25 Октября 2017 (изменено) В скрипте убраны отладочные ссылки на модуль nt.script Изменено 25 Октября 2017 пользователем Graff46 Ссылка на комментарий
HellRatz 2 861 Опубликовано 27 Октября 2017 Поделиться Опубликовано 27 Октября 2017 А как в стулкире рассчитывается звук двигателя? Ну, я понимаю, что по оборотам, но можно как-то реалистичнее это делать? Потому что система вообще какая-то не понятная, т.е звук нейтрального состояния движка (просто заведен) тупо растягивается в зависимости от оборотов и выглядит это очень глупо - при попытке создать вменяемый звук мотора получается пищащее/хрипящее нечто, а сделать нечто подобное или подобное в текущем варианте обработки звука не получается. Есть идеи как нормализовать звук движка? GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
dromundus 90 Опубликовано 13 Ноября 2017 Поделиться Опубликовано 13 Ноября 2017 (изменено) Кто нибудь знает какими точками транспорт наносит урон объекту на который наезжает.И можно ли его регулировать. Хотелось бы сделать так ,что танк наехал на машинку ударил по ней точкой усилия и та взрывалась.. В принципе и сейчас это работает только долбать машину приходится долго.. а это же танк он тяжёлый-машинка должна быть в кашу.Вот и вопрос - Где эти циферки урона вписаны.Ведь движок их считает откуда то при наезде на объект. Изменено 13 Ноября 2017 пользователем dromundus Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти