Случайная подборка модов
Новое Время. Научный Подход
3.8
Оставшийся умирать
4.3
Долина Шорохов
4.5
День одиночки
1.6
Волей Случая
3.5
Альтернатива 1.1 Beta
3.0
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
[CoP] Модострой: вопросница
Российская Федерация  Overfirst
Воскресенье, 31.12.2017, 13:17 | Сообщение # 1
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

[CoP] Модострой: вопросница

Тема посвящена моддингу на платформе Зов Припяти.

Соседние темы: Тень Чернобыля / Чистое небо.


  • Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском по разделу, ответ на него, вероятно, уже есть.

  • Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.

  • Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).

  • Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
  •   Злобная реклама
    Воскресенье, 31.12.2017, 13:17
    Статус:
    Сообщений: 666
    Регистрация: 11.06.2015
    Российская Федерация  Nesquik
    Четверг, 30.01.2020, 20:43 | Сообщение # 5896
    Статус:
    Отмычка:
    Сообщений: 112
    Награды: 1
    Регистрация: 29.10.2019

    Всем доброго вечера,не подскажите, возможно ли перенести Худ(полоска здоровья,полоска брони) из мода "Ветер Времени"
    И каким образом?
      Злобная реклама
    Четверг, 30.01.2020, 20:43
    Статус:
    Сообщений: 666
    Регистрация: 29.10.2019
    Российская Федерация  denis2000
    Четверг, 30.01.2020, 21:56 | Сообщение # 5897
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    Цитата molodoy_chelovek ()
    force_obj(jup_b207_depot_cover_id)

    Эта функция придает объекту с указанным стори_ид, постоянное усилие (точнее усилие в 20Н с интервалом времени 100мс) с вектором 0,1,0 (прижимает вертикально вниз).


    Цитата Policai ()
    Когда ГГ в верхней мёртвой точке проходит хит, и у летает ГГ в виде трупа достаточно далеко, что может быть?

    Скорее всего физика в движке так работает, возможно даже правки движка на размер динамических объектов так повлияли на расчеты физики.
    Сообщение отредактировал denis2000 - Четверг, 30.01.2020, 22:35
      Злобная реклама
    Четверг, 30.01.2020, 21:56
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  Lektorrr
    Четверг, 30.01.2020, 21:57 | Сообщение # 5898
    Статус:
    Новичок:
    Сообщений: 266
    Награды: 5
    Регистрация: 09.01.2013

    Устанавливается анимпоинт "sit_normal". Далее ему прописывается эксклюзивная логика с целью задать ему кастомную анимацию (в моем случае - монолитовскую "молитву") и позволить любым НПС использовать его. В результате анимпоинт начинают занимать аж 2-3 непися сразу. Возможно ли решить эту проблему?
    Сообщение отредактировал Lektorrr - Четверг, 30.01.2020, 21:59
      Злобная реклама
    Четверг, 30.01.2020, 21:57
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2013
    Российская Федерация  denis2000
    Четверг, 30.01.2020, 22:48 | Сообщение # 5899
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    Lektorrr, Вероятнее всего вы так неудачно поименовали смарт-ковер, что у вас образовалось две работы с его участием: одна - эксклюзивная, вторая - дефолтная.
    Называть смарт-ковер эксклюзивной работы в шаблоне: Имя_смарта_animpoint_Индекс, плохая идея.
    Сообщение отредактировал denis2000 - Четверг, 30.01.2020, 22:51
      Злобная реклама
    Четверг, 30.01.2020, 22:48
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  Policai
    Пятница, 31.01.2020, 06:37 | Сообщение # 5900
    Dead City Breakthrough
    Статус:
    Опытный:
    Сообщений: 2244
    Награды: 11
    Регистрация: 08.11.2011

    Народ! Перебираю торговлю, разбита на 4 этапа. Как на тестовой локе проверить работу этих этапов?
    Имеется ввиду инфопрции на подключение нужной секции при наличии количества предметов в инветаре.

    Сейчас у меня сделано так:


    Но лока тестовая и там нет этого квеста, соответственно ловлю вылет что левые поршни. Как проверить работу просто по наличию этих предметов в инвентаре?
    Предметы doc_01 - doc_12, full_doc
    Сообщение отредактировал Policai - Пятница, 31.01.2020, 06:38
      Злобная реклама
    Пятница, 31.01.2020, 06:37
    Статус:
    Сообщений: 666
    Регистрация: 08.11.2011
    Российская Федерация  Neptun
    Пятница, 31.01.2020, 07:53 | Сообщение # 5901
    Связной
    Статус:
    Бывалый:
    Сообщений: 672
    Награды: 9
    Регистрация: 25.03.2012

    Policai, у тебя функции не работают или что? Проверить можно как угодно, самый простой - это создать тестовый квест и прописать условие, что метка поставится при этом условии: {=actor_has_need_docs(8)}
      Злобная реклама
    Пятница, 31.01.2020, 07:53
    Статус:
    Сообщений: 666
    Регистрация: 25.03.2012
    Российская Федерация  Policai
    Пятница, 31.01.2020, 09:21 | Сообщение # 5902
    Dead City Breakthrough
    Статус:
    Опытный:
    Сообщений: 2244
    Награды: 11
    Регистрация: 08.11.2011

    Neptun,

    Это явно не самый простой..)))) создавать ненужный квест. Мне нужно просто проверить переключение режимов торговли. Можно проверить уже в моде, с этим нет проблем, но это долго и муторно учитывая что разные файлы торговли у разных торговцев так как разный ассортимент. Поэтому и хотел всё отстроить на тестовой локе. Посадил торговца. и просто прописываю ему разные файлы торговли. Так быстрее проверить всех. Тестовая лока и грузится мгновенно, и бегать никуда не нужно. Просто условия нужно создать, в инвенторе 2 прдемета - 1 условие, 4 - 2 условие. 6 - 3 условие.
      Злобная реклама
    Пятница, 31.01.2020, 09:21
    Статус:
    Сообщений: 666
    Регистрация: 08.11.2011
    Российская Федерация  denis2000
    Пятница, 31.01.2020, 10:28 | Сообщение # 5903
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    Цитата Policai ()
    Мне нужно просто проверить переключение режимов торговли.

    Так для этого и нужно, чтобы по вашему желанию выполнялись заданные вами условия, переключения режимов торговли. Как вам и сказали самое простое решение такой проверки создать тестовый квест рестриктор с логикой в которой вы и будете искусственно выполнять желаемые условия (выдавая предметы или инфопорции).
    Сообщение отредактировал denis2000 - Пятница, 31.01.2020, 10:30
      Злобная реклама
    Пятница, 31.01.2020, 10:28
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  Policai
    Пятница, 31.01.2020, 10:59 | Сообщение # 5904
    Dead City Breakthrough
    Статус:
    Опытный:
    Сообщений: 2244
    Награды: 11
    Регистрация: 08.11.2011

    Совсем запутался..))))
    Попробую обьяснить по другому.
    Стоит торговец, рядом стоит мой сундук, в нём 8 предметов.
    1. Я подхожу к нему пустой.
    2. Буру из сундука 4 предмета и подхожу к нему.
    3. Беру 6 предметов и подхожу к нему.
    4. Беру все 8 предметов и подхожу к нему.
    Должна пройти проверка сколько предметов у меня в инвенторе и включиться соответствующая секция.

    Действия:
    Ставлю спейс перед торговцем. Что туда прописывать? Как подсчитать сколько у меня предметов в рюкзаке, имея ввиду что предметы имеют имена doc_01 - doc_08. И как прописать их в файле торговли...
    Учитывайте пожалуста что у меня 1 извилина в этом плане.. (Если её разрезать, уши отпадут) smile
      Злобная реклама
    Пятница, 31.01.2020, 10:59
    Статус:
    Сообщений: 666
    Регистрация: 08.11.2011
    Российская Федерация  denis2000
    Пятница, 31.01.2020, 12:22 | Сообщение # 5905
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    Цитата Policai ()
    Должна пройти проверка сколько предметов у меня в инвенторе и включиться соответствующая секция.

    Если у вас проверка только по предметам в инвентаре ГГ, то да это сработает и сундук будет проще рестриктора.
      Злобная реклама
    Пятница, 31.01.2020, 12:22
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Украина  AziatkaVictor
    Пятница, 31.01.2020, 14:53 | Сообщение # 5906
    Статус:
    Опытный:
    Сообщений: 1313
    Награды: 4
    Регистрация: 30.08.2018

    День добрый! Помогите пожалуйста! Делал правку скриптов в bind_monster.script, а именно добавлял туда скрипты Сидоровича. После решил добавить возможность лута мутантов через F, и тут эти две правки начали конфликтовать. Сидоровчи работает, но мутанты не лутаються. Я очень плох в Lua и буду рад если вы скажите что делать. Я понял, что там биндиться "generic_object_binder" и "trader_object_binder", но что и как делать не знаю...
    Сам скрипт:
    Код
    -----------------------------------------------------------------------------------
    -- Monster binding
    -----------------------------------------------------------------------------------

    function bind(obj)
        printf("_bp: monster.bind: name='%s', id='%d'", obj:name(), obj:id())

        -- Для спауна
        --xr_spawner.spawn_client(obj)

        local new_binder = generic_object_binder(obj)
        obj:bind_object(new_binder)
    end

    local last_update = 0 -- combat
    ------------------------------------------------------------------------------------
    class "generic_object_binder" (object_binder)

    function generic_object_binder:__init(obj) super(obj)
        self.loaded = false
        ------ use --------
        self.use = false
        -------------------
    end

    function generic_object_binder:reload(section)
        object_binder.reload(self, section)
    end

    function generic_object_binder:reinit()
        object_binder.reinit(self)

        db.storage[self.object:id()] = { }

        self.st = db.storage[self.object:id()]

        self.object:set_callback(callback.patrol_path_in_point, self.waypoint_callback, self)
        self.object:set_callback(callback.hit,     self.hit_callback,  self)
        self.object:set_callback(callback.death,    self.death_callback,    self)
        self.object:set_callback(callback.sound,     self.hear_callback,  self)
    end

    function generic_object_binder:update(delta)
        object_binder.update(self, delta)

        if xr_combat_ignore.fighting_with_actor_npcs[self.object:id()] and self.object:best_enemy() == nil then
      xr_combat_ignore.fighting_with_actor_npcs[self.object:id()] = nil
        end

        local squad = get_object_squad(self.object)
        local object_alive = self.object:alive()
        --' printf("_bp: generic_object_binder: UPDATE [name='%s' time=%d]",
        --'    self.object:name(), time_global())

        if not object_alive then
      return
        end

        self.object:set_tip_text("")
        local st = db.storage[self.object:id()]
        if st ~= nil and st.active_scheme ~= nil then
      xr_logic.try_switch_to_another_section(self.object, st[st.active_scheme], db.actor)
        end
        -- Апдейт отряда
        if squad ~= nil then
      if squad:commander_id() == self.object:id() then
       squad:update()
      end
        end

        self.object:info_clear()

        local active_section = db.storage[self.object:id()] and db.storage[self.object:id()].active_section
        if active_section then
      self.object:info_add("section: " .. active_section)
        end
        local best_enemy = self.object:best_enemy()
        if best_enemy then
      self.object:info_add("enemy: " .. best_enemy:name())
        end
        self.object:info_add(self.object:name().." ["..self.object:team().."]["..self.object:squad().."]["..self.object:group().."]")

        if alife():object(self.object:id()) == nil then
      return
        end

        if squad ~= nil then
      self.object:info_add("squad_id: " .. squad:section_name())
      if squad.current_action ~= nil then
       local target = squad.assigned_target_id and alife():object(squad.assigned_target_id) and alife():object(squad.assigned_target_id):name()
       self.object:info_add("current_action: " .. squad.current_action.name .."["..tostring(target).."]")
      end
        end

    -- Если есть враг , то идем в комбат !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        if self.object:get_enemy() then
      if xr_logic.mob_captured(self.object) then
       xr_logic.mob_release(self.object)
      end
      return
        end

        if squad and squad.current_action and squad.current_action.name == "reach_target" then
      local squad_target = simulation_objects.get_sim_obj_registry().objects[squad.assigned_target_id]
      if squad_target == nil then return end
        --    printf("_bp: mob_reach_task:reset_scheme: %s", self.object:name())

      local target_pos, target_lv_id, target_gv_id = squad_target:get_location()
        --    if not xr_logic.mob_captured(self.object) then
       xr_logic.mob_capture(self.object, true)
        --    end
      if squad:commander_id() == self.object:id() then
       action(self.object, move(move.walk_with_leader, target_pos),
        cond(cond.move_end))
      else
       local commander_pos = alife():object(squad:commander_id()).position
       if commander_pos:distance_to(self.object:position()) > 10 then
        action(self.object, move(move.run_with_leader, target_pos),
        cond(cond.move_end))
       else
        action(self.object, move(move.walk_with_leader, target_pos),
        cond(cond.move_end))
       end
      end
      return
        end

        if self.st.active_section ~= nil then
      xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "update", delta)
        end
    end

    function generic_object_binder:extrapolate_callback()
        -- Проверяем, что объект еще в онлайне
        if db.storage[self.object:id()] == nil or
       db.storage[self.object:id()].object == nil
        then
      return
        end

        local cur_pt = self.object:get_current_point_index()
        if self.object:get_script()    == false then
      return false
        end

        local patrol_path = self.object:patrol()
        if not level.patrol_path_exists(patrol_path) then
      return false
      --abort("bind_monster:extrapolate_callback(). There is no patrol path [%s]", tostring(patrol_path))
        end
        if patrol(patrol_path):flags(cur_pt):get() == 0 then
      --printf("_bp: generic_object_binder: extrapolate_callback: cur_pt = %d: true", cur_pt)
      return true
        end
        --printf("_bp: generic_object_binder: extrapolate_callback: cur_pt = %d: false", cur_pt)
        return false
    end

    function generic_object_binder:waypoint_callback(obj, action_type, index)
        if self.st.active_section ~= nil then
      xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "waypoint_callback", obj, action_type, index)
        end
    end

    function generic_object_binder:death_callback(victim, who)
        printf("stop_dead_id"..self.object:id())

        xr_combat_ignore.fighting_with_actor_npcs[self.object:id()] = nil

        self:hit_callback(victim, 1, vector():set(0,0,0), who, "from_death_callback")
        if who:id() == db.actor:id() then
      xr_statistic.inc_killed_monsters_counter()
      xr_statistic.set_best_monster(self.object)
        end

        if self.st.mob_death then
      xr_logic.issue_event(self.object, self.st.mob_death, "death_callback", victim, who)
        end

        if self.st.active_section then
      xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "death_callback", victim, who)
        end
        --' Наносим небольшой импульс вперед.
        local h = hit()
        h.draftsman = self.object
        h.type = hit.fire_wound
        h.direction = db.actor:position():sub(self.object:position())
        h:bone("pelvis")
        h.power = 1
        h.impulse = 10
        self.object:hit(h)

        local obj_clsid = self.object:clsid()
        if obj_clsid == clsid.poltergeist_s then
      printf("releasing object ["..self.object:name().."]")
      if alife():object(self.object:id()) ~= nil then
       alife():release(alife():object(self.object:id()), true)
      end
        end
        --' Подключим колбэк юзанья, для возможности снятия частей монстров
        self:exist_use()
    end

    --' Поддержка юзанья частей монстров '-------------------------------------------------------------------------------

    function generic_object_binder:exist_use()
        local ini = system_ini()
        if ini:line_exist(self.object:section(), "Spawn_Inventory_Item_Section") then
         local conf = ini:r_string(self.object:section(), "Spawn_Inventory_Item_Section")
      local items = {}
         for s in string.gfind(conf, "%s*([^,]+)%s*") do
          table.insert(items, s)
         end
         self.item = items[1]
      if self.item and system_ini():section_exist(self.item) then
          self.item_count = tonumber(items[2]) or 1
             self:set_use(ini)
      end
        end
    end

    function generic_object_binder:set_use(ini)
        --//определяем и устанавливаем надпись юза
        local character_use = (ini:r_string(self.object:section(), "character_use")) or "monstr_character_use"
        self.object:set_tip_text(character_use)
        --// устанавливаем каллбэк
        self.object:set_callback(callback.use_object, self.on_use, self)
        --// устанавливаем озвучку юза
        self.sound_use = sound_object("material\\dead-body\\collide\\hithard0"..tostring(math.random(1, 6)).."hl")
        if not self.use then self.use = true end
    end

    function generic_object_binder:on_use(obj, who)
        --// спавним в инвентарь юзающего, части монстра
        for i=1, self.item_count do
         alife():create(self.item, who:position(), who:level_vertex_id(), who:game_vertex_id(), who:id())
        end
        --// отключаем каллбэк
        self.object:set_callback(callback.use_object, nil)
        --// убираем надпись юза
        self.object:set_tip_text("")
        self.use = false
        --// дадим небольшой хит по телу трупа
        local ini = system_ini()
        local h = hit()
        h.draftsman = self.object
        h.type = hit.fire_wound
        h.direction = vector():set(0,1,0)
        h:bone( (ini:r_string(self.object:section(), "bone_impuls_abscission")) or "bip01_spine" )
        h.power = 1
        h.impulse = ( (ini:r_u32(self.object:section(), "impuls_abscission")) or 100 )
        self.object:hit(h)
        --// производим озвучку юза
        self.sound_use:play_at_pos(self.object, self.object:position(), sound_object.s3d)
    end

    function generic_object_binder:hit_callback(obj, amount, local_direction, who, bone_index)
    --    printf("HIT_CALLBACK: [%s] amount[%s]", obj:name(), amount)

        if(who:id()==db.actor:id()) then
      xr_statistic.set_best_weapon(amount)
        end

        if self.st.hit then
      xr_logic.issue_event(self.object, self.st.hit, "hit_callback", obj, amount, local_direction, who, bone_index)
        end

        if amount > 0 then
      printf("HIT_CALLBACK: %s amount=%s bone=%s who:id() = [%s] actor:id() = [%s]", obj:name(), amount, tostring(bone_index), who:id(), db.actor:id())
        end
    end

    function generic_object_binder:hear_callback(self, who_id, sound_type, sound_position, sound_power)
        if who_id == self:id() then
      return
        end
        xr_hear.hear_callback(self, who_id, sound_type, sound_position, sound_power)
    end

    function generic_object_binder:net_spawn(sobject)
        if not object_binder.net_spawn(self, sobject) then
      return false
        end

        local on_offline_condlist = db.storage[self.object:id()] and db.storage[self.object:id()].overrides and db.storage[self.object:id()].overrides.on_offline_condlist
        if on_offline_condlist ~= nil then
      xr_logic.pick_section_from_condlist(db.actor, self.object, on_offline_condlist)
        end

        if not self.object:alive() then
      return true
        end
        if alife():object(self.object:id()) == nil then
      return false
        end

    --    local pos = self.object:position()
    --    printf("net_spawn mpos[%s][%s][%s]", tostring(pos.x), tostring(pos.y), tostring(pos.z))

        db.add_obj(self.object)

    --******************************* Телепорт на первую точку пути работы смарттеррейна...*****************************
        local se_obj = alife():object(self.object:id())
        if db.spawned_vertex_by_id[se_obj.id] ~= nil then
      self.object:set_npc_position(level.vertex_position(db.spawned_vertex_by_id[se_obj.id]))
      db.spawned_vertex_by_id[se_obj.id] = nil
        elseif db.offline_objects[se_obj.id] ~= nil and db.offline_objects[se_obj.id].level_vertex_id ~= nil then
      printf("changing position for object[%s] from %s to %s : level vertex [%s] to [%s]", se_obj:name(), vec_to_str(se_obj.position), vec_to_str(level.vertex_position(db.offline_objects[se_obj.id].level_vertex_id)), tostring(se_obj.m_level_vertex_id), tostring(db.offline_objects[se_obj.id].level_vertex_id))
      self.object:set_npc_position(level.vertex_position(db.offline_objects[se_obj.id].level_vertex_id))
        elseif se_obj.m_smart_terrain_id ~= 65535 then
      local smart_terrain = alife():object(se_obj.m_smart_terrain_id)
      if smart_terrain.arriving_npc[se_obj.id] == nil then
       local smart_task = smart_terrain.job_data[smart_terrain.npc_info[se_obj.id].job_id].alife_task
       self.object:set_npc_position(smart_task:position())
      end
        end
    --******************************************************************************************************************

        smart_terrain.setup_gulag_and_logic_on_spawn( self.object, self.st, sobject, modules.stype_mobile, self.loaded)

        return true
    end

    function generic_object_binder:net_destroy()
        self.object:set_callback(callback.death,    nil)
        self.object:set_callback(callback.patrol_path_in_point, nil)
        self.object:set_callback(callback.hit,     nil)
        self.object:set_callback(callback.sound,     nil)
        xr_sound.stop_sounds_by_id(self.object:id())

        xr_combat_ignore.fighting_with_actor_npcs[self.object:id()] = nil

        local st = db.storage[self.object:id()]
        if st and st.active_scheme then
      xr_logic.issue_event(self.object, st[st.active_scheme], "net_destroy")
        end

    -- Запоминаем позицию и активную секцию --------
    if db.offline_objects[self.object:id()] then
        db.offline_objects[self.object:id()].level_vertex_id = self.object:level_vertex_id()
        db.offline_objects[self.object:id()].active_section = db.storage[self.object:id()].active_section
    end
    ------------------------------------------------n

        db.del_obj(self.object)
        db.storage[self.object:id()] = nil
        object_binder.net_destroy(self)
    end

    function generic_object_binder:reload(section)
        object_binder.reload(self, section)
        --printf("generic_object_binder:reload(): self.object:name()='%s'", self.object:name())
    end

    function generic_object_binder:net_save_relevant()
        --printf("generic_object_binder:net_save_relevant(): self.object:name()='%s'", self.object:name())
        return true
    end

    function generic_object_binder:save(packet)

        set_save_marker(packet, "save", false, "generic_object_binder")
        object_binder.save(self, packet)
        xr_logic.save_obj(self.object, packet)
        set_save_marker(packet, "save", true, "generic_object_binder")
        --------- use -----------
        packet:w_bool(self.use)
        -------------------------
    end

    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)
        set_save_marker(reader, "load", true, "generic_object_binder")
        ---------- use -----------
        self.use = reader:r_bool()
        if self.use then
         self:exist_use()
        end
        -------------------------
    end

    -----------------------------------------------------------------------------------
    -- Sidor etc binding
    -----------------------------------------------------------------------------------

    function bind(obj)
        local new_binder = trader_object_binder(obj)
        obj:bind_object(new_binder)
    end
    ------------------------------------------------------------------------------------
    class "trader_object_binder" (object_binder)

    function trader_object_binder:__init(obj) super(obj)
        self.loaded = false
    end

    function trader_object_binder:reload(section)
        object_binder.reload(self, section)
    end

    function trader_object_binder:reinit()
        object_binder.reinit(self)

        db.storage[self.object:id()] = { }

        self.st = db.storage[self.object:id()]
    end

    function trader_object_binder:update(delta)
        object_binder.update(self, delta)

        -- јпдейт торговли
        if self.object:clsid() == clsid.script_trader then
      trade_manager.update(self.object)
        end

        local st = db.storage[self.object:id()]
        if st ~= nil and st.active_scheme ~= nil then
      xr_logic.try_switch_to_another_section(self.object, st[st.active_scheme], db.actor)
        end
        
        if self.st.active_section ~= nil then
      xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "update", delta)
        end
    end

    function trader_object_binder:net_spawn(sobject)
        if not object_binder.net_spawn(self, sobject) then
      return false
        end

        local on_offline_condlist = db.storage[self.object:id()] and db.storage[self.object:id()].overrides and db.storage[self.object:id()].overrides.on_offline_condlist
        if on_offline_condlist ~= nil then
      xr_logic.pick_section_from_condlist(db.actor, self.object, on_offline_condlist)
        end

        if not self.object:alive() then
      return true
        end
        
        if alife():object(self.object:id()) == nil then
      return false
        end

        db.add_obj(self.object)
        if self.object:clsid() == clsid.script_trader then
      self.object:set_trader_global_anim("idle")
      smart_terrain.setup_gulag_and_logic_on_spawn( self.object, self.st, sobject, modules.stype_trader, self.loaded)
        end
        
        return true
    end

    function trader_object_binder:net_destroy()
        xr_sound.stop_sounds_by_id(self.object:id())

        local st = db.storage[self.object:id()]
        if st and st.active_scheme then
      xr_logic.issue_event(self.object, st[st.active_scheme], "net_destroy")
        end

        if db.offline_objects[self.object:id()] then
      db.offline_objects[self.object:id()].level_vertex_id = self.object:level_vertex_id()
      db.offline_objects[self.object:id()].active_section = db.storage[self.object:id()].active_section
        end

        db.del_obj(self.object)
        db.storage[self.object:id()] = nil
        object_binder.net_destroy(self)
    end

    function trader_object_binder:net_save_relevant()
        return true
    end

    function trader_object_binder:save(packet)
        set_save_marker(packet, "save", false, "trader_object_binder")
        object_binder.save(self, packet)
        xr_logic.save_obj(self.object, packet)
        if self.object:clsid() == clsid.script_trader then
      trade_manager.save(self.object, packet)
        end
        set_save_marker(packet, "save", true, "trader_object_binder")
    end

    function trader_object_binder:load(reader)
        self.loaded = true
        set_save_marker(reader, "load", false, "trader_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, "trader_object_binder")
    end
    Сообщение отредактировал AziatkaVictor - Пятница, 31.01.2020, 14:54
      Злобная реклама
    Пятница, 31.01.2020, 14:53
    Статус:
    Сообщений: 666
    Регистрация: 30.08.2018
    Российская Федерация  Nesquik
    Пятница, 31.01.2020, 15:05 | Сообщение # 5907
    Статус:
    Отмычка:
    Сообщений: 112
    Награды: 1
    Регистрация: 29.10.2019

    Не подскажите, возможно ли перенести Худ(полоска здоровья,полоска брони) из мода "Ветер Времени"
    И каким образом?
      Злобная реклама
    Пятница, 31.01.2020, 15:05
    Статус:
    Сообщений: 666
    Регистрация: 29.10.2019
    Российская Федерация  Крим
    Пятница, 31.01.2020, 16:06 | Сообщение # 5908
    Статус:
    Новичок:
    Сообщений: 231
    Награды: 1
    Регистрация: 21.04.2019

    Здравствуйте. Подскажите, пожалуйста, как можно сделать, чтобы при вхождении в рестриктор - воспроизводился звук.

    Сойдет такая логика?
      Злобная реклама
    Пятница, 31.01.2020, 16:06
    Статус:
    Сообщений: 666
    Регистрация: 21.04.2019
    Украина  AziatkaVictor
    Пятница, 31.01.2020, 16:17 | Сообщение # 5909
    Статус:
    Опытный:
    Сообщений: 1313
    Награды: 4
    Регистрация: 30.08.2018

    Крим,
    Код
    %=kill_actor%, %=play_sound(esc_die_anomaly_restr_sound)%
    Это можно объеденить в
    Код
    %=kill_actor =play_sound(esc_die_anomaly_restr_sound)%
    и запятую не ставят.
      Злобная реклама
    Пятница, 31.01.2020, 16:17
    Статус:
    Сообщений: 666
    Регистрация: 30.08.2018
    Российская Федерация  Крим
    Пятница, 31.01.2020, 16:20 | Сообщение # 5910
    Статус:
    Новичок:
    Сообщений: 231
    Награды: 1
    Регистрация: 21.04.2019

    AziatkaVictor, спасибо, попробую.
      Злобная реклама
    Пятница, 31.01.2020, 16:20
    Статус:
    Сообщений: 666
    Регистрация: 21.04.2019
    Поиск: