☣Связанные Зоной☣Форум
?
  
  • Страница 1 из 1
  • 1
Модератор форума: Кракен, [Дядька]_ЯR  
Форум » S.T.A.L.K.E.R. - Зов Припяти » Модостроение » Логики НПС и их описание
Логики НПС и их описание
Не в Зоне slavapro




<!>--------------Схема [Walker]-------------------->

Walker.

Настройка:

На карту для каждого walker-а нужно поставить:
1) Путь path_walk, по которому walker ходит.
2) Путь path_look, состоящий из точек, в которые walker смотрит.

Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.

[walker]
team = …
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.
path_walk = …
имя пути, описанного в п. 1
path_look = …
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look

Правила расстановки флажков в путях рассмотрим на нескольких примерах:
[править]
Пример 1:

Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом:

Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.
У каждого вейпоинта есть имя: wp00, wp01 и т.д.
Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д.

NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»! [править]
Пример 2:

Разговор персонажа.
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:
s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую. [править]
Пример 3:

В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.
[править]
Пример 4:

усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:

Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.

Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.

Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.

Если точка path_walk не помечена флажком, персонаж проходит ее не останавливаясь.

Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.

По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:

p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400). Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100. По умолчанию у всех точек p = 100.

t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)
[править]
Пример 5:

В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.

По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.

Если требуется другая анимация, можно ее указать с помощью флажка:

a = имя_анимации (по умолчанию idle).
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет с оружием наизготовку и т.д.

NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!

<!>-------------------------------Схема [walker/logic]------------------------>
Схема walker

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

[walker]
path_walk = <имя пути>- основной путь, по которому ходит NPC
path_look = <имя пути>- путь, куда смотрит NPC
team - команда для синхронизации

В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.
def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)
def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)
def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)
def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.

Файл: \gamedata\scripts\xr_walker.script

<!>--------------------------------Доп.схема [remark]--------------------------->
Схема используется для синхронизации\связки других схем.

[remark] snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет snd = звук ремарка, по умолчанию nil anim = анимация ремарка, по умолчанию wait target = Куда смотрит сталкер. Есть следующие варианты
story_id – числовое значение
actor – без комментариев
nil – позиция вычисленная АИ автоматически
<имя работы>,<имя гулага> смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).
Пример:
target = logic@cit_killers_base_guard, cit_killers
, - можно указывать смотреть в вершину патрульного пути (<имя пути>, <имя точки>).

Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.

Стандартные сигналы для remark:
sound_end – по окончании проигрывания звуковой схемы
anim_end – по окончании проигрывания анимации
action_end – по окончании проигрывания и того и другого, если они синхронизированы

Пример синхронизации анимации и звука в схеме Remark:

[remark]
anim = анимация
snd = звук
snd_anim_sync = true
on_signal = action_end | следующая схема
<!>--------------------------------Cхема [sleeper]--------------------------->
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки.

[sleeper]
path_main = <имя пути> wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)

NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).

Файл: \gamedata\scripts\xr_sleeper.script

<!>--------------------------------Cхема [kamp]--------------------------->
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.

[kamp]
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться. radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)
def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)

Файл: \gamedata\scripts\xr_kamp.script

NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = _task
path_walk = _task

Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.

<!>--------------------------------Cхема [camper]--------------------------->
Схема camper

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

[camper]
path_walk = patrol_path
path_look = patrol_path
radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам. no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов. def_state_moving = состояние из стейт менеджера
Состояние, в котором мы движемся на ближайшую точку пути при враге def_state_moving_fire = состояние из стейт менеджера (sneak_fire)
Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути. def_state_campering = состояние из стейт менеджера (hide)
Состояние, в котором мы ожидаем врага, находясь на пути def_state_campering_fire = состояние из стейт менеджера (hide_fire)
Состояние, в котором мы отстреливаемся от врага, находясь на пути attack_sound = имя_звуковой_темы
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме "fight_attack". Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =
shoot = тип.
Задаем тип стрельбы. Возможные значения - always|none|terminal
always - значение по умолчанию, стреляет всегда, когда можно
none - не стреляет вообще.
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.

NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.

<!>--------------------------------Cхема [sniper]--------------------------->
Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.
NB! Ставить снайперу только 2 точки look

В кастом дате кемпера прописать:
sniper = true

Файл: \gamedata\scripts\xr_camper.script

<!>--------------------------------Cхема [follower]--------------------------->
В custom_data прописан как follower NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.

[follower]
leader = story id лидера из game.ltx (число!)
formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров. state_if_leader_in_meet. Это есть строка с именем состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet. anim_walk = state (состояние, в котором фолловер идет за лидером) anim_run = state (состояние, в котором фолловер бежит за лидером) anim_sprint = state (состояние, в котором фолловер спринтует за лидером)
Файл: \gamedata\scripts\xr_ attendant.script
ВНИМАНИЕ!!!!!! НЕ ЗАБЫТЬ ПРОПИСАТЬ: [smart_terrains] none = true ИНАЧЕ ЗАСОСЁТ НПС В ГУЛАГ И НЕ КУДА ОН НЕ ПОЙДЁТ
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию логики в файле скрипта. Пример:
t = { section = "logic@bar_arena_follower_2",
idle = 0,
prior = 7, state = {0}, squad = squad, group = groups[0],
in_rest = "", out_rest = "",
dependent = "logic@bar_arena_leader",
predicate = function(obj)
return obj:character_community() == "dolg"
end

<!>--------------------------------Cхема [zoneguard]--------------------------->
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока

[zoneguard]
path_walk = путь перемещения path_look = путь обзора
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока) zone_guard = имя зоны, в пределах которой игрок будет атакован
zone_warn = имя зоны, в пределах которой начинать разговор с игроком walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team) no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа ignore_friends = true, будет игнорировать дружественных ему персонажей. ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам. anim = какую отыгрывает анимацию, если игрок ему не враждебен. snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией
Файл: \gamedata\scripts\xr_zoneguard.script

<!>--------------------------------Cхема [wounded]--------------------------->
[logic]
wounded = wounded

[walker]
wounded = wounded

[wounded]
hp_state = HP|condstate@condsound|HP|condstate@condsound
hp_state_see = HP|condstate@condsound|HP|condstate@condsound
psy_state = PSY|condstate@condsound|PSY|condstate@condsound
hp_victim = HP|condvictim|HP|condvictim
hp_cover = HP|condbool|HP|condbool
hp_fight = HP|condbool|HP|condbool
syndata = state@sound|state@sound
help_dialog = story_id help_start_dialog = story_id
Где:
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока
Condsound – кондлист, возвращающий саунд тему.
HP – пороговые значение здоровья персонажа
PSY – пороговые значения пси здоровья персонажа
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения:
nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.
Condbool – кондлист, возвращаюзий true либо false.

Значения полей:
hp_state – поведение персонажа когда он не видит игрока
hp_state_see – поведение персонажа, когда он видит игрока
psy_state – поведение персонажа при псиатаках
hp_victim – куда смотреть, в зависимости от ХП
hp_cover – идти в укрытие или нет, в зависимости от ХП
hp_fight – разрешено воевать или нет, в зависимости от ХП syndata – синхропары для красоты.
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition:
dialogs.allow_wounded_dialog.

Пример. В качестве примера взята дефолтная настройка.

hp_state = 30|help_me@help|10|wounded_heavy@help_heavy
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20|
{=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy
hp_victim = 30|actor|10|nil
hp_cover = 30|true|10|false
hp_fight = 30|true|10|false
syndata = wounded@help

Где:
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.

Файл: \gamedata\scripts\xr_wounded.script

<!>--------------------------------Cхема [rest]--------------------------->
Схема rest

Чувак гуляет, хавает, спит.
Пока нормально не работает.
Файл: \gamedata\scripts\xr_rest.script

<!>--------------------------------Cхема [heli_hunter]--------------------------->
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:

[camper@bar_freedom_attack_sniper_1]
path_walk = camper_1_walk
path_look = camper_1_look
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1
%=bar_freedom_angry_actor%
meet_talk_enabled = true
meet_dialog = bar_svoboda_dialog
heli_hunter = {-bar_ecolog_crush_heli_down} true, false

Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.

<!>--------------------------------Cхема [Patrol]--------------------------->
Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:

[patrol]
path_walk = path_walk
path_look = path_look
formation = back
commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один) move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib formation - описывет способ построения и не является обязательным. Возможны следующие варианты: back - мужики идут чуть позади командира в два ряда (по умолчанию) line - шеренга around - вокруг командира
При остановке командора в meet мужики останавливаются.

Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом: ret=0...2 0 - линия 1 – вокруг старшего 2 – по бокам
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.
Что еще не сделано или глючит: - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе) - все идут молча (когда будет манагер баек, то сделаем) - командор пока не отдает команд (нет озвучки) - не рекомендуется включать спринт (глючит) [править]




Форум » S.T.A.L.K.E.R. - Зов Припяти » Модостроение » Логики НПС и их описание
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Авторское право на игру и использованные в ней материалы принадлежат GSC Game World.
Любое использование материалов сайта возможно только с разрешения Администрации.
Для просмотра сайта рекомендуем использовать Яндекс.Браузер
Copyright soc-team © 2014.

   Бесплатный анализ сайта
Общий канал
Общий канал
Сталкер, мы кого попало не пропускаем.
0
Группировки


Вступить

Обновления форума

Поиск по сайту

Лучшие сталкеры
slavapro
Постов: 544
Репутация: 11
Virus
Постов: 348
Репутация: 1
KiRiYaNoV
Постов: 319
Репутация: 1
p203w
Постов: 120
Репутация: 0
Кракен
Постов: 66
Репутация: 2

Кто нас сегодня посетил

Ваш любимый препарат?

Опрошено:30
Архив опросов

Братья по оружию
 
Новости, общение и многое другое,<br> у нас на survarium-delta.ucoz.ru  Top Life-Stalker.RU
 Сайт создан не для заработка, а для вас Заходите Сталкеры. Оцените наш проект)ждем вас на http://DOLG-vs-SVOBODE.3dn.ru
Новости общение и многое другое, у нас на exelent731.ucoz.ru