Меню

Пда

Чатик

Поиск

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

Настройка логики (часть 2)
Настройка логики (часть 2)
3.3.7. Секция dont_spawn_character_supplies
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться
стандартный набор барахла, прописанный в профиле.
[dont_spawn_character_supplies]
3.3.8. Секция no_smart
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем
параметрам. [no_smart]
3.3.9. Секция treshhold
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих
параметра два:
max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет
всегда атаковать монстров, которые находятся внутри данного радиуса.
ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если
функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами
вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что
сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.
В секции логики либо в текущей схеме указываете:
threshold = threshold@tratata
[threshold@tratata] max_ignore_distance = <number> ignore_monster = <number>
Второй параметр следует менять ОЧЕНЬ осторожно.
3.3.10. Использование danger
Настройка может задаваться только в какой-то схеме, например:
[walker] danger = danger_condition
[danger_condition] ignore_distance = 50 (расстояние указывается в метрах) ignore_ distance_grenade
= ignore_ distance_corpse = ignore_ distance_hit = ignore_ distance_sound =
Можно также указывать время ожидания для денжера в зависимости от типа:
danger_inertion_time_grenade = danger_inertion_time_corpse = danger_inertion_time_hit =
danger_inertion_time_sound =
Дефолтовые настройки: danger_inertion_time_grenade = 20000 danger_inertion_time_corpse = 10000
danger_inertion_time_hit = 60000 danger_inertion_time_sound = 15000
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках
кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера
согласно общих правил.
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по
ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по
соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция
на нее.
В данный момент установлены следующие дефолты:
ignore_distance = 50
ignore_distance_grenade = 15
ignore_distance_corpse = 10
ignore_distance_hit = 50
ignore_distance_sound = 50
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается
несколько секций данжера danger_condition@1, danger_condition@2 и так далее.
· danger_expiration_time = Через сколько времени денжер перестанет быть акутальным.
Дефолт 5000 мс.
· danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он
отреагировал. Дефолт 10000 мс.
3.3.11. Байки из склепа (Истории у костра)
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны
того или иного сталкера "научить" истории. Делается это так: в кастом дате пишется секция:
[game_info]
stories = "story_01, legend_01"
В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и
легенды:
story_01 - Граница зоны и граната за 1 действие.
story_02 - Про трамплин и про камешки.
story_03 - Про то как группа Вильнова вернулась.
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.
story_05 - Про то как духманам с контролером стражаться.
story_06 - Про дверцу, водку и избушку.
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.
legend_02 - Об особо засекреченных лабораториях в зоне.
legend_03 - Легенда о проводнике.
legend_04 - Легенда о темном сталкере.
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.
О, том какие истории и легенды в каком лагере на каком уровня можно и нельзя юзать, узнавать о
Профа.
3.3.12. dont_spawn_loot
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например
раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате
персонажа прописать секцию [dont_spawn_loot]
3.4. Оверрайды
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент
обычной схемы (все они необязательны):
· meet_enabled = true (запускает схему встречи).
o meet_talk_enabled = true (в действующую схему поведения добавляет возможность
диалога).
o meet_dialog = <название диалога>, который будет запущен при юзе.
o meet_state = <название состояния> он определяет, в каком состоянии будет
находиться персонаж, если открылось диалоговое окно общения и торговли.
o wounded_enabled = true (включает NPC возможность использовать схему раненого).
o combat_ignore_cond = см. выше.
o combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже
если в него стреляют – только в случае стрельбы со стороны игрока!)
o combat_type = {условие} scheme - тип боя, которым будет пользоваться NPC из
данной схемы.
o on_combat = см. выше.
· companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в
будущем они будут брать за это деньги)).
3.5. Схемы для монстров
3.5.1. Схема mob_walker.
Работает аналогично схеме обычного walker. Но есть некоторые отличия
Флаги пути движения s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal,
panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить
заданный сигнал для xr_logic Флаги пути обзора: t=время_мсек - время в миллисекундах, которое
нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest,
attack, look_around, turn) В customdata персонажа задайте (* отмечены обязательные поля): [walker]
path_walk = путь перемещения path_look = путь обзора
· no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить,
например, звук). По умолчанию false.
· actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок
хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.
· npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже
враждебного).
· friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с
их стороны, не запоминает их как врагов и остается дружественным ко всем. По
умолчанию false.
Файл: \gamedata\scripts\mob_walker.script
У кровосососов можно управлять невидимостью: [mob_walker]
...
state = vis
или
state = invis
Задает значение по умолчанию.
Также в флагах walk пути mob_walker-а можно использовать флажок b
(behaviour) с теми же параметрами:
wp00|b=vis
wp00|b=invis
3.5.2. Схема mob_eluder
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась
на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком
близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.
· path = ... - работает как обычно path_walk. Набор точек патрульного пути.
· Time_capture = ... (время в секундах) время, которое монстр находится под этой схемой.
Default – 10.
· Time_release = ... (время в секундах) время, которое монстр находится под универсальной
схемой. Default – 10.
· Min_dist = ... (расстояние в метрах, если расстояние до врага меньше этого, то он переходит
под универсальную схему). Default – 5.
· Max_dist = ... (расстояние в метрах, если расстояние до врага больше этого, то он переходит
под eluder). Default - 10.
Замечание – работает нестабильно. Файл: \gamedata\scripts\mob_eluder.script
3.5.3. Схема mob_remark
Ремарковая схема, только не для сталкеров, а для монстров.
· state = специфическое состояние данного конкретного монстра (для кровососов -
невидимость)
· dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога
· anim = анимации монстра, перечисляются через запятую.
· anim.head = анимации головы монстра, через запятую перечисляются
· tip = какой значок подсветится, при наведении на него курсора
· snd = какой звук издает
· time = время проигрывания анимаций, используется только для отладки.
Файл \gamedata\scripts\mob_remark.script На этой схеме сделан торговец.
3.5.4. Схема mob_combat, mob_death
Работают точно также как и у сталкеров соответствующие схемы. Файлы:
\gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script
3.5.6 Схема mob_jump (монстр-пружинка)
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо
проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного
пути, смещение относительно этой позиции и физический фактор прыжка.
Пример:
[logic] active = mob_jump
[mob_jump] path_jump = path ph_jump_factor =2.8 offset = 0,10,0 on_signal = jumped | nil
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом).
Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset. offset –
смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в
пространстве (может не находится на аи-ноде). ph_jump_factor - влияет на время прыжка.
Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок
более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание
со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное
значение = 1,8
Примечание: Фактически mob_jump - это не состояние, а разовое действие. При переходе в него
монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. "on_signal =
jumped | имя_схемы_или_nil" – является обязательным параметром в схеме, чтобы знать куда
переходить дальше. При выборе позиции используется первая точка патрульного пути (0-вой
индекс)
3.5.7. Mob_camp
Механика:
1. Сидит на позиции, смотрит в точку
2. Можно задать несколько позиций и время смены позиции.
3. Перемещается между позициями бегом
4. При виде врага переходит под универсальную схему (комбат/паника и т.д)
5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции
6. Если враг уходит далеко - монстр возвращается на позицию
Использование:
[logic] active = mob_camp
[mob_camp] path_look = way_look path_home = way_home time_change_point = 30000
home_min_radius = 20 home_max_radius = 50 skip_transfer_enemy – если прописать в кастом дату,
то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех
монстров в разные group разнести)
Описание параметров:
· path_home - путь, состоящий из точек, в которых будет находиться монстр
path_look - путь, состоящий из точек, в которые будет смотреть монстр
· time_change_point - время изменения текущей camp-точки (по-умолчанию10000), мс
· home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м
· home_max_radius - максимальный радиус от врага до camp-точки (по-умолчанию 40), м
Особенности:
Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал
далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей
позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет
или дистанция не будет больше home_max_radius.
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе
радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.
Выбор текущей позиции производится случайным образом
Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во
второй точке path_home и смотрит во вторую точку path_look)
Единственным необходимым параметром является path_look Если не установлен path_home, в
качестве кемперской точки учитывается позиция и нода объекта на спауне.
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из
нескольких точек.
Обязательные требования: home_min_radius < home_max_radius Количество точек путей path_look
и path_home должно быть равным P.S. Mob_Camp можно использовать как альтернативу к
монстрам под рестрикторами
3.5.8. Mob_home
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги
монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого
рестрикторы работают хорошо и красиво, их можно не трогать.
Пример: [mob_home] path_home = path1 home_min_radius = 10 home_max_radius = 30
aggressive_home - в назначенную точку path_home монстры бегут а не идут.
Описание: Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг
внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус
желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно
расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме
«гнездо».
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в
флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если
радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни
там, ни там, то берутся дефолтные значения 20 и 40 соответственно.
3.5.9. Mob_fake_death
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг
него начинают подниматься зомби... Использование:
[logic] active = mob_fake_death
[mob_fake_death] on_actor_dist_le = 5 | nil
При входе в схему зомби падает, при выходе из схемы встает.
3.6. Оверрайды для монстров:
· actor_friendly = если true, то монстр не атакует актера, до первой атаки на него
· npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на
него
· friendly = если true, то монстр не атакует никого до первой атаки на него
· braindead = если true, то монстр игнорирует любые атаки.
Секции для монстров [mob_death], [mob_hit]
3.7. Секция spawner
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному
условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в
настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер
прописывается в кастом дату объекта перед секцией logic Работает spawner следующим образом:
[spawner] cond = {+info -info =func !func}
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он
заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.
Пример: [spawner] cond = {=is_day} (объект заспавниться днем и уйдет в оффлайн ночью)
После того, как объект заспавнился, его берет под управление скрипт Logic
3.7.1. Спавн монстров дневных и ночных.
[spawner] cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})
check_distance = true – проверка на наличие персонажа рядом. min_distance = 100 – если игрок
ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле
это много).
3.8. Скрипт logic
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это
делается находится в Общей части в настройке профилей персонажей (только тег supplies писать
не надо!)
Скрипт logic управляет переключением схем. В customdata любого персонажа (кроме свободных)
должна присутствовать секция [logic].
Функции, на которые ссылается секция [logic] должны находится в файлах
\gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.
В секции должно присутствовать одно из полей: active = активная схема, запускающаяся первой.
cfg = имя_ltx_файла_с_настройками
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое
указанного файла. Пример. Настройки простого walker-а:
[logic] active = walker
[walker] path_walk = walk1 path_look = look1
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые
прописываются в секции текущей активной схемы. Существуют следующие условия
переключения: Список доступных схем перечислен в главе схемы. Примечание: если logic
переключает между несколькими одноименными схемами (например несколькими walker), то их
можно нумеровать (walker1, walker2) или через @ давать более информативные названия
walker@day, walker@alarm и т.д.
on_actor_dist_le = number | scheme - дистанция до игрока <= number on_actor_dist_le_nvis = number |
scheme - дистанция до игрока <= number без проверки на видимость on_actor_dist_ge = number |
scheme - если дистанция до игрока > number on_actor_dist_ge_nvis = number | scheme - если
дистанция до игрока > number без проверки на видимость on_signal = signal | scheme - срабатывает
по приходу сигнала signal от текущей активной схемы on_info = scheme - срабатывает всегда
on_timer = msec | scheme - срабатывает через msec мс после включения схемы on_game_timer = sec|
scheme – срабатывает через sec секунд игрового времени, после включения схемы
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя
рестриктора) on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне,
указывается story_id NPC, и имя рестриктора on_npc_not_in_zone = npc_story_id | restrictor_name |
scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора on_actor_inside =
scheme - зона проверяет, находится ли игрок внутри нее on_actor_outside = scheme - зона
проверяет, находится ли игрок за ее пределами
NB: с любыми из вышеперечисленных параметров можно работать следующим образом: on_info =
{….} %...% on_info2 = {….} %...% on_info3 = {…} %...% и так далее до посинения
а также условия для переключения на описанные выше секции. combat_ignore_cond = on_hit =
on_death = on_combat = on_use =
Авторы
Статья создана:
· GSC Game World
Категория: Моддинг | Добавил: Gluck (22.07.2012)
Просмотров: 621 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наши партнеры


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

Новые Темы

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

Новые Файлы

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

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


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


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