e4s-sdk/gamedata/configs/scripts/zaton/zat_b38_stalker_cop.ltx
2026-06-17 23:06:51 +03:00

337 lines
18 KiB
TeX

[logic@zat_b38_stalker_cop]
suitable = {=check_npc_name(zat_b38_stalker_cop)} true
prior = 200
active = animpoint@base
[meet]
close_snd_hello = nil
close_snd_bye = nil
close_anim = nil
close_victim = nil
far_anim = nil
far_victim = nil
close_distance = 0
far_distance = 0
use = {!actor_enemy} true
trade_enable = false
allow_break = false
meet_on_talking = false
[animpoint@base]
cover_name = zat_a2_sc_zat_b38_stalker_cop
;reach_distance = 1.5
use_camp = false
meet = meet
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
out_restr = zat_a2_sr_noweap
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
;*****************************************************************
[logic@zat_b38_stalker_cop_in_lair]
suitable = {+zat_b38_disappearance_stalkers_find_to_be_missing_hunter_give_task =check_npc_name(zat_b38_stalker_cop)} true
prior = 200
active = walker@wait_for_actor
on_death = death@lair
post_combat_time = 0, 0
on_hit = hit
[death@lair]
on_info = {-zat_b38_stalker_cop_death} %+zat_b38_stalker_cop_death =stop_sound%
on_info2 = {+zat_b38_lift_open} %+zat_b38_underground_door_open =stop_sound%
[hit]
on_info = {=hit_by_actor !deadly_hit =counter_equal(zat_b38_cop_abuse:0) -zat_b38_stalker_cop_death} %=play_sound(zat_b38_stalker_cop_hit_1) +zat_b38_cop_hit_1%
on_info2 = {=hit_by_actor !deadly_hit =counter_equal(zat_b38_cop_abuse:1) -zat_b38_stalker_cop_death} %=play_sound(zat_b38_stalker_cop_hit_2) +zat_b38_cop_hit_2%
on_info3 = {=hit_by_actor =counter_equal(zat_b38_cop_abuse:2)} %+zat_b38_quest_failed%
[wounded]
hp_state = 0|wounded_heavy@help_heavy
hp_state_see = 0|wounded_heavy@help_heavy
hp_victim = 0|nil
hp_fight = 0|false
hp_cover = 0|false
[walker]
on_info66 = {+zat_b38_cop_hit_1 -zat_b38_cop_hit_1_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_1_done%
on_info77 = {+zat_b38_cop_hit_2 -zat_b38_cop_hit_2_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_2_done%
on_info88 = {=dist_to_actor_ge(150) !actor_enemy -zat_b38_stalker_cop_death} %+zat_b38_failed_getaway%, {=dist_to_actor_ge(150)} %=destroy_object +zat_b38_quest_failed%
wounded = wounded
use_camp = false
corpse_detection_enabled = false
gather_items_enabled = false
help_wounded_enabled = false
[remark]
on_info66 = {+zat_b38_cop_hit_1 -zat_b38_cop_hit_1_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_1_done%
on_info77 = {+zat_b38_cop_hit_2 -zat_b38_cop_hit_2_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_2_done%
on_info88 = {=dist_to_actor_ge(150) !actor_enemy -zat_b38_stalker_cop_death} %+zat_b38_failed_getaway%, {=dist_to_actor_ge(150)} %=destroy_object +zat_b38_quest_failed%
combat_ignore_cond = {-zat_b38_fight_started} true
meet = no_meet
wounded = wounded
corpse_detection_enabled = false
gather_items_enabled = false
help_wounded_enabled = false
[animpoint]
on_info66 = {+zat_b38_cop_hit_1 -zat_b38_cop_hit_1_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_1_done%
on_info77 = {+zat_b38_cop_hit_2 -zat_b38_cop_hit_2_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_2_done%
on_info88 = {=dist_to_actor_ge(150) !actor_enemy -zat_b38_stalker_cop_death} %+zat_b38_failed_getaway%, {=dist_to_actor_ge(150)} %=destroy_object +zat_b38_quest_failed%
meet = no_meet
wounded = wounded
use_camp = false
corpse_detection_enabled = false
gather_items_enabled = false
help_wounded_enabled = false
;***********************************************************
[walker@wait_for_actor]
path_walk = research_first_hall_walk
path_look = research_first_hall_look
def_state_standing = guard_na
on_signal = vnz_first_point | remark@see
on_info = {!npc_in_zone(zat_b38_quest_line) -zat_b38_cop_on_job} %=teleport_npc(zat_b38_research_first_hall_walk:1) +zat_b38_cop_on_job%
on_info66 = {+zat_b38_cop_hit_1 -zat_b38_cop_hit_1_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_1_done%
on_info77 = {+zat_b38_cop_hit_2 -zat_b38_cop_hit_2_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_2_done%
combat_ignore_cond = true
meet = no_meet
corpse_detection_enabled = false
wounded = wounded
use_camp = false
gather_items_enabled = false
help_wounded_enabled = false
on_game_timer = 86400 | {=dist_to_actor_ge(20) !actor_enemy -zat_b38_stalker_cop_death} %+zat_b38_failed_getaway%, {=actor_enemy =dist_to_actor_ge(50)} %=destroy_object +zat_b38_quest_failed%
[remark@see]
target = story | actor
anim = guard_na
on_actor_dist_le_nvis = 7 | {-zat_b38_stalker_cop_about_lair_bloodsucker_done} %=play_sound(zat_b38_stalker_cop_about_lair_bloodsucker) +zat_b38_stalker_cop_about_lair_bloodsucker_done%
on_signal = sound_end | {-zat_b38_disappearance_stalkers_clean_den_of_the_bloodsucker_give} %+zat_b38_disappearance_stalkers_clean_den_of_the_bloodsucker_give =play_sound(zat_b38_stalker_cop_notice)%
on_info = {+zat_b38_disappearance_stalkers_clean_den_of_the_bloodsucker_give -zat_b38_met_with_grouse_saved} %+zat_b38_met_with_grouse_saved =scenario_autosave(st_save_zat_b38_met_with_grouse)%
on_info2 = {+zat_b38_met_with_grouse_saved} walker@research_first_hall
on_info3 = {+zat_b38_cop_hit_1 -zat_b38_cop_hit_1_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_1_done%
on_info4 = {+zat_b38_cop_hit_2 -zat_b38_cop_hit_2_done} %=inc_counter(zat_b38_cop_abuse) =actor_neutral +zat_b38_cop_hit_2_done%
combat_ignore_cond = {-zat_b38_fight_started} true
meet = no_meet
wounded = wounded
corpse_detection_enabled = false
gather_items_enabled = false
help_wounded_enabled = false
on_game_timer = 86400 | {=dist_to_actor_ge(20) !actor_enemy -zat_b38_stalker_cop_death} %+zat_b38_failed_getaway%, {=actor_enemy =dist_to_actor_ge(50)} %=destroy_object +zat_b38_quest_failed%
[walker@research_first_hall]:walker
path_walk = research_first_hall_walk
path_look = research_first_hall_look
def_state_moving1 = sneak_run
def_state_standing = guard_na
out_restr = zat_b38_vnz_out_restr
meet = no_meet
combat_ignore_cond = {-zat_b38_fight_started} true
on_signal = zat_b38_scary_sound | {-zat_b38_scary_sound} remark@illusion %+zat_b38_scary_sound +zat_b38_illusion%
on_signal2 = zat_b38_monster_1 | {-zat_b38_monster_1} %+zat_b38_monster_1%
on_info2 = {+zat_b38_monster_1 -zat_b38_stalker_cop_see_bloodsucker_done -zat_b38_bloodscuker_1_death} remark@monster_1 %=play_sound(zat_b38_stalker_cop_see_bloodsucker) +zat_b38_stalker_cop_see_bloodsucker_done%
on_info3 = {+zat_b38_bloodscuker_1_death -zat_b38_bloodscuker_2_death -zat_b38_stalker_cop_kill_1_done +zat_b38_we_fight_monster_1} %=play_sound(zat_b38_stalker_cop_kill_1) +zat_b38_stalker_cop_kill_1_done =clearAbuse%
on_signal3 = zat_b38_monster_2 | {-zat_b38_monster_2} %+zat_b38_monster_2%
on_info4 = {+zat_b38_monster_2 +zat_b38_bloodscuker_2_death =dist_to_actor_le(5)} animpoint@break_lift %+zat_b38_break_lift =play_sound(zat_b38_stalker_cop_come_here_1)%, {+zat_b38_monster_2 +zat_b38_bloodscuker_2_death} remark@wait_bf_lift
on_info5 = {+zat_b38_monster_2 -zat_b38_bloodscuker_2_death} remark@monster_2 %+zat_b38_stalker_cop_see_bloodsucker_2 =play_sound(zat_b38_stalker_cop_another_one)%
on_info6 = {+zat_b38_bloodscuker_2_death -zat_b38_stalker_cop_kill_2_done +zat_b38_we_fight_monster_2} %=play_sound(zat_b38_stalker_cop_kill_2) +zat_b38_stalker_cop_kill_2_done =clearAbuse%
[remark@illusion]:remark
anim = threat
target = story | zat_b38_scream
on_info = {+zat_b38_time_to_say_illusion -zat_b38_stalker_cop_appear -zat_b38_bloodscuker_1_death -zat_b38_bloodscuker_2_death} %=play_sound(zat_b38_stalker_cop_appear) +zat_b38_stalker_cop_appear%, {+zat_b38_bloodscuker_1_death} walker@research_first_hall, {+zat_b38_bloodscuker_2_death} walker@research_first_hall
on_signal = sound_end | walker@research_first_hall
[remark@monster_1]:remark
out_restr = zat_b38_vnz_out_restr
anim = hide_na
target = story | zat_hiding_place_46
on_info = {+zat_b38_bloodscuker_1_death} walker@research_first_hall
on_info2 = {-zat_b38_we_fight_monster_1} %+zat_b38_we_fight_monster_1%
combat_ignore_cond = false
on_info4 = {+zat_b38_fight_started} remark@monster_1_aim
[remark@monster_1_aim]:remark
out_restr = zat_b38_vnz_out_restr
anim = hide_na
target = story | zat_b38_bloodsucker_1
on_info = {+zat_b38_bloodscuker_1_death} walker@research_first_hall
on_info2 = {-zat_b38_we_fight_monster_1} %+zat_b38_we_fight_monster_1%
combat_ignore_cond = false
[remark@monster_2]:remark
out_restr = zat_b38_vnz_out_restr
anim = hide_na
target = story | zat_b38_bloodsucker_2
on_info = {+zat_b38_bloodscuker_2_death} walker@research_first_hall
on_info2 = {-zat_b38_we_fight_monster_2} %+zat_b38_we_fight_monster_2%
combat_ignore_cond = false
[remark@wait_bf_lift]:remark
out_restr = zat_b38_vnz_out_restr
anim = guard_na
target = story | actor
on_info = {+zat_b38_monster_2 +zat_b38_bloodscuker_2_death =dist_to_actor_le(8)} animpoint@break_lift %+zat_b38_break_lift =play_sound(zat_b38_stalker_cop_come_here_1)%
combat_ignore_cond = true
[animpoint@break_lift]:animpoint
out_restr = zat_b38_vnz_out_restr
cover_name = zat_b38_sc_cop_break_lift
reach_movement = patrol
avail_animations = zat_b38_stalker_turn_on_lift
on_info = {=npc_in_zone(zat_b38_lift_floor)} walker@research_basement %=play_sound(zat_b38_cop_elevator_landing) +zat_b38_cop_elevator_landing_done%
on_info2 = {+zat_b38_lift_opened -zat_b38_stalker_cop_jump_down_1_done} %=play_sound(zat_b38_stalker_cop_jump_down_1) +zat_b38_stalker_cop_jump_down_1_done%
meet = no_meet
combat_ignore_cond = true
[walker@research_basement]:walker
path_walk = research_basement_walk
out_restr = zat_b38_sleepers_territory
combat_ignore_cond = true
meet = no_meet
wounded = wounded
corpse_detection_enabled = false
gather_items_enabled = false
help_wounded_enabled = false
on_signal = zat_b38_cop_jumped | remark@actor_cond
on_signal2 = zat_b38_body_1 | {-zat_b38_stalker_cop_not_a_hunter1_done} remark@body_1
on_signal3 = zat_b38_body_2 | {-zat_b38_stalker_cop_not_a_hunter2_done} remark@body_2
on_signal4 = zat_b38_body_3 | {-zat_b38_stalker_cop_not_a_hunter3_done} remark@body_3
on_signal5 = zat_b38_door | {-zat_b38_stalker_cop_try_done} animpoint@basement_door
on_signal6 = zat_b38_lair_found | {-zat_b38_stalker_cop_bloodsuckers_sleep_done} animpoint@alert
on_info = {-zat_b38_underground_door_open =dist_to_actor_ge(150) !actor_enemy} %+zat_b38_failed_getaway%, {=dist_to_actor_ge(150) =actor_enemy} %=destroy_object +zat_b38_quest_failed%
on_actor_in_zone = zat_b38_lift_floor | {-zat_b38_actor_jumped_earlier} %+zat_b38_actor_jumped_earlier%
[remark@actor_cond]:remark
out_restr = zat_b38_sleepers_territory
anim = wait_na
on_actor_in_zone = zat_b38_lift_floor | {-zat_b38_stalker_cop_down_floor_done} walker@research_basement %=play_sound(zat_b38_stalker_cop_down_floor) +zat_b38_stalker_cop_down_floor_done +zat_b38_disappearance_stalkers_check_basement_give%
on_actor_not_in_zone = zat_b38_lift_floor | {+zat_b38_actor_jumped_earlier} walker@research_basement
on_game_timer = 7000 | remark@quest_failed
[remark@quest_failed]:remark
on_info = {!actor_enemy} %+zat_b38_failed_getaway%, {=dist_to_actor_ge(150) =actor_enemy} %=destroy_object +zat_b38_quest_failed%
[remark@body_1]:remark
out_restr = zat_b38_sleepers_territory
target = story | zat_b38_stalker_corpse_1
anim = search
on_signal = sound_end | walker@research_basement
on_game_timer = 15 | {-zat_b38_stalker_cop_not_a_hunter1_done} %=play_sound(zat_b38_stalker_cop_not_a_hunter_1) +zat_b38_stalker_cop_not_a_hunter1_done%
[remark@body_2]:remark
out_restr = zat_b38_sleepers_territory
target = story | zat_b38_stalker_corpse_2
anim = search
on_signal = sound_end | walker@research_basement
on_game_timer = 15 | {-zat_b38_stalker_cop_not_a_hunter2_done} %=play_sound(zat_b38_stalker_cop_not_a_hunter_2) +zat_b38_stalker_cop_not_a_hunter2_done%
[remark@body_3]:remark
out_restr = zat_b38_sleepers_territory
target = story | zat_b38_stalker_corpse_3
anim = search
on_game_timer = 25 | {-zat_b38_stalker_cop_not_a_hunter3_done} %=play_sound(zat_b38_stalker_cop_not_a_hunter_3) +zat_b38_stalker_cop_not_a_hunter3_done%
on_signal = sound_end | walker@research_basement
[animpoint@basement_door]:animpoint
cover_name = zat_b38_break_lock_animp
avail_animations = zat_b38_stalker_break_lock
out_restr = zat_b38_sleepers_territory
on_info = {-zat_b38_stalker_cop_try_done} %=play_sound(zat_b38_stalker_cop_try) +zat_b38_stalker_cop_try_done%
on_signal = sound_end | {-zat_b38_lock_sound_start} %+zat_b38_lock_sound_start%
on_info2 = {+zat_b38_underground_door_open} remark@invite
on_game_timer = 130 | {-zat_b38_underground_door_open} %+zat_b38_underground_door_open%
combat_ignore_cond = true
[remark@invite]:remark
out_restr = zat_b38_sleepers_territory
target = story | actor
on_info = {=dist_to_actor_le(5)} walker@research_alert %=play_sound(zat_b38_stalker_cop_come_here_2)%
on_info2 = {+zat_b38_bloodscukers_sleepers_stand_up} walker@runaway %=play_sound(zat_b38_stalker_cop_bloodsuckers_no_sleep)%
[walker@research_alert]:walker
out_restr = zat_b38_sleepers_territory
path_walk = research_alert_walk
on_signal = zat_b38_lair_found | {-zat_b38_stalker_cop_bloodsuckers_sleep_done} animpoint@alert ;remark@alert
on_actor_not_in_zone = zat_b38_quest_line | {-zat_b38_underground_door_open} remark@quest_failed
on_actor_in_zone = zat_b38_lift_floor | {-zat_b38_actor_jumped_earlier} %+zat_b38_actor_jumped_earlier%
combat_ignore_cond = true
meet = no_meet
corpse_detection_enabled = false
on_info34 = {+zat_b38_bloodscukers_sleepers_stand_up} walker@runaway %=play_sound(zat_b38_stalker_cop_bloodsuckers_no_sleep)%
[animpoint@alert]:animpoint
cover_name = zat_b38_alert_animp
avail_animations = zat_b38_stalker_alert
out_restr = zat_b38_sleepers_territory
on_game_timer = 40 | {-zat_b38_stalker_cop_bloodsuckers_sleep_done} %=play_sound(zat_b38_stalker_cop_bloodsuckers_sleep) +zat_b38_stalker_cop_bloodsuckers_sleep_done +zat_b38_disappearance_stalkers_get_out_from_den_of_the_bloodsucker_give%
on_game_timer2 = 110 | walker@lair_sneak
on_info = {+zat_b38_bloodscukers_sleepers_stand_up} walker@runaway %=play_sound(zat_b38_stalker_cop_bloodsuckers_no_sleep)%
combat_ignore_cond = true
[walker@lair_sneak]:walker
out_restr = zat_b38_sleepers_territory
path_walk = lair_sneak_walk
path_look = lair_sneak_look
def_state_standing = wait_na
combat_ignore_cond = true
on_info = {+zat_b38_bloodscukers_sleepers_stand_up} walker@runaway %=play_sound(zat_b38_stalker_cop_bloodsuckers_no_sleep)%
on_signal = zat_b38_no_danger | {-zat_b38_stalker_cop_fear_end_done} %=play_sound(zat_b38_stalker_cop_fear_end) +zat_b38_stalker_cop_fear_end_done%
on_signal2 = zat_b38_jump_tonnel_calm | {=dist_to_actor_le(7)} animpoint@jump_tonnel, {+zat_b38_actor_jump_down} animpoint@jump_tonnel
meet = no_meet
corpse_detection_enabled = false
[walker@runaway]:walker
out_restr = zat_b38_sleepers_territory
path_walk = runaway_walk
path_look = runaway_look
def_state_moving1 = run
def_state_moving2 = sprint
def_state_moving3 = sprint
on_signal = zat_b38_jump_tonnel | animpoint@jump_tonnel
meet = no_meet
combat_ignore_cond = true
corpse_detection_enabled = false
[animpoint@jump_tonnel]:animpoint
cover_name = zat_b38_jump_tonnel
avail_animations = zat_b38_stalker_jump_tonnel
out_restr = zat_b38_sleepers_territory
on_npc_in_zone = zat_cop_id | zat_b38_actor_jump_down | walker@get_out
on_info = {-zat_b38_stalker_cop_jump_down_2_done -zat_b38_actor_jump_down} %=play_sound(zat_b38_stalker_cop_jump_down_2) +zat_b38_stalker_cop_jump_down_2_done%
on_game_timer = 80 | {-zat_b38_cop_dirt_landing_done} %=play_sound(zat_b38_cop_dirt_landing) +zat_b38_cop_dirt_landing_done%
on_info2 = {+zat_b38_jump_tonnel_info} walker@get_out
combat_ignore_cond = true
[walker@get_out]:walker
path_walk = get_out_walk
on_game_timer = 30 | {=dist_to_actor_le(5) -zat_b38_den_of_the_bloodsucker_inform_stalkers_give} %=play_sound(zat_b38_stalker_cop_tell_stalker_about_lair)%, %+zat_b38_den_of_the_bloodsucker_inform_stalkers_give%
on_signal = sound_end | {-zat_b38_den_of_the_bloodsucker_inform_stalkers_give} %+zat_b38_den_of_the_bloodsucker_inform_stalkers_give%
on_signal2 = zat_b38_goodbye | {+zat_b38_den_of_the_bloodsucker_inform_stalkers_give} remark@goodbye
meet = no_meet
combat_ignore_cond = true
corpse_detection_enabled = false
[remark@goodbye]:remark
target = story | actor
on_info = {-zat_b38_stalker_cop_tell_about_quest_done =dist_to_actor_le(5)} %=play_sound(zat_b38_stalker_cop_tell_about_quest) +zat_b38_stalker_cop_tell_about_quest_done%
on_signal = sound_end | walker@return %+zat_b38_disappearance_stalkers_meet_cop_later_give%
on_actor_dist_ge_nvis = 100 | %+zat_b38_cop_passed_away +zat_b38_disappearance_stalkers_meet_cop_later_give =destroy_object(story:zat_cop_id)%
on_info2 = {+actor_is_sleeping} %+zat_b38_cop_passed_away +zat_b38_disappearance_stalkers_meet_cop_later_give =destroy_object(story:zat_cop_id)%
on_info3 = {=surge_started -zat_b38_disappearance_stalkers_meet_cop_later_give} walker@return %=play_sound(zat_b38_stalker_cop_tell_about_quest)%
[walker@return]:walker
path_walk = tp_walk
path_look = tp_look
out_restr = zat_b38_vnz_out_restr
def_state_moving1 = run
on_signal = sound_end | {-zat_b38_disappearance_stalkers_meet_cop_later_give} %+zat_b38_disappearance_stalkers_meet_cop_later_give%
meet = no_meet
on_actor_dist_ge_nvis = 100 | %+zat_b38_cop_passed_away +zat_b38_disappearance_stalkers_meet_cop_later_give =destroy_object(story:zat_cop_id)%
on_info = {+actor_is_sleeping} %+zat_b38_cop_passed_away +zat_b38_disappearance_stalkers_meet_cop_later_give =destroy_object(story:zat_cop_id)%
corpse_detection_enabled = false