Перейти к содержанию

Рекомендуемые сообщения

 

image.png


Данная тема создана для того, чтобы собрать все "sr-секции" в одном месте. Информация может быть универсальной для разных частей серии.

Спойлер

Я бы назвал данную схему "пустышкой", так как никаких функций у неё, по сути, нет. Обычно её используют для того, чтобы использовать таймеры и условия включения или как перемычка между секциями. Используется везде и часто, без неё было невозможно нормально писать логику.

Структура:


[sr_idle]
*Действия*

Пример №1:


[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = {+val_raid_start -esc_return -esc_trader_speak} nil %=esc_return_dv +esc_return +esc_trader_speak%

В примере такая логика:

Цитата

Если ГГ находиться внутри этого рестриктора и у нас есть инфопоршень "val_raid_start" и отсутствует "esc_return" и "esc_trader_speak", то нам дадут инфопоршни "esc_return" и "esc_trader_speak", и выполниться функция "esc_return_dv".

При использовании нескольких одинаковых секций, необходимо давать имена. Подобное необходимо делать для всех секций, не только для "sr_idle". Это делается так: "название_секции@имя"

Пример №2:


[logic]
active = sr_idle@start

[sr_idle@start]
on_game_timer = 100 | sr_idle@end %+info1%

[sr_idle@end]
on_info = {+info2} nil %+info3%

В примере такая логика:

Цитата

Спустя 10 сек после начала работы логики (on_game_timer считает через игровое время, поэтому умножаем секунды на time_factor, который по умолчания равен 10) нам выдается инфопоршень "info1" и активной секцией становиться "sr_idle@end", где при наличии инфопоршней "info2" нам выдадут "info3" и логика закончиться.

Файл: gamedata\scripts\sr_idle.script

P.S. Писать "nil" нужно ОБЯЗАТЕЛЬНО, иначе ваша логика может просто зациклиться на секции и вы будете удивляться, почему у вас выдается тысяча заданий или сообщений. Вместо "nil" можно создать пустую секцию и просто переключать на неё, но я не знаю, как это может повлиять на производительность, при частом использовании.


Спойлер

Секция используется для того, чтобы запретить ГГ доставать оружие в определённой зоне, никаких настроек не имеет, да они ей особо и не нужны. 

Структура:


[logic]
active = sr_no_weapon
 
[sr_no_weapon]

Файл: gamedata\scripts\sr_no_weapon.script


Спойлер

Схема предназначена для отыгрывание звука при входе актора в space_restrictor. Так же есть аналог в виде функции "=play_sound()".

Параметры:

  • snd - путь к звуку или переченю звуков, разделенных запятыми (путь учитывается относительно папки gamedata\sounds).
  • type - типы звуков через запятые. Для удобства введены типы наборов звуков в таблице sound_types управляющего файла. Всего их три:
    • floor_wooden;
    • rats_panic;
    • random.
  • delay - задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.
  • idle - длина задержки после начала последнего проигранного звука. Чтобы, например, "завывание" было не чаще, чем раз в несколько минут. Указывается в секундах игрового времени, то есть "секунды * time_factor". По умолчанию = 0.
  • rnd - вероятность (в процентах) того, что звук отыграется. По умолчанию 100.
  • position - задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение "random". Оно означает случайное место в радиусе от 15 до 50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.
  • slide_velocity - скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3.
  • slide_sound_once = true/false - в случае значения true - проиграть звук один раз, даже если он не дошел до последней точки пути, если false, то когда звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.
  • play_at_actor = true/false - заставляет звук играться от позиции актера постоянно. Если он будет равен "true" и будет задан путь перемещения звука (или рандом), то вы словите вылет.

Структура:


[logic]
active = sr_sound
 
[sr_sound]
snd = звук

Пример:


[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = sr_sound@shooting
 
[sr_sound@shooting]
snd = characters_voice\scenario\garbage\grey_grey_1
play_at_actor = true
on_signal = sound_end| nil
on_timer = 20000| nil

В примере такая логика:

Цитата

Когда ГГ заходит в рестриктор, то секция меняться на "sr_sound@shooting" и начинает проигрываться и спустя 2000 секунд или когда закочнится звук - логика завершиться. 

Файл: gamedata\scripts\sr_sound.script


Спойлер

Секция используется для отправки сообщений ГГ, частенько используется для сюжетных модификаций. 

Параметры:

  • name - строка с id текста зарегистрированного в папке gamedata\config\text.
  • type = news/tips - параметр рудиментарный и не на что не влияет.
  • sender - задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение.
    • По умолчанию это иконка торговца. В ТЧ возможны следующие значения: default, trader, dolg, freedom, ecolog, arena, stalker, krot, barman, wolf, o_soznanie, monolith, saharov, prizrak, killer.
    • В ЗП используются иконки, которые прописаны в news_manager.script
  • cond = {+info -info =func !func ~number} - необходимые логические условия, при которых подсказка сработает.
  • single = true/false - если параметр в true, то сообщение будет выдано только один раз. По умолчанию false.
  • timeout - задержка вывода сообщения в секундах. По умолчанию - 0.
  • showtime - время показа сообщения на экране. Задаётся в милисекундах. По умолчанию - 5000.

Структура:


[sr_tip] 
name = rad_barman_spam
type = tips
cond = {+bar_deactivate_radar_done} 
sender = barman
showtime = 25000

Файл: gamedata\scripts\sr_tip.script


Спойлер

Логике, которая включает или выключает фонарики в рестрикторе у НПС

Структура:


[sr_light]
light_on = true/false

Файл: gamedata\scripts\sr_light.script


Спойлер

Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора. Пока что она отлавливает только хиты и смерть NPC. Но поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.

Параметры:

  • territory_hit = {+info -info =func !func ~number} %+info -info =func% - эффекты, которые произойдут при нанесении хита от актора, будучи в этой зоне.
  • territory_death = {+info -info =func !func ~number} %+info -info =func% - эффекты, которые произойдут при смерти от "рук" актора, будучи в этой зоне.

Структура:


[logic]
active = sr_territory
 
[sr_territory]
territory_death = nil %+info%

Файл: gamedata\scripts\sr_territory.script


Спойлер

При входе в рестриктор он сам себя подсвечивает на карте.

Параметры:

  • hint - строка с id текста зарегистрированного в папке gamedata\config\text.
  • location - имя типа метки, зарегистрированное в файле config\ui\map_spots.xml и всех, что в него включены include. По умолчанию - crlc_small.

Структура:


[sr_mapspot]
hint = gar_swamp
location = crcl_big

Файл: gamedata\scripts\sr_mapspot.script


Спойлер

Данная система отыгрывает партиклы, как статичные, так и движущиеся, в указанном месте и в указанное время. Данная схема отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.

Параметры:

  • name - путь до партикла относительно файла particles.xr.
  • path - точки движения партикла. Возможны два случая:
    • Когда указывается путь анимации камеры (путь учитывается относительно папки gamedata\anims). Для имени файла необходимо ставить расширение .anm (например arena.anm).
    • Когда указывается имя патрульного пути.
  • mode - параметр обязательный и имеет два значения:
    • 1 - устанавливается в случае указания анимации камеры для параметра path;
    • 2 - устанавливается в случае указания патрульного пути для параметра path.
  • looped = true/false - флаг зацикленности партиклов. При true, по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Но сигнал particle_end выдаваться не будет. При false сигнал будет выдан, когда все источники партиклов отыграют.

В вейпоинтах патрульного пути можно задавать флаги:

  • s- звук проигрываемый во время движения;
  • d - время задержки перед проигрыванием, задается в миллисекундах. По умолчанию - 0.

Структура:


[logic]
active = sr_particle
 
[sr_particle]
name = anomaly2\gravity_blast_03      
path = путь                 
mode = 2 				
looped = false               
on_signal = particle_end | nil

Файл: gamedata\scripts\sr_particle.script


Спойлер

Схема играет звук в голове актера. Всякие там переговоры по ПДА и прочие фейки. Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз.

Параметры:

  • snd - имя звукового файла относительно папки gamedata\sounds.
  • delay - задержка перед проигрыванием. По умолчанию - 0.
  • delay_max - между проигрыванием звука будет взят случайный промежуток между delay и delay_max.
  • theme - имя темы из файла sound_theme.script.
  • stereo = true/false - при установке этого параметра к файлу, который задан параметром snd или в звуковой теме, автоматически будут добавляться суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, всё это будет проигрываться.

Структура:


[logic]
active = sr_sound_act

[sr_sound_act]
theme = sar_monolith_call
delay = 10000
delay_max = 15000
stereo = true

Файл: gamedata\scripts\sr_sound2d.script


Спойлер

Схема использовать для производства каких либо действий в зависимости от состояния таймера. 

Параметры:

  • type - тип счётчика.
    • dec - декриментирующий, т.е. обратный отсчёт;
    • inc - инрементирующий, т.е. отчёт по возрастанию.
  • start_value - начальное значение счетчика в реальных миллисекундах.
    • Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.
  • on_value = число | %+info -info =func% секция - производит действие в зависимости от состояния счётчика.
  • string - строка с id текста зарегистрированного в папке gamedata\config\text.

Структура:


[logic]
active = sr_timer
 
[sr_timer]
type = dec
start_value = 1000000
on_value = 5 | %=play_snd(characters_voice\scenario\radar\rad_hat_2)% | 0 | nil %=aes_kill_actor%
string = st_helmet_countdown

Файл: gamedata\scripts\sr_timer.script


Спойлер

Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.

Параметры:

  • eff_intensity - увеличение/уменьшение в процентах от базового значения интенсивности излучения.
  • hit_intensity - увеличение/уменьшение в процентах от базового значения наносимого повреждения.
  • phantom_prob - вероятность проявления фантомов в процентах. По умолчанию - 0.
  • postprocess - файл постэффекта, относительно папки gamedata\anims. Расширение ставить обязательно! По умолчанию - psy_antenna.ppe.
  • mute_sound_threshold - предел до которого можно занижать звук уровня. 0 - глушит полностью, стоит по умолчанию.

Структура:


[logic]
active = sr_psy_antenna
 
[sr_psy_antenna]
eff_intensity = -10
hit_intensity = 0
phantom_prob = 45

Файл: gamedata\scripts\sr_psy_antenna.script


Спойлер

Схема позволяет телепортировать актора в пределах локации.

Параметры:

  • point - патрульный путь из одной точки, куда переместится актор.
  • look - патрульный путь из одной точки, куда будет смотреть актор после перемещения.
  • prob - вероятность перемещения в заданную точку. По умолчанию - 100.
  • timeout - задержка срабатывания телепорта в миллисекундах. По умолчанию - 900.

Структура:


[logic]
active = sr_teleport
 
[sr_teleport]
point1 = aes2_teleport_walk_exit1
look1 = aes2_teleport_look_exit1
prob1 = 10
point2 = aes2_teleport_walk_exit2
look2 = aes2_teleport_look_exit2
prob2 = 20
timeout = 0

Файл: gamedata\scripts\sr_teleport.script


Спойлер

Эта схема предназначена для проведения анимации камеры c некоторым эффектом (pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.

Параметры:

  • point - путь в первую точку которого переносится игрок.
  • look - путь в первую точку которого смотрит игрок.
  • pp_effector - файл, расположенный в папке gamedata\anims\ и содержащий эффект (имя файла пишется без расширения).
  • cam_effector - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без расширения).

Структура:


[logic]
active = sr_cutscene
 
[sr_cutscene]
point = agr_cutscene_walk
look = agr_cutscene_look
cam_effector = agroprom_demo
on_signal = cameff_end | nil

Файл: gamedata\scripts\sr_cutscene.script

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
20 минут назад, AziatkaVictor сказал:

ГГ находиться внутри

и выполниться функция

активной секцией становиться

логика закончиться

логика завершиться

И это писАл модератор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

varan я потом исправлю, я тоже могу допускать ошибки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
   

AziatkaVictor И еще вдогонку, как по мне, стоит пометить к какой версии игры относится конкретная схема, дабы сразу понимать, где ее найти.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

denis2000 С радостью, но я об этом не знаю. К тому же, некоторые секции есть сразу в нескольких частях, но имеют разные параметры или некоторые из них не работают. Но, большинство секций используются сразу в разных частях или имеют аналоги в виде готовых решений в СДК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Для новичков в самый раз, да и не только для новичков. Вообщем 👍 за статью)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

как отменить таймер? Допустим, у нас задача: за n-ое время добраться до какого то места,иначе погибнем. Логика примерно такая:

Спойлер

 

[logic]
active = sr_idle

[sr_idle]
on_info = {+start_escape} sr_timer

[sr_timer]
type = dec
start_value = 1000000
on_value = 0 | nil %=aes_kill_actor%
string = escape_timer_text

 

Схема sr_timer ведь не поддерживает проверку на наличие или отсутствие поршней, как sr_idle, а то можно было бы так сделать:
 

Спойлер

 

[logic]
active = sr_idle

[sr_idle]
on_info = {+start_escape} sr_timer

[sr_timer]
type = dec
start_value = 1000000
on_value = 0 | nil %=aes_kill_actor%
string = escape_timer_text

on_info = {+escape_done} sr_idle@2

[sr_idle@2]

 

upd. Вопрос снят))

Спойлер

[logic]
active = sr_idle
 
[sr_idle]
on_actor_inside = {+yan_labx16_switcher_primary_off} nil, sr_timer@1 %=play_snd(characters_voice\scenario\radar\rad_hat_1)%
 
[sr_timer@1]
type = dec
start_value = 240000
on_value = 5 | %=play_snd(characters_voice\scenario\radar\rad_hat_2)% | 0 | nil %=aes_kill_actor%
on_actor_outside = sr_idle
on_info = {+yan_labx16_switcher_primary_off} nil
string = st_helmet_countdown

 

Изменено пользователем BeeRseK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу