Меню

Пда

Чатик

Поиск

Главная » Статьи » Моды и моддинг » Моддинг

Настройка логики (часть 1)
Настройка логики (часть 1)
3. Настройки логики
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
А затем переключить схему: on_signal = pressed | другая_схема
3.1.1. Более подробное описание путей (walker)
Настройка:
На карту для каждого walker'а нужно поставить:
· Путь path_walk, по которому walker ходит.
· Путь path_look, состоящий из точек, в которые walker смотрит.
Walker'ов может быть от одного или больше. Они могут действовать независимо, или
взаимодействовать друг с другом.
[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, то
персонаж пойдет в состоянии danger, если a = raid - то побежит с оружием наизготовку, и т.д.
В точках пути 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, то персонаж сядет в
состоянии danger, если a = guard, то встанет с оружием наизготовку и т.д.
В точках пути 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 - Указывает на то необходимо ли синхронизировать звук с
анимацией либо нет
· snd - звук ремарка, по умолчанию nil
· anim - анимация ремарка, по умолчанию wait
· target - куда смотрит сталкер. Есть следующие варианты
o story_id – числовое значение
o actor – без комментариев
o nil – позиция вычисленная АИ автоматически
o <имя работы>,<имя гулага> смотреть на сталкера который находится на
определенной работе под гулагом (второй параметр необязателен. В этом случае
берется гулаг сталкера, для которого задана данная секция ремарка).
Пример:
target = logic@cit_killers_base_guard, cit_killers <path_name>, <point_number> - можно указывать
смотреть в вершину патрульного пути (<имя пути>, <имя точки>).
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть
если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это.
Если задано значение nil, то персонаж развернется в позицию, которую посчитает AI.
Стандартные сигналы для remark:
· sound_end – по окончании проигрывания звуковой схемы
· anim_end – по окончании проигрывания анимации
· action_end – по окончании проигрывания и того и другого, если они синхронизированы
Пример синхронизации анимации и звука в схеме remark:
[remark]
· anim - анимация
· snd - звук
· snd_anim_sync = true - синхронизация
· on_signal = action_end | следующая схема
3.2.3. Схема sleeper
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из одного
поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону
первой точки.
[sleeper]
· path_main = ... - имя пути
· wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне
бормочет)
Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо
двунаправленную).
Файл: \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
Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они
перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в
секции кемпа указывать path_walk из одной точке, название которой равно:
<path_kamp_name>_task
· path_walk = <path_kamp_name>_task
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.
3.2.5. Схема camper
Свойства кемперов:
· Кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или
передигается по патрульным путям
· Кемперы переключаются на универсальный комбат, только если видят врага ближе чем в
30 метрах. Если он выжил, он возращается в состояние кемпера.
· В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -
стреляем. Если слышим danger - то смотрим в направление в danger. Если видим гранату -
убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели
последний раз врага.
· Кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют,
а потом продолжают движение.
[camper]
· path_walk = patrol_path
· path_look = patrol_path
· radius = ... – расстояние в метрах, если расстояние между кэмпером и противником меньше
указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 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". Можно изменить на любое
другое (для сценических потребностей) либо вообще отключить, прописав в секции
кемпера пустой атрибут.
· shoot = ... - Задаем тип стрельбы. Возможные значения:
o always - значение по умолчанию, стреляет всегда, когда можно
o none - не стреляет вообще.
o terminal - стреляет только когда находится на последней точки патрульного пути.
Это сделано для облегчения построение атакующих сцен.
У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится
(не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и
ждать следующей пули. Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры
должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда
игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких
случаях, а кемперов стоить ставить для атак по путям и как снайперов.
3.2.5.1. Схема sniper
Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не
смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость
сканирования от точки к точке фиксирована и равна 20сек. Внимание! Ставить снайперу только 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 = ...
· formation - описывет способ построения и не является обязательным. Возможны
следующие варианты:
o back - мужики идут чуть позади командира в два ряда (по умолчанию)
o line - шеренга
o around - вокруг командира
· commander = true - типа назначат командиром, желательно, чтобы такой красивый он был
один.
· move_type = ... - задает изначальный режим перемещения, по умолчанию patrol. Вообще,
значение этого поля есть название ходячей анимации из state_mgr_lib.
При остановке командора в 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
Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда
зомбированый:
[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 (х) – (х - расстояние в метрах)универсальная функция для combat_ignore,
проверка расстояния для игрока.
· fighting_actor - текущий враг - актёр?
· check_fighting - проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из
списка.
Файл: \gamedata\scripts\xr_combat_ignore.script
Авторы
Статья создана:
· GSC Game World
Категория: Моддинг | Добавил: Gluck (22.07.2012)
Просмотров: 635 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наши партнеры


Книги сталкер
Найти другие книги

Новые Темы

Популярные Темы

Новые Файлы

Популярные Файлы

В вылазке: 3
Новичков: 3
Сталкеров: 0


Кто был сегодня на сайте:


Вакансии
Яндекс.Метрика Рейтинг@Mail.ru
Яндекс.Метрика