Overf1rst 1 503 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 19 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 976 Опубликовано 1 ноября 12 часов назад, Pavel2000 сказал: можно ли отключить спавн отрядов на локации? В каждом смарте, где происходит респавн сквадов есть параметр spawn_num. Это кондлист и если его приравнять к нулю по нужному вам условию респавн прекратиться. 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 1 ноября 14 часов назад, sosiska23 сказал: путь правильный Если abort не отключен, то выше лога ошибки должна быть чуть-ка больше информации о вылете Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано 1 ноября (изменено) Mass а как понять что abort не отключен? Спойлер "f:\s.t.a.l.k.e.r\s.t.a.l.k.e.r. call of pripyat\bin\xrengine.exe" * phase time: 0 ms * phase cmem: 120716 K Loading objects... Loading models... * [prefetch] time: 76597 ms * [prefetch] memory: 125836Kb ! Unable to find Software\GSC Game World\STALKER-COP\ in registry ! Player name registry key (InstallUserName) not found ! * phase time: 76715 ms * phase cmem: 248959 K * phase time: 5 ms * phase cmem: 248959 K * Creating new game... * Loading spawn registry... * 592 spawn points are successfully loaded 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 : ...k.e.r. call of pripyat\gamedata\scripts\utils.script:469: bad argument #1 to 'gsub' (string expected, got nil) stack trace: 0023:69737365 nvwgf2um.dll Изменено 1 ноября пользователем sosiska23 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 976 Опубликовано 1 ноября sosiska23 function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано 1 ноября denis2000 а в каком файле эта функция должна быть? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 1 ноября 8 минут назад, sosiska23 сказал: в каком файле эта функция должна быть? В _g.script, но лучше ее заменить на что-то более нормальное! Например: Я когда-то пользовался этим,но теперь у меня функция немного видоизменена. Много из каких мест вызывается Эта функция сойдет для оригинала! --/ расширенный формат строки (для вывода в лог) function StringExtraFormat(fmt,...) --/ локальная функция: перевод аргумента в стринг local val2str = function(val,lua_type) if lua_type == 'table' then if tonumber(val.x) and tonumber(val.y) and tonumber(val.z) then return string.format('tbl{x=%.3f:y=%.3f:z=%.3f}',val.x,val.y,val.z) --/> end local tbl,str,separator = {},'tbl{',"" for key,_ in pairs(val) do table.insert(tbl, key == tonumber(key) and tostring(key) or key) end table.sort(tbl) for _,key in ipairs(tbl) do if (tonumber(key) or 0) > 0 then str = str..separator..tostring(val[tonumber(key)]) else str = str..separator..key.." = "..tostring(val[key]) end separator = ", " end return str..'}' --/> elseif lua_type == 'userdata' then --/#?# а нужно ли привязываться к движку? if type(val.getP) == 'function' then if type(val.x) == 'number' and type(val.y) == 'number' and type(val.z) == 'number' then return string.format('vec(x=%.3f:y=%.3f:z=%.3f)',val.x,val.y,val.z) --/> end return '<vector>' --/> elseif type(val.setHMSms) == 'function' then return 'CTime('..val:dateToString(0).." "..val:timeToString(3)..")" --/> D/M/Y h:m:s:ms end elseif lua_type == 'string' then return val --string.format("%q", val) --/> elseif lua_type == 'boolean' then return val and "true" or "false" --/> elseif lua_type == 'number' then return tostring(val) --/> end return "<"..lua_type..">" --/> end --/ основное тело функции: парсинг исходной строки if type(fmt) == 'string' then if fmt:match('%%[sdf]') then --/ есть патерн(ы)? if next({...}) then --/ есть аргумент(ы)? local arg,val,lua_type,i = {...},nil,nil,nil for i=1,#arg do val = arg[i] --/ значение текущего аргумента lua_type = type(val) --/ тип текущего аргумента if lua_type == 'number' then fmt = fmt:gsub('%%[dsf]',val,1) else fmt = fmt:gsub('%%s',val2str(val,lua_type),1) end end end fmt = fmt:gsub('%%[sdf]',"<NOT_arg!>") --/ заглушка от отсутствия аргументов end else fmt = val2str(fmt,type(fmt)) end return fmt --/> string --/ с заменой обычных пробелов (sym_space='\032') на печатные ('\160') --return fmt:gsub('%s','\160') --/> string end abort = function(fmt,...) assert("[error]ABORT CALLED:\n" .. StringExtraFormat(fmt, ...)) get_console():execute('flush') exit() end Вроде бы эта функция за авторством Artos'a Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано 1 ноября (изменено) Mass заменил, лог опять поменялся: лобавил строк 20 Спойлер "f:\s.t.a.l.k.e.r\s.t.a.l.k.e.r. call of pripyat\bin\xrengine.exe" * phase time: 0 ms * phase cmem: 120716 K Loading objects... Loading models... * [prefetch] time: 104385 ms * [prefetch] memory: 125836Kb ! Unable to find Software\GSC Game World\STALKER-COP\ in registry ! Player name registry key (InstallUserName) not found ! * phase time: 105173 ms * phase cmem: 248959 K * phase time: 5 ms * phase cmem: 248959 K * Creating new game... * Loading spawn registry... * 592 spawn points are successfully loaded * Log file has been saved successfully! 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 : ....l.k.e.r. call of pripyat\gamedata\scripts\_g.script:545: attempt to call global 'exit' (a nil value) stack trace: Изменено 1 ноября пользователем sosiska23 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 1 ноября (изменено) 11 минут назад, sosiska23 сказал: заменил, лог опять поменялся Нужно строк 15-20 выше Хм... assert не работает в оригинале? Запамятовал я наверное. Можно попробовать заменить движковую ф-ию assert на консольную. Тоесть всю строку Цитата assert("[error]ABORT CALLED:\n" .. StringExtraFormat(fmt, ...)) на Цитата get_console():execute("[error]ABORT CALLED:\n:"..StringExtraFormat(fmt,...)) Изменено 1 ноября пользователем Mass пояснение Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано 1 ноября Mass заменил Спойлер "f:\s.t.a.l.k.e.r\s.t.a.l.k.e.r. call of pripyat\bin\xrengine.exe" * phase time: 0 ms * phase cmem: 120716 K Loading objects... Loading models... * [prefetch] time: 83004 ms * [prefetch] memory: 125836Kb ! Unable to find Software\GSC Game World\STALKER-COP\ in registry ! Player name registry key (InstallUserName) not found ! * phase time: 83133 ms * phase cmem: 248959 K * phase time: 4 ms * phase cmem: 248959 K * Creating new game... * Loading spawn registry... * 592 spawn points are successfully loaded ! Unknown command: [error]ABORT * Log file has been saved successfully! 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 : ....l.k.e.r. call of pripyat\gamedata\scripts\_g.script:545: attempt to call global 'exit' (a nil value) stack trace: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 1 ноября (изменено) 7 минут назад, sosiska23 сказал: заменил Если парсер не переводит на следующую строку. Тогда попробуйте так: get_console():execute("[error]ABORT CALLED ~:"..StringExtraFormat(fmt,...)) P.S. Давно с оригиналом движка дел не имел Изменено 1 ноября пользователем Mass Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано 1 ноября Mass блин я не думаю что что-то с движком, либо мы такими темпами многопоток сделаем Спойлер "f:\s.t.a.l.k.e.r\s.t.a.l.k.e.r. call of pripyat\bin\xrengine.exe" * phase time: 0 ms * phase cmem: 120715 K Loading objects... Loading models... * [prefetch] time: 91903 ms * [prefetch] memory: 125837Kb ! Unable to find Software\GSC Game World\STALKER-COP\ in registry ! Player name registry key (InstallUserName) not found ! * phase time: 92046 ms * phase cmem: 248959 K * phase time: 4 ms * phase cmem: 248959 K * Creating new game... * Loading spawn registry... * 592 spawn points are successfully loaded ! Unknown command: [error]ABORT * Log file has been saved successfully! 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 : ....l.k.e.r. call of pripyat\gamedata\scripts\_g.script:545: attempt to call global 'exit' (a nil value) stack trace: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 1 ноября 36 минут назад, Mass сказал: get_console():execute("[error]ABORT CALLED ~:"..StringExtraFormat(fmt,...)) А если так? У меня нет возможности проверить на чистом движке Поэтому... get_console():execute("[error]ABORT CALLED".. string.sub(StringExtraFormat(fmt,...),1,160)) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано 1 ноября Mass все равно Спойлер "f:\s.t.a.l.k.e.r\s.t.a.l.k.e.r. call of pripyat\bin\xrengine.exe" * phase time: 0 ms * phase cmem: 120716 K Loading objects... Loading models... * [prefetch] time: 78471 ms * [prefetch] memory: 125836Kb ! Unable to find Software\GSC Game World\STALKER-COP\ in registry ! Player name registry key (InstallUserName) not found ! * phase time: 78593 ms * phase cmem: 248959 K * phase time: 5 ms * phase cmem: 248959 K * Creating new game... * Loading spawn registry... * 592 spawn points are successfully loaded ! Unknown command: [error]ABORT * Log file has been saved successfully! 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 : ....l.k.e.r. call of pripyat\gamedata\scripts\_g.script:545: attempt to call global 'exit' (a nil value) stack trace: я говорю, вряд ли с движком что то, я его не менял возможно не зарегал но где? squad_descr_escape.ltx, simulation_objects_props.ltx, simulation.ltx, smart_terrain_masks.ltx Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 1 ноября (изменено) 8 минут назад, sosiska23 сказал: все равно Тогда не знаю в чем причина, почему именно в лог не пишет. Мб потом как-нибудь узнаю в чём затык на оригинале. 8 минут назад, sosiska23 сказал: вряд ли с движком что то Нет! В оригинале немного урезано логирование. Я уже и не помню как я тогда выводил нормально инфу в лог Можно попробовать поискать функционал на этом сайте и найти аналогичные функции для оригинала Изменено 1 ноября пользователем Mass Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 976 Опубликовано 1 ноября (изменено) sosiska23 Наигрались? error_log(reason) раскомментируйте! 8 минут назад, Mass сказал: Тогда не знаю в чем причина, почему именно в лог не пишет. Потому, что функция get_console():execute не предназначена для записи информации в лог, ее назначение - вызов команд в консоли, а потому попытка вызова ее с рандомной строкой закончиться сообщением: ! Unknown command: и далее символы до первого пробела Изменено 1 ноября пользователем denis2000 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 1 ноября 6 минут назад, denis2000 сказал: error_log Я перепутал assert и error_log. Какой-то из них явно не работает в оригинальном движке. Получается что error_log всё-таки работает! Я увидев функцию моментально подумал что у sosiska23 она строка в этой функции тоже раскоментирована. Вот и получилась нелепость Дополнено 2 минуты спустя 10 минут назад, denis2000 сказал: ! Unknown command: и далее символы до первого пробела Я помню что как то выводил в лог с помощью костылей в get_console():execute. В любом случае к оригиналу я не притрагивался уже очень продолжительное время 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hrust 533 Опубликовано 1 ноября @Mass, на миксед конфе выводится в лог всё через `log(text)` и `printf(format)`, для релиз конфы нужно внести кое-какие изменения в движке. Не знаю, зачем такие извращения, что выше описали. Если хотите аасерт скриптовый — ставится проверка на что-то и после `then` пишется `abort(format)`. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 1 ноября 6 минут назад, Hrust сказал: Не знаю, зачем такие извращения Это нужно, если при логировании аргумент равен нил тогда в лог просто напишет что переменная равна нил, а также когда не знаешь тип переменной. Иногда полезно! Я еще вывожу таблицу. Знаю есть оригинальная print_table, но мне проще сделать логирование и сразу вывести в лог, не думая какой там тип переменной Дополнено 3 минуты спустя 13 минут назад, Hrust сказал: Если хотите аасерт скриптовый Кстати, точно помню в ТЧ assert работал, и я им активно пользовался Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pavel2000 31 Опубликовано 1 ноября Здравствуйте, появился такой вопрос, возможно ли реализовать постоянную ночь? «Если долго мучиться, что-нибудь получится» Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Stinger 24 Опубликовано 1 ноября 30 минут назад, Pavel2000 сказал: Здравствуйте, появился такой вопрос, возможно ли реализовать постоянную ночь? в game_maps_single.ltx найди свою локацию и строчка weather пиши night Дополнено 1 минуту спустя Всем привет сделал анимацию камеры облета в сдк. в сдк все норм работает а в игре камера играет не на тех координатах где в сдк, в чем может быть проблема. вот пример логики [logic] active = sr_idle@wait [sr_idle@wait] on_info = {-op_arena_intro_info =actor_on_level(op_arena) !black_screen} sr_idle@timer_intro %=run_postprocess(black:3009:true) =disable_ui =scene_sound_off% [sr_idle@timer_intro] on_game_timer = 65 | sr_cutscene@intro %=scene_sound_on =run_postprocess(stc_fade_out) =stop_postprocess(3009) =play_sound(mm_main_amb_music_2) +op_arena_intro_info % [sr_cutscene@intro] cam_effector = scenario_cam\op_arena\op_camera_test point = op_arena_tp_actor_1_way look = op_arena_tp_actor_1_way on_signal = cameff_end | sr_idle@intro_outro_end %=run_postprocess(black:3009:true)% outdoor = true enable_ui_on_end = false [sr_idle@intro_outro_end] on_info = {+op_arena_intro_info -op_arena_outro_info} sr_idle@cond ;on_info2 = {+op_arena_outro_info} nil; отключение пока так [sr_idle@cond] on_game_timer = 30| sr_idle@wait %=run_postprocess(black:3009:true) =scene_sound_off% 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано 1 ноября 2 часа назад, denis2000 сказал: error_log(reason) раскомментируйте! я не могу наййти эту строчку в g_script я знаю про поиск ctrl + F Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 976 Опубликовано 1 ноября (изменено) Stinger Анимация камеры может быть в глобальных координатах: [sr_cutscene] global_cameffect = true Или в относительных: [sr_cutscene] global_cameffect = false 29 минут назад, sosiska23 сказал: я не могу наййти эту строчку в g_script По всей вероятности вы ее затерли своими предыдущими правками, откатите их. PS: В любом случает полный код функции abort я приводил выше. Изменено 1 ноября пользователем denis2000 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано 1 ноября denis2000 раскоментировал строчку Спойлер "f:\s.t.a.l.k.e.r\s.t.a.l.k.e.r. call of pripyat\bin\xrengine.exe" * phase time: 0 ms * phase cmem: 120716 K Loading objects... Loading models... * [prefetch] time: 98779 ms * [prefetch] memory: 125836Kb ! Unable to find Software\GSC Game World\STALKER-COP\ in registry ! Player name registry key (InstallUserName) not found ! * phase time: 99596 ms * phase cmem: 248959 K * phase time: 5 ms * phase cmem: 248959 K * Creating new game... * Loading spawn registry... * 592 spawn points are successfully loaded ! [LUA][ERROR] There is no 'name' field in [secret] section for object [escape_medkit] FATAL ERROR [error]Expression : 0 [error]Function : ErrorLog [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp [error]Line : 49 [error]Description : There is no 'name' field in [secret] section for object [escape_medkit] stack trace: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 976 Опубликовано 1 ноября (изменено) 1 час назад, sosiska23 сказал: There is no 'name' field in [secret] section for object [escape_medkit] На русский переводить? Изменено 1 ноября пользователем denis2000 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано 1 ноября (изменено) denis2000 В целом можно, потому что это был рабочий тайник [esc_hiding_place_1] medkit = 1, 1 bandage = 2, 1 antirad = 1, 1 Изменено 1 ноября пользователем sosiska23 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты