Overf1rst 1 496 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 18 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Kalter103 2 Опубликовано 20 июня, 2023 Привет всем Подскажите в каком файле anomaly мод стандартные текстуры аномалий? Играю в зборку хочу заменить кисель на стандарт Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 309 Опубликовано 20 июня, 2023 (изменено) denis2000 я увеличил таймеры до 20 - всё равно не переключает. Пробовал даже избавиться от таймеров (заменил на простое on_info без условий) - всё равно не переключает дальше 1 сообщения. Мб есть какое-то ограничение на количество состояний в логике? А то она планируется довольно сложная, и это будет неприятный сюрприз если часть состояний просто не будет читается. Спойлер [logic] active = sr_idle@start [sr_idle@start] on_info = {+yan_psi_oko_teleport_expedition_squad} sr_idle@teleport_expedition %=teleport_squad(yan_expedition_smart_squad:yan_expedition_smart_spawn)% [sr_idle@teleport_expedition] on_info = {+yan_psi_oko_vasil_about_expedition_dialog} sr_idle@teleport %=run_postprocess(fade_in_out)% [sr_idle@teleport] on_game_timer = 30 | sr_idle@teleport_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)% [sr_idle@teleport_end] on_game_timer = 30 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()% [sr_idle@after_teleport] on_info = {!actor_in_zone(yan_expedition_start_restrictor)} sr_idle@return_actor_start %=disable_ui() =run_postprocess(fade_in_out)% on_info2 = {+yan_psi_oko_kudr_about_expedition_dialog} sr_idle@phase_1 [sr_idle@return_actor_start] on_game_timer = 10 | sr_idle@return_actor_start_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)% [sr_idle@return_actor_start_end] on_game_timer = 10 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()% [sr_idle@phase_1] on_info = {+yan_psi_oko_expedition_p1_recon_1_checked +yan_psi_oko_expedition_p1_recon_2_checked} sr_idle@phase_1_blame %=send_tip(st_recon_first_confurm_clear:yan_expedition_dolg_1:yan_expedition_dolg_1)% [sr_idle@phase_1_blame] on_game_timer = 20 | sr_idle@phase_1_confurm %=send_tip(st_recon_first_blame:kudrischev:kudrischev)% [sr_idle@phase_1_confurm] on_game_timer = 20 | sr_idle@phase_1_next %=send_tip(st_recon_second_confurm_clear:yan_expedition_dolg_2:yan_expedition_dolg_2)% [sr_idle@phase_1_next] on_game_timer = 20 | sr_idle@phase_2 %=send_tip(st_recon_kudrischev_confurm:kudrischev:kudrischev)% [sr_idle@phase_2] Логика НПС не менялась. Дополнено 19 минуты спустя Всё, я нашёл у себя ошибку - логика останавливалась т.к. в send_tip передавался неверный story_id. Тогда вопрос: а как в стриптах мне делать проверку на валидность story_id (story_id существует - true, иначе false)? Хочу дополнительный abort воткнуть в скрипт отправки сообщения. И да, всё ещё хочу узнать: есть ли лимит на количество состояний в логике? Дополнено 32 минуты спустя И ещё вопрос: а можно как-то реанимировать оригинальный printf? Я раскомментировал тело функции в _g.script, но функция всё-равно не работает. Видел способ логгирования через преобразование сообщения в команду консоли и попыткой её выполнения, но этот способ очень нестабилен (может вылететь при неправильных параметрах, да ещё и лога не будет). Если это на уровне движка выключено - мб есть где правка на его включение? Изменено 20 июня, 2023 пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 20 июня, 2023 (изменено) 42 минуты назад, Prostomod сказал: логика останавливалась т.к. в send_tip передавался неверный story_id Бывает... 42 минуты назад, Prostomod сказал: есть ли лимит на количество состояний в логике? Нет. Логика может содержать очень большое число секций. 42 минуты назад, Prostomod сказал: как в стриптах мне делать проверку на валидность story_id if get_story_object_id(story_id) == nil then abort("There is no story object with id [%s]", story_id) end 42 минуты назад, Prostomod сказал: можно как-то реанимировать оригинальный printf? Зачем? Пишите лог в отдельный файл LUA методами - это решение лучше движкового метода. Изменено 20 июня, 2023 пользователем denis2000 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 309 Опубликовано 20 июня, 2023 (изменено) 5 минут назад, denis2000 сказал: пишите лог в отдельный файл LUA методами Интересно... Можете подсказать мод, где подобное уже реализовано? Навскидку я не могу ни один такой вспомнить. Могу, конечно, и сам с 0 попробовать сделать, но с ориентиром это будет попроще. Изменено 20 июня, 2023 пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 20 июня, 2023 (изменено) Kalter103 Аномалии как бы не текстуры, а партиклы. Следовательно нужно найти в конфигах секцию интересующей вас аномалии и в ее параметрах типа ***_particles изменить значения на те которые вас более устраивают. Prostomod Не претендуя на оригинальность, лично я делал примерно так: ---------------------------------------------------- -- Ведение отдельного лог-файла ---------------------------------------------------- --Инициализация лога function init_log_file() local file=io.open("gamedata//log_file.log","w") file:write("Start loggong on "..os.date(),"\n") file:close() end --Запись строки в лог function print_log(save_string,script_name) if script_name == nil then script_name = "_g.script" end local file=io.open("gamedata//log_file.log","a") file:write(os.date().."|"..script_name.."|"..save_string,"\n") file:close() end Изменено 20 июня, 2023 пользователем denis2000 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vasyan54636 126 Опубликовано 20 июня, 2023 Подскажите, пожалуйста, можно ли сделать так, чтобы нпс на смарткавере храпел? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 20 июня, 2023 19 часов назад, Gerbys сказал: Причина может быть в том Также возможно условие не поддерживает кондлист! Например, пытаемся получить параметры из сырой строки combat_ignore_keep_when_attacked = {=is_enemy} true,false ; Это как пример! Можете попробовать вывести в лог значение для отладки из функции xr_logic.pick_section_from_condlist. Но повис может не сразу проявиться. vasyan54636 Через схему cover? anim = sleep sound_idle = sleep Я не проверял, но по идее должно сработать! Хотя , я не помню в оригинале есть звук у неписей sleep с секцией? Если нет добавить по аналогии с другими type = npc Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vasyan54636 126 Опубликовано 20 июня, 2023 24 минуты назад, Mass сказал: Также возможно условие не поддерживает кондлист! Например, пытаемся получить параметры из сырой строки combat_ignore_keep_when_attacked = {=is_enemy} true,false ; Это как пример! Можете попробовать вывести в лог значение для отладки из функции xr_logic.pick_section_from_condlist. Но повис может не сразу проявиться. vasyan54636 Через схему cover? anim = sleep sound_idle = sleep Я не проверял, но по идее должно сработать! Хотя , я не помню в оригинале есть звук у неписей sleep с секцией? Если нет добавить по аналогии с другими type = npc Прописал, но он все так же стесняется храпеть Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 20 июня, 2023 (изменено) vasyan54636 А звук есть sleep в script_sound.ltx? Через анимпоинт он не будет издавать никакие звуки, кроме болтовни, звук гитар и гормошек Изменено 20 июня, 2023 пользователем Mass Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vasyan54636 126 Опубликовано 20 июня, 2023 1 минуту назад, Mass сказал: vasyan54636 А звук есть sleep в script_sound.ltx? Не-а. Дополнено 11 минуты спустя 11 минут назад, Mass сказал: vasyan54636 А звук есть sleep в script_sound.ltx? Добавил, все стабильно -- не храпит) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 20 июня, 2023 (изменено) vasyan54636 Тогда попробуйте в xr_animpoint.script после state_mgr.set_state(self.object, self.st.animpoint:get_action(), nil, nil, {look_position = self.st.animpoint.look_position},{animation_position = self.st.animpoint.position, animation_direction = self.st.animpoint.smart_direction} ) добавить if self.st.sound_idle ~= nil then xr_sound.set_sound_play(self.object:id(), self.st.sound_idle) end и в set_scheme st.sound_idle= utils.cfg_get_string(ini, section, "sound_idle",npc, false, "") Изменено 20 июня, 2023 пользователем Mass Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vasyan54636 126 Опубликовано 20 июня, 2023 @Mass Вылетает с таким логом: Спойлер Expression : fatal error Function : CScriptEngine::lua_pcall_failed File : C:\xray\stcop_engine\src\xrServerEntities\script_engine.cpp Line : 213 Description : <no expression> Arguments : LUA error: ...t.a.l.k.e.r Çîâ Ïðèïÿòü\gamedata\scripts\xr_logic.script:405: attempt to call field 'set_scheme' (a nil value) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mindallius 6 Опубликовано 20 июня, 2023 Здравствуйте, вылет с таким логом Спойлер FATAL ERROR [error]Expression : cross_table().header().level_guid() == level_graph().header().guid() [error]Function : CAI_Space::load [error]File : D:\prog_repository\sources\trunk\xrGame\ai_space.cpp [error]Line : 113 [error]Description : cross_table doesn't correspond to the AI-map stack trace: Изменял АИ сетку , скомпилировал. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 309 Опубликовано 20 июня, 2023 (изменено) Появилась такая неприятность: у НПС настроена логика, которая работает корректно за исключением одной детали: переключение по on_info у некоторых НПС стабильно происходит только после перезагрузки, причём переключение аналогичной логики у других НПС происходит корректно сразу же после получения инфопоршня. В чём может быть проблема и как с ней бороться? Если что, все НПС сидят в анимации hide, прописанной в look вейпоинте: |a=hide Спойлер [logic@yan_expedition_dolg_guard_4] suitable = {=npc_community(dolg)} true active = walker@dolg_guard_4_start prior = 190 post_combat_time = 0, 0 [walker@dolg_guard_4_start]:walker@start path_walk = dolg_guard_4_walk path_look = dolg_guard_4_look on_info = {+yan_psi_oko_expedition_p2_start} walker@dolg_guard_4_phase_2 [walker@dolg_guard_4_phase_2]:walker@start path_walk = dolg_4_phase_2_walk path_look = dolg_4_phase_2_look Дополнено 0 минут спустя Mindallius Спавн после этого пересобрал? И проверь ещё, актуальные ли файлы спавна и сетки в папках с уровнем и spawns в самой игре. Дополнено 10 минуты спустя vasyan54636 тут описан способ получения более подробной информации о вылете. Фактически, игра начинает придираться к некоторым деталям и вылетать из-за каждой ошибки, зато их исправлять намного легче + выявляются скрытые, благодаря чему мод становится стабильнее. http://sigerous.ru/forum/322-2824-37 Дополнено 52 минуты спустя Касательно моей проблемы заметил такое: багаются так НПС с Отбойниками, а нормально работают те, у кого другое оружие (Абаканы), причём, кстати, багаются и в других секциях так-же. Конечно, можно и перевооружить, но хотелось бы докопаться до причины проблемы. Если что, оружейный пак полностью оригинальный. Изменено 20 июня, 2023 пользователем Prostomod 1 Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 20 июня, 2023 vasyan54636 Похоже на синтаксическую ошибку. Покажите, как именно, в скрипт добавили строки? 1 час назад, Prostomod сказал: [walker@dolg_guard_4_start]:walker@start секция walker@start существует в данном файле? 1 час назад, Prostomod сказал: Касательно моей проблемы заметил такое: багаются так НПС с Отбойниками А если анимку поменять на hide_na? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vasyan54636 126 Опубликовано 20 июня, 2023 @Mass Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 20 июня, 2023 vasyan54636 блок с if self.st.sound_idle ~= nil then xr_sound.set_sound_play(self.object:id(), self.st.sound_idle) end переместите верх( поставьте перeд end), чтобы оператор end мог закрыть функцию. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 309 Опубликовано 20 июня, 2023 59 минут назад, Mass сказал: секция walker@start существует в данном файле? Забыл добавить. Да, существует: Спойлер [walker@start] team = yan_expedition_squad def_state_standing = hide def_state_moving = assault corpse_detection_enabled = false gather_items_enabled = false combat_ignore_cond = true combat_ignore_keep_when_attacked = true invulnerable = true meet = no_meet 59 минут назад, Mass сказал: А если анимку поменять на hide_na? Вроде в списке (тут) анимаций она указывалась как анимация со стрельбой, но попробую. Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 20 июня, 2023 2 часа назад, Prostomod сказал: В чём может быть проблема и как с ней бороться? Анимация зацикленная. Движок тупит пока не проиграет её до конца. Делается так: В файл xr_effects.script добавляем функцию function reset_npc( actor, npc ) reset_animation( npc ) end В логику пишем on_info = {+yan_psi_oko_expedition_p2_start} walker@dolg_guard_4_phase_2 %=reset_npc% Подпрыгнет как ужаленный. Тормозов не будет. 2 Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 292 Опубликовано 20 июня, 2023 denis2000 Кстати назначение погоды от атмосфира помогло, теперь не вылетаетю Mindallius [exclusive] escape_focih_spawn - это id эксклюзивного нпс? Проверь всё, а то я помню как ты тогда нагородил) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mawrak 626 Опубликовано 20 июня, 2023 (изменено) Друзья! Подскажите пожалуйста, а как в ванильной ЗП по story_id узнать id нпс? Что нужно: по скрипту выводить определенного конкретного нпс в оффлайн. Пробовал делать вот так: local sim = alife() local npc = sim:story_object(npc_sid) if npc then sim:set_switch_offline (npc.id, true) sim:set_switch_online (npc.id, false) end И пробовал так: local sim = alife() local obj for a=1,65535 do obj = alife():object(a) if obj and obj:clsid() == npc_sid then sim:set_switch_offline (obj.id, true) sim:set_switch_online (obj.id, false) end end npc_sid это в данном случае передаваемый параметр. Проблема - в обоих случах npc или obj:clsid() выходят nil ВСЕГДА. То есть по факту set_switch вещи не активируются вообще. При этом я могу сказать, что story id на нпс висит, так как метка на нем появляется по квесту, где story id прописан в target. И еще, сами методы set_switch явно работают, то есть если сделать local sim = alife() local obj for a=1,65535 do obj = alife():object(a) if obj then sim:set_switch_offline (obj.id, true) sim:set_switch_online (obj.id, false) end end То все объекты вокруг исчезают. Проблема в том, чтобы убрать конкретный. Сам sid прописан через [story_object] story_id = в custom_data Есть ощущение, что я делаю какую-то дурость, но я совсем запутался уже. Дополнено 41 минуты спустя UPDATE: Перепроверил, во втором варианту obj:clsid() не nil, но он регистрируется у всех объектов (даже у тех где его по идее нет) и он нигде не совпадает с тем, что указан в [story_object]. И да, на самом деле тут не совсем ваниль, а OpenXray, забыл уточнить. Но вроде он также работать должен как обычных в плане скриптов Возможно я тупо путаю разные переменные... Дополнено 49 минуты спустя так, оказалось, можно это сделать по имени нпс через string.find(obj:name(),"abc"), но все равно хотелось бы понять что я делал не так Изменено 20 июня, 2023 пользователем Mawrak Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 21 июня, 2023 (изменено) 6 часов назад, Mawrak сказал: как в ванильной ЗП по story_id узнать id нпс? Так это -же вот эта функция делает: get_story_object_id 6 часов назад, Mawrak сказал: Сам sid прописан через Вы путаете sid и story_id - это разные идентификаторы, первый число, второй строка... А obj:clsid() - это вообще получить идентификатор КЛАССА обекта... Изменено 21 июня, 2023 пользователем denis2000 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Крим 790 Опубликовано 21 июня, 2023 Спойлер FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...all of pripyat\gamedata\scripts\smart_terrain.script:353: attempt to index field 'job_link' (a nil value) stack trace: Подскажите, в чем может быть проблема. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Vodka 159 Опубликовано 21 июня, 2023 (изменено) Здравствуйте. Для логики есть проверка actor_has_item, но как я понимаю она предназначена только для одного предмета. Есть ли аналогичная проверка для 2 и более одинаковых предметов? Отбой. нашёл. actor_has_item_count Изменено 21 июня, 2023 пользователем Vodka Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 309 Опубликовано 21 июня, 2023 Vodka посмотри на actor_has_item_count(). Крим что-то с работами в смарте не то... Попробуй активировать функцию abort. Как это сделать, написано тут (спойлер "Получение более подробной информации о вылете"). Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты