Настройка логики (часть 1), Настройка логики

Материал из Mod Wiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 09:48, 9 декабря 2007 (править)
BAC9-FLCL (Обсуждение | вклад)
(3.1. Система флагов (path_walk, path_look))
← К предыдущему изменению
Текущая версия (09:49, 9 декабря 2007) (править) (отменить)
BAC9-FLCL (Обсуждение | вклад)
Настройка логики» переименована в «Настройка логики (часть 1)»)
 
Строка 1: Строка 1:
-=Настройки логики=+#REDIRECT [[Настройка логики (часть 1)]]
- +
-==3.1. Система флагов (path_walk, path_look)==+
-В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем "wp00": wp00|flag1|flag2.+
- +
-* '''Флаги точек пути path_walk''':+
- +
-''a=state''+
- +
- Выбирает состояние тела при перемещении (Только из раздела – Ходячие состояния). Список состояний можно взять в gamedata\scripts\state_lib.script.+
- +
-''p=percent''+
- +
- Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.+
- +
-''sig=name''+
- +
- Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look.+
- +
-* '''Флаги точек пути path_look''':+
- +
-''a=state''+
- +
- Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)+
- Список состояний можно взять в gamedata\scripts\state_lib.script+
- +
-''t=msec''+
- +
- Время в миллисекундах, которое персонаж должен смотреть в заданную точку. ‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000. Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.+
- +
-''sig=name''+
- +
- После поворота в точку path_look, установить сигнал с именем name.+
- +
-''syn''+
- +
- Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.+
- +
-''sigtm=signal''+
- +
- Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. +
- +
-В пути path_look можно сделать: ''wp00|a=press|t=0|sigtm=pressed'' <br>+
-А затем переключить схему: ''on_signal = pressed | другая_схема''+
- +
-==3.1.1. Более подробное описание путей. ==+
- +
-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 используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!+
- +
- +
-==3.2. Схемы поведения сталкеров.==+
-Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.+
-В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.+
-3.2.1. Схема 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+
-==3.2.2. Схема 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+
- <path_name>, <point_number> - можно указывать смотреть в вершину патрульного пути (<имя пути>, <имя точки>).+
- +
-Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.+
- +
-Стандартные сигналы для remark: +
-sound_end – по окончании проигрывания звуковой схемы+
-anim_end – по окончании проигрывания анимации+
-action_end – по окончании проигрывания и того и другого, если они синхронизированы+
- +
-Пример синхронизации анимации и звука в схеме Remark:+
-[remark]+
-anim = анимация+
-snd = звук+
-snd_anim_sync = true+
-on_signal = action_end | следующая схема+
-3.2.3. Схема sleeper+
-Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. +
- +
-[sleeper]+
-path_main = <имя пути>+
-*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)+
- +
-NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).+
- +
-Файл: \gamedata\scripts\xr_sleeper.script+
- +
-==3.2.4. Схема kamp==+
-Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.+
- +
- [kamp]+
-center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.+
-*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)+
-*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)+
- +
-Файл: \gamedata\scripts\xr_kamp.script+
- +
-NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = <path_kamp_name>_task+
- +
-*path_walk = <path_kamp_name>_task+
- +
-Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.+
- +
-==3.2.5. Схема 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ов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.+
- +
-==3.2.5.1. Схема sniper==+
- Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.+
- NB! Ставить снайперу только 2 точки look+
- +
- В кастом дате кемпера прописать:+
- sniper = true+
- +
- +
-Файл: \gamedata\scripts\xr_camper.script+
- +
-==3.2.6. Схема 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+
- +
-Если все это происходит под гулагом, то вместо 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+
-}+
- +
-==3.2.7. Схема 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+
- +
-==3.2.8. Схема 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+
- +
-==3.2.9. Схема rest==+
-Чувак гуляет, хавает, спит.+
-Пока нормально не работает.+
-Файл: \gamedata\scripts\xr_rest.script+
- +
-==3.2.10. Схема 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 - то стрельба по вертолету в данной схеме разрешена.+
- +
-==3.2.11. 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 листе)+
- - все идут молча (когда будет манагер баек, то сделаем)+
- - командор пока не отдает команд (нет озвучки)+
- - не рекомендуется включать спринт (глючит)+
- +
-==3.3. Секции.==+
-==3.3.1. Секция combat==+
-Показывает, что происходит, когда NPC срывается в бой.+
-on_combat = combat+
- +
-[combat]+
-on_info = %+info -info =func% эффекты, которые вызываются на каждом раунде боя.+
- +
-Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.+
- +
-В следующем примере сталкер сражается:+
- * по-кемперски, если враг=актёр и он дальше Х метров+
- * по-монолитовски, если любой враг дальше Y метров+
- * иначе - движковый бой+
- +
-[logic]+
-active = walker+
-on_combat = combat+
- +
-[walker]+
-path_walk = ...+
- +
-[combat]+
-combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith+
- +
-Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.+
-function fighting_dist_ge_20(actor, npc)+
- return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) >= 400 +
-end+
-400 – это 202 . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.+
- +
- +
-Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:+
- +
-[logic]+
-active = nil+
-on_combat = combat+
- +
-[combat]+
-combat_type = zombied+
- +
-Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом combat_type.+
-Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:+
- +
-[logic]+
-active = walker1+
-on_combat = combat+
- +
-[walker1]+
-...+
-[walker2]+
-...+
-[walker3]+
-...+
-[walker4]+
-...+
-[walker5]+
-...+
-combat_type = monolith+
- +
-[combat]+
-combat_type = camper+
- (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)+
- +
- +
- +
-disable_combat_handler – функция отключающая секцию combat.+
-Файл: \gamedata\scripts\xr_combat.script+
- +
-==3.3.2 Секция death==+
-Схема показывает, что происходит при смерти NPC.+
-on_death = death+
- +
-[death]+
-on_info = %+info -info =func%+
-Файл: \gamedata\scripts\xr_death.script+
- +
-==3.3.3. Cекция hit==+
-Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).+
-on_hit = hit+
- +
-[hit]+
-on_info = %+info -info =func%+
- +
-Файл: \gamedata\scripts\xr_hit.script+
- +
- +
- +
-==3.3.4. Секция actor_dialogs==+
-Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.+
-actor_dialogs = actor_dialogs+
- +
-[actor_dialogs]+
-id = доступные диалоги через запятую.+
-disable = запрещенные диалоги, тоже через запятую.+
-Файл: \gamedata\scripts\xr_meet.script+
- +
- +
-==3.3.5. Секция use==+
-Схема показывает, что произойдет, если игрок юзнет NPC.+
- +
-on_use = use+
- +
-[use]+
-on_info = %+info -info =func%+
- +
-Файл: \gamedata\scripts\xr_use.script+
- +
- +
-==3.3.6. Секция combat_ignore==+
-Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:+
- +
-[walker]+
-combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).+
- +
-В схеме нет дополнительных полей+
-[walker]+
-combat_ignore = combat_ignore +
- +
-[combat_ignore]+
- +
-Функции, используемые для работы с кондлистом комбат игнора:+
-fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м+
-fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока+
- +
- +
-fighting_actor -- текущий враг актёр?+
-check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка+
- +
-Файл: \gamedata\scripts\xr_combat_ignore.script+

Текущая версия

  1. REDIRECT Настройка логики (часть 1)
Личные инструменты