Как красиво вырубить ГГ, будто ему кто-то вмазал? Во-первых, можно указать вполне конкретного НПС для этого дела, но тут надо постараться, чтобы ГГ был рядом с ним, точнее, прям впритык фейс-ту-фейс. Вот какую логику я придумал для НПС:

Код:
[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" запускает всё действие. Мы выдали её в конце логики НПС, но можно с тем же успехом выдать и в конце диалога, главное, не забудьте закрыть диалог, впрочем, диалог и сам закроется, но будет крипово выглядеть.