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

[SoC] Ковыряемся в файлах


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

@dsh, если не вдаваться в подробности, которые в оригинале можно сказать не заметны, условия просты, это масса и конфиг, ну массы хватает всегда, а вот конфиг ты настраиваешь сам, грубо говоря если есть значение ключа - сталкер итем продает, если их нет или они некорректны - не продает. В оригинале для всех сталкеров один конфиг и любой нпс без ключа trade будет торговать generic листом. Что-бы корректно сделать нормальные торговые условия для каждого сталкера - тут даже скриптовых костылей не хватит, без движка собственно никак. Хотя на костылях смотрится приемлемо, можешь у меня глянуть если интересно. Листы для актора и нпс формируются немного по разному, поэтому если захотеть можно выбить такой неприятный баг, но если за 8 лет никто не выбил, значит не сильно хотели :).

 

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

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

Доброго времени суток. Какой файл отвечает за подсветку амуниции в инвентаре (какие строчки нужно править/добавлять)? Я использую наработки из мода SWM, где есть множество аксессуаров для оружия. Хотелось бы, чтобы они подсвечивались в соответствии с оружием, с которым они совместимы и наоборот.

ПРИМЕР:

post-29924-0-79849700-1428839852_thumb.jpg

Еще один день – еще один урок.
Ссылка на комментарий

Ну если Вы темой не ошиблись - то в чистом ТЧ(SoC) можно и дальше хотеть :) , но возможности такой нет. Но если очень хотеть - тогда смотерть в сторону правленного движка и делать... Ну или спросить в теме "Ищу файлы\моды\аддоны", может уже кто-то сделал.

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

@TASGREEN, А еще можно зайти в тему "Судьбы Зоны", посмотреть видео из шапки, узнать что существует скриптовый инвентарь и скоро выйдет на публику. И по части подсветки тех или иных предметов там функционал на месте.

Не навязываюсь, просто к сведению что кроме "Возможности такой нет" и "ковырять движок" - есть еще вот такой вариант.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Опять спрошу, насчет прерывания комбата у монстров. Ну нужно мне, очень....

Взял для опытов схему "mob_home" по причине ее максимальной простоты. Добавил\адаптировал в нее фрагменты из xr_combat_ignore, в общем получилось: читаются оверрайды, монстр тусуется вокруг назначенной в схеме точки и не реагирует на врагов, если оверрайды выставлены. Но если монстр сорвался в комбат, и если, пока он воюет изменить оверрайды(делаю это переводом непися в другую секцию, по факту инфо-порции) - он не реагирует. Т.е. тупо добивает НПСа, и тока потом меняет поведение. Как быть, что можно еще попробовать ? Подскажите.

 

P.S. Еще думаю насчет такого - а может монстр добивает непися потому, что ему такой action выставлен ? И пока он его не завершит - лупит непися ? Может попробовать ему action обнулять\сбрасывать ? Или это я не туда вообще ?

 

есть еще вот такой вариант.

И типа он работает на исходном движке ТЧ ?

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

@UnLoaded@Карлан, не-не, я наверное не точно выразился. Меня интересует не то, что сталкер в принципе будет продавать или не будет. Меня интересует именно то оружие, которое у него в руках/за спиной. Вот открываю я торговлю со сталкером и вижу, что он спокойно продает свой единственный калаш. Вот как мне это изменить? Нужно, что бы сталкеры ни в каком случае не выставляли в продажу свое единсвенное оружие.

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

И типа он работает на исходном движке ТЧ ?

А что там такого?

 

@UnLoaded, возьми своего монстра под скрипт, get_script()/get_script_name() и script() методы используй, сбрось ими, проверь. Можно создать дополнительную группировку для монстра дружелюбную к группировке нпс.

@dsh, даже не представляю как это может быть. Возможно ты что-то с флагами намудрил, проверяй различные ключи (флаги) относящиеся к использованию предмета нпсом.

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

Ну если Вы темой не ошиблись - то в чистом ТЧ(SoC) можно и дальше хотеть :) , но возможности такой нет. Но если очень хотеть - тогда смотерть в сторону правленного движка и делать... Ну или спросить в теме "Ищу файлы\моды\аддоны", может уже кто-то сделал.

Действительно ошибся. Искал куда задать вопрос и написал не туда.

Еще один день – еще один урок.
Ссылка на комментарий

Продолжение дискуссии про "нужно/не нужно" удалил. По причине бессмысленности.
Но вообще - странный подход: спрашивают - "как сделать", ответ - "а у меня сделано". Тема все-таки не рекламная. Или описываем, как, или одно из двух, если уж решили ответить.

 

Но вообще Бак просто на время торговли отбирал у неписей "непродажное оружие". Но результат - гм...

А еще был DTL, еще додвижковоковырятельный, в котором это тоже вроде было сделано. Как-то.

 

Вообще же данная конкретная идея представляется неправильной без глубокой переработки неписевой жизни, ибо вот вся эта вот "автоматика выбора оружия" в итоге регулярно дает разнообразные странные результаты, типа "ни за что не променяю свой дробовик - лучше сдохну. И буду стрелять из него всегда и везде, даже если дострелить вообще невозможно". То есть, смысл ровно тот же, что и выкупленный у непися единственный ствол, и даже хуже. Без ствола он хоть просто убежит.

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

@Dennis_Chikin, дело не в торговле, дело во флагах, я же говорю. Торговля совершенно не при чем, она берет секцию, к юзердатам или чему-то уникальному отношения торговые функции оригинала не имеют никакого.

 

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

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

Натолкнулся сегодня на старый добрый вылет вида (все, что есть, от включенного "расширенного" режима ведения лога):

! Cannot find saved game error: there is no section [hit@altar_monolith] for npc [pri_monolith_28]
! Cannot find saved game %s

FATAL ERROR

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...e.r\shoc\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 Закомментировал по старинке, надеясь выйти на причину вылета. На первый раз вылезло это:

FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...р s.t.a.l.k.e.r\shoc\gamedata\scripts\rx_wmgr.script:561: C stack overflow
 

stack trace:

Scheduler tried to update object pri_monolith_roof2
 
FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...e.r\shoc\gamedata\scripts\state_mgr_animation.script:632: C stack overflow

Но насколько я помню, вылеты по переполнению стека рандомны... Думаю, ладно, запущу еще раз. И вот тут все, ни вылетов ни подозрительной активности в логе. На всякий случай сравнил скрипты из текущей версии сборки и последним сохраненным билдом, но отличия там мелкие. Прошелся спец. утилитой для проверки скриптов на наличие банальных ошибок\опечаток - все ок. Где искать причину?

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

there is no section [hit@altar_monolith] for npc [pri_monolith_28]

 

Какое слово непонятно ?

Кто-то где-то хочет [hit@altar_monolith], но не находит.

Соответственно, ищем, где ее спрашивают, тупо, поиском по всем файлам, а дальше думаем: или оторвать совсем, или что-то куда-то дописать.

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

 

 

Закомментировал по старинке, надеясь выйти на причину вылета.

Вообще не то, что нужно сделать. Возможно как раз тут и есть истинная причина.

 

 

Но насколько я помню, вылеты по переполнению стека рандомны...

Ни разу. Ты понимаешь из-за чего бывает переполнение стека?

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

@Dennis_Chikin, сомневаюсь, что там какие-то проблемы с логикой. Вся Припять у меня оригинальная. Все НПС со своей родной логикой, гулагами и тп. И никаких изменений в скрипты, относящиеся к этой локации я не производил. Хотя, на всякий случай проверяю сейчас данный "нюанс". upd. Лог жалуется на вот этот кусок:

 

 

    -- prayers (молящиеся вокруг алтаря)
    for i, v in pairs({14, 14, 14, 13, 8, 8}) do
        t = { section = "logic@" .. gname .. "_prayer" .. i, 
            idle = 0,
            prior = v, state = {0,1},
            squad = squad, group = groups[1],
            in_rest = in_r, out_rest = "pri_monolith_base_altar_restr",
            online = "{+pri_monolith_spawn2}",
            predicate = m_predicate_r
        } table.insert(sj, t)
        ltx = ltx.. "[logic@" .. gname .. "_prayer" .. i .. "]\n" ..
                    "active              = walker@" .. gname .. "_prayer" .. i .. "\n" ..
                    "combat_ignore       = combat_ignore\n" ..
					"on_hit				 = hit@altar_monolith\n" ..
					"on_death			 = hit@altar_monolith\n" ..

                    "[walker@" .. gname .. "_prayer" .. i .. "]\n" ..
                    "path_walk           = prayer" .. i .. "_walk\n" ..
                    "path_look           = prayer_look" .. math.random(1, 2) .. "\n" ..
                    "danger              = danger@monolith\n" ..
                    "combat_ignore_cond  = {-pri_monolith_base_attack_altar_zone}\n"
    end 

 

 

в gulag_pripyat.script (выташил из распакованного бейкапа чистой игры. Ибо у меня он не юзается): Логично, что проблема вылезла бы и на "чистой" игре. Это очень для меня странно. 

 

@Карлан, я ни разу не скриптер и в подобном ничего не понимаю... Все что мне известно: "Данный вылет встречается редко. Лечится обычной переигровкой. Решения не имеет. (во всяком случае, так говорили раньше. А эта проблема уже давно преследует тот-же АИ пак для ТЧ. Особенно, когда НПС "хватаются" за подствольники.)

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

И ГДЕ здесь написано [hit@altar_monolith] ? А также все остальное, что в этом случае полагается ? [walker@...] - вижу, [hit@...] - не вижу.

Изменено пользователем Dennis_Chikin
  • Согласен 1
Ссылка на комментарий

@Dennis_Chikin, если ты про .ltx файл логики, то вот он (опять же, оригинальный):

 

 

;--------------------------------------------------------------------------
; стандартный диалог
;--------------------------------------------------------------------------
[meet@def]
meet_state      = 2| wait
meet_state_wpn  = 2| wait
victim          = 2| actor
victim_wpn      = 2| actor
use             = true
use_wpn         = true

;--------------------------------------------------------------------------
; диалог лидера
;--------------------------------------------------------------------------
[meet@leader]
meet_dialog     = {-pri_followers_actor_leave} pri_followers_start_dlg
meet_state      = 25| {+pri_followers_actor_leave} guard, hello@ {+pri_followers_actor_leave} wait, {+pri_wave7_end -pri_show_zones} pri_followers_final_phrase2, talk_hello | 5| guard@ wait
meet_state_wpn  = 25| {+pri_followers_actor_leave} guard, hello@ {+pri_followers_actor_leave} wait, {+pri_wave7_end -pri_show_zones} pri_followers_final_phrase2, talk_hello | 5| guard@ wait
victim          = 25| actor
victim_wpn      = 25| actor
use             = true
use_wpn         = true

;--------------------------------------------------------------------------
; отключенная реакция на звук, тела и хит
;--------------------------------------------------------------------------
[danger@ignore]
ignore_types                = corpse
ignore_distance_sound       = 2
danger_inertion_time_sound  = 5000
;ignore_distance_hit        = 1

;--------------------------------------------------------------------------
; отключенная реакция на звук
;--------------------------------------------------------------------------
[danger@sound_small]
ignore_distance_sound   = 20

;--------------------------------------------------------------------------
; отключенная реакция на звук
;--------------------------------------------------------------------------
[danger@sound_middle]
ignore_distance_sound   = 40

;-------------------------------------------------------------------------------------------------
;-- Followers
;-------------------------------------------------------------------------------------------------
[followers_hit]
;on_info                 = {=hit_by_actor} %+pri_followers_actor_enemy%

[followers_death]
on_info                 = {=gulag_population_le(pri_followers:2)} %+pri_undeground_respawn_start =change_leader%, %=change_leader%

;-------------------------------------------------------------------------------------------------
;--- LEADER: WAIT --------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------------
[logic@pri_followers_leader_wait]
active              = remark@pri_followers_leader_wait
combat_ignore       = combat_ignore
on_hit              = followers_hit
on_death            = followers_death

[remark@pri_followers_leader_wait]
path_walk           = leader_hello_walk
anim                = ward ;wait
target              = logic@pri_followers_bomber_wait ;pri_followers_leader_hello_look, 0
on_actor_dist_le_nvis = 20 | remark@pri_followers_leader_wait_phrase1
wounded             = wounded@ignore
meet                = no_meet ;meet@def
danger              = danger@ignore

[remark@pri_followers_leader_wait_phrase1]
anim                = ward ;wait
snd                 = pri_followers_leader_phrase1_1
tips                = pri_followers_leader_phrase1_1
target              = logic@pri_followers_bomber_wait ;pri_followers_leader_hello_look, 0
on_signal           = sound_end| remark@pri_followers_leader_wait_actor %+pri_followers_leader_phrase1_end%
wounded             = wounded@ignore
meet                = no_meet ;meet@def
danger              = danger@ignore

[remark@pri_followers_leader_wait_actor]
anim                = guard
target              = logic@pri_followers_bomber_wait ;actor
on_actor_dist_le_nvis = 15 | remark@pri_followers_leader_wait_phrase2 %+pri_followers_mission_accept%
on_timer            = 15000| remark@pri_followers_leader_wait_phrase3 %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;meet@def
danger              = danger@ignore

[remark@pri_followers_leader_wait_phrase2]
anim                = guard_na
snd                 = pri_followers_leader_phrase1_2
;tips                = pri_followers_leader_phrase1_2
target              = actor
on_signal           = sound_end| remark@pri_followers_leader_wait_phrase3
wounded             = wounded@ignore
meet                = no_meet ;meet@def
danger              = danger@ignore

[remark@pri_followers_leader_wait_phrase3]
anim                = guard_na
snd                 = pri_followers_leader_phrase1_3
;tips                = pri_followers_leader_phrase1_3
target              = logic@pri_followers_bomber_wait
on_signal           = sound_end| %+pri_followers_start%
wounded             = wounded@ignore
meet                = no_meet ;meet@def
danger              = danger@ignore

[remark@pri_followers_leader_wait_switch]
anim                = guard
target              = pri_followers_leader_hello_look, 0
wounded             = wounded@ignore
meet                = no_meet
danger              = danger@ignore

;--- LEADER: WAVE1 ------------------------------------------------------------------------------
[logic@pri_followers_leader_wave1]
active              = walker@pri_followers_leader_wave1_wait
on_hit              = followers_hit
on_death            = followers_death

[walker@pri_followers_leader_wave1_wait]
path_walk           = wave1_leader_walk2
path_look           = wave1_leader_look2
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_leader_wave1 %+pri_helicopters_start%
on_info             = {+pri_wave1_start} walker@pri_followers_leader_wave1 %+pri_helicopters_start%
;on_actor_dist_ge_nvis = 70 | %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[walker@pri_followers_leader_wave1]
path_walk           = wave1_leader_walk1
path_look           = wave1_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
;on_info             = {+pri_followers_heli_look} remark@pri_followers_leader_wave1
;on_actor_dist_ge_nvis = 70 | %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[remark@pri_followers_leader_wave1]
anim                = guard
target              = 801
on_timer            = 5000 | walker@pri_followers_leader_wave1_cont
;on_actor_dist_ge_nvis = 70 | %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[walker@pri_followers_leader_wave1_cont]
path_walk           = wave1_leader_walk1
path_look           = wave1_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave1_start} %+pri_wave1_start%
;on_actor_dist_ge_nvis = 70 | %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

;--- LEADER: WAVE2 ------------------------------------------------------------------------------
[logic@pri_followers_leader_wave2]
active              = walker@pri_followers_leader_wave2_wait
on_hit              = followers_hit
on_death            = followers_death

[walker@pri_followers_leader_wave2_wait]
path_walk           = wave2_leader_walk1
path_look           = wave2_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_leader_wave2 %+pri_wave2_start_phrase%
on_info             = {+pri_wave2_start} walker@pri_followers_leader_wave2 %+pri_wave2_start_phrase%
;on_actor_dist_ge_nvis = 70 | %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[walker@pri_followers_leader_wave2]
path_walk           = wave2_leader_walk2
path_look           = wave2_leader_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave2_start} %+pri_wave2_start%
;on_actor_dist_ge_nvis = 70 | %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

;--- LEADER: WAVE3 ------------------------------------------------------------------------------
[logic@pri_followers_leader_wave3]
active              = walker@pri_followers_leader_wave3_wait
combat_ignore       = combat_ignore
on_hit              = followers_hit
on_death            = followers_death

[walker@pri_followers_leader_wave3_wait]
path_walk           = wave3_leader_walk1
path_look           = wave3_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_leader_wave3 %+pri_wave3_start%
on_info             = {+pri_wave3_start} walker@pri_followers_leader_wave3
;on_actor_dist_ge_nvis = 70 | %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
danger              = danger@ignore
combat_ignore_cond  = {!fighting_actor}

[walker@pri_followers_leader_wave3]
path_walk           = wave3_leader_walk2
path_look           = wave3_leader_look2
def_state_moving1   = assault ;sprint
def_state_moving2   = assault ;sprint
on_timer            = 3000 | remark@pri_followers_leader_wave3_fight
;on_actor_dist_ge_nvis = 70 | %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
danger              = danger@ignore
combat_ignore_cond  = {!fighting_actor}

[remark@pri_followers_leader_wave3_fight]
anim                = threat_fire
target              = 807
on_timer            = 5000 | walker@pri_followers_leader_wave3
;on_actor_dist_ge_nvis = 70 | %+pri_followers_actor_leave%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
danger              = danger@ignore
combat_ignore_cond  = {!fighting_actor}

;--- LEADER: WAVE4 ------------------------------------------------------------------------------
[logic@pri_followers_leader_wave4]
active              = walker@pri_followers_leader_wave4_wait
combat_ignore       = combat_ignore
on_hit              = followers_hit
on_death            = followers_death

[walker@pri_followers_leader_wave4_wait]
path_walk           = wave4_leader_walk1
path_look           = wave4_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_leader_wave4 %+pri_wave4_start_phrase%
on_info             = {+pri_wave4_start} walker@pri_followers_leader_wave4 %+pri_wave4_start_phrase%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
combat_ignore_cond  = {=check_fighting(820:821)}

[walker@pri_followers_leader_wave4]
path_walk           = wave4_leader_walk2
path_look           = wave4_leader_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave4_start} %+pri_wave4_start%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

;--- LEADER: WAVE5 ------------------------------------------------------------------------------
[logic@pri_followers_leader_wave5]
active              = walker@pri_followers_leader_wave5_wait
on_hit              = followers_hit
on_death            = followers_death

[walker@pri_followers_leader_wave5_wait]
path_walk           = wave5_leader_walk1
path_look           = wave5_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_leader_wave5
on_info             = {+pri_wave5_start} walker@pri_followers_leader_wave5
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[walker@pri_followers_leader_wave5]
path_walk           = wave5_leader_walk2
path_look           = wave5_leader_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave5_start} %+pri_wave5_start%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

;--- LEADER: WAVE6 ------------------------------------------------------------------------------
[logic@pri_followers_leader_wave6]
active              = walker@pri_followers_leader_wave6_wait
on_hit              = followers_hit
on_death            = followers_death

[walker@pri_followers_leader_wave6_wait]
path_walk           = wave6_leader_walk1
path_look           = wave6_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_leader_wave6
on_info             = {+pri_wave6_start} walker@pri_followers_leader_wave6
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[walker@pri_followers_leader_wave6]
path_walk           = wave6_leader_walk2
path_look           = wave6_leader_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave6_start} %+pri_wave6_start%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

;--- LEADER: WAVE7 ------------------------------------------------------------------------------
[logic@pri_followers_leader_wave7]
active              = walker@pri_followers_leader_wave7_wait
combat_ignore       = combat_ignore
on_hit              = followers_hit
on_death            = followers_death

[walker@pri_followers_leader_wave7_wait]
path_walk           = wave7_leader_walk1
path_look           = wave7_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
;on_signal           = syn | {=pri_followers_can_hear} remark@pri_followers_leader_wave7_phrase, walker@pri_followers_leader_wave7
;on_info             = {+pri_wave7_start =pri_followers_can_hear} remark@pri_followers_leader_wave7_phrase, {+pri_wave7_start} walker@pri_followers_leader_wave7
on_signal           = syn | %+pri_wave7_leader_phrase_start%
on_info             = {+pri_wave7_leader_phrase_end} walker@pri_followers_leader_wave7
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[walker@pri_followers_leader_wave7]
path_walk           = wave7_leader_walk2
path_look           = wave7_leader_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave7_start} %+pri_wave7_start%
on_info				= {-pri_wave7_sound_start =pri_follower_see_ambush} %+pri_wave7_sound_start%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
combat_ignore_cond  = {-pri_wave7_start}

;--- LEADER: WAVE8 ------------------------------------------------------------------------------
[logic@pri_followers_leader_wave8]
active              = walker@pri_followers_leader_wave8_wait
on_hit              = followers_hit
on_death            = followers_death

[walker@pri_followers_leader_wave8_wait]
path_walk           = wave8_leader_walk1
path_look           = wave8_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
on_actor_dist_ge_nvis = 70 | walker@pri_followers_leader_wave8_leave
wounded             = wounded@ignore
meet                = meet@leader
danger              = danger@ignore

[walker@pri_followers_leader_wave8_leave]
path_walk           = wave8_leader_walk1
path_look           = wave8_leader_look1
def_state_moving1   = assault
def_state_moving2   = assault
on_timer            = 35000 | %+pri_followers_scene_end%
wounded             = wounded@ignore
meet                = meet@leader
danger              = danger@ignore


;-------------------------------------------------------------------------------------------------
;--- BOMBER: KAMP --------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------------
[death@bomber]
on_info = {=killed_by_actor} %+pri_followers_actor_enemy +pri_bomber_dead%, %+pri_bomber_dead% ; =pri_drop_rpg_ammo%

[logic@pri_followers_bomber_wait]
active              = remark@pri_followers_bomber_wait
;on_death            = followers_death ;death@bomber
on_hit              = followers_hit

[remark@pri_followers_bomber_wait]
path_walk           = wait_bomber_walk
anim                = guard
target              = logic@pri_followers_leader_wait
on_info             = {+pri_followers_leader_phrase1_end} remark@pri_followers_bomber_wait_na
wounded             = wounded@ignore
meet                = no_meet ;meet@def
danger              = danger@ignore

[remark@pri_followers_bomber_wait_na]
path_walk           = wait_bomber_walk
anim                = guard_na
target              = logic@pri_followers_leader_wait
wounded             = wounded@ignore
meet                = no_meet ;meet@def
danger              = danger@ignore

;--- BOMBER: WAVE1 ------------------------------------------------------------------------------
[logic@pri_followers_bomber_wave1]
active              = walker@pri_followers_bomber_wave1_wait
;on_death            = death@bomber
on_hit              = followers_hit

[walker@pri_followers_bomber_wave1_wait]
path_walk           = wave1_bomber_walk2
path_look           = wave1_bomber_look2
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_bomber_wave1 %+pri_helicopters_start%
on_info             = {+pri_wave1_start} walker@pri_followers_bomber_wave1 %+pri_helicopters_start -pri_bomber_dead%, %-pri_bomber_dead%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
danger              = danger@ignore
combat_ignore_cond  = {!check_fighting(808) !fighting_actor} ;always

[walker@pri_followers_bomber_wave1]
path_walk           = wave1_bomber_walk1
path_look           = wave1_bomber_look1
def_state_moving1   = assault
def_state_moving2   = assault
wounded             = wounded@ignore
meet                = no_meet ;no_meet
combat_ignore_cond  = {!check_fighting(808) !fighting_actor} ;always

;--- BOMBER: WAVE2 ------------------------------------------------------------------------------
[logic@pri_followers_bomber_wave2]
active              = walker@pri_followers_bomber_wave2_wait
;on_death            = death@bomber
on_hit              = followers_hit

[walker@pri_followers_bomber_wave2_wait]
path_walk           = wave2_bomber_walk1
path_look           = wave2_bomber_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_bomber_wave2
on_info             = {+pri_wave2_start} walker@pri_followers_bomber_wave2 %-pri_bomber_dead%, %-pri_bomber_dead%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[walker@pri_followers_bomber_wave2]
path_walk           = wave2_bomber_walk2
path_look           = wave2_bomber_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave2_start} %+pri_wave2_start%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

;--- BOMBER: WAVE3 ------------------------------------------------------------------------------
[logic@pri_followers_bomber_wave3]
active              = walker@pri_followers_bomber_wave3_wait
;on_death            = death@bomber
on_hit              = followers_hit
;combat_ignore       = combat_ignore

[walker@pri_followers_bomber_wave3_wait]
path_walk           = wave3_bomber_walk1
path_look           = wave3_bomber_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_info             = {+pri_wave3_btr_arrived} walker@pri_followers_bomber_wave3_fire_place %-pri_bomber_dead =pri_give_ammo_og7b%, %-pri_bomber_dead%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
danger              = danger@ignore
combat_ignore_cond  = {!fighting_actor}

[walker@pri_followers_bomber_wave3_fire_place]
path_walk           = wave3_bomber_walk2
path_look           = wave3_bomber_look2
def_state_moving1   = sneak_run ;assault
def_state_moving2   = sneak_run ;assault
on_signal           = arrived | remark@pri_followers_bomber_wave3_fire %+pri_wave3_bomber_on_position%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
danger              = danger@ignore
combat_ignore_cond  = {!fighting_actor}

[remark@pri_followers_bomber_wave3_fire]
anim                = hide_fire
target              = 807
on_timer            = 2700 | walker@pri_followers_bomber_wave3_die ;%=hit_npc(807:bip01_spine1:6:2000)%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
danger              = danger@ignore
combat_ignore_cond  = {!fighting_actor}

[walker@pri_followers_bomber_wave3_die]
path_walk           = wave3_bomber_walk1
path_look           = wave3_bomber_look1
def_state_moving1   = assault ;sprint
def_state_moving2   = assault ;sprint
on_timer            = 3500 | walker@pri_followers_bomber_wave3_fire_place
wounded             = wounded@ignore
meet                = no_meet ;no_meet
danger              = danger@ignore
combat_ignore_cond  = {!fighting_actor}

;--- BOMBER: WAVE4 ------------------------------------------------------------------------------
[logic@pri_followers_bomber_wave4]
active              = walker@pri_followers_bomber_wave4_wait
;on_death            = death@bomber
on_hit              = followers_hit
;combat_ignore       = combat_ignore

[walker@pri_followers_bomber_wave4_wait]
path_walk           = wave4_bomber_walk1
path_look           = wave4_bomber_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_bomber_wave4
on_info             = {+pri_wave4_start} walker@pri_followers_bomber_wave4 %-pri_bomber_dead%, %-pri_bomber_dead%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
combat_ignore_cond  = {=check_fighting(820:821)}

[walker@pri_followers_bomber_wave4]
path_walk           = wave4_bomber_walk2
path_look           = wave4_bomber_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave4_start} %+pri_wave4_start%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
;combat_ignore_cond  = {!check_fighting(804:805)} ;always

;--- BOMBER: WAVE5 ------------------------------------------------------------------------------
[logic@pri_followers_bomber_wave5]
active              = walker@pri_followers_bomber_wave5_wait
;on_death            = death@bomber
on_hit              = followers_hit
;combat_ignore       = combat_ignore

[walker@pri_followers_bomber_wave5_wait]
path_walk           = wave5_bomber_walk1
path_look           = wave5_bomber_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_bomber_wave5
on_info             = {+pri_wave5_start} walker@pri_followers_bomber_wave5 %-pri_bomber_dead%, %-pri_bomber_dead%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
;combat_ignore_cond  = {!check_fighting(804:805)} ;always

[walker@pri_followers_bomber_wave5]
path_walk           = wave5_bomber_walk2
path_look           = wave5_bomber_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave5_start} %+pri_wave5_start%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
;combat_ignore_cond  = {!check_fighting(804:805)} ;always

;--- BOMBER: WAVE6 ------------------------------------------------------------------------------
[logic@pri_followers_bomber_wave6]
active              = walker@pri_followers_bomber_wave6_wait
;on_death            = death@bomber
on_hit              = followers_hit
;combat_ignore       = combat_ignore

[walker@pri_followers_bomber_wave6_wait]
path_walk           = wave6_bomber_walk1
path_look           = wave6_bomber_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
on_signal           = syn | walker@pri_followers_bomber_wave6
on_info             = {+pri_wave6_start} walker@pri_followers_bomber_wave6 %-pri_bomber_dead%, %-pri_bomber_dead%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[walker@pri_followers_bomber_wave6]
path_walk           = wave6_bomber_walk2
path_look           = wave6_bomber_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave6_start} %+pri_wave6_start%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

;--- BOMBER: WAVE7 ------------------------------------------------------------------------------
[logic@pri_followers_bomber_wave7]
active              = walker@pri_followers_bomber_wave7_wait
;on_death            = death@bomber
on_hit              = followers_hit
;combat_ignore       = combat_ignore

[walker@pri_followers_bomber_wave7_wait]
path_walk           = wave7_bomber_walk1
path_look           = wave7_bomber_look1
def_state_moving1   = assault
def_state_moving2   = assault
team                = followers
;on_signal           = syn | walker@pri_followers_bomber_wave7
;on_info             = {+pri_wave7_start} walker@pri_followers_bomber_wave7
on_info             = {+pri_wave7_leader_phrase_end} walker@pri_followers_bomber_wave7 %-pri_bomber_dead%, %-pri_bomber_dead%
wounded             = wounded@ignore
meet                = no_meet ;no_meet

[walker@pri_followers_bomber_wave7]
path_walk           = wave7_bomber_walk2
path_look           = wave7_bomber_look2
def_state_moving1   = assault
def_state_moving2   = assault
on_signal           = arrived | {-pri_wave7_start} %+pri_wave7_start%
wounded             = wounded@ignore
meet                = no_meet ;no_meet
combat_ignore_cond  = {-pri_wave7_start}

;--- BOMBER: WAVE8 ------------------------------------------------------------------------------
[logic@pri_followers_bomber_wave8]
active              = walker@pri_followers_bomber_wave8_wait
on_hit              = followers_hit
;on_death            = followers_death

[walker@pri_followers_bomber_wave8_wait]
path_walk           = wave8_bomber_walk1
path_look           = wave8_bomber_look1
def_state_moving1   = assault
def_state_moving2   = assault
meet                = no_meet ;no_meet
wounded             = wounded@ignore

;-------------------------------------------------------------------------------------------------
;--- Выстрел по молящимся
;-------------------------------------------------------------------------------------------------
[hit@altar_monolith]
on_info = %+pri_monolith_base_attack_altar_zone%
 

 

 

[hit@altar_monolith] в самом конце.

 

И сам НПС в all.spawne:

 

 

[6388]

; cse_abstract properties
section_name = stalker_monolith
name = pri_monolith_28
position = -7.19472694396973, 2.78197240829468, 203.175796508789
direction = -8.54346671985695e-006, -1.50119984149933, -2.06313507078448e-006
id = 65535
version = 118
script_version = 7
spawn_id = 6388

; cse_alife_trader_abstract properties
money = 5000
character_profile = pri_monolith_regular

; cse_alife_object properties
game_vertex_id = 2200
distance = 8.3999996
level_vertex_id = 93425
object_flags = 0xffffffff
custom_data = <<END
[smart_terrains]
pri_monolith = true
END

; cse_visual properties
visual_name = actors\monolit\stalker_mo_head_1

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 18
g_group = 15
health = 1.7
dynamic_out_restrictions = 
dynamic_in_restrictions = 

; cse_alife_monster_abstract properties
equipment_preferences = 2, 2, 2, 0, 2
main_weapon_preferences = 1, 0, 0, 0

; cse_ph_skeleton properties

; se_stalker properties
squad_id = 
upd:health = 1.7
upd:timestamp = 0x64383
upd:creature_flags = 0x84
upd:position = -7.19472694396973, 2.78197240829468, 203.175796508789
upd:o_torso = -1.50119984149933, -8.54346671985695e-006, 0
upd:g_squad = 18
upd:g_group = 15

; cse_alife_human_stalker properties
upd:start_dialog =  

 

 

 

З.Ы. При комментировании в скрипте гулага строк:

"on_hit				 = hit@altar_monolith\n" ..
"on_death			 = hit@altar_monolith\n" ..

вылет исчезает.

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

Теперь осталось понять, тот ли это файл. ;)

Впрочем, очевидно, что таки да, строчки, которые эту секцию хотят - не нужны.

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

@Dennis_Chikin, тогда их безнаказанно можно будет расстреливать :).
Как вариант (в стиле пыс):


gulags.pri_monolith.ltx = ltx.."[hit@altar_monolith]\n"..
"on_info = {-pri_monolith_base_attack_altar_zone} %+pri_monolith_base_attack_altar_zone%\n"

И туда им и дорога.

Кстати, а где у них игнорирование дэнжеров и попаданий ? Собственно, полагаю, что именно по этому до вылета добираются не все. dc

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...