nasar75 3873 Опубликовано 1 Ноября 2016 В ОП-2 есть код для проверки зависшей логики вертушек и физ. объектов: -- сообщение по побившейся логике физобъектов и вертолетов local s_ini = obj:spawn_ini() if not st.ini_filename and s_ini and logic_not_empty(obj, s_ini) then if obj:clsid() == clsid.script_phys or obj:clsid() == clsid.script_heli -- or ((IAmAStalker[obj:clsid()] or IAmAMonster[obj:clsid()]) and obj:alive()) then abort("У объекта "..obj:name().." повисла логика. Удалите созданное только что сохранение и переиграйте с предыдущего.") if not amk.has_timer("no_save") and not db.debug then amk.start_timer("no_save", 5) -- amk.start_timer("zonedocs_gg_kill",3,0) end end end ... -- у объекта есть "непустая" логика function logic_not_empty(npc, ini) return ini:section_exist("logic") and ( ini:line_exist("logic", "cfg") or (ini:line_exist("logic", "active") and ini:r_string("logic", "active") ~= "nil") ) end Добавил код для проверки спейс-рестрикторов if obj:clsid() == clsid.script_phys or obj:clsid() == clsid.script_heli or obj:clsid() == clsid.script_restr Сообщения приходят, в лог тоже пишется: А меня терзают смутные сомнения - правильно ли я написал и работает ли код для спейс-рестрикторов... Зы. почему спрашиваю - некоторые рестрикторы (в логе они есть) не отрабатывают свою логику. Побилась? И если побилась, то в чем может быть причина? AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 18 Ноября 2016 (изменено) @CRAZY_STALKER666, может быть, так? function bar_bandit_death_cut() if db.actor:has_info("bar_cutbandit_death_l") and db.actor:has_info("bar_cutbandit_death_1") and db.actor:has_info("bar_cutbandit_death_2") then return true and db.actor:give_info_portion("bar_bandit_death_all") end news_manager.send_tip(db.actor, "relation 0", nil, nil, 20000) end или так? function bar_bandit_death_cut() if db.actor:has_info("bar_cutbandit_death_l") and db.actor:has_info("bar_cutbandit_death_1") and db.actor:has_info("bar_cutbandit_death_2") then return true and db.actor:give_info_portion("bar_bandit_death_all") and news_manager.send_tip(db.actor, "relation 0", nil, nil, 20000) end end Изменено 18 Ноября 2016 пользователем nasar75 1 AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 5 Сентября 2017 @AndrewMor В оригинале в кавычках: AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 20 Октября 2017 (изменено) Консультация нужна.... В-общем, не секрет. что в Сталкере иногда у объектов\рестрикторов зависает (равна нулю) логика. Простой пример - на двери Сидоровича нет надписи "Открыть" - дверь открывается только выстрелом из дробовика. В НС 201 камрад lsclon решила эту проблему. Например, из bind_physic_object.script было Скрытый текст function generic_physics_binder:load(reader) self.loaded = true object_binder.load(self, reader) xr_logic.load_obj(self.object, reader) end Стало: function generic_physics_binder:load( reader ) object_binder.load( self, reader ) xr_logic.load_obj( self.object, reader ) -- если потерялась логика -- lsclon -- if self.st.loaded_ini_filename then self.loaded = true end end Я перенес эти правки в bind_physic_object.script, bind_heli.script, bind_restrictor.script в мод 2золотой Шар" - работает - логика восстанавливается.А вот в ЧН функция generic_physics_binder:load(reader) выглядит по другому: Скрытый текст function generic_physics_binder:load(reader) self.loaded = true printf("generic_physics_binder:load(): self.object:name()='%s'", self.object:name()) object_binder.load(self, reader) set_save_marker(reader, "load", false, "physics_binder") xr_logic.load_obj(self.object, reader) set_save_marker(reader, "load", true, "physics_binder") end Я её изменил таким образом: function generic_physics_binder:load(reader) -- self.loaded = true printf("generic_physics_binder:load(): self.object:name()='%s'", self.object:name()) object_binder.load(self, reader) set_save_marker(reader, "load", false, "physics_binder") xr_logic.load_obj(self.object, reader) set_save_marker(reader, "load", true, "physics_binder") if self.st.loaded_ini_filename then self.loaded = true end end логика объектов\рестрикторов восстанавливается, но вопрос всё же есть - правильно ли я сделал? И еще вопрос - можно ли эту проверку добавлять в bind_monster.script: function generic_object_binder:load(reader) self.loaded = true set_save_marker(reader, "load", false, "generic_object_binder") object_binder.load(self, reader) xr_logic.load_obj(self.object, reader) if self.object:clsid() == clsid.script_trader then trade_manager.load(self.object, reader) end set_save_marker(reader, "load", true, "generic_object_binder") end Изменено 20 Октября 2017 пользователем nasar75 AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 20 Октября 2017 (изменено) @dsh дык это понятно - проще не допустить болесть, чем её лечить. НО авторы модов почему-то не учитывают этого, и в сейв пишутся объекты с нулевой логикой. А потом игроки пишут: Скрытый текст Помогите, не работает дверь на Свалку! Помогите, нет рычага для опускания моста! Помогите. не приходит смс в нужном месте! Помогите, прихожу в церковь - а ничего не происходит!!! И вопрос таки повторю - правильно ли я вставил код проверки? да, а скрипт проверки логики из ОП-2 я пихаю во все моды сразу - с небольшой модификацией - без abort ( обычно это вылет на первом объекте), но с проверкой рестрикторов Скрытый текст -- сообщение по побившейся логике физобъектов и вертолетов local s_ini = obj:spawn_ini() if not st.ini_filename and s_ini and logic_not_empty(obj, s_ini) then if obj:clsid() == clsid.script_phys or obj:clsid() == clsid.script_heli or obj:clsid() == clsid.script_restr -- or ((IsMonster[obj:clsid()] or IsStalker[obj:clsid()]) and obj:alive()) -- or ((IAmAStalker[obj:clsid()] or IAmAMonster[obj:clsid()]) and obj:alive()) then news_manager.send_tip(db.actor,"У объекта "..obj:name().." повисла логика.") dbglog("У объекта "..obj:name().." повисла логика.") -- printf("У объекта "..obj:name().." повисла логика.") -- abort("У объекта "..obj:name().." повисла логика.") -- if not amk.has_timer("no_save") and not db.debug then -- amk.start_timer("no_save", 5) -- amk.start_timer("zonedocs_gg_kill",3,0) -- end end end ..... -- у объекта есть "непустая" логика function logic_not_empty(npc, ini) return ini:section_exist("logic") and ( ini:line_exist("logic", "cfg") or (ini:line_exist("logic", "active") and ini:r_string("logic", "active") ~= "nil") ) end Изменено 20 Октября 2017 пользователем nasar75 1 AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 3 Февраля 2018 6 часов назад, qwertyuiop сказал: распаковщик для Солянки-2016 https://www.amk-team.ru/forum/topic/13511-dieticheskaya-solyanka-2016/?do=findComment&comment=1145839 AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 3 Февраля 2018 Спавнить 3174. Не забыть удалить дохлый труп (bar_zastava_commander_1). Подробнее тут: https://www.amk-team.ru/forum/topic/12839-kovyryaem-op-2/?do=findComment&comment=868701 https://www.amk-team.ru/forum/topic/12839-kovyryaem-op-2/?do=findComment&comment=891393 AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 3 Февраля 2018 @qwertyuiop function perespawn() local obj for i=1,65534 do obj = alife():object(i) if obj and obj:name() == "bar_zastava_commander_1" then -- имя секции из аll.spawn alife():release(obj) break end end alife():create(3174) -- номер секции из аll.spawn end AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 25 Декабря 2018 22 часа назад, naxac сказал: Найди в конфигах inventory_box и пропиши ему какой-нибудь невидимый визуал Ага, и все динамитные ящики станут невидимыми Ящик для менеджера оружия обзывается rx_inventory_box. @naxac, спасибо за наводку. AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 25 Декабря 2018 @naxac, понятно, я смотрел файлы из НС-2016. Там пару ящиков не хотят спавниться по координатам. https://www.amk-team.ru/forum/topic/13471-tehpodderzhka-ns-2016/?do=findComment&comment=1218473 AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение
nasar75 3873 Опубликовано 19 Марта 2020 (изменено) Требуется помощь. Есть такой код: Скрытый текст for i = 0, n - 1 do r, k, v = ini:r_line( sect, i, "", "" ) v = string_gsub( v, "{\-aes_arrive_to}", "true" ) -- todo: давно пора снести t[k] = xr_logic.parse_condlist( obj, sect, k, v ) end Игра не запускается с логом smart_terrain.script)] SCRIPT SYNTAX ERROR: ..._installer new 555\gamedata\scripts\smart_terrain.script:905: invalid escape sequence near '"{' чекер тоже ругается на знаки \- Как правильно написать данную строку? Изменено 19 Марта 2020 пользователем nasar75 AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Поделиться этим сообщением Ссылка на сообщение