Overf1rst 351 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 10 3 1 1 5 Oblivion, dasher, NickMack и 17 других отреагировали на это Больше неофициальных скриншотов в галерее GAMERU.NET Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Seraph 20 Опубликовано 7 апреля Neptun Не совсем то. Да, там камеры плавно переключаются друг за другом, но условия отвечают не за включение/выключение, а за появление конкретной камеры в принципе (как в катсцене после путепровода, где выполняется проверка, кто из напарников жив). Очень полезная штука, но отвязаться от таймингов даже с ней не вышло. Если я чего-то не заметил, буду благодарен за пример с разбором. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Doctor_Oz 20 Опубликовано 7 апреля Добрый день/вечер/утро тем у кого оно доброе, у кого нет тому печенек... У меня возник вопрос по поводу данной функции: function deneg_hren(actor, npc) local actor = db.actor all_money_actor = actor:money() if actor and npc then dialogs.relocate_money(npc, all_money_actor, "out") end end Вопрос заключается в следующем, а возможно ли данную ф-ию поставить на апдейт и чревато ли последствиями? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 605 Опубликовано 7 апреля 3 часа назад, Boomer сказал: Как сделать функцию, чтобы у актера забрали все имеющиеся предметы в инвентаре? function relocate_actor_inventory_to_box(actor, npc, p) local function transfer_object_item(item) if item:section() ~= "wpn_binoc" and item:section() ~= "wpn_knife" and item:section() ~= "device_torch" then db.actor:transfer_item(item, inv_box_1) end end inv_box_1 = get_story_object (p[1]) actor:inventory_for_each(transfer_object_item) end Функция есть и в оригинальном скрипте, но там она закомментирована. Дополнено 2 минуты спустя Seraph а зачем, собственно, прерывать анимацию, чтобы всё равно переключить на другую анимацию? Просто любопытно. Делай анимации короткими, используй иные методы воспроизведения анимаций, которые можно прерывать в любой момент. Дополнено 8 минуты спустя 1 час назад, Doctor_Oz сказал: Вопрос заключается в следующем, а возможно ли данную ф-ию поставить на апдейт и чревато ли последствиями? А в чем препятствие поставить в апдейт и посмотреть за последствиями? Хотя функция довольно странная. Если ГГ и НПС делают что? Вероятно, должна быть проверка, что они вступили в диалог, потому что результат как раз говорит, что все бабки будут отданы этому НПС, но тут ещё надо добавить проверку, что у ГГ вообще есть деньги. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Seraph 20 Опубликовано 7 апреля Neptun речь о банальном упрощении жизни, как это реализовано в других местах. Когда есть один статичный зацикленный кадр, гораздо проще его и использовать, а переключаться по событиям, а не по таймеру, делая кучу однотипных anm-ок. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 20 Опубликовано 7 апреля Добрый вечер. Я подключил к Зову Припяти локацию Кордон. Заселил её. Организовал симуляцию. Сделал, как в оригинале. Чтобы сталкеры утром уходили на прогулку а вечером шли на базу. Спойлер army = { squad = nil, smart = { base = { prec = function(squad, target) return in_time_interval(18,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "esc_b1") end }, surge = { prec = function() return xr_conditions.surge_started() end }, territory= { prec = function() return in_time_interval(8,18) and not xr_conditions.surge_started() end }, resource = { prec = function(squad, target) return in_time_interval(8,18) and not xr_conditions.surge_started() end } }, actor = nil }, stalker = { squad = nil, smart = { base = { prec = function(squad, target) return in_time_interval(18,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "esc_b6") end }, surge = { prec = function() return xr_conditions.surge_started() end }, territory= { prec = function() return in_time_interval(8,18) and not xr_conditions.surge_started() end }, resource = { prec = function(squad, target) return in_time_interval(8,18) and not xr_conditions.surge_started() end } }, actor = nil }, bandit = { squad = { stalker = { prec = function(squad, target) return in_time_interval(8,21) and not xr_conditions.surge_started() and simulation_objects.sim_dist_to(squad, target) <= 150 end } }, smart = { base = { prec = function(squad, target) return in_time_interval(21,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "esc_b10") end }, territory= { prec = function() return in_time_interval(8,21) and not xr_conditions.surge_started() end }, surge = { prec = function() return xr_conditions.surge_started() end } }, actor = nil }, Все работает как нельзя лучше. НПС утром дружно идут гулять, к ночи возвращаются на базы и ложатся в кроватки. Воодушевился успехом и решил в этом же скрипте запретить монстрам заходить на базовые смарты. Спойлер monster_predatory_day = { squad = { monster_vegetarian = { prec = function() return in_time_interval(6,19) end }, stalker = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end }, bandit = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end }, dolg = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end }, freedom = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end }, killer = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end } }, smart = { territory= { prec = function() return in_time_interval(6, 19) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end }, lair = { prec = function() return in_time_interval(19,6) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end } }, actor = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end } }, monster_predatory_night = { squad = { monster_vegetarian = { prec = function() return in_time_interval(21,6) end }, stalker = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end }, bandit = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end }, dolg = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end }, freedom = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end }, killer = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end } }, smart = { territory= { prec = function() return in_time_interval(19,6) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end }, lair = { prec = function() return in_time_interval(6,19) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end } }, actor = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end } }, И получил зеленое насекомое. Спойлер FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : ..\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...ishing\Зов Припяти\gamedata\scripts\sim_board.script:107: attempt to index global 'target' (a nil value) stack trace: 107 строка -- smart = { territory= { prec = function() return in_time_interval(6, 19) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end }, Чем то движку не приглянулось указание смартов. Вопрос - чем? Можно ли запретить в sim_board конкретным фракциям лезть на конкретные смарты? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
bad_major 2 Опубликовано 7 апреля Платформа: x-ray 1.6 Скрипты/конфиги Создаю смарты на локации. Решил, очень грубо говоря, включить debug для лога в скрипте _g.script в функции "printf(fmt,...)" local con = get_console() con:execute(string.gsub(string.format(fmt,...), " ", "_")) con:execute("flush") При загрузке игры вылет, в логах "Wrong smart name [%s] in start position" - это из функции "sim_board:fill_start_position()", скрипт - sim_board.script. Самый главный вопрос, который меня мучает, что за таблица "smarts_by_names", куда прописывать свои созданные смарты, уже везде прописал, даже в game_graph.ltx и поставил game_graph в Level Editor на локации внутрь смарта, в свойствах в 4 пункте выбрал свой смарт. В файлах по пути ../misc/*.ltx так же везде указал мои смарты, сквады. В скриптах, в принципе, прописал. Остаётся только момент с таблицей в sim_board.script, правильно ли я указал там всё, для объекта "simulation_activities"...но повторил за оригиналом, плюс там скорее настройки поведения смарта, и там не все смарты прописаны. Режим debug (если это можно так назвать) для лога в _g.script убирать не хочу. Что за ошибка то такая - "Wrong smart name [%s] in start position". Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 605 Опубликовано 8 апреля 10 часов назад, Seraph сказал: Когда есть один статичный зацикленный кадр Анимация привязана к конкретному месту на локации, она при всём желании не может быть использована где бы то ни было ещё. Следовательно, ты говоришь об анимации, которая имитирует вид от 1-го лица. Чтобы ими лучше манипулировать, надо запускать их через скрипты, а не через форму sr_cutscene. Дополнено 2 минуты спустя 6 часов назад, Сергей Шубин сказал: Чем то движку не приглянулось указание смартов. По-моему, нужно создать локальную переменную target Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 431 Опубликовано 8 апреля (изменено) Сергей Шубин Уважаемый! Вы заявляете прекондишен-функцию: prec = function(), но параметры в нее не передаете, а внутри нее пытаетесь их проверять: target:name() ~= "esc_b6" Выход: используете параметры - заявляйте их prec = function(squad, target) 12 часов назад, bad_major сказал: "Wrong smart name [%s] in start position" Означает, что в стартовой позиции (конфиг simulation.ltx секции [start_position_***]) заявлен смарт, который фактически отсутствует (не внесен в таблицу smarts_by_names, вноситься в нее смарт автоматически при регистрации объекта данного класса движком). Проверяйте есть ли заявленный смарт в all.spawn. Изменено 8 апреля пользователем denis2000 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Крим 329 Опубликовано 8 апреля Как сделать, чтобы НПС реагировал на выстрел от игрока? Истинное счастье невозможно без одиночества. - А. П. Чехов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 431 Опубликовано 8 апреля (изменено) del Изменено 8 апреля пользователем denis2000 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Doctor_Oz 20 Опубликовано 8 апреля 22 часа назад, Neptun сказал: А в чем препятствие поставить в апдейт и посмотреть за последствиями? Хотя функция довольно странная. Если ГГ и НПС делают что? Вероятно, должна быть проверка, что они вступили в диалог, потому что результат как раз говорит, что все бабки будут отданы этому НПС, но тут ещё надо добавить проверку, что у ГГ вообще есть деньги. О как... Тогда поставлю вопрос другой... Есть ли такая функция, чтобы игрок лишился ВСЕХ деняг и возможно ли такую функцию поставить в апдейт? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hozar_2002 74 Опубликовано 8 апреля (изменено) Крим Рекомендую покрутить каллбек на слух НПС. По идее они слышат выстрелы. 40 минут назад, Doctor_Oz сказал: лишился ВСЕХ деняг db.actor:give_money(-db.actor:money()) Изменено 8 апреля пользователем Hozar_2002 1 2 Doctor_Oz, Крим и denis2000 отреагировали на это 6 ГБ ОЗУ DDR3 1152 мГц (Разносорт) Процессор Intel Xeon E5420 4/4 2.7 ГГц (OC) Видеокарта Gigabyte GeForce GT 240 512 МБ GDDR5 (Samsung) DirectX v10.1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Koschey 30 Опубликовано 8 апреля (изменено) Была тут такая ошибка никто на нее не ответил,сам столкнулся. Знает кто как лечить? при загрузке уровня в ле. FATAL ERROR [error]Expression : assertion failed [error]Function : CEditableObject::UpdateBox [error]File : D:\GameDev\Engine\XRayEngine\XRayEngine\Source\Editors\XrECore\Editor\EditObject.cpp [error]Line : 162 [error]Description : !m_Meshes.empty() stack trace: FATAL ERROR [error]Expression : error handler is invoked! [error]Function : invalid_parameter_handler [error]File : D:\GameDev\Engine\XRayEngine\XRayEngine\Source\XrCore\xrDebugNew.cpp [error]Line : 786 [error]Description : stack trace: Изменено 8 апреля пользователем Koschey Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 407 Опубликовано 9 апреля Какому-то объекту в конфиге не задано значение какого-то параметра. Например: ammo_mag_size = В этом случае, оружию не было указано обязательное значение параметра ёмкости магазина. AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Крим 329 Опубликовано 9 апреля Я знаю есть функция, которая спавнит динамические объекты, мне она нужна. Единственное, что я помню от неё - это обрывок названия "cond". Нигде не могу отыскать её. Подскажите, прошу вас. Истинное счастье невозможно без одиночества. - А. П. Чехов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
bad_major 2 Опубликовано 9 апреля (изменено) del Изменено 10 апреля пользователем bad_major Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 605 Опубликовано 10 апреля 17 часов назад, Крим сказал: Я знаю есть функция, которая спавнит динамические объекты =spawn_object(объект:точка_спавна) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
OP_artovod 4 Опубликовано 10 апреля подскажите кто нибудь встречал уже как то здесь функцию задержки, сейчас вот найти не могу, кто знает как она выглядит? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mad Hikki 173 Опубликовано 10 апреля Как запаковать исходный код условного Xray Monolith в dll. Файлы( в "папка с игрой"/bin) для работы с игрой? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Doctor_Oz 20 Опубликовано 10 апреля Только что, Hikki сказал: Как запаковать исходный код условного Xray Monolith в dll. Файлы( в "папка с игрой"/bin) для работы с игрой? В Visual Studio 201(7, 9) вроде, других способов нет. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
most34 4 Опубликовано 10 апреля Поставил NPC на карту через smart_cover, прописал логику, респавн, поставил smart_terrain. При старте новой игры, вылет. ЛОГ СНИЗУ 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 : ...\x-ray_cop_sdk\editors\gamedata\scripts\utils.script:469: bad argument #1 to 'gsub' (string expected, got nil) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Крим 329 Опубликовано 11 апреля (изменено) У меня комп крашится во время игрового вылета, вот прям зависает и все. Единственное, что выходит делать - это перезагрузка. Однако после неё в логе ничего не написано, просто пусто. Как я могу исправить вылет, если не знаю лога? Никак. Подскажите, как можно исправить краш моей системы во время вылета? Изменено 11 апреля пользователем Крим Истинное счастье невозможно без одиночества. - А. П. Чехов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
liner 211 Опубликовано 11 апреля Крим можно не перезагружать компьютер, а запустить диспетчер задач: Ctrl + Alt + Delete - потом нажать диспетчер задач Снять задачу с X-ray 1.6 engine Может помочь, но лог может не записаться. Лучше всего запускать сталкер через Visual Studio в режиме локального отладчика Windows, тем самым вы 100% узнаете, в чём причина вылета. Дополнено 2 минуты спустя most34 может в логике смарта прописано [logic] а надо [smart_terrain] ? Дополнено 5 минуты спустя Hikki смотри тутор как настроить OpenXray в Visual Studio. Всё по аналогу сделай, только думаю стоить закинуть ресуры этого движка вместо двигла OpenXray. Мне 14 лет. Программирую на C++ и Lua. Опытный в моддинге. Мой мод Clear Sky: Reload Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
NitWaifu 0 Опубликовано 12 апреля Здравствуйте, товарищи сталкеры! Я тут решился попробовать себя в роли мододела. И вот, хочу мод свой развернуть на оригинальных локациях ЗП, но в зимнем сеттинге. Подскажите мне, пожалуйста, как это можно реализовать? И какой движок использовать (Оригинальный от ЗП или тот же, но модифицированный сообществом)? Заранее благодарю вас! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
St4lker0k 39 Опубликовано 12 апреля (изменено) Не знаю почему, но когда я делал заселение локации для своей модификации, столкнулся с таким вылетом: Спойлер * [win32]: free[312764 K], reserved[186392 K], committed[3695084 K] * [ D3D ]: textures[2668306 K] * [x-ray]: crt heap[3410070 K], process heap[3410070 K], game lua[8160 K], render[188 K] * [x-ray]: economy: strings[22550 K], smem[11048 K] compiling shader deffer_model_bump_d-hq_1 compiling shader model_env_lq compiling shader model_env_lq_0 compiling shader accum_emissivel compiling shader deffer_model_bump_d-hq_0 compiling shader deffer_model_flat_d_0 compiling shader model_def_lplanes_0 compiling shader model_env_lq_1 compiling shader model_def_lplanes_1 ! Unknown command: dump_infos compiling shader model_scope_lense compiling shader model_scope_lense_0 intro_start game_loaded * MEMORY USAGE: 3499174 K * End of synchronization A[1] R[1] intro_delete ::update_game_loaded compiling shader yuv2rgb stack trace: [error][ 8] : (null) Не знаю точно, с чем он связан, но как я понял, это связано как-то с точками спавна. Ещё при попытке спавна чего-либо (через Повелитель Зоны, либо при прогрузке НПС в смарте) у меня происходит вылет связанный с недостатком памяти. И происходит он всегда. Я уже писал этот вопрос в тему движка (Advanced X-Ray), и мне ответили, что это с движком не связано. Поэтому я задал этот вопрос сюда. Изменено 12 апреля пользователем maks_stalkerok_2000 Как ты относишься к людям, так и люди будут относиться к тебе. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты