Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

В ОП-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

Сообщения приходят, в лог тоже пишется:

0404948001478001698.jpg 0411819001478002154.png

А меня терзают смутные сомнения - правильно ли я написал и работает ли код для спейс-рестрикторов...

Зы. почему спрашиваю - некоторые рестрикторы (в логе они есть) не отрабатывают свою логику. Побилась?

И если побилась, то в чем может быть причина?

AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение

@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
Изменено пользователем nasar75
  • Спасибо 1

AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение

Консультация нужна....

В-общем, не секрет. что в Сталкере иногда у объектов\рестрикторов зависает (равна нулю) логика. Простой пример - на двери Сидоровича нет надписи "Открыть" - дверь открывается только выстрелом из дробовика. В НС 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
Изменено пользователем nasar75

AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение

@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

 

 

 

 

Изменено пользователем nasar75
  • Полезно 1

AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение
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  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение

Спавнить 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  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение

@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  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение
22 часа назад, naxac сказал:

Найди в конфигах inventory_box и пропиши ему какой-нибудь невидимый визуал

Ага, и все динамитные ящики станут невидимыми :rolleyes:

Ящик для менеджера оружия обзывается rx_inventory_box.

@naxac, спасибо за наводку.

AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение

@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  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение

Требуется помощь. Есть такой код:

Скрытый текст

    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 '"{'

чекер тоже ругается на знаки \-

Как правильно написать данную строку?

Изменено пользователем nasar75

AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  правки Золотой Шар

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...