Случайная подборка модов
Долг. Философия Войны
4.0
Двойники - Разлом Времени
3.5
Old Episodes. Episode 2. War of Zone.
3.1
OGSE 0.6.9.3
4.2
Конец Света 2: Последний Восход
3.2
The Project Medeiros
3.7
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
⚙ Модострой: Вопросница
Российская Федерация  Wolfstalker
Среда, 24.02.2016, 00:25 | Сообщение # 1
Статус:
Легенда:
Сообщений: 2258
Награды: 15
Регистрация: 05.04.2010

В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга


• Не флудить
• Предварительно просматривайте раздел, ведь ответ на ваш вопрос может быть там
• В своем вопросе указывайте платформу моддинга — Тень Чернобыля, Чистое небо или Зов Припяти




F.A.Q

  Злобная реклама
Среда, 24.02.2016, 00:25
Статус:
Сообщений: 666
Регистрация: 05.04.2010
Российская Федерация  denis2000
Четверг, 24.03.2016, 08:51 | Сообщение # 571
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Joni_009,
Цитата Joni_009 ()
Да в логике и смарте sit_normal.

Надеюсь все же animpoint_sit_normal а не просто sit_normal. Вероятно флаг combat в смарт ковере установлен, но с такими анимациями это может привести к вылету.
Сообщение отредактировал denis2000 - Четверг, 24.03.2016, 08:52
  Злобная реклама
Четверг, 24.03.2016, 08:51
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  Dmitrii2015
Четверг, 24.03.2016, 09:30 | Сообщение # 572
Статус:
Гость:
Сообщений: 33
Награды: 0
Регистрация: 20.10.2015

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 : .... - call of pripyat\gamedata\scripts\xr_logic.script:597: attempt to call field '?' (a nil value)

Заселил локацию, вот вылет получил. Как его исправить?
  Злобная реклама
Четверг, 24.03.2016, 09:30
Статус:
Сообщений: 666
Регистрация: 20.10.2015
Украина  скат
Четверг, 24.03.2016, 10:28 | Сообщение # 573
Статус:
Бывалый:
Сообщений: 942
Награды: 9
Регистрация: 16.01.2014

Цитата alex1197 ()
А как тогда?
Как то вот так https://yadi.sk/d/mGM6354oqS3ef
  Злобная реклама
Четверг, 24.03.2016, 10:28
Статус:
Сообщений: 666
Регистрация: 16.01.2014
Российская Федерация  ins33
Четверг, 24.03.2016, 11:48 | Сообщение # 574
Dream Reader Mod
Статус:
Опытный:
Сообщений: 2269
Награды: 1
Регистрация: 17.01.2012

Mopa, Smart_terains читается только в all.spawn.
  Злобная реклама
Четверг, 24.03.2016, 11:48
Статус:
Сообщений: 666
Регистрация: 17.01.2012
Российская Федерация  denis2000
Четверг, 24.03.2016, 12:21 | Сообщение # 575
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Цитата Dmitrii2015 ()
Как его исправить?

Найти ошибку в кондлисте и исправить.
  Злобная реклама
Четверг, 24.03.2016, 12:21
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  antonnkz76
Четверг, 24.03.2016, 12:36 | Сообщение # 576
5 лет в Зоне
Статус:
Опытный:
Сообщений: 2342
Награды: 9
Регистрация: 26.02.2012

Цитата Joni_009 ()
Поменяй вероятность спавна артефактов, это строка coeff в логики аномалии. Ставь меньше и вероятность, спавна арта будет мала.

У меня СДК 0.4, там такого нет.
Повторяю вопрос: расставил в сдк аномалии, при начале игры из каждой вываливается артефакт, как это исправить?
  Злобная реклама
Четверг, 24.03.2016, 12:36
Статус:
Сообщений: 666
Регистрация: 26.02.2012
Украина  _S_k_i_F_
Четверг, 24.03.2016, 12:38 | Сообщение # 577
Золотой Обоз
Статус:
Опытный:
Сообщений: 1311
Награды: 9
Регистрация: 09.08.2015

antonnkz76, а можешь сделать скрин окна настройки аномалии в СДК.
  Злобная реклама
Четверг, 24.03.2016, 12:38
Статус:
Сообщений: 666
Регистрация: 09.08.2015
Российская Федерация  denis2000
Четверг, 24.03.2016, 12:41 | Сообщение # 578
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Цитата ins33 ()
Smart_terains читается только в all.spawn

Разве? Тогда почему конструкция типа:
Код
[smart_terrains]
none = true

приспокойно читается из кастом даты?
  Злобная реклама
Четверг, 24.03.2016, 12:41
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Соединенные Штаты  Joni_009
Четверг, 24.03.2016, 12:44 | Сообщение # 579
Статус:
Бывалый:
Сообщений: 1008
Награды: 14
Регистрация: 25.05.2014

Цитата denis2000 ()
Надеюсь все же animpoint_sit_normal а не просто sit_normal.

Ну конечно, просто в логике не напишешь же "animpoint_sit_normal".

Добавлено (24.03.2016, 12:44)
---------------------------------------------

Цитата antonnkz76 ()
У меня СДК 0.4, там такого нет.

Тогда не знаю, я не работаю на SDK 0.4, только SDK 0.7.
  Злобная реклама
Четверг, 24.03.2016, 12:44
Статус:
Сообщений: 666
Регистрация: 25.05.2014
Российская Федерация  antonnkz76
Четверг, 24.03.2016, 12:49 | Сообщение # 580
5 лет в Зоне
Статус:
Опытный:
Сообщений: 2342
Награды: 9
Регистрация: 26.02.2012

  Злобная реклама
Четверг, 24.03.2016, 12:49
Статус:
Сообщений: 666
Регистрация: 26.02.2012
Российская Федерация  denis2000
Четверг, 24.03.2016, 12:50 | Сообщение # 581
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

antonnkz76, Мне кажется это нужно исправить параметры min_artefact_count, max_artefact_count в секции аномалии.
  Злобная реклама
Четверг, 24.03.2016, 12:50
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Соединенные Штаты  Joni_009
Четверг, 24.03.2016, 12:55 | Сообщение # 582
Статус:
Бывалый:
Сообщений: 1008
Награды: 14
Регистрация: 25.05.2014

Цитата denis2000 ()
Вероятно флаг combat в смарт ковере установлен, но с такими анимациями это может привести к вылету.

Вот что прописано в smart_cover.
  Злобная реклама
Четверг, 24.03.2016, 12:55
Статус:
Сообщений: 666
Регистрация: 25.05.2014
Российская Федерация  antonnkz76
Четверг, 24.03.2016, 12:56 | Сообщение # 583
5 лет в Зоне
Статус:
Опытный:
Сообщений: 2342
Награды: 9
Регистрация: 26.02.2012

denis2000, скорее всего ты прав, только что это тестил и пока что все говорит в пользу этого. Сравнил еще с секциями ПЫСовских аномалий, там для некоторых типов созданы секции аномалий с припиской _noart, и там написано мол не рождаются артефакты. Надо поэксперементировать с рождением артов.
  Злобная реклама
Четверг, 24.03.2016, 12:56
Статус:
Сообщений: 666
Регистрация: 26.02.2012
Российская Федерация  Dmitrii2015
Четверг, 24.03.2016, 12:57 | Сообщение # 584
Статус:
Гость:
Сообщений: 33
Награды: 0
Регистрация: 20.10.2015

denis2000, а где он находится (кондлист)?
  Злобная реклама
Четверг, 24.03.2016, 12:57
Статус:
Сообщений: 666
Регистрация: 20.10.2015
Украина  _S_k_i_F_
Четверг, 24.03.2016, 13:26 | Сообщение # 585
Золотой Обоз
Статус:
Опытный:
Сообщений: 1311
Награды: 9
Регистрация: 09.08.2015

Joni_009, поставь галочки на is combat cover и can fire. А если хочешь чтобы НПС не воевал, то в логику ему
Код
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true

-----------------------------------------------------------------------
Нужна помощь! У меня стоит отрезание частей мутантов, но если часть не отрезал и пересохранился, то её уже отрезать нельзя. Как быть? Уже очень долго разными способами пытался исправить этот момент, но ничего не получается. Вот мой биндер монстров
Код
-----------------------------------------------------------------------------------
-- 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
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)

     local npc = self.object
  local npc_st = db.storage[npc:id()]
  local invulnerability = utils.cfg_get_string(npc_st.ini, npc_st.active_section, "invulnerable", npc, false, "", nil)
           if invulnerability ~= nil then
   local condlist = xr_logic.parse_condlist(npc, npc_st.active_section, "invulnerable", invulnerability)  
    local invulner = xr_logic.pick_section_from_condlist(db.actor, npc, condlist) == "true"
     if npc:invulnerable() ~= invulner then
      npc:invulnerable(invulner)
     end
   end
    
    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

    release_body_manager.get_release_body_manager():moving_dead_body(self.object)

    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)
local active_slot = db.actor:active_slot() and db.actor:active_slot() == 1
if not active_slot then return end
    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")
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")
end
  Злобная реклама
Четверг, 24.03.2016, 13:26
Статус:
Сообщений: 666
Регистрация: 09.08.2015
Поиск: