Как красиво вырубить ГГ, будто ему кто-то вмазал? Во-первых, можно указать вполне конкретного НПС для этого дела, но тут надо постараться, чтобы ГГ был рядом с ним, точнее, прям впритык фейс-ту-фейс. Вот какую логику я придумал для НПС:
[companion@patrol] meet = no_meet on_info = {=dist_to_actor_le(1.7)} remark@patrol_punch [remark@patrol_punch] anim = punch target = story | actor on_signal = anim_end | %+give_punch_infoportion% meet = no_meet
Первая логика - это логика компаньона "companion", то есть НПС следует за ГГ, это-то мне и надо, когда ГГ оказывается на расстоянии вытянутой руки от НПС, что равняется 1.7 метра, логика переключается на "remark" с целью "target" глядеть на ГГ "story | actor" и анимацией удара прикладом "punch", когда анимация свершится "anim_end" я выдаю инфопорцию для дальнейшего веселья. В данном случае ГГ просто получит по морде и через пару секунд оклемается, но мы ведь хотим, чтобы ГГ "заснул". Для этого создаём рестриктор, логику пишем такую:
[logic] active = sr_idle@info [sr_idle@info] on_info = {+give_punch_infoportion} %=npc_to_actor_punch =disable_ui% sr_idle@punch [sr_idle@punch] on_game_timer = 15 | %=run_postprocess(black:1996:true) =forward_game_time(5)% sr_idle@sleep [sr_idle@sleep] on_game_timer = 30 | %=stop_postprocess(1996) =enable_ui% sr_idle@nil [sr_idle@nil]
Теперь нужно создать функцию по адресу gamedata\scripts\xr_effects.script и в конце файла добавляем:
function npc_to_actor_punch() level.add_cam_effector("camera_effects\\surge_02.anm", 1, false) level.add_pp_effector("surge_fade.ppe", 2, false) end
Пояснение: "=npc_to_actor_punch" - сама функция удара по голове, если рядом нет НПС, который мог бы нам вдарить, поэтому если бьёт НПС, то это функция исключается из логики:
[logic] active = sr_idle@punch [sr_idle@punch] on_info = {+give_punch_infoportion} %=run_postprocess(black:1996:true) =disable_ui =forward_game_time(5)% sr_idle@sleep [sr_idle@sleep] on_game_timer = 30 | %=stop_postprocess(1996) =enable_ui% sr_idle@nil [sr_idle@nil]
"=forward_game_time(5)" - это я перемотал время на 5 часов вперёд, можно перемотать на 20 минут: "=forward_game_time(0:20)", а можно сразу установить конкретное время суток: "=set_game_time(06:00)"
Инфопорция "+give_punch_infoportion" запускает всё действие. Мы выдали её в конце логики НПС, но можно с тем же успехом выдать и в конце диалога, главное, не забудьте закрыть диалог, впрочем, диалог и сам закроется, но будет крипово выглядеть.