Overf1rst 1 496 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 18 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Drive 13 Опубликовано 27 июня, 2023 @Boomer При введении "1942" звук проигрывается, инфопоршень выдается, соответственно и задание обновляется, но сам сейф не открывается Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mindallius 6 Опубликовано 27 июня, 2023 2 часа назад, denis2000 сказал: Mindallius Читайте лог далее, значит там не единственная проблема. К стати вылет sim_squad_scripted.script:124: attempt to index local 'point' относиться именно к смарту, проверьте его наличие. Смарт существует и прописан Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Boomer 463 Опубликовано 27 июня, 2023 (изменено) 43 минуты назад, Drive сказал: @Boomer При введении "1942" звук проигрывается, инфопоршень выдается, соответственно и задание обновляется, но сам сейф не открывается Должна быть логика двери сейфа, чтобы дверь открывалась по инфопоршню, который выдаётся при вводе правильного кода. По типу: Спойлер [logic] active = ph_door@locked ;сейчас дверь закрыта [ph_door@open] locked = false closed = false [ph_door@locked] locked = true closed = true on_info = {+info} ph_door@open ;инфо для открытия, переход в секцию ph_door@open Изменено 27 июня, 2023 пользователем Boomer Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Drive 13 Опубликовано 27 июня, 2023 @Boomer Сейф типа inventory_box, маленький, такой-же, как и тот, что стоит в комнате у Отца Валерьяна, сомневаюсь, что на него эта логика подействует. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 27 июня, 2023 (изменено) 7 часов назад, Mindallius сказал: ! Cannot find saved game ~~~ [smart_terrain escape_smart_terrain] no configuration! Очевидно, что этот смарт escape_smart_terrain не зарегистрирован! Ищите ошибку 7 часов назад, Mindallius сказал: ! Cannot find saved game ~~~ there is no configuration file [scripts\escape\smart\escape_timoha_spawn.ltx] in smart_terrain [escape_timoha_spawn] Файла нет на месте. Путь до указания файла указан неверно, или сам файл отсутствует/имеет другое имя. Проверяйте и исправляйте! Дополнено 3 минуты спустя 2 часа назад, Drive сказал: Сейф типа inventory_box Нужно использовать коллбек on_use, я так думаю! Или я неправильно понял вопрос =)! Дополнено 21 минуты спустя 4 часа назад, Boomer сказал: on_code = %=play_sound(..) ) +seif_door_open% sr_idle@end Кстати, так делать нельзя! Даже если и работает Для классов рестриктора и инвентори разные схемы Спойлер on_code = %=play_sound(..) ) +seif_door_open% ph_idle [ph_idle] on_use = ph_idle@end [ph_idle@end] Так попробуйте Изменено 27 июня, 2023 пользователем Mass Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mindallius 6 Опубликовано 27 июня, 2023 30 минут назад, Mass сказал: Очевидно, что этот смарт escape_smart_terrain не зарегистрирован! Ищите ошибку Файла нет на месте. Путь до указания файла указан неверно, или сам файл отсутствует/имеет другое имя. Проверяйте и исправляйте! Исправил, осталось старое. Спойлер ! Cannot find saved game ~~~ incorrect next point [escape_stalker_village_spawn] for squad [248] * 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 : ...f pripyat\gamedata\scripts\sim_squad_scripted.script:124: attempt to index local 'point' (a nil value) stack trace: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 27 июня, 2023 (изменено) Mindallius возможно в target_smart ошибка. Или nil или сам целевой смарт должен быть указан Изменено 27 июня, 2023 пользователем Mass 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mindallius 6 Опубликовано 27 июня, 2023 5 минут назад, Mass сказал: Mindallius возможно в target_smart ошибка Так оно и было, спасибо Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 310 Опубликовано 27 июня, 2023 (изменено) Есть у меня одна аномалия, которая должна включиться ненадолго по скрипту, и потом выключиться. Реализовал это через аномальную зону с лишь одним полем, и с помощью функций =anomaly_turn_off() и =anomaly_turn_on() я включаю и выключаю её. Однако, заметил такое: если аномалия выключена, и прошёл выброс, то она сама включается, но при этом, если после этого сделать сохранение и тут же загрузить его, то аномалия выключается назад. Можно ли как-то этого избежать? Я, конечно, могу сделать отдельный рестриктор на автовыключение аномалии после выброса, но хотелось бы узнать, есть ли менее костыльный способ. За основу логики для аномалии брал логику аналогичной аномалии из оригинала по квесту "Переменное пси-излучение". Спойлер [anomal_zone] layers_count = 2 respawn_tries = 0 max_artefacts = 0 artefacts = af_cristall coeff = 1 field_name = yan_zavod_zone_field_psychic_average artefact_ways = yan_psi_oko_spawn [layer_1] mines_section = mines_layer_1 [mines_layer_1] [layer_2] mines_section = mines_layer_2 [mines_layer_2] Изменено 27 июня, 2023 пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 27 июня, 2023 Prostomod Замена аномалии производится в 2-ух местах в surge_manager.script Можно попробовать добавить проверку на отсечение по имени в respawn_artefacts_and_replace_anomaly_zone Спойлер for k,v in pairs(anomalies) do if v~="аномалия" then v:respawn_artefacts_and_replace_anomaly_zone() --printf("respawn artefacts in anomal zone [%s]", tostring(k)) end end 1 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 310 Опубликовано 27 июня, 2023 (изменено) Mass Вижу, нет встроенных инструментов для починки этого. Ок, я новый конфиг для аномальной зоны добавил, а вот за указание места, где происходит апдейт аномалии спасибо. Дополнено 31 минуты спустя Столкнулся с необходимостью получить информацию об НПС через story_id в оффлайне. Если я использую просто get_story_object(), то он возвращает НПС только если он в онлайне, иначе nil. Как я могу обратиться к объекту через story_id, который в оффлайне? Расширить онлайн на всю карту можно, но это будет потреблять много ресурсов компа. Изменено 27 июня, 2023 пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 27 июня, 2023 1 час назад, Prostomod сказал: Как я могу обратиться к объекту через story_id, который в оффлайне? local npc_id = get_story_object_id(story_id) local obj_server = alife():object(npc_id) 1 Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 310 Опубликовано 27 июня, 2023 makdm Как я понял, тип, возвращаемый из alife():object(npc_id) не тот же самый, что из get_story_object(story_id), верно? У меня просто не получается с полученными объектом работать как прежде. Может, как-то преобразовать надо? Спойлер function send_message(actor, npc, p) local npc_id = get_story_object_id(p[3]) if npc_id == nil then abort("Cannot get id from story_id [%s]", p[3]) end local sender = alife():object(npc_id) if sender == nil then abort("Cannot find object for id = [%s]", p[3]) end local function is_npc_stalker(class_id) if class_id==clsid.script_stalker or class_id==clsid.stalker then return true end return false end -- тут спокойно выводится "Try to access object [yan_expedition_dolg_10341]" printf("Try to access object [%s]", sender:name()) local sender_name = nil if is_npc_stalker(sender:clsid()) then sender_name = sender:character_name() -- Вот тут падает: attempt to call method 'character_name' (a nil value) elseif sender == actor then sender_name = actor:character_name() end news_manager.send_tip(actor, p[1], nil, sender, nil, p[3], sender_name) end Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 28 июня, 2023 Prostomod , вот так я делал в моде Время Альянса 3.0 Спойлер function send_message(actor, npc, p) --' p[1] - id текста сообщения из папки text\rus --' p[2] - story_id сендера --' p[3] - id имени сендера из папки text\rus --' p[4] - длительность показа сообщения в миллисек, по-умолчанию 5 секунд. --' =send_message(p[1]:p[2]:p[3]:p[4]) - вызов функции if p == nil then abort("Wrong parameters in 'send_message' function!!!") end if p[4] == nil then p[4] = 5000 end --' Иконки сендеров [ story_id сендера ] = "Название иконки" local portrets = { ["jup_a18_sherkchan_bandit"] = "ui_inGame2_sherkchan_noheat", ["jup_a9_sedoy_stalker"] = "ui_inGame2_sedoy", ["jup_a18_baloon_bandit"] = "ui_inGame2_puzir", ["jup_smuggler_lena"] = "ui_inGame2_lena_contra", ["bar_a1_botanick"] = "ui_inGame2_doctor", ["bar_a5_stalkerden"] = "ui_inGame2_den", ["bar_a2_duty_leader"] = "ui_inGame2_stalker_dolg_leader", ["jup_a18_botan_bandit"] = "ui_inGame2_botan_bandit", ["jup_stalker_garik"] = "ui_inGame2_stalker_Garik", ["jup_stalker_dectyrev"] = "ui_inGame2_Degtyaryov", ["bar_a1_proveren_3"] = "ui_inGame2_makdm", ["radar_a4_lider_night"] = "ui_inGame2_stalker_night_2", ["aver_a1_4erepok_bandit"] = "ui_inGame2_stalker_bandit_3", ["radar_a1_lider_bandit"] = "ui_inGame2_evil_raccoon", ["lim_a4_lider_monolit"] = "ui_inGame2_semperfay", ["lim_a4_brodiaga_monolit"] = "ui_inGame2_Brodyaga_monolith", ["radar_a6_botanic"] = "ui_inGame2_ecolog_red", ["bar_a2_dolg_3"] = "ui_inGame2_inkvizitor", ["dark_a2_winchester"] = "ui_inGame2_stalker_jagernaut1", ["radar_a1_gupi_bandit"] = "ui_inGame2_stalker_bandit_3_face_1", ["bar_a5_voyak_4"] = "ui_inGame2_stalker_soldier_33", ["pr_a7_stalker_degtyrev"] = "ui_inGame2_Degtyaryov" } local news_text = game.translate_string(p[1]) local news_caption = game.translate_string(p[3]) local showtime = p[4] local sender = get_story_object(p[2]) local texture = "ui_iconsTotal_grouping" if sender then texture = sender:character_icon() elseif portrets[ p[2] ] ~= nil then texture = portrets[ p[2] ] end xr_sound.set_sound_play(db.actor:id(), "pda_tips") db.actor:give_game_news(news_caption, news_text, texture, 0, showtime, 0) end 1 Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Drive 13 Опубликовано 28 июня, 2023 16 часов назад, Mass сказал: Так попробуйте Все так-же, квест обновляется, звук срабатывает, но сейф упрямый) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 28 июня, 2023 21 час назад, Drive сказал: Сейф типа inventory_box, маленький У объекта этого класса нет никаких дверей. Используйте nonscript_usable = true - инвентарный ящик доступен или nonscript_usable = false - инвентарный ящик не доступен. Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Drive 13 Опубликовано 28 июня, 2023 1 час назад, denis2000 сказал: Используйте nonscript_usable = true Пробовал такую логику: Спойлер [logic] active = ph_code@lock [ph_code@lock] code = 1942 on_code = ph_idle@open %=play_sound(metal_small_open) +seif_door_open% tips = esc_safe_lock [ph_idle@open] nonscript_usable = true tips = esc_safe_open Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 28 июня, 2023 Drive Два объекта, нужно. Собственно кодовый замок и инвентори бокс, логика должна быть типа такой: [logic] active = ph_code@lock [ph_code@lock] code = 1942 on_code = nil %=play_sound(metal_small_open) +seif_door_open% [logic] active = ph_idle@lock [ph_idle@lock] nonscript_usable = false on_info = {+seif_door_open} ph_idle@open tips = esc_safe_lock [ph_idle@open] nonscript_usable = true tips = esc_safe_open 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 310 Опубликовано 28 июня, 2023 Кто может подсказать функцию для очистки локации от всех сквадов с определённой группировкой? У меня есть сильнозаскриптованная территория, и, несмотря на то, что перед её инициализацией я внутри неё и рядом очищаю все симуляционные смарты, а так-же запрещаю их для симуляции (в simulation_objects_props в sim_avail по условия ставиться false), симуляционные сквады всё-равно остаются там, и я теперь хочу просто их удалить путём удаления всех сквадов этой группировки. Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 234 Опубликовано 28 июня, 2023 (изменено) Prostomod это из тч, но в зп примерно также по идее можно убрать. character_community() мб вместо community(), если не сработает. клсиды могут быть разными. Если нужно на конкретном уровне, то, возможно(я скрипты пишу наугад), можно сделать условие... А вообще пофиг, можно просто три разных функции для каждого лвл, наверное хех function delete_npc() for a = 1, 65534, 1 do local sobj = alife():object( a ) if sobj and is_stalker( sobj ) and sobj:alive() and (level.name() == "zaton") not sobj:community() == "stalker" then alife():release(sobj, true) end end end function is_stalker( sobj ) return sobj:clsid() == clsid.script_stalker end Изменено 28 июня, 2023 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 28 июня, 2023 Prostomod Попробуйте %=clear_smart_terrain(смарт)% Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 310 Опубликовано 28 июня, 2023 (изменено) Mass В том то и дело, что я и так вызываю эту функцию для всех нужных смартов (все смарты внутри заскриптованной области и прописанные в simulation_objects_props) - всё-равно отряд остаётся. Там есть, конечно, и другие смарты, но они вообще не участвуют в симуляции - они для разных сцен. Изменено 28 июня, 2023 пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 28 июня, 2023 (изменено) Prostomod А что ели прописать on_death = %+инфо% в секции сквада? По идее сразу должно релизнуть через цепочку se_stalker/sim_squad_scripted! Я не проверял В смысле убить их по инфе. И релизнуть уже через alife():release(obj, true) Но они ведь судя по скрипту должны удаляться через squad:remove_squad() где и есть alife():release(obj, true) Изменено 28 июня, 2023 пользователем Mass Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 292 Опубликовано 28 июня, 2023 (изменено) Здравствуйте, делал систему торговли для торговца, в результате ловлю такой вылет: Спойлер SCRIPT RUNTIME ERROR stack traceback: [C]: in function 'gsub' ....l.k.e.r. - call of prypat\gamedata\scripts\utils.script:469: in function 'get_scheme_by_section' .... - call of prypat\gamedata\scripts\gulag_general.script:905: in function 'add_exclusive_job' .... - call of prypat\gamedata\scripts\gulag_general.script:855: in function 'load_job' .... - call of prypat\gamedata\scripts\smart_terrain.script:410: in function 'load_jobs' .... - call of prypat\gamedata\scripts\smart_terrain.script:160: in function <.... - call of prypat\gamedata\scripts\smart_terrain.script:142> FATAL ERROR [error] Expression : !m_error_code [error] Function : raii_guard::~raii_guard [error] File : C:\projects\xray-16\src\xrScriptEngine\script_engine.cpp [error] Line : 569 [error] Description : ....l.k.e.r. - call of prypat\gamedata\scripts\utils.script:469: bad argument #1 to 'gsub' (string expected, got nil) esc_shilov_logic.ltx esc_ferma_bas.ltx shilov_trade.ltx Изменено 28 июня, 2023 пользователем Skala Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vasyan54636 127 Опубликовано 28 июня, 2023 (изменено) Del Изменено 28 июня, 2023 пользователем vasyan54636 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты