Overf1rst 1 499 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 19 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
FalkineIsaku 81 Опубликовано 3 апреля, 2023 D37a8b Можно же загуглить: Уроки по SDK 0.7, вопросы по SDK следует задавать в этой теме. Перед тем как задавать вопрос, пожалуйста, попробуйте загуглить его в интернете. А компилировать нужно кнопочкой Compile ---> Build. 𝐒𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟, 𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫…𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 4 апреля, 2023 Приветствую! В общем я так и не смог найти причину вылета (лог ниже), а сил и времени разбираться остается мало. Логирование 1270-ой строки мне не удалось сделать, так как не умею, а разобраться не смог. Спойлер Expression : fatal error Function : lua_pcall_failed File : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp Line : 140 Description : <no expression> Arguments : LUA error: ...mes\stalker_Çîâ Ïðèïÿòè\gamedata\scripts\xr_logic.script:1270: attempt to index local 'obj' (a nil value) Я не знаю где искать ошибку. Вылет происходит при проматывании времени как угодно: логикой, местом для сна или просто проматыванием времени. После какого-то периода времени при сохранении и загрузке происходит вот этот вылет. Можете помочь хоть как-то? Как можно сделать логирование 1270-ой строки? Спойлер Я знаю, что этот вылет происходит из-за того что движок пытается прочитать значение несуществующего объекта, объяснять мне это не нужно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Emmis 495 Опубликовано 4 апреля, 2023 4 минуты назад, ZaKoN232 сказал: Приветствую! В общем я так и не смог найти причину вылета (лог ниже), а сил и времени разбираться остается мало. Логирование 1270-ой строки мне не удалось сделать, так как не умею, а разобраться не смог. Лог вылета (Показать контент) Expression : fatal error Function : lua_pcall_failed File : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp Line : 140 Description : <no expression> Arguments : LUA error: ...mes\stalker_Çîâ Ïðèïÿòè\gamedata\scripts\xr_logic.script:1270: attempt to index local 'obj' (a nil value) могу напутать, но помнится что-то такое было, когда у меня была ошибка в синтаксисе, например, then или что-то по типу такого забыл написать История Джона 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 4 апреля, 2023 (изменено) 29 минут назад, ZaKoN232 сказал: Логирование 1270-ой строки мне не удалось сделать, так как не умею, а разобраться не смог. Лог вылета (Скрыть контент) LUA error: ...mes\stalker_Çîâ Ïðèïÿòè\gamedata\ Ку! Нет нужды логировать, так как здесь ошибка очевидна. Точнее, не столько ошибка, сколько отсутствие внятных объёмов тестирования на этапе производственного ада, что привело к этому (и ещё тысяче подобных мест в модах-последователях), где, казалось бы, "всё должно работать", а по факту "оно вылетает". Прикрепляю патч (фикс) с ассертом существования или дефолтом в случае фейла. Вылетать таперича не будет, но за другие эффекты типа "что-то пошло не так" не ручаюсь. Кроме того, там в логе у вас путь к игре содержит абракадабру. Это не есть гуд в любом случае. Надо стараться помещать в короткие папки исключительно с английскими именами, типа c:\games\CoP xr_logic.script Изменено 4 апреля, 2023 пользователем BarmaGlot Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 4 апреля, 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: c:\games\cop\gamedata\scripts\xr_logic.script:1274: attempt to index a nil value Спойлер function pstor_retrieve(obj, varname, defval) -- Barmaglot fix -- local npc_id = obj:id() local npc_id = obj and obj.id and obj:id() or 0 if db.storage[npc_id].pstor ~= nil then ------------------- 1274-ая строка local val = db.storage[npc_id].pstor[varname] if val ~= nil then return val end end if defval ~= nil then return defval end --abort("xr_logic: pstor_retrieve: variable '%s' does not exist", varname) return nil end Изменено 4 апреля, 2023 пользователем ZaKoN232 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 953 Опубликовано 4 апреля, 2023 (изменено) 25 минут назад, ZaKoN232 сказал: Хоть какое-то продвижение К сожалению для вас - нет. Исходная причина так и не устранена. Насколько я понимаю причина не в данной функции а в том, что кто-то ее вызывает с некорректными параметрами. Изменено 4 апреля, 2023 пользователем denis2000 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 4 апреля, 2023 (изменено) ZaKoN232 Сорри, мой косяк: недоассертировал до конца, понадеялся на авось. И даже не проверял на запущенной игре))) Перекачайте и перезапишите файл, прикрепляю... Добавил недостающий ассерт. А denis2000 правильно говорит: проблема останется, просто вылет должен исчезнуть. denis2000 Как можно в оригинальном CoP логировать? Насколько знаю, printf и подобные функции вырезаны. И сразу сам себе отвечаю, поскольку делал уже))) ну и память, мешок барахла, старость не радость, а кумпол отбитый-пропитый. function printb(fmt,...) -- formatted logging local file=io.open("gamedata//log_file.log","a") file:write(string.format(fmt,...),"\n") file:close() end xr_logic.script Изменено 4 апреля, 2023 пользователем BarmaGlot Сам себе ответ 1 Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 4 апреля, 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: c:\games\cop\gamedata\scripts\xr_statistic.script:562: attempt to index field 'actor' (a nil value) Я очень рад, что избавился от прошлого вылета. Осталось понять почему он происходил, но тут я как-нибудь сам, да и с этим вылетом тоже пороюсь. Еще раз спасибо! Изменено 4 апреля, 2023 пользователем ZaKoN232 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 4 апреля, 2023 ZaKoN232 Киньте в меня ваш xr_statistics.script, что-то я в своём от оригинального CoP вообще такой строки не вижу. А также киньте сейв на файлообменник: если игра не сильно модирована и у меня загрузится – гляну возможный корень зла. На вскидку, и мы об этом ранее говорили с вами: db.actor не инициализирован в моменты обращения к его свойствам... Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 4 апреля, 2023 BarmaGlot 6 минут назад, BarmaGlot сказал: что-то я в своём от оригинального CoP вообще такой строки не вижу У вас нет такой строки из-за того что в моде используется оружейный пак, из-за чего количество строк увеличилось. 2 минуты назад, BarmaGlot сказал: На вскидку, и мы об этом ранее говорили с вами: db.actor не инициализирован в моменты обращения к его свойствам... Да, я помню. 4 минуты назад, BarmaGlot сказал: А также киньте сейв на файлообменник: если игра не сильно модирована и у меня загрузится – гляну возможный корень зла Не выйдет. Игра модернизирована во многих аспектах Вот сам файлxr_statistic.script Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 4 апреля, 2023 (изменено) ZaKoN232 На вскидку, я бы поменял в файле configs\misc\achievements.ltx где только возможно все указания типа functor = xr_statistic.блаблабла на functor = xr_conditions.блаблабла (предварительно убедившись, что такая функция там объявлена) Начать можно именно с той строки, которая на текущий момент и приводит к вылету: вместо functor = xr_statistic.wealthy_functor пишем functor = xr_conditions.wealthy_functor Это может прямо влиять и даже уже быть неким утерянным чьим-то патчем. Если не проканает, то увы – без полного кода всего мода копать мне смысла нет, а с полным кодом – нет времени на разбор пролётов, ибо своих выше крыши. Ежели, напротив, финт получится, то заменить все прочие аналоги как написано ранее. P.S. гарантированно вылет можно вылечить иначе, если пропарсить xr_statistic.script на предмет обращений к db.actor и везде-везде перед этими обращениями вставлять заглушки типа: if not db.actor then return some_value end разумеется, смотря по контексту, что должна возвращать эта функция и соответсвенно меняя some_value на nil или инициализаторы типа пустых строк, нулей, пустых таблиц и так далее. Но это будет, конечно, костыль в чистом виде. Однако пациент гарантированно встанет с инвалидного кресла. Изменено 4 апреля, 2023 пользователем BarmaGlot 1 Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 4 апреля, 2023 (изменено) 2 часа назад, ZaKoN232 сказал: \xr_logic.script:1274: attempt to index a nil value Это серьезная ошибка! К сожалению, простой затычкой не получится исправить проблему! Без исправления самой причины краша, вылеты последуют и безлоговые! Я много раз получал данный вылет.Где-то вис коллбек, где-то висла функция, где-то логика была причиной! Единственный вариант узнать что за объект. Исходя из этого решать проблему! В чистом движке, ох как не хватало пространства имен debug, а именно traceback Изменено 4 апреля, 2023 пользователем Mass Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 5 апреля, 2023 (изменено) Mass В том то и дело, что происходит вылет по неизвестной причине и неизвестно когда он начался. Происходит он на только одной локации (была добавлена мной, ошибок на ней не было несколько месяцев). Объектов на этой локации всего 7, и то это тестовые смарт-террейны, если их вырезать и оставить пустую локацию без объектов, кроме самых необходимых для работы локации, то вылет останется. Изменено 5 апреля, 2023 пользователем ZaKoN232 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CiberZold 853 Опубликовано 5 апреля, 2023 13 часов назад, ZaKoN232 сказал: [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: c:\games\cop\gamedata\scripts\xr_logic.script:1274: attempt to index a nil value это логическая ошибка, а не из-за неправильного синтаксиса скрипта, как бы Function - lua_pcall_failed на это указывает, сбой происходит при вызове функции, и скорее всего ты используешь скрипты от оригинала ЗП на другом правленом движке, возможно ошибка возникла на этапе подключения новой локации, но чтоб устранить такую ошибку возможно тебе придётся перелопачивать все скрипты)) 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 953 Опубликовано 5 апреля, 2023 (изменено) ZaKoN232 Выход у вас ровно один: Включайте логирование в файл, как предложил BarmaGlot. Ищите все скрипты (в том числе и не правленые) откуда вызывается функция pstor_store (их не так и много 10 шт). ПЕРЕД вызовом функции пишите в лог подробности вызова (какой скрипт вызывает, что за объект, что за переменная). В вашем случае объект для которого вызывается сохранение переменной уже nil, но вот скрипт и имя может, подсказать направление поиска. Дожидаетесь вылета - читаете лог и будете знать по крайней мере более подробно причины. Изменено 5 апреля, 2023 пользователем denis2000 1 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 5 апреля, 2023 CiberZold denis2000 Спасибо за помощь, но воспользовался логинированием и обнаружилось что вылет вызывает скрипт atmosfear-ера. Мои кривые руки напортачили в адаптации. Я вырезал атмосфеар и все заработало. BarmaGlot Отдельное спасибо! 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Boomer 465 Опубликовано 5 апреля, 2023 Можно ли сделать, чтобы во время показа туториала блокировались все кнопки, чтоб его нельзя было пропустить или поставить на паузу? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZaKoN232 6 Опубликовано 5 апреля, 2023 (изменено) Boomer тут поможет, вроде как, =disable_ui (если я конечно понял правильно) p/s я понял не правильно Изменено 5 апреля, 2023 пользователем ZaKoN232 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 5 апреля, 2023 (изменено) 1 час назад, Boomer сказал: Можно ли сделать, чтобы во время показа туториала блокировались все кнопки, чтоб его нельзя было пропустить или поставить на паузу? Boomer В bind_stalker.actor_binder:ipdate() используется такой метод, например, когда актёра вежливо бьют в лицо. Это полностью блокирует любой ввод. -- Обновление отключения ввода с клавиатуры. if self.st.disable_input_time ~= nil and game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle then level.enable_input() self.st.disable_input_time = nil end Вероятно, вас также может заинтересовать метод level.disable_input(), который можно вызвать в момент старта тюториала. Если этот "level.disable_input()" пошерстить в скриптах, то там найдутся и несколько обёрнутых функций, в т.ч. отключения UI на заданное время. Изменено 5 апреля, 2023 пользователем BarmaGlot Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CiberZold 853 Опубликовано 5 апреля, 2023 2 часа назад, Boomer сказал: Можно ли сделать, чтобы во время показа туториала блокировались все кнопки, чтоб его нельзя было пропустить или поставить на паузу ну ты можешь во время старта туториала в функции применить метод level.disable_input(), а по окончании тутора в функции function_on_stop прописать свою функцию, которая бы обратно врубала управление. мне например правда на движке огсе, надо было сделать, чтоб во время отрезания части мутанта игралась анимация камеры, и чтоб игрок не мог в это время её скипнуть, двигаться и пр., - я как раз при начале отрезания, использовал метод level.disable_input() и сразу же запускал таймер через огсе-скрипты, там есть скрипт, что запускает другой скрипт по окончанию таймера, поставил там 3 секунды и он по окончанию запускал другой скрипт, единственным назначением которого было включение управления обратно через level.enable_input(), получилось круто) учитывая ограниченный функционал ТЧ-движков, в ЗП в этом плане возможностей то побольше. 1 час назад, BarmaGlot сказал: несколько обёрнутых функций, в т.ч. отключения UI на заданное время. тут это не особо подходит ведь туторы могут быть разные по времени. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
FalkineIsaku 81 Опубликовано 6 апреля, 2023 Здравствуйте, как можно вернуть "Вы действительно хотите перейти на другую локацию" без правок движка? 𝐒𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟, 𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫…𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 953 Опубликовано 6 апреля, 2023 (изменено) FalkineIsaku Сделав вместо левел-ченджера рестриктор запускающий UI-окно с данным диалогом и в зависимости от выбора телепортирующий в левел-ченджер или от рестриктора. Подробности реализации можно подсмотреть например в моде Путь во Мгле. В нем данный функцианал гораздо шире чем просто подтверждение перехода, там переход может быть закрыт неким условием и выдается сообщение о причине отказа, метка на переход с подписью, автоматическое сохранение игры пред переходом и учет времени путешествия в комплекте. Скрипт sr_level_changer.script Изменено 6 апреля, 2023 пользователем denis2000 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Meloy 4 Опубликовано 6 апреля, 2023 Вобщем у меня вопрос как удалить квест из игры, я удалил все из misc task manager и из папки text/rus/St_quests_... Но в пда этот квест все равно отображается, что мне сделать? Дополнено 0 минут спустя Сорян за перевёрнутую фотку только сейчас заметил Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 884 Опубликовано 6 апреля, 2023 34 минуты назад, Meloy сказал: Но в пда этот квест все равно отображается, что мне сделать? Найти место, где выдаётся этот квест и убрать эту выдачу. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 926 Опубликовано 6 апреля, 2023 Meloy лично я поступаю так, когда хочу понять как что-то устроено - открываю папку в VSCode (программа для редактирования текстовых файлов, для которой я делал плагин поддержки сталкерского языка игровой логики), открываю поиск по файлам и ввожу название секции (в данном случае индекс задания). Я думаю, ты сразу поймешь, что это то что нужно, когда увидишь. Задание выдается записью "=give_task(название_задания)" в логике (файлы с расширением *.ltx) 1 Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты