Structure of Files
Файлы могут различаться между собой, в зависимости от назначения, но у них всех есть общие свойства.
Для начала, любая информация храниться в "секциях". Это своего рода объекты с набором параметров, которые обычно предопределённы либо движком игры, если это какой-то конфиг, либо скриптами, если это файл, отвечающий за игровую логику.
Рассмотрим для примера секцию stalker_sim_squad_novice
из файла конфигурации squad_desct.ltx
:
[stalker_sim_squad_novice]:online_offline_group
faction = stalker
npc_random = sim_default_stalker_0, sim_default_stalker_1, sim_default_stalker_2
npc_in_squad = 2, 3
В данном случае мы можем подметить следующее:
- Объявление секции
stalker_sim_squad_novice
. Работает как обычная переменная со схожими свойствами:- Название не может повторяться в области видимости.
- Может обладать разными областями видимости, в зависимости от контекста.
- Можно ссылаться, если необходимо сменить секцию или просто вынести информацию в отдельную секцию (например секция meet).
- Объявление параметров
faction
,npc_random
иnpc_in_squad
- Наследование
online_offline_group
. Как и любое другое наследование, перенимает в себе информацию родителя, которую можно перезаписать при желании. В данном случае идет наследование из файлаm_online_offline_group.ltx
:
[online_offline_group]
GroupControlSection = spawn_group
class = ON_OFF_S
;$spawn = "scripts\online_offline_group"
Как мы уже рассмотрели выше, у любой секции могут быть параметры. Однако до этого это были лишь статичные, простые параметры файла конфига. Предлагаю теперь разобрать слегка более структурно сложный параметр из файла игровой логики:
on_info = {-dont_have_info} %+add_info =play_sound(sound_name)% sr_idle@end
Структура может по началу сбить с толку, но она достаточно закономерна и проста. Для начала разобьем её на части:
- Название параметра
on_info
- Разделитель
=
- Так называемый "Condlist", о котором будет рассказано позже,
{-dont_have_info} %+add_info =play_sound(sound_name)% sr_idle@end
Как уже писалось выше, разработчики сделали такую вещь, как "Condlist". Что это такое? По сути это некий блок, в котором может быть 3 вещи:
- Условие
- Действие
- Значение или ссылка
Пример:
{Условие} %Действие% Ссылка
Пишется в {}
скобка и нужен для создания проверки выполнения условия, чтобы действия происходили только по его выполнению. То есть, действия будут выполнять только когда условие возвращает True
при логически операторе "И". В нём можно указывать такие вещи как:
- Проверка наличия инфопоршня
+info_name
- Проверка отсутствия инфопоршня
-info_name
- Проверка на шанс до 100 в процентах
~20
- Вызов функции из
xr_conditions.sctript
.- Если перед названием функции стоит
=
, то ожидается, что она вернетTrue
. Это ровно тоже самое, что иfunction() == True
. - Если перед названием функции стоит
!
, то ожидается, что она вернетFalse
. Это ровно тоже самое, что иfunction() == False
.
- Если перед названием функции стоит
Пример записи, в данном случае у нас такое условие:
- Отсутствие инфо под названием
info1
- Наличие инфо под названием
info2
- У игрока есть предмет под названием
item_name
- Проверка, что сейчас не день
{-info1 +info2 =actor_has_item(item_name) !is_day}
Пишется в %%
скобка и может хранить в себе такие вещи как:
- Добавление инфопоршня
+info_name
- Удаление инфопоршня
-info_name
- Вызов функции из
xr_effects.sctript
, в отличии от условия, вызывать можно только через=
Пример записи, в данном случае у нас такое действия:
- Удаляем инфо под названием
info1
- Добавляем инфо под названием
info2
- Выдаем задание
task_name
- Забираем предмет
item_name
%-info1 +info2 =give_task(task_name) =remove_item(item_name)%
Ну и под конец, ссылка или значение. Никаких особенностей тут нету. Могут указываться такие вещи как:
- Ccылка на секцию
sr_idle@test
. Необходимо для некоторых конфигов и логики. О том как это работает будет описано ниже. - Значение
st_text
,true
,10
и так далее. Можно использовать в некоторых конфигах, когда нужно динамически менять значение параметров. Например как это сделано с заданиями вtask_manager.ltx
- Ключевое слово
nil
. Означает "ничего", аналог null из языков программирования. Можно использовать для указания значения или для окончания логики.
Главная особенность Condlist в том, что в одном параметре можно указывать сразу несколько Condlist-ов. Например:
[hit]
on_info = {=hit_by_actor =hitted_on_bone(head_boss:boss_jaw:brow:ear_r:eye_l:eye_r:) -zat_b106_one_shot} %+zat_b106_one_shot +zat_b108_actor_damaged_chimera +zat_b106_ahtung%, {=hit_by_actor !hitted_on_bone(head_boss:boss_jaw:brow:ear_r:eye_l:eye_r:) -zat_b108_actor_damaged_chimera} %+zat_b108_actor_damaged_chimera%
Это секция из файла zat_b106_chimera.ltx
. Как мы можем увидеть, в параметре on_info
есть сразу 2 Condlist. Они разделены запятой и делают следующее:
- Первый Condlist:
- Условие
-
=hit_by_actor
- урон нанёс игрок? -
=hitted_on_bone(head_boss:boss_jaw:brow:ear_r:eye_l:eye_r:)
- урон нанесён по этим костям? -
-zat_b106_one_shot
- инфо с таким именем отсутствует?
-
- Действие
-
+zat_b106_one_shot
- выдаем инфо с таким названием -
+zat_b108_actor_damaged_chimera
- выдаем инфо с таким названием -
+zat_b106_ahtung
- выдаем инфо с таким названием
-
- Условие
- Второй Condlist:
- Условие
-
=hit_by_actor
- урон нанёс игрок? -
=hitted_on_bone(head_boss:boss_jaw:brow:ear_r:eye_l:eye_r:)
- урон нанесён НЕ по этим костям? -
-zat_b108_actor_damaged_chimera
- инфо с таким именем отсутствует?
-
- Действие
-
+zat_b108_actor_damaged_chimera
- выдаем инфо с таким названием
-
- Условие
В данном примере у нас нету ссылок или переменных, так как секция подразумевает то, чтобы реагировать только при получении урона. Поэтому у нас тут только действия и проверки.
Предложения и дополнения всегда приветствуются!
База знаний:
Информация о расширении: