Схема wounded (раненый). hp_state = HP|condstate@condsound|HP|condstate@condsound
[logic] active = walker
[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
Схема rest Чувак гуляет, хавает, спит. Пока нормально не работает. Файл: \gamedata\scripts\xr_rest.script
Схема 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 - то стрельба по вертолету в данной схеме разрешена.
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 листе) - все идут молча (когда будет манагер баек, то сделаем) - командор пока не отдает команд (нет озвучки) - не рекомендуется включать спринт (глючит) Секции. Секция 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
Секция death Схема показывает, что происходит при смерти NPC. on_death = death
[death] on_info = %+info -info =func% Файл: \gamedata\scripts\xr_death.script
Cекция hit Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана). on_hit = hit
[hit] on_info = %+info -info =func%
Файл: \gamedata\scripts\xr_hit.script
Секция actor_dialogs Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме. actor_dialogs = actor_dialogs
[actor_dialogs] id = доступные диалоги через запятую. disable = запрещенные диалоги, тоже через запятую. Файл: \gamedata\scripts\xr_meet.script
Секция use Схема показывает, что произойдет, если игрок юзнет NPC.
on_use = use
[use] on_info = %+info -info =func%
Файл: \gamedata\scripts\xr_use.script
Секция 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
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (384)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |