Overf1rst 1 496 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 18 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 11 марта, 2023 (изменено) Здравствуйте. Снова нуждаюсь в помощи, т.к. сам разобраться не смог. У меня вылет при загрузке сохранения сделанного после опред-ных действий. Спойлер Сделана рабочая логика персонажа, несколько спейс рестрикторов и масштабная логика для НПС в смарт террейне. (Подобная используется в оригинале, например на Скадовске) Данная логика и рестрикторы сделаны месяца 3 назад и они все работали без ошибок. Суть в чем: мы идем за персом потом нас тепает на смарт террейн с масштабной логикой, нпс менят свой смарт на этот. Начиная с этого момента при попытке загрузить сделанное сохранение, то будет вылет. P.S. Так же я заметил что перестали делаться автосейвы, при любой попытке их вызова (рестриктор, скрипт и т.п.), так что попытка синхронизировать скрипты сохранением не выходит. P.S.S. Локация новая, но зарегистрирована во всех нужных скриптах. А если удалить логику и рестрикторы, то ничего не меняется. Вот собственно сам лог вылета [error]Expression : fatal error [error]Function : lua_pcall_failed [error]File : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp [error]Line : 140 [error]Description : <no expression> [error]Arguments : LUA error: ...ker_Зов Припяти\gamedata\scripts\xr_combat_ignore.script:109: attempt to index field 'actor' (a nil value) stack trace: Спойлер function action_process_enemy:enemy_callback( obj, enemy ) --' local obj_pos = self.object:position() --' local ene_pos = enemy:position() --' printf("FOUND ENEMY [%s](%s,%s,%s) -> [%s](%s,%s,%s)", self.object:name(), obj_pos.x, obj_pos.y, obj_pos.z, --' enemy:name(), ene_pos.x, ene_pos.y, ene_pos.z) if enemy:id() == db.actor:id() then ----------------------------------- 109-ая строка fighting_with_actor_npcs[obj:id()] = true end local is_obj_enemy = is_enemy( obj, enemy, self.st, false ) if is_obj_enemy == true then local se_obj = alife():object(obj:id()) if se_obj and se_obj.m_smart_terrain_id ~= 65535 then local smart_obj = alife():object(se_obj.m_smart_terrain_id) smart_obj:set_alarm() if enemy:id() == db.actor:id() and smart_obj.base_on_actor_control ~= nil then smart_obj.base_on_actor_control:actor_attack() end end local se_enemy = alife():object(enemy:id()) if se_obj and se_enemy then local sim_obj_registry = simulation_objects.get_sim_obj_registry() if se_obj.group_id ~= 65535 and sim_obj_registry.objects[se_obj.group_id] ~= nil and se_enemy.group_id ~= 65535 and sim_obj_registry.objects[se_enemy.group_id] == nil and se_obj.position:distance_to_sqr(se_enemy.position) > 900 then return false end end end return is_obj_enemy end P.S. скрипт был немного изменен, но установка ориг-ного скрипта проблему не решает local ignored_smart = { zat_stalker_base_smart = true, jup_b41 = true, jup_a6 = true, pri_a16 = true, escape_memmory_d1 = true, ---------- garbage_baze_bandits = true ------------- добавил вот эти строки в самом начале скрипта } Буду премного благодарен, тому кто поможет, а я пока продолжу искать возможную причину данного вылета (мне кажется, что проблема автосохранения и данный вылет связаны, но это мои догадки и вряд-ли они будут оправданы) Изменено 11 марта, 2023 пользователем ZaKoN232 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 11 марта, 2023 ZaKoN232 Редко, но метко базовые инициализации переменных в пространстве имён Lua могут глючить. Здесь Lua ещё не успела завести в пространстве db подпространство (поле таблицы) .actor, где и предполагалось хранить заспавленный game_object актёра. Полагаю, что во всех подобных случаях безопасно заменить обращение к конструкции db.actor:id() непосредственно на "вшитый" айди актёра, а именно строку-константу AC_ID (более толерантно к ошибкам будущих модов), или того проще на число 0 (собственно, айди актёра). 1 Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Daniil1989 22 Опубликовано 11 марта, 2023 16 часов назад, 1nkvis сказал: Исправил, не помогло. (я даже всю локу перекомпилил, не помогло) Дополнено 0 минут спустя Нуу нет, спасибо =)) Боишься что я найду твою ошибку. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 11 марта, 2023 (изменено) @BarmaGlot Данный вылет был решен, спасибо. Я бы вряд-ли додумался, но я был близко, когда просто вырезал эти строки. Теперь вылет поменялся и он также связан с загрузкой сохранения, но уже действует по другому. [error]Expression : fatal error [error]Function : lua_pcall_failed [error]File : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp [error]Line : 140 [error]Description : <no expression> [error]Arguments : LUA error: ...mes\stalker_Зов Припяти\gamedata\scripts\xr_logic.script:1270: attempt to index local 'obj' (a nil value) Я понимаю что ошибка в логике, но меня смущает строка 1270: Спойлер local npc_id = obj:id() Скорее всего такая же беда как и с актером, но тут уже исправить будет сложнее. Продолжу работать и спасибо за помощь. P.S. 13.03.23. Данный вылет происходил из-за незарегистрированного инфопоршня. Изменено 13 марта, 2023 пользователем ZaKoN232 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 11 марта, 2023 ZaKoN232 С xr_logic может быть уже множество причин, и не понятно без стека вызовов, куда копать. Попробуйте отлогировать чем-либо непосредственно перед 1270 строкой (погуглите-поищите как именно можно обустроить логирование). Возможно, поможет вызов callstack() (функция из _g.script) А так да, в переменной obj не содержится собственно game_object, или даже может содержаться, но движком соответствующий ему объект уже утилизован. Например, это может быть фантом псевдо-собаки: Lua видит его game_object, в то время как он по-факту уже исчез. Впрочем, такого рода вылеты как правило не имеют лога вовсе, так себе пример 🤔 Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Tenates 0 Опубликовано 12 марта, 2023 Вопрос по ЗП, как создать вначале игры около ГГ предмет, не в инвентаре, а около, тот же костюм допустим, когда он на Затоне появляется, координаты 257 19 541(около спавна), если они вообще нужны. Какие скрипты за это отвечают Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 12 марта, 2023 (изменено) Tenates Тут нужно добавлять секцию спавна предмета в all.spawn. Тут можно 2-мя способами: через сдк или через прогу ACDC. В интернете много уроков по обоим прогам, да и можно самому разобраться. Ах да забыл сказать что есть 3-ий способ - через скрипт, но я этим никогда не пользовался, поэтому не знаю, при таком способе редачить all.spawn не нужно Изменено 12 марта, 2023 пользователем ZaKoN232 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 12 марта, 2023 (изменено) Tenates ZaKoN232 Через скрипт(ы) вещи типа спавна барахла делаются на порядок проще, чем мурыжить SDK и allspawn. Разумеется, это имхо. Так как я как раз по части SDK и олспавна полный ноль 🤣 Есть много способов заспавнить барахло скриптом, они все легко гуглятся. Начните гугление с alife():create() Изменено 12 марта, 2023 пользователем BarmaGlot Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AndroIDDQD 210 Опубликовано 12 марта, 2023 5 часов назад, Tenates сказал: как создать вначале игры около ГГ предмет взято из мода TLR. Смотри в tlr.script --- Спавн инструментов для калибровки на Затоне и Юпитере--- Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
D37a8b 0 Опубликовано 12 марта, 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 : ...ll of pripyat\gamedata\scripts\se_smart_cover.script:50: attempt to index field '?' (a nil value) stack trace: Сначала я предположил что нужно добавить файл из UEgamedata, а позже этот же файл из sdk но тоже вылет поэтому спрашиваю если кто знает пожалуйста, помогите. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 12 марта, 2023 D37a8b У меня подобный вылет был когда у меня СДК сломался и он начинал компилировать спавн неправильно. Тогда я просто установил другой СДК и все пошло по красной дорожке. У вас же судя по всему вылет прямо в самой игре и как то связан с cover-ами. Вы добавляли новые cover-а? Я щас постараюсь посмотреть причину, если найду способ решения - вам отпишу. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 292 Опубликовано 12 марта, 2023 D37a8b Если вы ставили анимации sit_ass и sit_knee то дело в них. Они есть в сдк но их нет в игре. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
D37a8b 0 Опубликовано 12 марта, 2023 Belka_mod да скорее всего в этом и проблема, я вспомнил у меня вроде такое уже было, спасибо Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 292 Опубликовано 12 марта, 2023 D37a8b Если вам нужны эти анимации то скопируйте содержимое этого архива в папку с игрой. Если данные файлы есть у тебя в геймдате то придётся совмещать 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SoDizzari 51 Опубликовано 13 марта, 2023 Пропала вся озвучка нпс, запускаю игру подхожу к сталкеру он молчит, тоже самое делает друг, у него всё нормально. Защитим мир от заразы - Зоны Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 13 марта, 2023 (изменено) SoDizzari Скинь логику где вызывается озвучка и скинь строку регистрации озвучки А также проверь пути для ogg файла Спойлер zat_b38_stalker_cop_about_lair_bloodsucker [zat_b38_stalker_cop_about_lair_bloodsucker] type = npc npc_prefix = false path = scenario\zaton\zat_b38_stalker_cop_about_lair_bloodsucker shuffle = seq idle = 3,5,100 ------------------------------------------------------------------------------------------------------------------- [remark@see] target = story | actor anim = guard_na on_actor_dist_le_nvis = 7 | {-zat_b38_stalker_cop_about_lair_bloodsucker_done} %=play_sound(zat_b38_stalker_cop_about_lair_bloodsucker) +zat_b38_stalker_cop_about_lair_bloodsucker_done% ... Изменено 13 марта, 2023 пользователем ZaKoN232 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
АлеБард 5 Опубликовано 13 марта, 2023 Спойлер хочу реализовать по сюжету возврат в прошлое и в будущее, что-то типа повествования от лица рассказчика. мне нужно чтобы после определенного действия (диалог или попадание в определенную зону например) игрок телепортировался в точку А, и сразу после этого запускалось бы диалоговое окно(не обязательно, если честно будет даже проще если вы подскажете способ БЕЗ этого). после его конца, т.е выбора определенного диалога, игрока должно телепортировать на исходную позицию. как это можно реализовать? немного изменил и дополнил. хочешь обмануть человека - скажи ему правду. хочешь обмануть меня - скажи... блин, в голове звучало лучше Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 13 марта, 2023 (изменено) АлеБард Тут нужен спейс рестриктор с примерно такой логикой: Спойлер [logic] active = sr_idle@info [sr_idle@info] on_info = {+active_punch_actor +gar_nahalo_zasadi -gar_zaglushka_2 =actor_in_zone(spawn_krovosos_prolog_2)} sr_idle@punch %=disable_ui +gar_zaglushka_2% [sr_idle@punch] on_game_timer = 15 | sr_idle@telep %=run_postprocess(black:1996:true)% [sr_idle@telep] on_game_timer = 20 | sr_idle@sleep %=teleport_actor(prolog_1_spawn_point_actor)% [sr_idle@sleep] on_game_timer = 30 | sr_idle@nil %=stop_postprocess(1996) =enable_ui% [sr_idle@nil] После телепорта нужно выставить нпс, который активирует диалог сам. Можно выставить временной таймер, например через 5 секунд после тп на point будет выдаваться инфопоршень и нпс начнет диалог Для нпс нужна любая основная логика и обязательно логика типа meet: Спойлер [logic@gar_nikolay_molhun] active = walker@hdem suitable = {=check_npc_name(gar_nikolay_molchun)} true prior = 200 [walker@hdem] path_walk = nikolay_molhun_walker_1_walk path_look = nikolay_molhun_walker_1_look invulnerable = {+gar_ubit_kolya} false, true combat_ignore_cond = false combat_ignore_keep_when_attacked = false gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false meet = meet@molhun_dialog [meet@molhun_dialog] close_anim = nil close_victim = nil far_anim = nil far_victim = nil close_distance = 0 far_distance = 0 use = {+gar_ubit_kolya} false, {+gar_kolya_hivi} false, {+gar_fiesh_serchd +pogovoril_s_koley} self, {+pogovoril_s_koley} false, true meet_on_talking = false allow_break = false trade_enable = false meet_dialog = {+gar_fiesh_serchd +pogovoril_s_koley} gar_zombied_nikolay_2_dialog, gar_zombied_nikolay_1_dialog meet_dialog - диалог который начнет гг (подобно start_dialog из профилей нпс) use = ... {+gar_fiesh_serchd +pogovoril_s_koley} self, где self - означает что нпс сам начнет диалог. Изменено 13 марта, 2023 пользователем ZaKoN232 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SoDizzari 51 Опубликовано 13 марта, 2023 2 часа назад, ZaKoN232 сказал: SoDizzari Скинь логику где вызывается озвучка и скинь строку регистрации озвучки А также проверь пути для ogg файла пример (Скрыть контент) zat_b38_stalker_cop_about_lair_bloodsucker [zat_b38_stalker_cop_about_lair_bloodsucker] type = npc npc_prefix = false path = scenario\zaton\zat_b38_stalker_cop_about_lair_bloodsucker shuffle = seq idle = 3,5,100 ------------------------------------------------------------------------------------------------------------------- [remark@see] target = story | actor anim = guard_na on_actor_dist_le_nvis = 7 | {-zat_b38_stalker_cop_about_lair_bloodsucker_done} %=play_sound(zat_b38_stalker_cop_about_lair_bloodsucker) +zat_b38_stalker_cop_about_lair_bloodsucker_done% ... Нет ты не понял, я про стандартные приветственные фразы НПС: "Здравствуй, Сталкер" "Заходи если что" Защитим мир от заразы - Зоны Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
АлеБард 5 Опубликовано 13 марта, 2023 еще один вопрос, в основном такой же странный как и все остальные мои вопросы: как последовательно выдавать квесты? искал, в итоге нашел только один туториал на весь интернет, где выдают один квест и забывают про него. мне нужно, чтобы сюжетный квест, который выдается после заставки в начале игры имел продолжение. я прописал все в tm_локация, русифицировал, написал новые инфопорции под квесты, а как выдать квесты последовательно - так и не понял. разговариваю с персонажем, заканчиваю диалог, квест завершается, а следующий в цепочке не выдается (ну, очевидно потому что я не прописал его выдачу). собственно в этом и вопрос - как эти квесты выдавать-то? хочешь обмануть человека - скажи ему правду. хочешь обмануть меня - скажи... блин, в голове звучало лучше Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 13 марта, 2023 АлеБард Есть несколько способов: Через скрипт: Спойлер task_manager.get_task_manager():give_task("zat_sih_rabota_nahalo_2") Где <zat_sih_rabota_nahalo_2> айди квеста Через логику рестриктора: Спойлер =give_task(gar_nikolay_molhun_kvest) Где <gar_nikolay_molhun_kvest> айди квеста И через завершение квеста. Тут функция такая же как у рестриктора: Спойлер [gar_nikolay_molhun_kvest] ;Николай Молчун Живой мертвец icon = ui_inGame2_gar_nikolay_molhun .... condlist_0 = {+death_gar_sim_7_molhun_squad +gar_ubit_kolya} complete %=give_task(gar_nikolay_molhun_kvest_2)% =give_task(gar_nikolay_molhun_kvest_2) 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SoDizzari 51 Опубликовано 13 марта, 2023 ZaKoN232 можешь подсказать на счёт вопроса выше? Защитим мир от заразы - Зоны Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 13 марта, 2023 SoDizzari Они вызываются рандомно, если ты про фразы алайфных нпс. Вот небольшой список: Спойлер meet_hello_1 meet_hello_2 meet_hello_3 meet_hello_4 meet_hello_5 и т.д. Чтобы добавить новые просто кидаешь обработанный файл ogg в нужную папку озвучки обычных нпс и называешь след по порядку. А если ты про фразы например Бороды (когда подходишь к нему он приветствуется, а когда уходишь он прощается), то там сделано по другому. Спойлер [meet] close_snd_hello = {-zat_b30_barmen_under_sultan} zat_a2_stalker_barmen_greeting, zat_a2_stalker_barmen_greeting_angry close_snd_bye = {-zat_b30_barmen_under_sultan} zat_a2_stalker_barmen_farewell, zat_a2_stalker_barmen_farewell_angry zat_a2_stalker_barmen_greeting - это айди озвучки приветсвия zat_a2_stalker_barmen_farewell - это айди озвучки прощания Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SoDizzari 51 Опубликовано 13 марта, 2023 Только что, ZaKoN232 сказал: SoDizzari Они вызываются рандомно, если ты про фразы алайфных нпс. Вот небольшой список: приветствия (Скрыть контент) meet_hello_1 meet_hello_2 meet_hello_3 meet_hello_4 meet_hello_5 и т.д. Чтобы добавить новые просто кидаешь обработанный файл ogg в нужную папку озвучки обычных нпс и называешь след по порядку. А если ты про фразы например Бороды (когда подходишь к нему он приветствуется, а когда уходишь он прощается), то там сделано по другому. кусок логики Бороды (Скрыть контент) [meet] close_snd_hello = {-zat_b30_barmen_under_sultan} zat_a2_stalker_barmen_greeting, zat_a2_stalker_barmen_greeting_angry close_snd_bye = {-zat_b30_barmen_under_sultan} zat_a2_stalker_barmen_farewell, zat_a2_stalker_barmen_farewell_angry zat_a2_stalker_barmen_greeting - это айди озвучки приветсвия zat_a2_stalker_barmen_farewell - это айди озвучки прощания Так почему я их не слышу? Скидываю другу свой мод он слышит голоса НПС, а я не слышу. Защитим мир от заразы - Зоны Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 13 марта, 2023 SoDizzari Возможно в том что ты мог не обработать звук в формате waw и не перенес его в ogg уже в самом СДК (Я так делаю и у меня с озвучкой все хорошо) Либо у звука стоит низкий параметр громкости, либо его дальность слышимости равна 2 метрам. Тут можно гадать очень долго из-за чего так может происходит. (У моего друга была подобная фигня, но у него драйвера звука были устаревшие) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты