Это популярное сообщение. PTB 7 Опубликовано 18 Мая 2016 Это популярное сообщение. Поделиться Опубликовано 18 Мая 2016 (изменено) Скриптовые ролики Автора не помню.Внёс небольшие правки.В игре пишем в консоли demo_record название_вашего_роликаПробелом отмечаем точки через которые должна пролететь камера. Внимание! Если точки отделить слишком далеко, то они пролетят с сумашедшей скоростью! Сделав все точки куда пролетит камера, возвращаемся к месту где должен стоять ГГ(Если вы снимали например из бункера Сидора, то обратно камера политит прямо через terrein(землю)).Проиграть получившееся демо можно проиграть через консоль:demo_play название_вашего_роликаТеперь со скриптами делаем функцию function любое_название()local console = get_console()console: execute("demo_play название_ролика")end В идеале в функцию надо добавить отключение HUD’a, порытся в анимациях (не модельных) чтобы при начале скриптового ролика на несколько секунд не вылазил черный экран и сделать так чтобы в ролике бн сам Глав Герой. Все демо сохраняются в ХР примерно c:\documents and settings\all users\документы\stalker-shoc\savedgames.ыл виде Создание костюма с автоматическим применением препаратов.Решил побаловаться со скриптами, вот что получилось: Создаём скрипт ваше_название.scriptи пишем в него следующее: function kiber_outfit()local slot_outfit = db.actor:item_in_slot(6) -- переменная слотаlocal object_1 = db.actor:object("protection_outfit") -- переменная объекта (в данном случае укреплённый костюм учёного)if slot_outfit and slot_outfit:section() == "protection_outfit" and object_1 ~= nil then -- если в слоте бронька указаная в local object_1if db.actor.health <= 0.3 then -- если хп меньше 30%if db.actor:object("medkit") ~= nil ordb.actor:object("medkit_army") ~= nil ordb.actor:object("medkit_scientic") ~= nil thenlocal news_text = "%c[155,160,160,160]Автоматический приём медицинских препаратов\\n%c[default]Применение:%c[255,160,160,160] Принимаю медицинский препарат. %c[default]"db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000)automat_medkits()endendendendfunction automat_medkits()if db.actor:eat(db.actor:object("medkit")) ~= nil ordb.actor:eat(db.actor:object("medkit_army")) ~= nil ordb.actor:eat(db.actor:object("medkit_scientic")) ~= nil thenendend После этого в файле bind_stalker.script после строки object_binder.update(self, delta) пишем ваше_название_скрипта.kiber_outfit() Всё. Платформа: ТЧРешил поковырять скрипт, который выше под спойлером, получилось чёт вроде смены группировки при смене костюма.(скрипт надо дорабатывать) function test() --название функцииlocal gg = db.actor -- переменная ГГlocal item = gg:item_in_slot(6) -- переменная слота под костюмыlocal object_1 = db.actor:object("novice_outfit") -- переменная костюма новичка(можно менять на свои)local object_2 = db.actor:object("bandit_outfit") -- переменная костюма бандитаlocal object_3 = db.actor:object("killer_outfit") -- переменная костюма наёмникаlocal object_4 = db.actor:object("specops_outfit")-- переменная костюма военныхif item and item:section() == "novice_outfit" and object_1 ~= nil then--Смена группировки ГГprintf("ACTOR NOW IN [sTALKER] COMMUNITY")if db.actor then db.actor:set_character_community("stalker", 0, 0)end -- -- -- --return true end-- Ну и дальше также, только с другими костюмами.if item and item:section() == "bandit_outfit" and object_2 ~= nil thenprintf("ACTOR NOW IN [bANDIT] COMMUNITY") if db.actor then db.actor:set_character_community("bandit", 0, 0) end return true endif item and item:section() == "killer_outfit" and object_3 ~= nil thenprintf("ACTOR NOW IN [KILLER] COMMUNITY") if db.actor then db.actor:set_character_community("killer", 0, 0) end return true endif item and item:section() == "specops_outfit" and object_4 ~= nil thenprintf("ACTOR NOW IN [MILITARY] COMMUNITY") if db.actor then db.actor:set_character_community("military", 0, 0) end return true endend Изменено 8 Декабря 2016 пользователем BFG 5 В жизни много плохих моментов. Пытайся избавляться от них ! Ссылка на комментарий
Это популярное сообщение. FantomICW 675 Опубликовано 16 Июня 2016 Это популярное сообщение. Поделиться Опубликовано 16 Июня 2016 (изменено) [CoP] Пресеты Custom Data для SDK Добрый день! Предлагаю небольшую шпаргалку для тех, кто работает с заселением в SDK LE и более-менее понимает, для чего, вообще, нужен данный код. Фактически создано для копипаста и экономии времени. Для новичков, может, тоже будет не лишним почитать. Что необходимо учесть: 1. Я привык разбивать логику различных групп объектов по подпапкам (smart, anomaly, npc_logic, monsters_logic и другие). Это не есть обязательным, но рекомендую действовать таким же образом. Практика показывает, что другим модмейкерам, в этом случае, будет легче ориентироваться в файлах логики Вашего мода. 2. Каждый пресет является среднестатистическим набором для логики. Вы, само собой, можете убирать/добавлять дополнительные секции в роде collide, story_object. 3. Вместо location, в пути прописываете название локации. Удачи! ;) Для Custom Data в SDK [smart_terrain] cfg = scripts\location\smart\smart_name.ltx [anomal_zone] cfg = scripts\location\anomaly\anomal_zone.ltx [camp] cfg = scripts\camp.ltx [story_object] story_id = restr_story_id [logic] cfg = scripts\location\restrictors_logic\restr.ltx [logic] cfg = scripts\sr_sleep.ltx [story_object] story_id = object_story_id [collide] ignore_static ignore_small_objects [logic] cfg = scripts\location\physic_objects\object.ltx [physics_common] ;Альтернатива параметру fixed_bones, используется для квестовых айтемов device_pda и т. д. fixed_bones = link [story_object] story_id = anim_object_story_id [collide] ignore_static ignore_small_objects [logic] cfg = scripts\location\physic_objects\anim_object.ltx [animated_object] [story_object] story_id = box_story_id [logic] cfg = scripts\location\inventory_box\box.ltx [story_object] story_id = actor_box_story_id [logic] cfg = scripts\actor_inventory_box.ltx [level_spot] actor_box [logic] cfg = scripts\door.ltx Другое [exclusive] monster = location\monsters_logic\monster_l.ltx npc = location\npc_logic\npc_l.ltx ;==============================For SDK and logic==============================; ;------------------------------------------- ;Smart Terrain ;------------------------------------------- [smart_terrain] cfg = scripts\location\smart\smart_name.ltx ;------------------------------------------- ;Anomal Zone ;------------------------------------------- [anomal_zone] cfg = scripts\location\anomaly\anomal_zone.ltx ;------------------------------------------- ;Camp ;------------------------------------------- [camp] cfg = scripts\camp.ltx ;------------------------------------------- ;Space Resctrictor ;------------------------------------------- [story_object] story_id = restr_story_id [logic] cfg = scripts\location\restrictors_logic\restr.ltx ;------------------------------------------- ;Sleep Zone ;------------------------------------------- [logic] cfg = scripts\sr_sleep.ltx ;------------------------------------------- ;Physic Objects and Quest Items ;------------------------------------------- [story_object] story_id = object_story_id [collide] ignore_static ignore_small_objects [logic] cfg = scripts\location\physic_objects\object.ltx [physics_common] fixed_bones = link ;------------------------------------------- ;Anim Object ;------------------------------------------- [story_object] story_id = anim_object_story_id [collide] ignore_static ignore_small_objects [logic] cfg = scripts\location\physic_objects\anim_object.ltx [animated_object] ;------------------------------------------- ;Inventory Box ;------------------------------------------- [story_object] story_id = box_story_id [logic] cfg = scripts\location\inventory_box\box.ltx ;------------------------------------------- ;Actor Inventory Box ;------------------------------------------- [story_object] story_id = actor_box_story_id [logic] cfg = scripts\sr_sleep.ltx [level_spot] actor_box ;------------------------------------------- ;Door ;------------------------------------------- [logic] cfg = scripts\door.ltx ;==============================For Smart Configs==============================; [exclusive] monster = location\monsters_logic\monster_l.ltx npc = location\npc_logic\npc_l.ltx Изменено 15 Декабря 2017 пользователем Murarius 2 6 Ссылка на комментарий
ModoStroitel 3 Опубликовано 11 Июля 2016 Поделиться Опубликовано 11 Июля 2016 (изменено) Наткнулся на такую вот обучалочку по восстановлению вырезанных мутантов в зове припяти: Новые монстры ВведениеМногие часто сталкиваются с тем, что при попытке добавления монстров не попавшими в финальную версию игра может вылетать. Попробую рассказать, как это дело можно исправить.Для примера возьму кошек (уж очень они мне нравятся)Добавить их можно отредактировать файл all.spawn, либо динамически создать в игре через функцию alife:create().Вылет при появленииОбычно сопровождается сообщением в логе:Arguments : Can't open section 'cat_weak'Это значит, что монстр у нас не до конца описан. В файле конфигурации идет секция[m_cat_e]:monster_baseНо для создания разных по силе конфигураций монстров обычно используется такая штука. Создается секция вида[cat_weak]:m_cat_eто есть ссылка на основную конфигурацию, а потом указываются параметры, которые отличаются от нее. Например сила, здоровье, угол обзора и тд. Мы пока ограничимся просто добавлением этой секции. В файле config\creatures\m_cat.ltx в конце допишем [cat_weak]:m_cat_e. Запускаем, добавляем кошку, вылетаем с ошибкой:Arguments : Can't find variable smart_terrain_choose_interval in [cat_weak]Что ж, добавим и этот параметр. Посмотрим, какой он у собак, и сделаем также:smart_terrain_choose_interval = 00:15:00Запускаем, вылетаем с ошибкой:Arguments : Can't find variable satiety_threshold in [cat_weak]Вобщем, добавляем параметры, по кошка не станет нормально появлятся. Такие ошибки легко локализуются и исправляются.Ну, на всякий случай, нужно добавить еще две строчки:critical_wound_threshold = 0.4critical_wound_decrease_quant = 0.После этого кошка появляется, бегает, с 30 метров бежит нас кушать. Мы этого не хотим, стреляем в нее, и у нас происходитВылет при убийствеЭто знаменитая ошибка:Arguments : LUA error: e:\stalker\gamedata\scripts\_g.script:20 ........Самое просто и неправильное решение - закоментировать 20-ю строку скрипта _g.script, вылет исчезнет, но ошибка никуда не денется. Я не могу сказать с уверенностью, к чему игнорирование этого факта может привести, так как исправлял причину, а не следствие.Путем нехитрых логических размышлений решение было найдено. Вернее тупым перебором всего, что относилось к делу, криками на форумах, битьем головой о стенку... Потом пришло озарение, вместе с сакраментальным вопросом "что происходит после смерти?" А происходит добавление в статистику убитого объекта (монстра, нпс-а). Поэтому лезем в скрипт xr_statistic.script. В самом начале видим объявление переменнойlocal killCountProps = {...}в которой кошек нет. Поэтому добавляем их туда (например, в конец), для начисления очков опыта:cat_weak = 1, cat_normal = 2, cat_strong = 3,Хотя мы сделали только cat_weak, но на будущее добавим и остальных. Затем идет перечисление используемых классов монстров:monster_classes = {кошек нет и здесь, добавляем:[clsid.cat_s] = "cat",Смотрим дальше, видим функцию addKillCount(npc), которая определяет сообщество (community) убитого. Функция вызывает getNpcType(npc), которая находится в этом же скрипте. А там идет обращение к функции IsStalker(npc), и возвращает сообщество и ранг убиенного.Но тут про мостров ни слова, а значит идем дальше. Функция IsStalker(npc) обнаруживается в скрипте _g.script. Просматривая его обнаруживаем следующие интересующие нас функции:· is_object_monster(obj)кошек нет, добавляем рядом с собаками:otype == clsid.cat or· IsMonster (object, class_id)кошки есть, ничего не трогаем.Для страховки проверим еще одни файл, class_registrator.script. Находим в нем строкуcs_register (object_factory, "CCat", "se_monster.se_monster", "SM_CAT_S", "cat_s")и успокаиваемся на этом. Запускаем, убиваем, подходим, пытаемся обыскать - вылетаем. Потому что случилсяВылет при обыскеНу тут уже проще. Вспоминаем, что у нас показывается в инвентаре убитого? Иконка растерзанного трупа. Проверяем m_cat.ltx - действительно, параметр icon отсутствует. Тут появляется два пути.Первый - нарисовать новую иконку, вставить ее в файл ui_npc_monster.dds, определить координаты и добавить их в xml-описатель ui_npc_monster.xml. И так для каждого нового монстра.Второй - использовать общую иконку для всех монстров, у которых отсутствует этот параметр. Мы им и воспользуемся, так как для тестовых целей сойдет, а для серьезного применения все равно необходимо иметь хоть какие-то художественные навыки (если кто видел мой тестовый мод "15 кошек", то помнят тот ужас вместо иконки кошки )Для этого отредактируем файл defines.ltx , так как именно в нём содержится секция monster_base, общая для всех монстров. Открываем, ищем секцию, и вставляемicon = ui_frame_error_sign_redЭто будет такой красный крест в круге. Запускаем, убиваем, обыскиваем и не вылетаем.Итак, свежедобавленный монстр бегает, живет, нападает. Однако та же кошка по умолчанию невероятно сильна, убивает с одного удара, поэтому для нормальной жизни необходимо подредактировать секцию атаки.Внимание!!!Огромный минус в том, что убитое животное не попадает в статистику, хотя мы вроде все для этого сделали. С этим предлагаю разобраться самим. Подсказка: в энциклопедии кошек тоже нет Изменено 18 Августа 2016 пользователем HellRatz Ссылка на комментарий
Expropriator 2 118 Опубликовано 3 Сентября 2016 Поделиться Опубликовано 3 Сентября 2016 (изменено) Два подобных урока по распаковке ресурсов Крайэнгине. Смотреть на облаке. Прошу не ругать за не совсем сталкеровскую тему, но это поможет подготовить модели и текстуры к работе в редакторах. Ну, и пара уроков для Сталкера. Изменено 3 Сентября 2016 пользователем Дизель Ссылка на комментарий
UriZzz 992 Опубликовано 21 Сентября 2016 Поделиться Опубликовано 21 Сентября 2016 Пытался создать спальный мешок согласно посту http://www.amk-team.ru/forum/topic/6458-uroki-po-modostroeniiu/?p=645126 При попытке использовать мешок ловлю вылет с вот таким логом: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ... \gamedata\scripts\bind_stalker.script:192: attempt to index global 'main_sleep' (a nil value) Похоже в скрипте main_sleep.script где то автором закралась ошибка. Кто не будь тэстил сей пример? Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
Charsi 438 Опубликовано 21 Сентября 2016 Поделиться Опубликовано 21 Сентября 2016 @UriZzz, скорее не автором, а тем, кто оформлял статью. Нужно убрать лишние теги code (строка 107) и \code (в конце) из портянки про main_sleep.script. 2 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
UriZzz 992 Опубликовано 21 Сентября 2016 Поделиться Опубликовано 21 Сентября 2016 (изменено) @Charsi, сработало благодарю, как я понимаю это просто мод на каратание времени. Но как можно реализовать сон как потребность, что бы гг через некоторое время захотелось спать (начало двоится в глазах, в углу появилась иконка сигнализирующая о том что мол пора баиньки) в этом скрипте как я понимаю, такого нет? Изменено 21 Сентября 2016 пользователем UriZzz Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
Romann 614 Опубликовано 5 Ноября 2016 Поделиться Опубликовано 5 Ноября 2016 Доброго времени суток, кто нибудь пож. ткните меня носом в урок, где полностью расписаны смарт-каверы, то что имеется на "сталкерине" не подxодит, я xочу полностью разобраться в принципе его работы... Заранее спасибо. Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
sheva. 0 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 (изменено) СОЗДАНИЕ РАДИО ДЛЯ ЗОВ ПРИПЯТИ . Этот метод работает на всех версиях ЗП а также и в модификациях ЗП .Работа в Level Editore( sdk-07)1.Открываем локацию и камерой ищем место для приёмника(радио)2.В Level Editore жмём вкладку spawn element , ищем пункт elektrotexnika и в этом пункте ищем priemnik_gorizont.Жмём мышкой на priemnik_gorizont, потом мышкой на чайник который находится в верхнем левом углу Level Editor, когда нажали чайник потом мышкой жмём на то место где должен стоять приёмник , нажали и он появился и нажимаем клавишу enter , откроются опции приёмника.В опциях приёмника в разделе Custom data , пишем ссылку на логику радио.[logic]cfg=scripts\mar_baz_mafon.ltxА также в опциях приёмника в разделе Fixed bones , выбрать (link) это означает что приёмник не движим.И так приёмник поставили и прописали в Level Editore работа оканчена , жмём save потом жмём MakeGame и соберётся спавн и на этом LevelEditor закрываем.Потом батник компиляции спавна запускаем и когда он отработал надо скопировать спавн локации и вставить в игру и переименовать в all.spawn.Создаём файл логики для нашего приёмника (радио).1.Открываем папки (или создаём) gamedata\configs\scripts:Вот в папке scripts и создаём файл логики:mar_baz_mafon.ltx. Создали и открываем и пишем ему логику , день \ночь тоесть днём играют дневные мелодии а ночью ночьные, этоСделано для того что днём играет весёлая и.т.дА ночью спокойная ведь спят сталкера.Открыли файл (mar_baz_mafon.ltx)И пишем.[logic]active=sr_idle@day[sr_idle@day]on_info = ℅=play_sound(day_muzic_baz)%on_info = sound_end| {!is_day}sr_idle@nightactive = sr_idle@night[sr_idle@night]on_info = %=play_sound(night_music_baz)%on_signal = sound_end| {=is_day}sr_idle@dayВот и написали логику ,сохраняем файл и закрываем.Регистрируем мелодии.Открываем папки (или создаём)gamedata\configs\misc:Открываем папку misc и ищем файл script_sound.ltx (если нет его, то можно его взять из оригинала игры ,gamedataUE)Открываем файл script_sound.ltx и вверху допишем ссылку на файл#include"script_sound_имя вашей локации.ltx"Потом после строчки wait пишем имя наших файловwaitday_muzic_baznight_music_bazПотом ниже пишем вот это[day_music_baz]type = 3dpath = music\day_music_baz_shuffle = rndidle = 0,0,100[night_music_baz]type = 3dpath = music\night_music_baz_shuffle = rndidle = 0,0,100В папке misc:Открываем файл script_sound_имя вашей локации.ltx (или создаём и открываем)И пропишем количество ваших милодийВот так и пишем:[list_script_sound_имя вашей локации]day_music_baz_1day_music_baz_2day_music_baz_3night_music_baz_1night_music_baz_2night_music_baz_3Открываем папки gamedata\sounds\music: (или создаём)Вот в папку music и надо вставить ваши музыкальные файлы в формате (ogg)Открыли папку music и вставили файлыday_music_baz_1.oggday_music_baz_2.oggday_music_baz_3.oggЭто и есть дневные файлы мелодийnight_music_baz_1.oggnight_music_baz_2.oggnight_music_baz_3.oggЭто и есть ночьные файлы мелодийДобавить можно сколько захотите , главное соблюдать номерацию 1,2,3,4,5,6 и.т.дВсё заходим в игру и слушаем радио . Изменено 31 Января 2017 пользователем BFG Добавлено BFG, 31 Января 2017 Под спойлер такие посты !!! Ссылка на комментарий
Это популярное сообщение. HellRatz 2 780 Опубликовано 27 Мая 2017 Это популярное сообщение. Поделиться Опубликовано 27 Мая 2017 Создание действительно бессмертных НПС. Делал на ТЧ, как в ЧН/ЗП не знаю. Возможно, там аналогично. Давно по интернету гуляют статьи и советы по созданию неубиваемого НПС: кто-то предлагает положить в основу профиль Сахарова ([npc_name]:stalker_sakharov) вместо обычного сталкера ([npc_name]:stalker), кто-то повесить в постоянный апдейт проверку story id НПСа и бесконечную установку ему здоровья, равному единице. Если второй вариант еще может сработать, хотя и хорошего в нем мало, ибо постоянно висит на апдейте (да и НПС умирают от выстрелов в голову), то вот первый не дает никакой живучести неписю. В итоге во многих модах неписи все равно умирают, даже если им подкрутили иммунитеты. Для создания действительно бессмертного НПС, как полагается, без всяких костылей, нам потребуется СДК. 1. Для начала идем по пути gamedata\config\models\capture и копируем файл, допустим, kurtka_mask_damage_no.ltx, называя его по-своему, например: npc_not_die.ltx 2. Берем нужный нам визуал НПС в формате *.object (исходник или декомпилированный заранее *.ogf файл), открываем его в Actor Editor, в поле User Data прописываем свой инклуд к свежесозданному файлу взамен старого. Например #include "models\capture\npc_not_die.ltx" 3. Затем компилируем НПС с новым путем до конфига в формат *.ogf, помещаем в свой мод. Подготовительная часть закончена. Далее работаем руками немного. 4. Открываем ранее созданный npc_not_die.ltx, находим в нем это место: [immunities] immunities_sect = no_resistance [bone_protection] bones_protection_sect = kurtka_mask_damage Зафиксировали и запомнили. 5. Работаем со строкой immunities_sect – это иммунитеты НПС к различным воздействиям. Вместо no_resistance пишем что-то свое, например - undead_resistance. Получится так: [immunities] immunities_sect = undead_resistance 6. Идем в файл immunities.ltx, копируем любую секцию с иммунитетами (ту же no_resistance) вместе со всеми строками до следующей секции, вставляем куда-нибудь ниже, так и называем – [undead_resistance] (напомню: это название прописали ранее в immunities_sect). Далее все параметры в этой секции выставляем по нулям. Сохраняем. Закрываем. 7. Работаем с bones_protection_sect – отвечает за защиту отдельных костей в скелете НПСа от внешних воздействий. Например, можно сделать голову пуленепробиваемой, ногу или живот. Для начала нам нужно задать имя будущей (!) секции живучести костей. Вместо kurtka_mask_damage пишем свое, допустим kombez_npc_undead. Получится так: [bone_protection] bones_protection_sect = kombez_npc_undead 8. Идем в файл damages.ltx. В нем вверху находим секцию для нашей работы: [body_kurtka_damage], и ниже куча строк с цифрами. Эта секция отвечает за живучесть торса и конечностей. Копируем целиком эту секцию со всеми параметрами и вставляем где-нибудь пониже, называя как душе угодно, например body_undead_npc. Затем для каждой кости в этой секции выставляем нулевое воздействие, т.е было: bip01_pelvis = 1.0, 0.15 Стало: bip01_pelvis = 0, 0 И так проделываем для всех последующих параметров (костей). 9. В том же damages.ltx ниже есть еще секции, отвечающие за живучесть головы. Возьмем для работы [head_mask_damage]. Эта секция отвечает за живучесть головы или ее отдельных элементов (например, можно сделать так, чтобы НПС умирал от попадания только в глаз ). Копируем ее по аналогии с предыдущей, вставляем где-нибудь ниже по файлу, называем по-своему, к примеру head_undead_npc. Значения также обнуляем для всех костей. 10. Спускаемся еще ниже по файлу, там находим: [kurtka_mask_damage]:body_kurtka_damage,head_mask_damage hit_fraction = 0.1 Копируем эту секцию вместе с единственным параметром, вставляем ниже и называем ее так, как придумали еще на 7 пункте урока. У меня это, напомню, kombez_npc_undead. Также обнуляем параметр hit_fraction, а после двоеточия прописываем созданные до этого секции живучести тела и головы - body_undead_npc и head_undead_npc. В итоге должно получиться нечто такое: [kombez_npc_undead]:body_undead_npc,head_undead_npc hit_fraction = 0 Игра считывает этот вариант защиты, в котором на всех «косточках» стоят нули, а следовательно, попадания по ним и привязанной к ним меши никак не засчитываются. 11. Далее открываем m_stalker.ltx, идем в самый низ и вставляем: [hum_undie]:stalker immunities_sect = stalker_immunities_hum_undie [stalker_immunities_hum_undie] burn_immunity = 0.0 ;коэффициенты иммунитета strike_immunity = 0.0 shock_immunity = 0.0 wound_immunity = 0.0 radiation_immunity = 0.0 telepatic_immunity = 0.0 chemical_burn_immunity = 0.0 explosion_immunity = 0.0 fire_wound_immunity = 0.0 wound_2_immunity = 0.0 12. И финальная стадия. Идем в спавн-секцию нашего НПС (spawn_sections.ltx), после двоеточия прописываем новый профиль hum_undie вместо stalker: [имя_нашего_нпс]:hum_undie Все. После такого НПС не умирают ни от каких воздействий (от аномалий не проверено должны выжить). Можно стрелять в любую часть тела из любого оружия, взрывать под ним гранаты, мины, динамиты – НПС выживет, ведь по всей модели хиты не учитываются. Это полезно для умирающих квестовых НПС. На первый взгляд много, но создав один раз все нужные секции, в будущем можно лишь прописывать соотв. инклуд в модель. 1 1 1 13 GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом. JNCR — Coming Soon... i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2 Подарки 2 Ссылка на комментарий
HellRatz 2 780 Опубликовано 27 Ноября 2017 Поделиться Опубликовано 27 Ноября 2017 Оффтоп переехал в эту тему. В шапке красным по белому написано для чего эта тема и куда обращаться с вопросами. 1 GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом. JNCR — Coming Soon... i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2 Подарки 2 Ссылка на комментарий
One Developer 0 Опубликовано 4 Марта 2018 Поделиться Опубликовано 4 Марта 2018 (изменено) Всем привет! Когда я только начинал моддинг я много не знал и мне приходилось тратить дни на поиск в оригинале и делать все под себя. А речь пойдет о том как сделать рабочую дверь, для опытных модостроителей это проше просто но это статья для новичков, опытные можете уходить тут не чего интересного не будет. Спавн двери это очень просто, приступим Чтобы заспавнить нашу дверь, надо зайти в spawn_element\physics\door После спавна, нажимаем на наш объект и жмем Enter в Custom Date пишем: Скрытый текст [collide] ignore_static ignore_ragdoll [logic] cfg = configs\scripts\chast_voinay\cha_door_kpp.ltx - здесь указан путь до нашей логики, меняем ее на нашу. ОБЯЗАТЕЛЬНО С LTX !! С сдк все, теперь с самой логикой для новичков постараюсь описать каждый параметр Скрытый текст [logic] active = ph_door@closed - Активная секция [ph_door@closed] - название секции closed = true - подтверждает что дверь будет закрыта locked = false - отвергает что дверь будет открыта on_use = ph_door@open - после конца этой секции активирует секцию под именем ph_door@open snd_open_start = trader_door_open_start - это знать не обязательно snd_close_start = trader_door_close_start - это знать не обязательно snd_close_stop = trader_door_close_stop - это знать не обязательно [ph_door@open] closed = false - все тоже самое locked = false - все тоже самое on_game_timer = 50 | ph_door@closed - через 5 секунд логика перейдет на секцию ph_door@closed snd_open_start = trader_door_open_start - это знать не обязательно snd_close_start = trader_door_close_start - это знать не обязательно snd_close_stop = trader_door_close_stop - это знать не обязательно Сохраняем, компилируем спавн и идем проверять в игре. Изменено 6 Марта 2018 пользователем HellRatz 1 Ссылка на комментарий
One Developer 0 Опубликовано 6 Марта 2018 Поделиться Опубликовано 6 Марта 2018 (изменено) Может кому и пригодиться. Скажу сразу, я скачал эти скрипты очень давно и автора не помню, просто решил залить. https://pastebin.com/HZmycLBW Изменено 6 Марта 2018 пользователем HellRatz Убрал ахтунг Добавлено HellRatz, 6 Марта 2018 Не знаю что это за чудо-юдо было на пол страницы, перетащил это все на пастебин. Остальные посты не понятно к чему - снес. Ссылка на комментарий
Ali_Babai_45 19 Опубликовано 11 Марта 2018 Поделиться Опубликовано 11 Марта 2018 Внесу свою толику. Карты локаций из СГМ 2.2 Смарты на картах пронумерованы, описание и координаты записаны в текстовиках. Может пригодиться для модов на основе СГМ или чистой ЗП (смарты на локациях из ЗП точно не изменялись) для настройки телепортов и заселения локаций. Скачать 1 Ссылка на комментарий
Угол 135 Опубликовано 30 Марта 2018 Поделиться Опубликовано 30 Марта 2018 Нашел урок по переносу аномалий из модов. https://www.youtube.com/watch?v=ppMzi9QjQGI Подарки 2 Ссылка на комментарий
Гость Опубликовано 29 Мая 2018 Поделиться Опубликовано 29 Мая 2018 В 23.07.2013 в 11:12, Сталкер Лом сказал: Так что новой вкладки мы не получим - только кнопочка. Даже не расскажу, как это окно сделать, т.к. я пробовал и у меня, пока, ничего не вышло. Будем пытаться, а пока - всё. Скажите пожалуйста, ув. Сталкер Лом, появилось ли какое-либо решение данной проблемы (добавление gui поверх предыдущего в пда) до сегодняшнего дня? Если да, был бы очень признателен узнать об этом подробнее. А также хотелось бы узнать, что именно было изменено проектом xray extentions в исходном коде игры. Заранее спасибо. Ссылка на комментарий
Сталкер Лом 351 Опубликовано 30 Мая 2018 Поделиться Опубликовано 30 Мая 2018 17 часов назад, Den “Angry Wolf” Koslov сказал: ...хотелось бы узнать, что именно было изменено проектом xray extentions в исходном коде игры В дополнении к тому, что я вам черканул в ЛС Сам я правку не смотрел, но, предполагаю, что в движке подправились данные о количестве правок и, по большому счёту, всё. Эти правки очень старые. Может быть, сегодня уже есть что-то посерьёзнее увеличения количества (а не функционала) вкладок, но я не знаю - давно уже этой темой не интересовался. Работы на Artstation - https://www.artstation.com/artist/stalker_lom Ссылка на комментарий
DarkSnowder 897 Опубликовано 30 Августа 2018 Поделиться Опубликовано 30 Августа 2018 Внесу свою скромную лепту в пользу новисам и не только:) Скрытый текст Наверное многие из вас знают, что в ваниле На свалке и Арм. складах сталкеры часто помирали в кострах, в связи с чем такие песы как бес, волк и юрик покидали нас:( Так вот, чтобы этого не было, надо сделать следующее: 1. Распаковать all.spawm или открыть уровень в level editor-e 2. Найти среди спавн объектов space_restrictor-ы с именем camp_fire_номер. 3. Смотрим и видим (restrictor_type = 3)!!! В чём суть спрсите вы?. А вот в чём - в игре есть несколько типов рестрикторов и всё они имеют разную функцию (инфа взята с сайта http://stalkerin.gameru.net. Скрытый текст Чтобы не потерялось пишу сюда типы рестрикторов. Тип рекстриктора можно указать при спавне в переменной restrictor_type restrictor_type = 0 ;eDefaultRestrictorTypeOut restrictor_type = 3 :eRestrictorTypeNone Эти два типа - простые рестрикторы. В чем их отличие - непонятно. "restrictor_type = 0" - в зоне этого рестриктора нпс не подчиняются логике просто будут стоять на месте, лучше этот тип вообще не использовать restrictor_type = 1 ;eDefaultRestrictorTypeOut restrictor_type = 5 ;eRestrictorTypeOut Эти два типа имеют смысл для движка и подразумевают собой зону, откуда нельзя выйти. В природе не встречается restrictor_type = 2 ;eDefaultRestrictorTypeIn restrictor_type = 4 ;eRestrictorTypeIn Эти два типа имеют смысл для движка и подразумевают собой зону, куда нельзя войти. Такими зонами накрывают костры и арену в баре И помните IN и OUT рестрикторы (типы 1,2,4,5) имеют смысл только для НПС Как вы уже прочли, костер накрыт не тем рестриктором. 4.Меняем restrictor_type с 3 на 2 (или в редакторе ставим IN defoult resrtictor). 5. Пакуем спавн и вуаля! - стакеры в костре не мрут!!!!:D Главное, чтобы рестриктор был достаточно большим,чтобы накрыть костёр и область вокруг него, дабы в случае толкучки боты не затолкали себя в костёр сами. Всем удачи в создании лагерей и посиделок у костра;) Добавлено HellRatz, 4 Сентября 2018 А почему бы просто не убрать урон от костра в конфиге в одной строке (ну или паре) ? 2 Лучше сделать мод с 0, чем пытаться залатать багованный. Ссылка на комментарий
BeeRseK 34 Опубликовано 8 Октября 2018 Поделиться Опубликовано 8 Октября 2018 (изменено) Цитата А почему бы просто не убрать урон от костра в конфиге в одной строке (ну или паре) ? Тогда ГГ не получит урон,а это же нереалистично!) Скрытый текст пардон, по ходу тут нельзя отвечать в этой теме... Слышу как за мной вылетели админы на черных вертолетах. Просьба не пинать ногами) Изменено 8 Октября 2018 пользователем BeeRseK "Все сложное - не нужно, все нужное - просто"(М. Калашников) Ссылка на комментарий
UriZzz 992 Опубликовано 25 Января 2019 Поделиться Опубликовано 25 Января 2019 (изменено) Скрытый текст Всем привет! В этой теме есть замечательный скрипт на пост-еффект при критическом попадании за авторством АМК Team Скрытый текст Создаем файл effect_blood.script и записываем туда следующее: lite_treshold = 0.05 -- насколько должно уменьшиться здоровье с предыдущего обновления чтоб экран окрасился в красный crit_treshold = 0.30 -- насколько должно уменьшиться здоровье с предыдущего обновления чтоб ГГ начало шатать drop_item_on_crit_prob = 0.20 -- вероятность того что ГГ выронит оружие effector_power_coeff = 0.7 prev_health = -1 chk_h_t = 0 function wounded_pp_update() if (chk_h_t or 0) < time_global() then chk_h_t = time_global()+1000 if prev_health > (db.actor.health + lite_treshold) then level.add_pp_effector("fire_hit.ppe", 2011, false) local effector_power = (prev_health - db.actor.health)*100*effector_power_coeff level.set_pp_effector_factor(2011, effector_power) if prev_health > db.actor.health + crit_treshold then level.add_cam_effector("camera_effects\\fusker.anm", 999, false, "") local snd_obj = xr_sound.get_safe_sound_object([[actor\pain_3]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) if math.random() < drop_item_on_crit_prob then local active_item = db.actor:active_item() if active_item and active_item:section() ~= "bolt" and active_item:section()~= "wpn_knife" then db.actor:drop_item(active_item) end end end end prev_health = db.actor.health end end 2. Далее открываем bind_stalker.script: после строчек: function actor_binder:update(delta) object_binder.update(self, delta) local time = time_global() game_stats.update (delta, self.object) пишем: effect_blood.wounded_pp_update() У этого скрипта есть один недостаток: проблема в том что скрипт порой срабатывает с запозданием где то в пол секунды (или около того) после получения хита, смотрится ужасно. Я думаю (поправьте если ошибаюсь) это из-за того что скрипт повешен на апдейт и скорость срабатывания зависит от частоты апдейта. Что бы решить эту проблему без какой нибудь скриптовой чёрной магии придется править движок. Спокойно, не каких тут разборов языка C++ небудет, обойдёмся без взрыва мозга и воспользуемся самым доступным вариантом - X-Ray extensions. Скачать последнюю сборку от @НаноБот можно От сюда. Конкретно нам нужен кэлбэк на хит актора, в чистом движке ТЧ его нет, за то он есть в XRay ext и в большинстве сборок седьмого патча. С помощью xray ext пропатчиваем (мудрить с корректен листом не обязательно, достаточно пропатчить на дефолтных настройках) файл xrGame.dll (он уже есть в 230й сборке), кидаем dllку в папку bin в корне игры и подтверждаем замену ( внимание! Сохраните резервную копию чистой dllки где нибудь во избежании возможных проблем). И так мы имеем пропатчиный двигло но этого мало. Прежде чем использовать кэлбэк ещё нужно активировать. Для этого нам понадобится файл bind_stalker.script из распакованных ресурсов игры. Открываем его блокнотом и среди всего безобразия ищим вот такую строчку: function actor_binder:reinit() Ниже видим такие строки: self.object:set_callback(callback.inventory_info, self.info_callback, self) self.object:set_callback(callback.article_info, self.article_callback, self) self.object:set_callback(callback.on_item_take, self.on_item_take, self) self.object:set_callback(callback.on_item_drop, self.on_item_drop, self) self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats --self.object:set_callback(callback.actor_sleep, self.sleep_callback, self) self.object:set_callback(callback.task_state, self.task_callback, self) --self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self) self.object:set_callback(callback.level_border_enter, self.level_border_enter, self) self.object:set_callback(callback.level_border_exit, self.level_border_exit, self) self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) Это доступные кэлбэки. В самом низу этого списка пишим self.object:set_callback(callback.hit, self.actor_hit_callback, self) -- хит актору это новоиспечённый кэлбэк. Далее ищим: function actor_binder:net_destroy() И ниже: self.object:set_callback(callback.inventory_info, nil) self.object:set_callback(callback.article_info, nil) self.object:set_callback(callback.on_item_take, nil) self.object:set_callback(callback.on_item_drop, nil) --self.object:set_callback(callback.actor_sleep, nil) self.object:set_callback(callback.task_state, nil) self.object:set_callback(callback.level_border_enter, nil) self.object:set_callback(callback.level_border_exit, nil) self.object:set_callback(callback.take_item_from_box, nil) И в самом низу этого списка дописываем: self.object:set_callback(callback.hit, nil) Сие есть отригистрация кэлбэка. Далее где нибудь среди функций, на пример под: function actor_binder:take_item_from_box(box, item) local story_id = box:story_id() if story_id == nil then return end Пишим как то так: function actor_binder:actor_hit_callback(obj) effect_blood.wounded_pp_update() – это файл скрипта пост- эффекта и функция пост-эффекта в нём end Ииии всё! Теперь когда мы повесили скрипт на кэлбэк хита автору он: А. Не будет постоянно висеть на апдейте а срабатывать только когда ГГ получает по щам. Б. Будет срабатывать мгновенно при крит.хите. Приятной игры. (Принцип активации кэлбэка подсмотрен в ОГСЕ) Изменено 26 Января 2019 пользователем UriZzz 2 Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти