РЕСТРИКТОР

Специальная зона контроля, хранящая в себе логику. Стандарт:

[4662]; порядковый номер по возрастанию от предыдущего.
; cse_abstract properties
section_name = space_restrictor
name = restrictor_actor; уникальное имя.
position = 100.6,-0.3,-193.3; позиция.
direction = 0.00264000007882714,-1.99999994947575e-005,0.00774700008332729

; cse_alife_object properties
game_vertex_id = 666; позиция.
distance = 0
level_vertex_id = 403978; позиция.
object_flags = 0xffffff3e
custom_data = <<END
[story_object]
story_id = restrictor_actor - уникальный id.

[logic]
cfg = scripts\jupiter\restrictor_actor.ltx; путь до логики.
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 1 ;размер сферы

; cse_alife_space_restrictor properties
restrictor_type = 3

Прописываем в нужном нам alife по адресу all.spawn.

[SR_IDLE]

Распространенная логика рестриктора, выполняющая почти все действия в игре. Вот так она выглядит в развернутом виде:

[logic]
active = sr_idle

[sr_idle]
on_info = {+infoportion} %+infoportion% sr_idle@new
on_info2 = {-infoportion} %+infoportion% sr_idle@break
;on_info3 = … - и так до бесконечности, только номер должен всегда возрастать.
on_game_timer = 15 | %+infoportion% sr_idle@nil
on_game_timer2 = 30 | %+infoportion% sr_idle@nil
;on_game_timer3 = … - и так до бесконечности, только номер должен всегда возрастать.

[sr_idle@new]
on_info = {+infoportion} %-infoportion% sr_idle@nil

[sr_idle@break]
on_game_timer = 30 | %-infoportion% sr_idle@nil

[sr_idle@nil]

Сколько угодно переходов на новые действия, только имена должны быть уникальны для этой логики. А когда работы для рестриктора кончены, пускаем его в nil, чтобы игра больше его не воспринимала.

ИНФОПОРШНИ И РАБОТЫ

Информация с уникальным именем в виде текста на английском языке. Пример: infoportion

Работы в логике:

on_info = {+infoportion} - ГГ имеет этот инфопоршень?
on_info = %+infoportion% - даем ГГ этот инфопоршень.
on_info = {-infoportion} - у ГГ нет этого инфопоршня.
on_game_timer = 25 | %+infoportion% - тоже самое с таймером.

В проценты %±=% заключаются прямые действия. В скобках {±=!} проверки на выполнение действия.

Знак «=» значит, что действие однозначно происходит. Знак «!» значит, что требуется проверка истины.

Работы со сквадами:

on_info = %=kill_squad(stalker_squad)% - убиваем сквад с этим id.
on_info = %=create_squad(stalker_squad:smart_terrain)% - спавним сквад в определенном торрейне.
on_info = %=set_squad_enemy_to_actor(stalker_squad)% - этот сквад готов убить ГГ.
on_info = %=remove_squad(stalker_squad)% - сквад с этим id покидает игру.
on_info = %=clear_smart_terrain(smart_terrain)% - все живые существа в этом торрейне покинут игру.
on_info = %=set_squads_enemies(stalker_squad:bandit_squad)% - травим сквады валить друг друга.
on_info = %=teleport_squad(stalker_squad:teleport_squad_walk)% - телепортирует сквад на точку walk.
on_info = %=inc_faction_goodwill_to_actor(killer:5000)% - наемники обожают ГГ.
on_info = %=dec_faction_goodwill_to_actor(stalker:5000) - сталкеры ненавидят ГГ.

Работы для ГГ:

on_info = {=actor_on_level(jupiter)} - ГГ на локации Юпитер.
on_info = %=teleport_actor(actor_teleport_walk:actor_teleport_look) - посылаем ГГ на точку walk лицом в look.
on_info = %=disable_ui% - пускаем пустой экран, ГГ нейтрализован.
on_info = %=enable_ui% - ГГ вновь в игре.
on_info = %=run_postprocess(black:3009:true)% - черный экран навечно.
on_info = %=stop_postprocess(3009)% - убираем черный экран.
on_info = %=activate_weapon(wpn_spas12)% - принуждаем ГГ достать это оружие, если оно, конечно, есть у него.
on_info = %=remove_item(wpn_spas12)% - отнимаем у ГГ этот предмет.
on_info = %=run_postprocess(fade_in)% - создаем эффект динамического перехода по локации.
on_info = %=activate_weapon_slot(2)% - ГГ достает оружие из этого слота.
on_info = %=actor_punch% - даем по морде ГГ.
on_info = %=spawn_object_in(items_object:actor)% - даем ГГ этот предмет, или ещё кому, главное id указать. Также она работает с тайниками.
on_info = %=give_item(vodka_script:actor)% - даем ГГ эту водку.
on_info = %=eat_vodka_script% - и он ее выпивает. Только так.

Работы с проверкой:

on_info = {=actor_has_item(wpn_spas12)} - у ГГ есть это оружие.
on_info = {!actor_has_item(wpn_spas12)} - у ГГ нет этого оружия.
on_info = {=actor_in_zone(state_space_restrictor)} - ГГ в этом рестрикторе.
on_info = {=dist_to_actor_ge(30)} - ГГ вышел за условный радиус рестриктора 30.
on_info = {=dist_to_actor_le(30)} - ГГ вошел в условный радиус рестриктора 30.

Прочие работы:

on_info = %=give_task(new_mission_stalker)% - выдаем это задание из tm.
on_info = %=scenario_autosave(st_save_stalker)% - сохраняем игру с этим именем в text.
on_info = %=spawn_object(wpn_rpg7:spawn_rpg_walk)% - спавн любого физического объекта в точке walk.
on_info = %=barrel_explode(pri_a25_antenna_grenade)% - можно взорвать только этот объект, заспавним его с помощью предыдущей функции.
on_info = %=set_game_time(21:00)% - принудительно устанавлием время в игре.
on_info = %=set_weather(default_thunder:true)% - запускает определённую погоду, требуется постоянная активация.
on_info = %=run_tutorial(outro_game)% - конец игры, пускаем интроролики.
on_info = %=give_treasure(pri_hiding_place_30)% - выдаём местонахождение тайника из файлов secret.