Смарттерейны и гулаги
Настройка логики (часть 4)
3.10.3. Схема работы прожектора:
В точках look пути, в которые смотрит прожекторщик, нужно прописать sl=имя_прожектора
Например wp00|sl=esc_sl1
Тогда при повороте в эту точку персонаж повернет в нее и прожектор.
3.10.4. Кодовые замки:
При введении указанного кода выдает инфопоршн
[logic] active = ph_code@lock
[ph_code@lock] code = 1243 on_code = %+infoportion%
Файл: \gamedata\scripts\ph_code.script
3.10.5. Ph_gate:
То же самое, что и ph_door, но для ворот, состоящих из двух дверей: Вместо параметров closed и locked сейчас используются параметры: state: состояние, в котором дверь находится при инициализации (по умолчанию none)
open - в открытомclosed - в закрытом
none - в текущем (дефолтном или оставшемся от предыдущей схемы)locking: блокировка дверей (по умолчанию none) stick - прилипание дверей к крайним состояниям (пока в процессе настройки)
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной Состояния в этом положении:
none - не используется (мягкая блокировка возможна только в крайних положениях)
hard - блокировка двери с помощью границ. Ворота можно только сломать Состояния в этом положении:
open - блокировать в открытом состоянии closed - в закрытом none - в текущемnone - дверь не заблокирована
Общие параметры: left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.
Звуковые параметры аналогичны ph_door
Примеры: [ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые. state = opened locking = soft left_limit = 130 rigt_limit = 60 breakable = false
[ph_gate@opened] state = opened locking = stick
[ph_gate@closed] state = closeded
Файл: \gamedata\scripts\ph_gate.script
Ph_sound
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).
[ph_sound] snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes
- looped = true/false зацикленое воспроизведение звука (default - false)
- min_idle = минимальное время простоя перед включением звука (мс)
- max_idle = максимальное время простоя перед включением звука (мс)
- random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения
NB! Если мы задаем random = true и looped = true, то версия сыпется
Также поддерждивается кондлист. Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil
Пример подобной извращенной логики: [logic] active = ph_sound
[ph_sound] snd = gar_seryi_shooting looped = true max_idle = 5000 on_actor_in_zone = gar_seryi_factory| ph_sound@end
[ph_sound@end] snd = gar_seryi_shooting_2 looped = false on_signal = sound_end| nil
Кроме того специфическим образом создается звуковая схема. В sound_theme.script в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. Например: ph_snd_themes["gar_seryi_shooting"] = {characters_voice\human_01\scenario\garbage\distance_shooting}
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.
Файл: \gamedata\scripts\ph_sound.script
Ph_force
Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.
force = сила, которая прикладывается к объекту. Измеряется в убитых енотах time = время прикладывания силы к предмету (в секундах) *delay = задержка (в секундах) перед применением силы point = имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет) point_index = индекс точки патрульного пути, в стону которого полетит предмет.
Ph_on_death
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов
Пример: [logic] active = ph_on_death [ph_on_death] on_info = %эффекты% Юзать исключительно с разрушаемыми физ. ОбъектамиPh_car
Настройка возможности игроку управлять машиной.
секция: [ph_car] поле: usable = <condlist> usable - кондлист возвращающий true (по умолчанию) или false. Пример: [logic] active = ph_car [ph_car] usable = {+val_actor_has_car_key}На основе этой схемы можно сделать машину, которая зведется только если у актера есть ключ именно от нее.
Ph_heavy
Прописывается в физ объектах, которые запрещены для швыряния бюрерам и полтергейстам. Например, если они должны лежать на конкретном месте (типа документов сюжетных) или слишком громоздки по габаритам, чтобы их можно было красиво кидать. В кастом дате пишем:
[ph_heavy]
Ph_oscillate
Схема предназначена для плавного раскачивания физики (лампы, висящие зомби и т.д.)
Пример логики [ph_oscillate] joint = provod - имя кости к которой будет применена сила force = 5 - собственно сила (в ньютонах) period = 1000 - время прикладывания силы. Сила прикладывается к кости объекта с линейным наростанием. То есть в течении заданого периода времени сила вырастет с 0 до заявленого значения. После этого настает пауза (сила не применяется) на время period/2. После окончания паузы сила применяется так же, как и в начале, но в обратном направлении.Смарттерейны и гулаги.
Смарттеррейн.
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.
Как поставить smart terrain? Для всех smart terrain нужно: 1) Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность). 2) В его custom data прописать настройки. 3) Расставить пути для соответствующих схем поведения.
Параметры custom data:
[gulag1]type = тип гулага capacity = макс. вместимость в людях
- offline = может ли гулаг образоваться в offline (true(по дефолту)/false)
- squad = squad, который будет проставлен всем сталкерам под гулагом (№ уровня)
- groups = набор group через запятые
- stay = min, max время пребывания npc под smart_terrain (по умлочанию – навсегда)
- idle = min, max время бездействия smart_terrain после ухода последнего npc
- cond = список условий, которые необходимы для создания гулага {+info –info =func !func} – если условие не выполняется, то гулаг распускается, а все его подопечные начинают управляться прописанной в custom_data логикой.
Указывать тип гулага нужно без кавычек. Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться. Все времена задаются в часах игрового времени и могут быть дробными.
Пути: Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2)
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.