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

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

Нашёл такой код:

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

local explosive_weapons = {
    ["wpn_rg-6"] = true,
    ["wpn_rpg7"] = true,
    ["grenade"] = true
    }
function npcondeath(victim, who)
    if IsStalker(who) then
  local active_item = who:active_item()
  local active_slot = who:active_slot()
  if (active_item and (active_slot == 1 or active_slot == 2)) or active_slot == 3 then
   local section = active_slot ~= 3 and active_item:section() or "grenade"
   if explosive_weapons[section] then
    particles_object("anomaly2\\body_tear_00"):play_at_pos(victim:bone_position("bip01_head"))
   end
  end
    end
end

 

Но, почему-то, партикл body_tear_00 отыгрывается даже при убийстве из любого дробовика, хотя их нет в списке. Прошу людей разбирающихся помочь. Сказали, что код из Simbion мода, но там такого не нашёл. И ещё, хотелось бы, чтобы труп после смерти исчезал. Хотя я понимаю, что тут нужна проверка на квестовость непися... Но может у кого нибудь уже есть готовое решение ?

Ссылка на комментарий
В 19.03.2018 в 10:39, Space.Marine сказал:

Нашёл такой код:

попробуйте этот:

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

local explosive_weapons = {
    ["wpn_rg-6"] = true,
    ["wpn_rpg7"] = true,
    ["grenade"] = true
    }
function npcondeath(victim, who)
    if IsStalker(who) then
  local active_item = who:active_item()
  local active_slot = who:active_slot()
  if (active_item ) then
   local section = active_item:section()
   if explosive_weapons[section] or active_slot == 3 then
    particles_object("anomaly2\\body_tear_00"):play_at_pos(victim:bone_position("bip01_head"))
   end
  end
    end
end

 

 

  • Спасибо 1
Ссылка на комментарий

Столкнулся тут с такой проблемой. Хм...Решил что лучше здесь спросить, а не в ковырялке.

Имеем такую логику персонажа. Сразу оговорюсь - val - это Темная Долина, а не мания величия.

[logic]
active = {-val_barman_1_sleep}walker@val_bar_sleep,sleeper@val_barmen

[walker@val_bar_sleep]
path_walk = val_barman_go_sleep_walk
path_look = val_barman_go_sleep_look
on_signal = val_sleep_bar | sleeper@val_barmen %+val_barman_1_sleep%

[sleeper@val_barmen]
path_main = val_bar_1_sleep_walk

Согласно логике НПС должен подойти к диванчику, по сигналу из точки пути перейти в следующую схему(выдав поршень) и завалиться спать на этот диванчик.

В действительности происходит следующее. По логу:

on_signal___(c.v1___=___val_sleep_bar)___signalled___[val_barman_1] ----сигнал есть.
 npc = 'single_player' give_info_portion id = 'val_barman_1_sleep'             ----выдан поршень

Далее.

object___'val_barman_1':___activate_by_section:___looking___for___section___'sleeper@val_barmen'
reset_generic_schemes_on_scheme_switch:___npc:name()='val_barman_1'
calling___module('xr_sleeper')

Ну - судя по всему - в следующую схему он перешел. И тут начинается самое интересное.

Scheduler tried to update object val_barman_1

Перец раскорячивается в точке пути и не идет на диванчик. При этом с ним можно разговаривать да и видно, что он находится под логикой sleeper@

а не в nil допустим.

Путь для секции sleeper@ абсолютно рабочий. Проверено удалением предыдущей секции.

Пробовал переводить перца из волкера в ремарк и далее по таймеру в слипер с выдачей поршня. Тогда еще интересней - виснет в ремарке, не выдавая поршень.

Взрыв мозга уже. Подумываю обойтись без Бармена))

Ссылка на комментарий
16 часов назад, Graff46 сказал:

попробуйте этот:

Ничего не поменялось. Партикл проигрывается, как и раньше при убийстве из любого мощного ствола (дробовик, СВД и пр.) Если что - платформа ЗП.

Изменено пользователем Space.Marine
Ссылка на комментарий

@Space.Marine 

Мне кажется слот проверять совершенно не нужно. Попробуй в варианте от @Graff46 оставить в условии только наличие итема в таблице:

if explosive_weapons[section] ~= nil then

 

  • Спасибо 1

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

Ссылка на комментарий
14 часов назад, _Val_ сказал:

Scheduler tried to update object

как правило - перемещение или анимации.

В ремарке без перехода куда-либо еще как себя ведет ?

 

Ссылка на комментарий

@Dennis_Chikin 

А без перехода я не пробовал.

Вообще - проблема уже решена путём обходного маневра. Конечно хотелось бы понять, что в конце концов случилось с этим неписем...особенно с учетом того, что таких логик уже прилично написано и все они работают....

Ссылка на комментарий
4 часа назад, WinCap сказал:

Попробуй

Завтра проверю, но... Если в условии есть конкретно переменная explosive_weapons и для неё заданны конкретные параметры wpn_такое-то, то какого не работает ? 

Уточню, я в скриптах - максимум читатель без образования.

Возможно ли такое поведения скрипта из-за того, что у меня значения k_ap и k_hit в конфигах некоторых боеприпасов больше единицы ? 

Изменено пользователем Space.Marine
Ссылка на комментарий
or "grenade"
   if explosive_weapons[section] then

А что, вообще, хотели этим сказать ?

 

Ссылка на комментарий
31 минуту назад, Dennis_Chikin сказал:

А что, вообще

Как я уже упоминал, я не специалист и, даже, не любитель. Я так понимаю, что условия такие, если некоторые заданные в explosive_weapons стволы а также гранаты, то - бабах ! Код из Simbion, как говорят. И, да, там есть фишка на эффект разрыва трупов для дум-дум боеприпаса (из описания мода). Как я припоминаю, это всё, тянется ещё из АМК мода для ТЧ. Я просто не понимаю, неужели это настолько проблематично (скорее просто на не нужно) решить спецам ? 

Изменено пользователем Space.Marine
Ссылка на комментарий
8 часов назад, Dennis_Chikin сказал:

А что, вообще, хотели этим сказать ?

При активных 1 и 2 слотах проверяется секция оружия, 3-ий слот считается гранатным ив нем проверка не делается.

Мне кажется номера слотов, что в ТЧ, что в ЗП несколько другие, из-за того и глюки.

  • Согласен 1
Ссылка на комментарий
10 часов назад, Dennis_Chikin сказал:

А что, вообще, хотели этим сказать ?

Если ты имел в виду синтаксическую ошибку, то её там нет. Условие является независимым, а предыдущую строку надо читать целиком, как самостоятельное присвоение:

local section = active_slot ~= 3 and active_item:section() or "grenade"

 

Ссылка на комментарий

if who:active_slot() == 3 then ...

else

  local item = who:active_item()

  if item and t[item:section()] then ...

  end

end

 

Может, все-таки так ?

 

Или сразу:

if who and who.active_slot and ( ( who:active_slot() == 3 ) or ( who:active_item() and t[who:active_item():section()] ) ) then ... end

 

Ссылка на комментарий

А вот кстати еще один животрепещущий вопрос. Что за гадская схема kamp

Какой раз уже сталкиваюсь - если непись идет с пути патрулирования к костру...уже находится под схемой kamp...то если его в момент передвижения(до того - как он уселся) - дернуть в другую схему, то сразу срабатывает Scheduler

Я конечно это дело обошел, методом дописывания неписю еще одного пути прямо к костерку по схеме walker, но что-то меня это начало утомлять.

Ссылка на комментарий

Изрядно гадская, да. Пришлось шаманствовать с removeNpc():

    local kamp_end = xr_evaluators_id.stohe_kamp_base + 1
    local on_pos = xr_evaluators_id.stohe_kamp_base + 2

    local mgr = npc:motivation_action_manager()

-- todo: слишком сложно. ПРОСТО оторвать лишние эвалюаторы СОВСЕМ. Оставить все в одном.
    local a = mgr and mgr:action( xr_actions_id.alife )
    if a then a:remove_precondition( kamp_end )
    else log( "warning", "(%s):removeNpc, no action (alife) (%s)", self.center_point, npc:name() )
    end

    a = mgr:action( xr_actions_id.stohe_kamp_base + 3 )
    if a then
        xr_logic.unsubscribe_action_from_events( npc, st, a )
        mgr:remove_action( xr_actions_id.stohe_kamp_base + 3 )
        -- log( "info", "(%s):removeNpc, %s, 2", self.center_point, npc:name() )
    else log( "warning", "(%s):removeNpc, no action (action_kamp_wait) (%s)", self.center_point, npc:name() )
    end

    mgr:remove_action( xr_actions_id.stohe_kamp_base + 1 )
    -- log( "info", "(%s):removeNpc, %s, 3", self.center_point, npc:name() )

    mgr:remove_evaluator( kamp_end )
    -- mgr:add_evaluator( kamp_end, property_evaluator_const( true ) )
    mgr:remove_evaluator( on_pos )
    -- mgr:add_evaluator( on_pos, property_evaluator_const( true ) )

    -- if npc:name() == "bar_dolg_ivancov" then
    --    log( "info", "(%s):removeNpc, %s, remove_evaluators, ok", self.center_point, npc:name() )
    -- end

    st.on_position = false    -- поскольку строжейж грохнуть не дают, сделаем вид, что он новый.
    st.count = 0
    st.pos_lvid = nil
    st.dest_lvid = nil

  • Спасибо 1
Ссылка на комментарий

Я тут поэкспериментировал и вроде как получается, что в спавне (скриптом) можно не указывать точно гейм-вертекс, главное что бы он был с данной локации (на которой спавним)...

Изменено пользователем Graff46
Ссылка на комментарий

Доброго времени!

Каким способом можно реализовать удаление предмета из инвентаря с течением времени с момента взятия этого предмета.

Пример: экзоскелет работает только с аккумулятором (это я сделал), но через некоторое время аккумулятор разряжается и удаляется из рюкзака.

Подайте идею.

Важнейшая задача цивилизации - научить человека мыслить.

Ссылка на комментарий
Только что, Fenrir02 сказал:

Подайте идею.

Запоминай в пстор время (game.time()) когда батарея начала работать и проверяй сколько она работает, где проверять смотри сам, можно конечно биндером постоянно, можно еще на какое событие повесить, например дроп ГГ, ведь в игре достаточно часто патроны перезаряжаем, что то выкидываем, продаём\покупаем и тд...

Не забываем про level.add_call

Изменено пользователем Graff46
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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