Overf1rst 1 502 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Тень Чернобыля. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 6 4 1 3 1 3 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CIDOPOBICH 4 Опубликовано 5 июля Всем привет. Помогите пожалуйста, что делать при такой ошибке? FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ....e.r. shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value) Дополнено 26 минуты спустя 3 часа назад, CIDOPOBICH сказал: Всем привет. Помогите пожалуйста, что делать при такой ошибке? FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ....e.r. shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value) Сейчас я заметил, что если убрать all.spawn из gamedata - всё работает. Ещё добавлю, (может это пригодится) я добавлял нового НПС на локацию Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Yara 118 Опубликовано 5 июля CIDOPOBICH Открываешь _g.script, в самом начале находишь функцию printf и заменяешь её на это: function printf(fmt,...) logf_console = get_console() logf = logf_main logf_main(fmt, ...) end function logf_main(fmt, ...) local c = select("#", ...) if c <= 0 then -- nothing to format logf_console:execute(":" .. string.gsub(fmt, " ", "\160")) else logf_console:execute(":" .. string.gsub(string.format(fmt, ...), " ", "\160")) end end После вылета, смотришь лог и находишь его причину. 1 https://sites.google.com/view/xray-sdk-0-4-smg Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CIDOPOBICH 4 Опубликовано 5 июля 2 часа назад, Yara сказал: CIDOPOBICH Открываешь _g.script, в самом начале находишь функцию printf и заменяешь её на это: function printf(fmt,...) logf_console = get_console() logf = logf_main logf_main(fmt, ...) end function logf_main(fmt, ...) local c = select("#", ...) if c <= 0 then -- nothing to format logf_console:execute(":" .. string.gsub(fmt, " ", "\160")) else logf_console:execute(":" .. string.gsub(string.format(fmt, ...), " ", "\160")) end end После вылета, смотришь лог и находишь его причину. Спасибо, теперь работает! Дополнено 6 минуты спустя Всем привет ещё раз! Кто знает, как сделать задание на убийство мутантов, которые должны бегать в определённой зоне (боксе)? Подскажите пожалуйста. Спасибо! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CIDOPOBICH 4 Опубликовано 6 июля Дополнение. Я разобрался как сделать смарт террейн с мутантами, но проблема в том, что, придя на место, мутантов не было. Что делать? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RicoNRT 251 Опубликовано 6 июля Всем привет. Мне нужно сделать так, что бы мои новые эмбиенты для мода играли в самое игре, но не знаю, как это сделать. Можете в кратце расказать, как зарегестрировать эмбиенты для определённой локации или всей игры? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
macron 1 027 Опубликовано 6 июля RicoNRT изучи: 1. сначала это 2. потом это 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RicoNRT 251 Опубликовано 6 июля macron Подкол засчитан) Спасибо за инструкцию, помогла! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 349 Опубликовано 7 июля (изменено) В 06.07.2024 в 10:23, CIDOPOBICH сказал: Дополнение. Я разобрался как сделать смарт террейн с мутантами, но проблема в том, что, придя на место, мутантов не было. Что делать? Значит неправильно сделал смарт. Ну или у мутантов условие на спавн. Дополнено 39 минуты спустя В 05.07.2024 в 19:57, CIDOPOBICH сказал: Всем привет ещё раз! Кто знает, как сделать задание на убийство мутантов, которые должны бегать в определённой зоне (боксе)? Подскажите пожалуйста. Спасибо! Ну есть 2 варианта, со смартом и без. 1. Заспавнить мутанта. Потом создаешь спейс рестриктор. Далее в секции мутанта, находишь вот это окно И там выбираешь свой спейс рестриктор. И далее пишешь ему логику вот эту [smart_terrains] none = true [logic] active = mob_walker - on_death = death@boar_i [mob_walker] path_walk = swamp_lager_walker2_look path_look = swamp_lager_walker2_walk [death@boar_i] on_info = %+info% Можешь не использовать схему walker, это я для примера показал. 2. Для начала создаешь шейп, и создаешь в секции ai - smart_terrain его и приатачиваешь к шейпу. Далее в логике смарта пишешь [smart_terrain] type = esc_small_home4 - Название смарта capacity = 2 Численность смарта Далее создаешь мутанта и в логике его пишешь [smart_terrains] esc_small_home4 = true Ты привязываешь непися к смарту. Далее заходим в scripts/gulag_имялокации Если новую локация создал, то регистрируешь гулаг для локации. И в гулаге пишешь if type == "esc_small_home4" then - Место esc_small_home4 пишешь свое имя смарта t = { section = "logic@esc_small_home4", - Работа 1 idle = 0, prior = 5, state = {0}, in_rest = "", out_rest = "" - in_rest запрещено выходить, к примеру написал имя спейса, и нпс нельзя от туда выходить out_rest - куда запрещено входить. Так же пишешь имя зоны (спейса) и все. } table.insert(sj, t) t = { section = "logic@esc_small_home4", Работа 2 idle = 0, prior = 5, state = {0}, prior - приоритет работы, если у этой работы приоритет больше, Сначала всегда нпс занимают более приоритетные работы. in_rest = "", out_rest = "" } table.insert(sj, t) end Далее в гулаге находишь вот это: function load_states(gname, type) ------------------------------------------------------------------- И в этой секции пишешь if type == "esc_small_home4" then - имя своего смарта return function(gulag) return 0 end end Потом находишь в гулаге -------------------------------------------------------------------------- -- Dynamic ltx -------------------------------------------------------------------------- function load_ltx(gname, type) return nil end и в этой секции находишь function checkMonster(npc_community, gulag_type) Есть и function checkStalker(npc_community, gulag_type, npc_rank, se_obj) Но у тебя же смарт для мутантов, по этому используй соотвествующую секцию function checkStalker(npc_community, gulag_type, npc_rank, se_obj) Там пишешь if gulag_type == "esc_small_home2" then return npc_community == "boar" - Пишешь имя группировки, у мутантов есть технические группировки, кабан собака и т.д Пишешь мутанта, который у тебя привязан к смарту, если кабан - пиши кабана end Далее переходим в config\misc\gulag_имялокации нужной В этом файле мы будем писать логику мутантом, сталкерам. Чтобы было проще находить нужный смарт, то в начале логики смарта твоего напиши ;-------------------------- ;------ Bridge Boars ------ Имя смарта ;-------------------------- Это красиво, и правильно) Далее начинай писать логику [logic@esc_bridge_boar] - Пишешь имя работы, имя работы берется с scripts/gulag_имя локации, и находишь там свой смарт, и копируешь работу active = mob_home@esc_bridge_boar - Это логика, пишешь название схемы и @имя работы [mob_home@esc_bridge_boar] path_home = path1 home_min_radius = 20 home_max_radius = 40 Скольк работат в смарте, столько и здесь пишешь секций [logic@esc_bridge_boar2] - Пишешь имя работы, имя работы берется с scripts/gulag_имя локации, и находишь там свой смарт, и копируешь работу active = mob_home@esc_bridge_boar - Это логика, пишешь название схемы и @имя работы [mob_home@esc_bridge_boar2] path_home = path1 home_min_radius = 20 home_max_radius = 40 И так далее, зависит от кол-во работ в script/gulag_имя локации, находишь свой смарт и смотришь сколько там работ. Все Изменено 7 июля пользователем Stalkervernite 1 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CIDOPOBICH 4 Опубликовано 7 июля 5 часов назад, Stalkervernite сказал: Значит неправильно сделал смарт. Ну или у мутантов условие на спавн. Дополнено 39 минуты спустя Ну есть 2 варианта, со смартом и без. 1. Заспавнить мутанта. Потом создаешь спейс рестриктор. Далее в секции мутанта, находишь вот это окно И там выбираешь свой спейс рестриктор. И далее пишешь ему логику вот эту [smart_terrains] none = true [logic] active = mob_walker - on_death = death@boar_i [mob_walker] path_walk = swamp_lager_walker2_look path_look = swamp_lager_walker2_walk [death@boar_i] on_info = %+info% Можешь не использовать схему walker, это я для примера показал. 2. Для начала создаешь шейп, и создаешь в секции ai - smart_terrain его и приатачиваешь к шейпу. Далее в логике смарта пишешь [smart_terrain] type = esc_small_home4 - Название смарта capacity = 2 Численность смарта Далее создаешь мутанта и в логике его пишешь [smart_terrains] esc_small_home4 = true Ты привязываешь непися к смарту. Далее заходим в scripts/gulag_имялокации Если новую локация создал, то регистрируешь гулаг для локации. И в гулаге пишешь if type == "esc_small_home4" then - Место esc_small_home4 пишешь свое имя смарта t = { section = "logic@esc_small_home4", - Работа 1 idle = 0, prior = 5, state = {0}, in_rest = "", out_rest = "" - in_rest запрещено выходить, к примеру написал имя спейса, и нпс нельзя от туда выходить out_rest - куда запрещено входить. Так же пишешь имя зоны (спейса) и все. } table.insert(sj, t) t = { section = "logic@esc_small_home4", Работа 2 idle = 0, prior = 5, state = {0}, prior - приоритет работы, если у этой работы приоритет больше, Сначала всегда нпс занимают более приоритетные работы. in_rest = "", out_rest = "" } table.insert(sj, t) end Далее в гулаге находишь вот это: function load_states(gname, type) ------------------------------------------------------------------- И в этой секции пишешь if type == "esc_small_home4" then - имя своего смарта return function(gulag) return 0 end end Потом находишь в гулаге -------------------------------------------------------------------------- -- Dynamic ltx -------------------------------------------------------------------------- function load_ltx(gname, type) return nil end и в этой секции находишь function checkMonster(npc_community, gulag_type) Есть и function checkStalker(npc_community, gulag_type, npc_rank, se_obj) Но у тебя же смарт для мутантов, по этому используй соотвествующую секцию function checkStalker(npc_community, gulag_type, npc_rank, se_obj) Там пишешь if gulag_type == "esc_small_home2" then return npc_community == "boar" - Пишешь имя группировки, у мутантов есть технические группировки, кабан собака и т.д Пишешь мутанта, который у тебя привязан к смарту, если кабан - пиши кабана end Далее переходим в config\misc\gulag_имялокации нужной В этом файле мы будем писать логику мутантом, сталкерам. Чтобы было проще находить нужный смарт, то в начале логики смарта твоего напиши ;-------------------------- ;------ Bridge Boars ------ Имя смарта ;-------------------------- Это красиво, и правильно) Далее начинай писать логику [logic@esc_bridge_boar] - Пишешь имя работы, имя работы берется с scripts/gulag_имя локации, и находишь там свой смарт, и копируешь работу active = mob_home@esc_bridge_boar - Это логика, пишешь название схемы и @имя работы [mob_home@esc_bridge_boar] path_home = path1 home_min_radius = 20 home_max_radius = 40 Скольк работат в смарте, столько и здесь пишешь секций [logic@esc_bridge_boar2] - Пишешь имя работы, имя работы берется с scripts/gulag_имя локации, и находишь там свой смарт, и копируешь работу active = mob_home@esc_bridge_boar - Это логика, пишешь название схемы и @имя работы [mob_home@esc_bridge_boar2] path_home = path1 home_min_radius = 20 home_max_radius = 40 И так далее, зависит от кол-во работ в script/gulag_имя локации, находишь свой смарт и смотришь сколько там работ. Все Большое спасибо! Сейчас буду тестировать. Дополнено 35 минуты спустя Всем привет! Расскажите пожалуйста, как сделать так, чтобы когда у ГГ появляется определённый предмет в инвентаре, выдался инфопоршень? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 349 Опубликовано 7 июля (изменено) 7 часов назад, CIDOPOBICH сказал: Большое спасибо! Сейчас буду тестировать. Дополнено 35 минуты спустя Всем привет! Расскажите пожалуйста, как сделать так, чтобы когда у ГГ появляется определённый предмет в инвентаре, выдался инфопоршень? Функция из xr_conditions - actor_has_item [logic] active = sr_idle [sr_idle] on_info = {+info =actor_has_item(af_blood) -info1} nil %+info1=run_postprocess(agr_u_fade)% {+info =actor_has_item(af_blood) - Проверка, если есть инфопоршень info, и артефакт кровь камня nil - Если проверка завершена, то тогда не будет продолжаться проверка, на каждом апдейте Если эти условия все верны, то тогда %+info1 =run_postprocess(agr_u_fade)% - Здесь выдается инфопоршень, и выдается эффект затемнения Просто создаешь шейп, ну и к нему приатачиваешь спейс рестриктор, можешь поставить где угодно это спейс, он не работает по принципу входу в спейс, ведь там не on_actor_inside, а on_info А ну и на будущее, файлы с припиской xr очень полезные, тем что исходя от названий там могут быть проверки, или другие функции и методы. И если ты не знал, чтобы в сдк воспроизвелась какая нибудь функция, надо написать %=имяфункции% Допустим взял функцию из xr_effects play_snd on_info = %=play_snd(monsters\controller\controller_script_attack_0)% nil В данном случае в голове у игрока будет воспроизводиться звук контролера. Дополнено 28 минуты спустя Приветствую! Кто нибудь знает, как сделать активацию пда? К примеру есть обычный пда квестовый, и когда ты по нему кликал левой кнопкой мыши, была кнопка использовать, нажав на неё к нам в журнал передавалась бы информация различная. Второй вопрос. Может кто знает, но как сделать так чтобы с определенным нпс открывался автоматически диалог, и его нельзя было закрыть, только по окончанию. Обязательно чтобы с неписем можно поговорить хоть за картой. Изменено 7 июля пользователем Stalkervernite Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CIDOPOBICH 4 Опубликовано 8 июля (изменено) 10 часов назад, Stalkervernite сказал: Приветствую! Кто нибудь знает, как сделать активацию пда? К примеру есть обычный пда квестовый, и когда ты по нему кликал левой кнопкой мыши, была кнопка использовать, нажав на неё к нам в журнал передавалась бы информация различная. Вот, я нашёл видео по созданию подобных предметов, думаю, по аналогии ты можешь сделать пда. Дополнено 48 минуты спустя Всем привет. При переходе на другую локацию выдаёт такую ошибку FATAL ERROR [error]Expression : ai().game_graph().header().levels().end() != I [error]Function : CALifeGraphRegistry::setup_current_level [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\alife_graph_registry.cpp [error]Line : 91 [error]Description : Graph point level ID not found! Что делать? Изменено 8 июля пользователем CIDOPOBICH 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 349 Опубликовано 8 июля 2 часа назад, CIDOPOBICH сказал: Всем привет. При переходе на другую локацию выдаёт такую ошибку FATAL ERROR [error]Expression : ai().game_graph().header().levels().end() != I [error]Function : CALifeGraphRegistry::setup_current_level [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\alife_graph_registry.cpp [error]Line : 91 [error]Description : Graph point level ID not found! Что делать? Помойму ошибки с графами при переходе на локацию связанны с конвертером, конвертер старый. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CIDOPOBICH 4 Опубликовано 8 июля 48 минут назад, Stalkervernite сказал: Помойму ошибки с графами при переходе на локацию связанны с конвертером, конвертер старый. А может ли это быть из-за того, что я не декомпилировал локацию в Xray SDK? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 349 Опубликовано 8 июля 3 минуты назад, CIDOPOBICH сказал: А может ли это быть из-за того, что я не декомпилировал локацию в Xray SDK? Да, может 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CIDOPOBICH 4 Опубликовано 8 июля 1 минуту назад, Stalkervernite сказал: Да, может Понял, благодарю 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 349 Опубликовано 8 июля Кто нибудь знает, как определенную группировку подружить с мутантами. Хоть через скрипт, или конфиги. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Riplika 515 Опубликовано 8 июля 14 минут назад, Stalkervernite сказал: Кто нибудь знает, как определенную группировку подружить с мутантами. Хоть через скрипт, или конфиги. Эммммм, однако. Удали (-) в отношение каждого мутанта или замени все число на 0. к нужной тебе группировке в game_relations по пути: gamedata - config- creatures- game_relations Короткометражник хуже Демосфена Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
macron 1 027 Опубликовано 8 июля Riplika там нет таблицы взаимоотношений монстров с группировками. Все группировки обозначаются как human. ЗЫ: в дефолтном ТЧ в последней таблице в 198 строчке пропущена запятая. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Riplika 515 Опубликовано 8 июля 41 минуту назад, macron сказал: Riplika там нет таблицы взаимоотношений монстров с группировками. Все группировки обозначаются как human. macron Технически актор это отдельная группировка, арена монстр и арена энеми тоже. Теоретически можно просто произвести подмену значений в отношении этих группировок, и присвоить их принадлежность к нужной. А в ЛТХ прописать нужное ему название. Короткометражник хуже Демосфена Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Vovan666 5 Опубликовано 9 июля (изменено) Оговорюсь сразу, что в моддинге сталкера я (пока что) полнейший профан, поэтому больно не бейте. Вопрос первый: хотел вставить "комету" на иные локации, кроме х18 (естественно, как и положено васяну моего уровня - через АЦДЦ), но обнаружил, что какие координаты я бы не выставлял - она всегда спавнится в одном и том же очень конкретном месте. Собственно, как с этим бороться, и можно ли? Вопрос второй: я хотел бы попытаться "откатить" визуалы Shadow's Addon (ну, или любого другого мода, который затрагивает цвет/свет) на что-то более похожее на ваниль, с "тёплыми-ламповыми" синими фильтрами и прочими прелестями. Но после долгих поисков, замены файлов шейдеров, шаманства с погодой и прочими конфигами, я так и не нашёл как это можно сделать, да и можно ли вообще. Это нужно лезть редактировать экзешник? Если да, то как? Изменено 9 июля пользователем Vovan666 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 349 Опубликовано 9 июля (изменено) 12 часов назад, Riplika сказал: Эммммм, однако. Удали (-) в отношение каждого мутанта или замени все число на 0. к нужной тебе группировке в game_relations по пути: gamedata - config- creatures- game_relations Тебе ниже человек сказал, что нету единой таблицы взаимотношений мутантов и сталкеров, все группировки это human. Есть к примеру зайти в m_army то там будет human = on Изменено 9 июля пользователем Stalkervernite Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Paracetamol 918 Опубликовано 9 июля 12 часов назад, Stalkervernite сказал: Кто нибудь знает, как определенную группировку подружить с мутантами. Хоть через скрипт, или конфиги. Оптимально можно заспавнить НПС под секцией stalker_monolith. У них нейтралитет с мутантами стоит. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stalkervernite 349 Опубликовано 9 июля 1 минуту назад, Paracetamol сказал: Оптимально можно заспавнить НПС под секцией stalker_monolith. У них нейтралитет с мутантами стоит. Можно и с учёными так же. Но это довольно васянисто. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Paracetamol 918 Опубликовано 9 июля (изменено) 5 минут назад, Stalkervernite сказал: Можно и с учёными так же. Но это довольно васянисто. В ванильном сталкере к сожалению иначе никак. Дополнено 0 минут спустя Можно ещё как я в ЛС писал сделать, т.е в движок вынести смену species через скрипт. Дополнено 2 минуты спустя 6 часов назад, Vovan666 сказал: Оговорюсь сразу, что в моддинге сталкера я (пока что) полнейший профан, поэтому больно не бейте. Вопрос первый: хотел вставить "комету" на иные локации, кроме х18 (естественно, как и положено васяну моего уровня - через АЦДЦ), но обнаружил, что какие координаты я бы не выставлял - она всегда спавнится в одном и том же очень конкретном месте. Собственно, как с этим бороться, и можно ли? Там же вроде надо анимацию.anm делать свою для "кометы". Изменено 9 июля пользователем Paracetamol Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
macron 1 027 Опубликовано 9 июля (изменено) 7 часов назад, Vovan666 сказал: хотел вставить "комету" на иные локации, кроме х18 (естественно, как и положено васяну моего уровня - через АЦДЦ), но обнаружил, что какие координаты я бы не выставлял - она всегда спавнится в одном и том же очень конкретном месте. Собственно, как с этим бороться, и можно ли? Если под "кометой" подразумевается летающая аномалия типа torrid или fierball, то она всегда летает по траектории приписанного к ней anm-файла, не зависимо от точки спавна. Корнем для anm-файлов является каталог gamedata\anims\ Соответственно, можно действовать тремя способами: 1. Если сильно повезет, из каталога gamedata\anims\ в ресурсах ТЧ подобрать подходящий anm-файл-траекторию, и через ACDC прописать своей аномалии. Например, для Кордона это motion_name = path\atp_zharka.anm 2. В SDK создать свой anm-файл, если умеете. 3. Утилитой anm2ltx на основе любого anm-файла прописать новые координаты пути, если получится. Внимание! Утилю половина антивирей подозревают на вири, но это не мои проблемы.https://disk.yandex.ru/d/8oZTW7tuCpdloA Здесь всякая инфа по anm: https://www.amk-team.ru/forum/topic/10448-format-faylov-anm/ Изменено 9 июля пользователем macron Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты