Divergent/mods/[DEV] Brotherhood/gamedata/scripts/task_brotherhood.script

3824 lines
121 KiB
Plaintext

------- GENERAL Functions --------
local HI = has_alife_info
local GI = give_info
local DI = disable_info
local spawn_squad = dialogs_brotherhood.spawn_squad
function NI(str)
return not (has_alife_info(str))
end
function on_game_start()
RegisterScriptCallback("actor_on_update",actor_on_update)
end
function actor_on_update()
scouting_esc_smart_terrain_7_11_init()
trigger_northern_rush_init()
help_alyosha_shyogolov_init()
---help_alyosha_shyogolov_2_init()
nr_bezsonik_init()
meet_gutalin_init()
nr_primankov_init()
nr_baltunov_init()
bh_starik_1_init()
---bh_like_rats_trap_init()
---nr_execution_yanov_init()
---bh_meet_shlitzer()
---print_pos()
---test_pos_reach()
end
function print_pos()
local se_obj_1 = get_story_se_object("quest_chimera_bait_brotherhood")
local obj_1 = se_obj_1 and level.object_by_id(se_obj_1.id)
if (obj_1) then
printf("Item Pos %s", obj_1:position())
printf("Item Lvid %s", obj_1:level_vertex_id())
printf("Item Gvid %s", obj_1:game_vertex_id())
end
end
function test_pos_reach()
local pos_1 = vector():set( 51.08812713623,2.2247929573059,158.54913330078 ) --- underground 4 (2 in init) from stairs under
local pos_2 = vector():set( 66.219718933105,1.74422955513,153.49101257324 ) --- underground 4 (2 in init) from stairs under
local pos_3 = vector():set( 66.016708374023,1.7425618171692,164.57917785645 ) --- underground 4 (2 in init) from stairs under
local dist_1 = 9.8
local dist_2 = 13
local dist_3 = 14
local knife = db.actor:item_in_slot(1)
local weapon_1 = db.actor:item_in_slot(2)
local weapon_2 = db.actor:item_in_slot(3)
local weapon_3 = db.actor:item_in_slot(4)
if (db.actor:position():distance_to(pos_1) < dist_1) then
if knife and knife:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 1 knife"), 1, "ecolog", 11000, 1)
elseif weapon_1 and weapon_1:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 1 weapon 1"), 1, "ecolog", 11000, 1)
elseif weapon_2 and weapon_2:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 1 weapon 2"), 1, "ecolog", 11000, 1)
elseif weapon_3 and weapon_3:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 1 weapon 3"), 1, "ecolog", 11000, 1)
else
news_manager.send_tip(db.actor, game.translate_string("Inside 1 10"), 1, "ecolog", 11000, 1)
end
end
if (db.actor:position():distance_to(pos_2) < dist_2) then
if knife and knife:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 2 knife"), 1, "ecolog", 11000, 1)
elseif weapon_1 and weapon_1:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 2 weapon 1"), 1, "ecolog", 11000, 1)
elseif weapon_2 and weapon_2:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 2 weapon 2"), 1, "ecolog", 11000, 1)
elseif weapon_3 and weapon_3:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 2 weapon 3"), 1, "ecolog", 11000, 1)
else
news_manager.send_tip(db.actor, game.translate_string("Inside 2 10"), 1, "ecolog", 11000, 1)
end
end
if (db.actor:position():distance_to(pos_3) < dist_3) then
if knife and knife:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 3 knife"), 1, "ecolog", 11000, 1)
elseif weapon_1 and weapon_1:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 3 weapon 1"), 1, "ecolog", 11000, 1)
elseif weapon_2 and weapon_2:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 3 weapon 2"), 1, "ecolog", 11000, 1)
elseif weapon_3 and weapon_3:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("Inside 3 weapon 3"), 1, "ecolog", 11000, 1)
else
news_manager.send_tip(db.actor, game.translate_string("Inside 3 10"), 1, "ecolog", 11000, 1)
end
end
end
function bh_icon_test()
dynamic_news_helper.send_tip(string.format(game.translate_string("C"), alife():actor():character_name()), "Sidorovich A", 5, 10, "ui_inGame2_sid", nil, "Sidorovich B")
---news_manager.send_tip(db.actor, string.format(game.translate_string("C"), alife():actor():character_name()), 0, "Sidorovich", 11000, "ui_inGame2_sid")
---dynamic_news_helper.send_tip(msg, se, 5, 10, npc_1:character_icon(), nil, "npc")
end
function test_dynamic_spawn3()
local pos_1 = vector():set( -150.18804931641,-7.0104246139526,-30.537698745728 ) --- Andrey Corpse
local pos_2 = vector():set( -168.97549438477,-4.5473079681396,-16.890596389771 ) --- Controller
local pos_3 = vector():set( -178.7262878418,-6.3177428245544,-35.88325881958 ) --- Snorks
local pos_4 = vector():set( -158.80000305176,-4.9637117385864,-49.565902709961 ) --- Snorks
if (db.actor:item_in_slot(9) ~= nil) and (db.actor:item_in_slot(9):section() == "device_flashlight") then
local torch = db.actor:item_in_slot(9)
if torch:get_state() == 3 then
news_manager.send_tip(db.actor, game.translate_string("ACTIVE"), 1, "ecolog", 11000, 1)
local actor_dir = device().cam_dir
local pos_1_dir = vec_sub(pos_1,db.actor:position())
local pos_2_dir = vec_sub(pos_2,db.actor:position())
local pos_3_dir = vec_sub(pos_3,db.actor:position())
local pos_4_dir = vec_sub(pos_4,db.actor:position())
local yaw1 = yaw_degree3d(actor_dir, pos_1_dir)
local yaw2 = yaw_degree3d(actor_dir, pos_2_dir)
local yaw3 = yaw_degree3d(actor_dir, pos_3_dir)
local yaw4 = yaw_degree3d(actor_dir, pos_4_dir)
--printf("YAW %s", tostring(yaw))
if yaw1 < 35 then
news_manager.send_tip(db.actor, game.translate_string("1"), 1, "ecolog", 11000, 1)
elseif yaw2 < 35 then
news_manager.send_tip(db.actor, game.translate_string("2"), 1, "ecolog", 11000, 1)
elseif yaw3 < 35 then
news_manager.send_tip(db.actor, game.translate_string("3"), 1, "ecolog", 11000, 1)
elseif yaw4 < 35 then
news_manager.send_tip(db.actor, game.translate_string("4"), 1, "ecolog", 11000, 1)
else
news_manager.send_tip(db.actor, game.translate_string("NONE"), 1, "ecolog", 11000, 1)
end
end
end
end
function scouting_esc_smart_terrain_7_11_init()
if NI("scouting_esc_smart_terrain_7_11_done") then
local dist = 110
local smart = SIMBOARD.smarts_by_names["esc_smart_terrain_7_11"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
GI("scouting_esc_smart_terrain_7_11_done")
end
end
end
end
function trigger_northern_rush_init()
if NI("trigger_northern_rush_init_done") then
if NI("atomic_crusader_start") then
if HI("bar_deactivate_radar_done") then
GI("northern_rush_dialogs_trigger_done")
nr_sorokin_init()
GI("trigger_northern_rush_init_done")
brotherhood_timer.market_share_beginning_1()
end
end
end
end
function nr_sorokin_init()
if (NI("nr_sorokin_init")) then
if not (get_story_se_object("nr_sorokin_squad")) then
local smart = SIMBOARD.smarts_by_names["bar_visitors"]
local squad = SIMBOARD:create_squad(smart,"nr_sorokin_squad")
end
if (get_story_se_object("nr_sorokin_squad")) then
GI("nr_sorokin_init")
end
end
end
function trigger_greed_and_betrayal_init()
local pos_1 = vector():set(129.0233001709,-1.4414930343628,39.330234527588 )
local pos_2 = vector():set(122.13143920898,-3.4335956573486,34.101249694824 )
local pos_3 = vector():set(130.765625,-4.8255987167358,22.945343017578 )
local pos_4 = vector():set(-168.56024169922,-0.0014378130435944,89.404853820801 )
if NI("trigger_greed_and betrayal_done") then
end
end
function help_alyosha_shyogolov_init()
if (NI("help_alyosha_shyogolov_init")) then
if level.name() == "l03_agroprom" then
if (NI("help_alyosha_shyogolov_random")) then
local dist = 200
local smart = SIMBOARD.smarts_by_names["agr_smart_terrain_5_3"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) > dist) then
if (math.random(75) < 25) then
news_manager.send_tip(db.actor, game.translate_string("st_shyogolov_trouble_1_info"), 2, "ecolog", 11000, 1)
dialogs_brotherhood.give_alyosha_shyogolov_trouble_1()
news_manager.send_tip(db.actor, game.translate_string("st_shyogolov_trouble_2_info"), 25, "ecolog", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_shyogolov_trouble_3_info"), 50, "ecolog", 11000, 1)
GI("help_alyosha_shyogolov_init")
else
GI("help_alyosha_shyogolov_random")
brotherhood_timer.alyosha_shyogolov_help_random()
end
end
end
end
end
end
end
function help_alyosha_shyogolov_2_init()
local dist = 200
local smart = SIMBOARD.smarts_by_names["jup_sim_13"]
local smart_2 = SIMBOARD.smarts_by_names["jup_a6"]
local smrt = SIMBOARD.smarts[smart.id]
local smrt_2 = SIMBOARD.smarts[smart_2.id]
if NI("corruption_relocation_init") then
if HI("bar_deactivate_radar_done") then
dialogs_brotherhood.relocation_nr_ecologist_rydzyk_1()
dialogs_brotherhood.relocation_nr_ecologist_1()
dialogs_brotherhood.relocation_nr_ecologist_2()
GI("corruption_relocation_init")
end
end
if NI("help_alyosha_shyogolov_2_init") then
if HI("alyosha_shyogolov_0_done") then
if smart and smart.online and smart_2 and smart_2.online then
if smrt and (db.actor:position():distance_to(smart.position) > dist) and smrt_2 and (db.actor:position():distance_to(smart_2.position) > dist) then
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_1"), 1, "ecolog", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_2"), 7, "bandit", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_3"), 12, "ecolog", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_4"), 16, "bandit", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_5"), 20, "ecolog", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_6"), 24, "bandit", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_7"), 28, "ecolog", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_8"), 32, "bandit", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_9"), 36, "ecolog", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_10"), 38, "bandit", 11000, 1)
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_11"), 40, "bandit", 11000, 1)
dialogs_brotherhood.give_alyosha_shyogolov_trouble_3()
GI("help_alyosha_shyogolov_2_init")
end
end
end
end
end
--- Brotherhood 1 and 2 ---
function task_status_functor.give_task_kill_pack_boars_1_status_f(tsk,task_id)
if (NI("task_kill_pack_boars_1_init")) then
if not (get_story_se_object("pack_boars_1")) then
local dist = 110
local smart = SIMBOARD.smarts_by_names["gar_smart_terrain_6_6"]
if smart and smart.online then
xr_effects.clear_smart_terrain(nil,nil,{"gar_smart_terrain_6_6","true"})
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
local smart = SIMBOARD.smarts_by_names["gar_smart_terrain_6_6"]
local squad = SIMBOARD:create_squad(smart,"pack_boars_1")
GI("task_kill_pack_boars_1_init")
return
end
end
end
end
end
function task_status_functor.give_task_kill_pack_snorks_1_status_f(tsk,task_id)
if (NI("task_kill_pack_snorks_1_init")) then
if not (get_story_se_object("pack_snorks_1")) then
local dist = 100
local smart = SIMBOARD.smarts_by_names["gar_smart_terrain_1_7"]
if smart and smart.online then
xr_effects.clear_smart_terrain(nil,nil,{"gar_smart_terrain_1_7","true"})
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
local smart = SIMBOARD.smarts_by_names["gar_smart_terrain_1_7"]
local squad = SIMBOARD:create_squad(smart,"pack_snorks_1")
GI("task_kill_pack_snorks_1_init")
return
end
end
end
end
end
--- Brotherhood 3 Vybegallo ---
function task_status_functor.give_task_kill_pack_dogs_1_status_f(tsk,task_id)
if (NI("task_kill_pack_dogs_1_init")) then
if not (get_story_se_object("pack_dogs_1")) then
local dist = 100
local smart = SIMBOARD.smarts_by_names["mar_smart_terrain_6_4"]
if smart and smart.online then
xr_effects.clear_smart_terrain(nil,nil,{"mar_smart_terrain_6_4","true"})
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
local smart = SIMBOARD.smarts_by_names["mar_smart_terrain_6_4"]
local squad = SIMBOARD:create_squad(smart,"pack_dogs_1")
xr_effects.spawn_vybegallo_bag()
xr_effects.spawn_vybegallo_trail_1()
xr_effects.spawn_vybegallo_trail_2()
xr_effects.spawn_vybegallo_trail_3()
xr_effects.spawn_vybegallo_trail_4()
GI("task_kill_pack_dogs_1_init")
return
end
end
end
end
end
function xr_effects.spawn_vybegallo_bag()
local pos = vector():set( 93.233978271484,1.3431987762451,336.99731445313 )
local se_obj = alife_create( "quest_package_vybegallo", pos, 194271, 84 )
if ( not se_obj ) then
printe("!ERROR: unable to spawn quest_package_vybegallo" )
end
end
function xr_effects.spawn_vybegallo_trail_1()
local pos = vector():set( 94.755432128906,1.3435776233673,334.9592590332 )
local se_obj = alife_create( "conserva", pos, 195061, 84 )
if ( not se_obj ) then
printe("!ERROR: unable to spawn quest_package_vybegallo_trail_1" )
end
end
function xr_effects.spawn_vybegallo_trail_2()
local pos = vector():set( 98.814163208008,1.2621808052063,335.21612548828 )
local se_obj = alife_create( "conserva", pos, 197280, 84 )
if ( not se_obj ) then
printe("!ERROR: unable to spawn quest_package_vybegallo_trail_2" )
end
end
function xr_effects.spawn_vybegallo_trail_3()
local pos = vector():set( 102.38217163086,1.2957384586334,338.11456298828 )
local se_obj = alife_create( "conserva", pos, 199367, 84 )
if ( not se_obj ) then
printe("!ERROR: unable to spawn quest_package_vybegallo_trail_3" )
end
end
function xr_effects.spawn_vybegallo_trail_4()
local pos = vector():set( 105.27380371094,1.1134397983551,336.060546875 )
local se_obj = alife_create( "conserva", pos, 201262, 84 )
if ( not se_obj ) then
printe("!ERROR: unable to spawn quest_package_vybegallo_trail_4" )
end
end
function task_status_functor.give_alyosha_shyogolov_trouble_1_status_f(tsk,task_id)
if (tsk.stage == 0) then
if (NI("alyosha_shyogolov_trouble_1_init")) then
if not (get_story_se_object("shyogolov_pack_snorks_1")) then
local dist = 100
local smart = SIMBOARD.smarts_by_names["agr_smart_terrain_5_3"]
if smart and smart.online then
xr_effects.clear_smart_terrain(nil,nil,{"agr_smart_terrain_5_3","true"})
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
local smart = SIMBOARD.smarts_by_names["agr_smart_terrain_5_3"]
local squad = SIMBOARD:create_squad(smart,"shyogolov_pack_snorks_1")
tsk.stage = 1
GI("alyosha_shyogolov_trouble_1_init")
return
end
end
end
end
end
if (tsk.stage == 1) then
if HI("alyosha_shyogolov_1_go") then
local dist = 25
local smart = SIMBOARD.smarts_by_names["agr_smart_terrain_4_4"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
GI("alyosha_shyogolov_1_you_arrived")
return
end
end
end
end
end
function task_status_functor.give_alyosha_shyogolov_trouble_2_status_f(tsk,task_id)
local smart_1 = SIMBOARD.smarts_by_names["agr_smart_terrain_5_7"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local smart_2 = SIMBOARD.smarts_by_names["agr_smart_terrain_4_6"]
local smrt_2 = SIMBOARD.smarts[smart_2.id]
local smart_3 = SIMBOARD.smarts_by_names["mar_smart_terrain_7_3"]
local smrt_3 = SIMBOARD.smarts[smart_3.id]
local dist = 80
local npc = get_story_se_object("bh_mozgotlen_squad")
if (tsk.stage == 0) then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist) then
if NI("bh_mozgotlen_squad_1_init") then
local squad = SIMBOARD:create_squad(smart_1,"bh_mozgotlen_squad")
local squad = SIMBOARD:create_squad(smart_1,"bh_mozgotlen_squad_2")
GI("bh_mozgotlen_squad_1_init")
end
end
if smrt_2 and (db.actor:position():distance_to(smart_2.position) < dist) then
if NI("bh_mozgotlen_squad_2_init") then
local squad = SIMBOARD:create_squad(smart_2,"bh_alyosha_zombie_squad_1")
GI("bh_mozgotlen_squad_2_init")
end
end
if smrt_3 and (db.actor:position():distance_to(smart_3.position) < dist) then
if NI("bh_mozgotlen_squad_3_init") then
local squad = SIMBOARD:create_squad(smart_3,"bh_alyosha_zombie_squad_2")
GI("bh_mozgotlen_squad_3_init")
end
end
if npc then
local commander = alife_object(npc:commander_id())
if NI("bh_mozgotlen_document_spawn") then
alife_create_item("bh_mozgotlen_documents", commander)
GI("bh_mozgotlen_document_spawn")
end
end
end
end
function task_status_functor.give_alyosha_shyogolov_trouble_3_status_f(tsk,task_id)
local smart = SIMBOARD.smarts_by_names["jup_sim_13"]
local smrt = SIMBOARD.smarts[smart.id]
local dist = 20
if (tsk.stage == 0) then
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
if NI("alyosha_making_trouble_shout") then
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_13"), 1, "ecolog", 11000, 1)
GI("alyosha_making_trouble_shout")
end
end
if NI("relocated_alyosha_shyogolov_1") then
dialogs_brotherhood.relocation_alyosha_1()
end
if HI("alyosha_shyogolov_retreat_1") then
tsk.stage = 1
end
end
if (tsk.stage == 1) then
if NI("alyosha_shyogolov_bandit_init") then
local squad = SIMBOARD:create_squad(smart,"nr_bandits_1_squad")
local squad_2 = SIMBOARD:create_squad(smart,"nr_bandits_2_squad")
news_manager.send_tip(db.actor, game.translate_string("st_alyosha_making_trouble_12"), 5, "bandit", 11000, 1)
GI("alyosha_shyogolov_bandit_init")
tsk.stage = 2
end
end
if (tsk.stage == 2) then
if HI("nr_bandits_1_squad_dead") and HI("nr_bandits_2_squad_dead") then
GI("nr_bandits_squads_dead_1")
end
end
end
function task_status_functor.give_alyosha_shyogolov_trouble_4_status_f(tsk,task_id)
local dist = 40
local dist_2 = 100
local smart_1 = SIMBOARD.smarts_by_names["jup_a9"]
local smart_2 = SIMBOARD.smarts_by_names["jup_b47"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local smrt_2 = SIMBOARD.smarts[smart_2.id]
local spawn_squad = dialogs_brotherhood.spawn_squad
if (tsk.stage == 0) then ---- enables conversation with Erast, but needs better detecting if disguised or not
if db.actor:character_community() == "actor_ecolog" then
GI("nr_erast_enable_corruption_discussion")
else
DI("nr_erast_enable_corruption_discussion")
end
end
if (tsk.stage == 1) then ---- clear the smarts
news_manager.send_tip(db.actor, game.translate_string("Stage1"), 1, "ecolog", 11000, 1)
if smart_1 and smart_1.online and smart_2 and smart_2.online then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist) then
news_manager.send_tip(db.actor, game.translate_string("Stage 1.1"), 1, "ecolog", 11000, 1)
xr_effects.clear_smart_terrain(nil,nil,{"jup_a9","true"})
xr_effects.clear_smart_terrain(nil,nil,{"jup_b47","true"})
tsk.stage = 2
return
end
end
end
if (tsk.stage == 2) then ---- teleport NPCs
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist) then
news_manager.send_tip(db.actor, game.translate_string("Stage 2"), 1, "ecolog", 11000, 1)
if NI("relocated_alyosha_shyogolov_2") then
dialogs_brotherhood.relocation_alyosha_2()
end
if HI("teleport_erast") then
if NI("erast_fandorin_relocation_1") then
dialogs_brotherhood.relocation_erast_fandorin_1()
tsk.stage = 3
return
end
end
end
end
if (tsk.stage == 3) then ---- spring the ambush
if HI("nr_ambush_init") then
if NI("spawn_amry_test_1") then
local squad_1 = SIMBOARD:create_squad(smart_2,"nr_ambush_squad_1")
local squad_2 = SIMBOARD:create_squad(smart_2,"nr_ambush_squad_3")
local squad_3 = SIMBOARD:create_squad(smart_1,"nr_ambush_squad_2")
local pos_1 = vector():set( 355.57171630859,27.977787017822,-239.86022949219 )
local pos_2 = vector():set( 378.29794311523,27.978296279907,-235.07585144043 )
local pos_3 = vector():set( 314.48291015625,34.592678070068,-237.58148193359 )
local pos_4 = vector():set( 331.10369873047,34.258598327637,-270.34857177734 )
local pos_5 = vector():set( 316.77917480469,34.714248657227,-237.42193603516 )
local se_squad_1 = spawn_squad("nr_ambush_squad_4", pos_1, 1281744, 4694)
local se_squad_2 = spawn_squad("nr_ambush_squad_5", pos_2, 1314488, 4787)
local se_squad_3 = spawn_squad("nr_ambush_squad_6", pos_3, 1221970, 4694)
local se_squad_4 = spawn_squad("nr_ambush_squad_7", pos_4, 1245499, 4694)
local se_squad_5 = spawn_squad("nr_ambush_squad_8", pos_5, 1225743, 4694)
dialogs_brotherhood.change_faction_erast_1()
if NI("relocated_alyosha_shyogolov_3") then
dialogs_brotherhood.relocation_alyosha_3()
CreateTimeEvent("nr_blank_1","nr_blank_1", 1, nr_corruption_self_1)
end
GI("spawn_amry_test_1")
tsk.stage = 4
end
end
if HI("nr_ambush_coward_init") then ---- if the player tries to run away before finishing the dialogue
local dist_4 = 3
local pos = vector():set( 337.31549072266,26.735898971558,-255.1216583252 )
if NI("spawn_amry_test_1") then
if (db.actor:position():distance_to(pos) > dist_4) then
news_manager.send_tip(db.actor, game.translate_string("nr_corruption_coward_1"), 0, "army", 11000, 1)
local squad_1 = SIMBOARD:create_squad(smart_2,"nr_ambush_squad_1")
local squad_2 = SIMBOARD:create_squad(smart_2,"nr_ambush_squad_3")
local squad_3 = SIMBOARD:create_squad(smart_1,"nr_ambush_squad_2")
local pos_1 = vector():set( 355.57171630859,27.977787017822,-239.86022949219 )
local pos_2 = vector():set( 378.29794311523,27.978296279907,-235.07585144043 )
local pos_3 = vector():set( 314.48291015625,34.592678070068,-237.58148193359 )
local pos_4 = vector():set( 331.10369873047,34.258598327637,-270.34857177734 )
local pos_5 = vector():set( 316.77917480469,34.714248657227,-237.42193603516 )
local se_squad_1 = spawn_squad("nr_ambush_squad_4", pos_1, 1281744, 4694)
local se_squad_2 = spawn_squad("nr_ambush_squad_5", pos_2, 1314488, 4787)
local se_squad_3 = spawn_squad("nr_ambush_squad_6", pos_3, 1221970, 4694)
local se_squad_4 = spawn_squad("nr_ambush_squad_7", pos_4, 1245499, 4694)
local se_squad_5 = spawn_squad("nr_ambush_squad_8", pos_5, 1225743, 4694)
dialogs_brotherhood.change_faction_erast_1()
if NI("relocated_alyosha_shyogolov_3") then
CreateTimeEvent("nr_blank_1","nr_blank_1", 1, nr_corruption_self_1)
dialogs_brotherhood.relocation_alyosha_3()
end
GI("spawn_amry_test_1")
tsk.stage = 4
end
end
end
end
if (tsk.stage == 4) then ---- flee and clean the mess
if smrt_2 and (db.actor:position():distance_to(smart_2.position) > dist_2) then
if NI("nr_ambush_cleaned") then
dialogs_brotherhood.nr_ambush_release()
if NI("nr_corruption_self_init") then
if HI("erast_fandorin_dead") then
news_manager.send_tip(db.actor, string.format(game.translate_string("nr_corruption_army_1"), alife():actor():character_name()), 0, "army", 11000, 1)
elseif NI("erast_fandorin_dead") then
news_manager.send_tip(db.actor, string.format(game.translate_string("nr_corruption_army_0"), alife():actor():character_name()), 0, "army", 11000, 1)
dialogs_brotherhood.relocation_erast_fandorin_2()
dialogs_brotherhood.change_faction_erast_2()
end
CreateTimeEvent("nr_blank_2","nr_blank_2", 5, nr_corruption_self_2)
CreateTimeEvent("nr_blank_3","nr_blank_3", 10, nr_corruption_self_3)
CreateTimeEvent("nr_blank_4","nr_blank_4", 15, nr_corruption_self_4)
CreateTimeEvent("nr_blank_5","nr_blank_5", 20, nr_corruption_self_5)
CreateTimeEvent("nr_blank_6","nr_blank_6", 25, nr_corruption_self_6)
GI("nr_corruption_self_init")
end
GI("nr_ambush_cleaned")
return
end
end
end
end
function nr_corruption_self_1()
if NI("nr_corruption_self_1")then
actor_menu.set_msg(1, game.translate_string("nr_corruption_self_1"), 4)
GI("nr_corruption_self_1")
return true
end
end
function nr_corruption_self_2()
if NI("nr_corruption_self_2")then
actor_menu.set_msg(1, game.translate_string("nr_corruption_self_2"), 4)
GI("nr_corruption_self_2")
return true
end
end
function nr_corruption_self_3()
if NI("nr_corruption_self_3")then
actor_menu.set_msg(1, game.translate_string("nr_corruption_self_3"), 4)
GI("nr_corruption_self_3")
return true
end
end
function nr_corruption_self_4()
if NI("nr_corruption_self_4")then
actor_menu.set_msg(1, game.translate_string("nr_corruption_self_4"), 4)
dialogs_brotherhood.give_alyosha_shyogolov_trouble_5()
GI("alyosha_shyogolov_trouble_4_done")
GI("nr_corruption_self_4")
return true
end
end
function nr_corruption_self_5()
if NI("nr_corruption_self_5")then
actor_menu.set_msg(1, game.translate_string("nr_corruption_self_5"), 4)
GI("nr_corruption_self_5")
return true
end
end
function nr_corruption_self_6()
if NI("nr_corruption_self_6")then
actor_menu.set_msg(1, game.translate_string("nr_corruption_self_6"), 4)
GI("nr_corruption_self_6")
return true
end
end
function task_status_functor.give_alyosha_shyogolov_trouble_5_status_f(tsk,task_id)
if (gameplay_disguise.is_disguise ~= nil) then
if db.actor:character_community() == "actor_ecolog" then
db.actor:set_community_goodwill("ecolog", 2000)
end
else
db.actor:set_community_goodwill("army", 2000)
end
end
---- Vybegallo ----
function task_status_functor.give_vybegallo_satisfied_man_status_f(tsk,task_id)
if (tsk.stage == 0) then
if (NI("task_kill_satisfied_man_init")) then
if not (get_story_se_object("satisfied_man")) then
local dist = 27
local smart = SIMBOARD.smarts_by_names["agr_u_bloodsucker_2"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
local smart = SIMBOARD.smarts_by_names["agr_u_bloodsucker_2"]
local squad = SIMBOARD:create_squad(smart,"satisfied_man")
GI("task_kill_satisfied_man_init")
return
end
end
end
end
end
end
--- Brotherhood 4 ---
function task_status_functor.give_task_kill_pack_snorks_2_status_f(tsk,task_id)
if (tsk.stage == 0) then
if (NI("task_kill_pack_snorks_2_init")) then
if not (get_story_se_object("pack_snorks_2")) then
local dist = 100
local smart = SIMBOARD.smarts_by_names["agr_smart_terrain_7_5"]
if smart and smart.online then
xr_effects.clear_smart_terrain(nil,nil,{"agr_smart_terrain_7_5","true"})
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
local smart = SIMBOARD.smarts_by_names["agr_smart_terrain_7_5"]
local squad = SIMBOARD:create_squad(smart,"pack_snorks_2")
tsk.stage = 1
GI("task_kill_pack_snorks_1_init")
return
end
end
end
end
end
if (tsk.stage == 1) then
if HI("pack_snorks_2_dead") then
local dist = 50
local smart = SIMBOARD.smarts_by_names["gar_smart_terrain_3_5"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
GI("butcher_ilya_back_home")
end
end
end
end
end
---- Cordon
--- Railway Assault ---
function task_status_functor.give_sidorovich_railway_assault_status_f(tsk,task_id)
if (tsk.stage == 0) then
if HI("assault_csky_leader_esc_5_7_start_dialog_done") then
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_4_9","true"})
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_5_9","true"})
if (NI("railway_assault_stalker_init")) then
if not (get_story_se_object("stalker_assault_esc_5_9")) then
local smart = SIMBOARD.smarts_by_names["esc_smart_terrain_4_9"]
local squad = SIMBOARD:create_squad(smart,"stalker_assault_esc_5_9")
local squad_2 = SIMBOARD:create_squad(smart,"stalker_assault_esc_5_9_leader")
GI("railway_assault_stalker_init")
tsk.stage = 1
return
end
end
end
end
if (tsk.stage == 1) then
local dist = 75
local smart = SIMBOARD.smarts_by_names["esc_smart_terrain_6_8"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
if (NI("railway_assault_bandit_ref_init")) then
if not (get_story_se_object("bandit_reinforcment_esc_6_8")) then
local smart_2 = SIMBOARD.smarts_by_names["esc_smart_terrain_7_11"]
local squad = SIMBOARD:create_squad(smart_2,"bandit_reinforcment_esc_6_8")
GI("railway_assault_bandit_ref_init")
tsk.stage = 2
return
end
end
end
end
end
if (tsk.stage == 2) then
if HI("bandit_guards_esc_6_8_dead") and HI("bandit_reinforcment_esc_6_8_dead") then
GI("esc_railbridge_taken")
end
end
end
function task_status_functor.give_sidorovich_railway_assault_2_status_f(tsk,task_id)
if (tsk.stage == 0) then
local dist = 150
local smart = SIMBOARD.smarts_by_names["esc_smart_terrain_7_11"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_7_11","true"})
if NI("bandit_reinforcment_esc_7_11") then
local smart = SIMBOARD.smarts_by_names["esc_smart_terrain_7_11"]
local squad = SIMBOARD:create_squad(smart,"bandit_reinforcment_esc_7_11")
GI("bandit_reinforcment_esc_7_11")
tsk.stage = 1
return
end
end
end
end
if (tsk.stage == 1) then
local dist = 50
local smart = SIMBOARD.smarts_by_names["esc_smart_terrain_7_11"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_4_9","true"})
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_5_9","true"})
tsk.stage = 2
return
end
end
end
if (tsk.stage == 2) then
if NI("railway_assault_stalker_init") then
local smart = SIMBOARD.smarts_by_names["esc_smart_terrain_4_9"]
local squad = SIMBOARD:create_squad(smart,"stalker_assault_esc_5_9")
local squad_2 = SIMBOARD:create_squad(smart,"stalker_assault_esc_5_9_leader")
GI("railway_assault_stalker_init")
GI("esc_railway_assault_go")
dialogs_brotherhood.send_railway_assault_message_1()
tsk.stage = 3
return
end
end
if (tsk.stage == 3) then
if HI("bandit_guards_esc_6_8_dead") and HI("bandit_reinforcment_esc_7_11_dead") then
GI("esc_railbridge_taken")
end
end
end
--- Shlitzer
function bh_meet_shlitzer()
if NI("bh_shlitzer_init_done") then
local pos_1 = vector():set( -236.48327636719,-19.751678466797,-131.93586730957 ) --- meet shlitzer
local pos_2 = vector():set( -240.43469238281,-20.030139923096,-157.60787963867 ) --- go to house
local pos_6 = vector():set( -124.4213104248,-30.051345825195,-373.82867431641 ) --- guard house/Badger spawn
local dist_1 = 10
local dist_2 = 1
local npc = get_story_se_object("bh_shlitzer_squad")
if HI("esc_railway_assault_done") then
if NI("bh_shlitzer_spawn_done") then
local se_squad = spawn_squad("bh_shlitzer_squad", pos_1, 21333, 508)
GI("bh_shlitzer_spawn_done")
end
if (db.actor:position():distance_to(pos_1) < dist_1) then
if NI("bh_shlitzer_greeting") then
actor_menu.set_msg(1, game.translate_string("bh_shlitzer_greeting"), 10)
GI("bh_shlitzer_greeting")
end
end
if npc and (npc.position:distance_to(pos_2) < dist_2) then
GI("bh_shlitzer_init_done")
end
end
end
end
function task_status_functor.give_shlitzer_smuggling_1_status_f(tsk,task_id)
--- item states
--- state 0 = using
--- state 1 = putting out
--- state 2 = putting in
--- state 3 = not using
local hrs = level.get_time_hours()
local pos_3 = vector():set( -150.56283569336,-30.771974563599,-277.30380249023 ) --- jeep wreackage
local pos_4 = vector():set( -168.28816223145,-25.436302185059,-352.47952270508 ) --- guard tower
local pos_5 = vector():set( -241.95616149902,-30.707180023193,-353.70162963867 ) --- fence
local pos_6 = vector():set( -124.4213104248,-30.051345825195,-373.82867431641 ) --- guard house
local dist_1 = 6
local dist_2 = 2
local npc = get_story_se_object("bh_badger_squad")
local commander = alife_object(npc:commander_id())
if (hrs >= 23) or (hrs < 5) then
GI("bh_badger_guard_dutz_on")
else
DI("bh_badger_guard_dutz_on")
end
if (tsk.stage == 0) then
if (hrs >= 0) and (hrs < 4) then
if (db.actor:position():distance_to(pos_3) < dist_1) then
if (db.actor:item_in_slot(9) ~= nil) and (db.actor:item_in_slot(9):section() == "device_flashlight") then
local torch = db.actor:item_in_slot(9)
if torch:get_state() == 3 then
GI("bh_shlitzer_smuggling_start")
end
if HI("bh_shlitzer_smuggling_start") and NI("bh_shlitzer_smuggling_1") and torch:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("st_bh_shlitzer_smuggling_1"), nil, "communication", 6000)
CreateTimeEvent("bh_shlitzer_smuggling_init","bh_shlitzer_smuggling_init", 7,bh_shlitzer_smuggling_init_timer)
GI("bh_shlitzer_smuggling_1")
end
if HI("bh_shlitzer_smuggling_1") and NI("bh_shlitzer_smuggling_2") then
if torch:get_state() == 3 or torch:get_state() == 2 then
GI("bh_shlitzer_smuggling_2")
end
end
if HI("bh_shlitzer_smuggling_2") and NI("bh_shlitzer_smuggling_3") and torch:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("st_bh_shlitzer_smuggling_2"), nil, "communication", 6000)
GI("bh_shlitzer_smuggling_3")
end
if HI("bh_shlitzer_smuggling_3") and NI("bh_shlitzer_smuggling_4") then
if torch:get_state() == 3 or torch:get_state() == 2 then
GI("bh_shlitzer_smuggling_4")
end
end
if HI("bh_shlitzer_smuggling_4") and NI("bh_shlitzer_smuggling_done") and torch:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("st_bh_shlitzer_smuggling_3"), nil, "communication", 6000)
GI("bh_shlitzer_smuggling_done")
tsk.stage = 1
return
end
end
end
end
end
if (tsk.stage == 1) then
if (db.actor:position():distance_to(pos_5) < dist_2) and npc and (npc.position:distance_to(pos_5) < dist_2) then
if NI("bh_badger_greeting_1") then
actor_menu.set_msg(1, game.translate_string("st_bh_badger_start_0"), 10)
CreateTimeEvent("bh_badger_greeting_2_init","bh_badger_greeting_2_init", 4,bh_badger_greeting_2_init_timer)
CreateTimeEvent("bh_badger_greeting_3_init","bh_badger_greeting_3_init", 8,bh_badger_greeting_3_init_timer)
GI("bh_badger_greeting_1")
end
end
end
end
function bh_shlitzer_smuggling_init_timer()
if NI("bh_shlitzer_smuggling_done") then
DI("bh_shlitzer_smuggling_start")
DI("bh_shlitzer_smuggling_1")
DI("bh_shlitzer_smuggling_2")
DI("bh_shlitzer_smuggling_3")
DI("bh_shlitzer_smuggling_4")
news_manager.send_tip(db.actor, game.translate_string("st_bh_shlitzer_smuggling_4"), nil, "communication", 6000)
return true
end
return true
end
function bh_badger_greeting_2_init_timer()
actor_menu.set_msg(1, game.translate_string("st_bh_badger_start_1"), 10)
local se_item = alife_create_item("quest_package_shlitzer", db.actor)
return true
end
function bh_badger_greeting_3_init_timer()
actor_menu.set_msg(1, game.translate_string("st_bh_badger_start_2"), 10)
GI("bh_badger_deal_done")
return true
end
function task_status_functor.give_shlitzer_smuggling_2_status_f(tsk,task_id)
local smart_1 = SIMBOARD.smarts_by_names["esc_smart_terrain_6_6"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local dist_1 = 70
local dist_2 = 2
local npc = get_story_se_object("bh_ironchain_squad")
if (tsk.stage == 0) then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_1) then
if NI("bh_ironchain_init") then
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_6_6","true"})
local squad = SIMBOARD:create_squad(smart_1,"bh_ironchain_squad")
local squad_2 = SIMBOARD:create_squad(smart_1,"bh_ironchain_2_squad")
GI("bh_ironchain_init")
tsk.stage = 1
end
end
end
if (tsk.stage == 1) then
if HI("bh_ironchain_deal_start") and NI("bh_ironchain_deal_done") then
if (npc.position:distance_to(db.actor:position()) > dist_2) then
if NI("bh_ironchain_deal_gone_wrong") then
GI("bh_ironchain_deal_gone_wrong")
actor_menu.set_msg(1, game.translate_string("st_bh_ironchain_deal_gone_wrong"), 10)
dialogs_brotherhood.change_faction_bh_ironchain()
end
end
end
if HI("bh_ironchain_deal_done") then
tsk.stage = 2
end
end
if (tsk.stage == 2) then
if NI("bh_ironchain_2_squad_dead") and NI("bh_ironchain_squad_dead") then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) > dist_1) then
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_6_6","true"})
end
end
end
end
function task_status_functor.give_shlitzer_smuggling_3_status_f(tsk,task_id)
local hrs = level.get_time_hours()
local pos_2 = vector():set( -240.43469238281,-20.030139923096,-157.60787963867 ) --- go to house
local pos_3 = vector():set( -150.56283569336,-30.771974563599,-277.30380249023 ) --- jeep wreackage
local pos_4 = vector():set( -168.28816223145,-25.436302185059,-352.47952270508 ) --- guard tower
local pos_5 = vector():set( -241.95616149902,-30.707180023193,-353.70162963867 ) --- fence
local pos_6 = vector():set( -124.4213104248,-30.051345825195,-373.82867431641 ) --- guard house
local dist_1 = 6
local dist_2 = 2
local dist_3 = 30
if (hrs >= 23) or (hrs < 5) then
GI("bh_badger_guard_dutz_on")
else
DI("bh_badger_guard_dutz_on")
end
if (tsk.stage == 0) then
if (hrs >= 0) and (hrs < 4) then
if (db.actor:position():distance_to(pos_3) < dist_1) then
if (db.actor:item_in_slot(9) ~= nil) and (db.actor:item_in_slot(9):section() == "device_flashlight") then
local torch = db.actor:item_in_slot(9)
if torch:get_state() == 3 then
GI("bh_shlitzer_smuggling_start")
end
if HI("bh_shlitzer_smuggling_start") and NI("bh_shlitzer_smuggling_1") and torch:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("st_bh_shlitzer_smuggling_1"), nil, "communication", 6000)
CreateTimeEvent("bh_shlitzer_smuggling_init","bh_shlitzer_smuggling_init", 7,bh_shlitzer_smuggling_init_timer)
GI("bh_shlitzer_smuggling_1")
end
if HI("bh_shlitzer_smuggling_1") and NI("bh_shlitzer_smuggling_2") then
if torch:get_state() == 3 or torch:get_state() == 2 then
GI("bh_shlitzer_smuggling_2")
end
end
if HI("bh_shlitzer_smuggling_2") and NI("bh_shlitzer_smuggling_3") and torch:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("st_bh_shlitzer_smuggling_2"), nil, "communication", 6000)
GI("bh_shlitzer_smuggling_3")
end
if HI("bh_shlitzer_smuggling_3") and NI("bh_shlitzer_smuggling_4") then
if torch:get_state() == 3 or torch:get_state() == 2 then
GI("bh_shlitzer_smuggling_4")
end
end
if HI("bh_shlitzer_smuggling_4") and NI("bh_shlitzer_smuggling_done") and torch:get_state() == 0 then
news_manager.send_tip(db.actor, game.translate_string("st_bh_shlitzer_smuggling_3"), nil, "communication", 6000)
GI("bh_shlitzer_smuggling_done")
tsk.stage = 1
return
end
end
end
end
end
if (tsk.stage == 1) then
if HI("bh_badger_squad_dead") then
if (db.actor:character_community() == "actor_stalker") then
tsk.stage = 2
elseif (db.actor:character_community() == "actor_bandit") or (db.actor:character_community() == "actor_renegade") then
tsk.stage = 2
elseif (db.actor:character_community() == "actor_ecolog") or (db.actor:character_community() == "actor_dolg") or (db.actor:character_community() == "actor_army") then
tsk.stage = 2
elseif (db.actor:character_community() == "actor_monolith") or (db.actor:character_community() == "actor_freedom") or (db.actor:character_community() == "actor_killer") then
tsk.stage = 2
else
tsk.stage = 2
end
end
end
if (tsk.stage == 2) then
if HI("bh_badger_squad_dead") and (db.actor:position():distance_to(pos_5) > dist_3) then
if NI("castor_pollox_relocation_init") then
dialogs_brotherhood.relocation_pollox_and_castor()
end
if HI("castor_pollox_relocation_init") and NI("bh_army_lockdown_init") then
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_2_14","true"})
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_3_7","true"})
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_5_2","true"})
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_9_10","true"})
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_6_8","true"})
GI("bh_army_lockdown_init")
end
if HI("bh_army_lockdown_init") and NI("bh_army_lockdown_init_2") then
local squad = SIMBOARD:create_squad("esc_smart_terrain_9_10","bh_lockdown_9_10_squad")
local squad_2 = SIMBOARD:create_squad("esc_smart_terrain_5_2","bh_lockdown_5_2_squad")
local squad_3 = SIMBOARD:create_squad("esc_smart_terrain_3_7","bh_lockdown_3_7_squad")
local squad_4 = SIMBOARD:create_squad("esc_smart_terrain_3_7","bh_lockdown_3_7_squad_2")
local squad_5 = SIMBOARD:create_squad("esc_smart_terrain_2_14","bh_lockdown_2_14_squad")
local squad_6 = SIMBOARD:create_squad("esc_smart_terrain_6_8","bh_lockdown_6_8_squad")
end
end
end
if (tsk.stage == 3) then
end
news_manager.send_tip(db.actor, string.format(game.translate_string("st_bh_shlitzer_sidorovich_0"), alife():actor():character_name()), 0, "stalker", 11000, 1)
---send_tip(actor, news_id, timeout, sender, showtime, sender_id)
end
--- Dolg Hunter ---
function task_status_functor.give_dolg_bloodsucker_village_2_status_f(tsk,task_id)
local npc_1 = get_story_object("dolg_vadim_bloodsucker")
local npc_2 = get_story_object("dolg_sasha_bloodsucker")
local npc_3 = get_story_object("dolg_sergey_bloodsucker")
local dist_2 = 30
local smart_1 = SIMBOARD.smarts_by_names["mil_smart_terrain_4_2"]
local smart_2 = SIMBOARD.smarts_by_names["mil_smart_terrain_4_3"]
local smart_3 = SIMBOARD.smarts_by_names["mil_smart_terrain_2_10"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local smrt_2 = SIMBOARD.smarts[smart_2.id]
local smrt_3 = SIMBOARD.smarts[smart_3.id]
local hrs = level.get_time_hours()
if (tsk.stage == 0) then
if smart_1 and smart_1.online and smart_2 and smart_2.online and smart_3 and smart_3.online then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_2) then
if NI("bloodsucker_village_1_spawned") then
local squad = SIMBOARD:create_squad(smart_1,"pack_bloodsuckers_dolg_1")
GI("bloodsucker_village_1_spawned")
return
end
elseif smrt_2 and (db.actor:position():distance_to(smart_2.position) < dist_2) then
if NI("bloodsucker_village_2_spawned") then
local squad = SIMBOARD:create_squad(smart_2,"pack_bloodsuckers_dolg_2")
GI("bloodsucker_village_2_spawned")
return
end
elseif smrt_3 and (db.actor:position():distance_to(smart_3.position) < dist_2) then
if NI("bloodsucker_village_3_spawned") then
local squad = SIMBOARD:create_squad(smart_3,"pack_bloodsuckers_dolg_3")
GI("bloodsucker_village_3_spawned")
return
end
end
end
if npc_1 and npc_1:object("killer_patch") and npc_2 and npc_2:object("killer_patch") and npc_3 and npc_3:object("killer_patch") then
if (hrs >= 5) and (hrs < 21) then
give_info("bloodsucker_raid_has_killer_patch_fail")
news_manager.send_tip(db.actor, game.translate_string("st_freedom_voronin_bloodsucker_news_0"), 0, "freedom", 11000, 1)
else
give_info("bloodsucker_raid_has_killer_patch_done")
return
end
end
end
end
function task_status_functor.give_dolg_bloodsucker_village_1_status_f(tsk,task_id)
local dist = 500
local dist_2 = 30
local smart_1 = SIMBOARD.smarts_by_names["mil_smart_terrain_4_2"]
local smart_2 = SIMBOARD.smarts_by_names["mil_smart_terrain_4_3"]
local smart_3 = SIMBOARD.smarts_by_names["mil_smart_terrain_2_10"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local smrt_2 = SIMBOARD.smarts[smart_2.id]
local smrt_3 = SIMBOARD.smarts[smart_3.id]
local hrs = level.get_time_hours()
if (tsk.stage == 0) then
if smart_1 and smart_1.online and smart_2 and smart_2.online and smart_3 and smart_3.online then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist) then
xr_effects.clear_smart_terrain(nil,nil,{"mil_smart_terrain_4_2","true"})
xr_effects.clear_smart_terrain(nil,nil,{"mil_smart_terrain_4_3","true"})
xr_effects.clear_smart_terrain(nil,nil,{"mil_smart_terrain_2_10","true"})
tsk.stage = 1
return
end
end
end
if (tsk.stage == 1) then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_2) then
if NI("bloodsucker_village_1_spawned") then
local squad = SIMBOARD:create_squad(smart_1,"pack_bloodsuckers_dolg_1")
GI("bloodsucker_village_1_spawned")
return
end
elseif smrt_2 and (db.actor:position():distance_to(smart_2.position) < dist_2) then
if NI("bloodsucker_village_2_spawned") then
local squad = SIMBOARD:create_squad(smart_2,"pack_bloodsuckers_dolg_2")
GI("bloodsucker_village_2_spawned")
return
end
elseif smrt_3 and (db.actor:position():distance_to(smart_3.position) < dist_2) then
if NI("bloodsucker_village_3_spawned") then
local squad = SIMBOARD:create_squad(smart_3,"pack_bloodsuckers_dolg_3")
GI("bloodsucker_village_3_spawned")
return
end
end
if HI("bloodsucker_village_1_spawned") and HI("bloodsucker_village_2_spawned") and HI("bloodsucker_village_3_spawned") then
tsk.stage = 2
return
end
end
if (tsk.stage == 2) then
if HI("pack_bloodsuckers_dolg_1_dead") and HI("pack_bloodsuckers_dolg_2_dead") and HI("pack_bloodsuckers_dolg_3_dead") then
if (hrs >= 21) or (hrs < 5) then
give_info("pack_bloodsuckers_dolg_1_all_dead")
return
else
give_info("give_dolg_bloodsucker_village_1_out_of_time")
return
end
end
end
end
function task_status_functor.give_dolg_bloodsucker_village_3_status_f(tsk,task_id)
if (tsk.stage == 0) then
local dist = 50
local smart = SIMBOARD.smarts_by_names["mil_smart_terrain_7_4"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
if NI("dolg_artyom_bloodsucker_0_done") then
if (NI("dolg_ilya_bloodsucker_init")) then
if not (get_story_se_object("dolg_ilya_bloodsucker_squad")) then
local smart_2 = SIMBOARD.smarts_by_names["mil_smart_terrain_8_3"]
local squad = SIMBOARD:create_squad(smart_2,"dolg_ilya_bloodsucker_og_squad")
local squad_2 = SIMBOARD:create_squad(smart_2,"dolg_ilya_bloodsucker_squad")
GI("dolg_ilya_bloodsucker_init")
return
end
end
else
if (NI("dolg_ilya_bloodsucker_init")) then
if not (get_story_se_object("dolg_ilya_bloodsucker_2_squad")) then
local smart_2 = SIMBOARD.smarts_by_names["mil_smart_terrain_8_3"]
local squad = SIMBOARD:create_squad(smart_2,"dolg_ilya_bloodsucker_og_squad")
local squad_2 = SIMBOARD:create_squad(smart_2,"dolg_ilya_bloodsucker_2_squad")
GI("dolg_ilya_bloodsucker_init")
return
end
end
end
end
end
end
end
----- Bellerophon Quests -----
function task_status_functor.give_task_bellerophon_chimera_1_status_f(tsk,task_id)
local dist = 10
local dist_2 = 25
local pos_1 = vector():set(33.515865325928,0.076751172542572,-39.296714782715 )
local pos_2 = vector():set(25.73078918457,0.046717882156372,19.807271957397 )
local pos_3 = vector():set(-14.096794128418,0.13558429479599,5.6727747917175 )
local pos_4 = vector():set(-10.063064575195,0.11458736658096,-24.969347000122 )
local pos_5 = vector():set(13.057991981506,0.042427986860275,-55.789348602295 )
local smart_1 = SIMBOARD.smarts_by_names["yan_smart_terrain_6_4"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local hrs = level.get_time_hours()
if (tsk.stage == 0) then
if level.name() == "l08_yantar" then
if NI("relocation_bellerophon_1") then
dialogs_brotherhood.relocation_bellerophon_1()
end
if HI("bellerophon_7_done") then
tsk.stage = 1
end
end
end
if (tsk.stage == 1) then
if (hrs >= 21) or (hrs < 5) then
if (db.actor:position():distance_to(pos_1) < dist) then
if NI("bellerophon_chimera_spawn_1") then
local se_squad = spawn_squad("bellerophon_chimera_1", pos_4, 62058, 2217)
GI("bellerophon_chimera_spawn_1")
tsk.stage = 2
end
end
if (db.actor:position():distance_to(pos_2) < dist) then
if NI("bellerophon_chimera_spawn_1") then
local se_squad = spawn_squad("bellerophon_chimera_1", pos_3, 60051, 2193)
GI("bellerophon_chimera_spawn_1")
tsk.stage = 2
end
end
if (db.actor:position():distance_to(pos_5) < dist) then
if NI("bellerophon_chimera_spawn_1") then
local se_squad = spawn_squad("bellerophon_chimera_1", pos_4, 62058, 2217)
GI("bellerophon_chimera_spawn_1")
tsk.stage = 2
end
end
end
end
if (tsk.stage == 2) then
if HI("bellerophon_chimera_1_dead") then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_2) then
GI("bellerophon_back_buncker_1")
end
end
end
end
---- Trapper Quests ----
function task_status_functor.give_task_trapper_chimera_1_status_f(tsk,task_id)
local se_obj = get_story_se_object("quest_chimera_bait_brotherhood")
local obj = se_obj and level.object_by_id(se_obj.id)
local dist_1 = 2
local dist_2 = 5
local dist_3 = 100
local smart_1 = SIMBOARD.smarts_by_names["jup_sim_21"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local smart_2 = SIMBOARD.smarts_by_names["jup_b46"]
local smrt_2 = SIMBOARD.smarts[smart_2.id]
local pos = vector():set( -189.52851867676,3.3515679836273,394.25390625 )
local hrs = level.get_time_hours()
if (tsk.stage == 0) then
if (hrs >= 21) or (hrs < 5) then
if smrt_1 and (db.actor:position():distance_to(smart_2.position) < dist_3) then
xr_effects.clear_smart_terrain(nil,nil,{"jup_b46","true"})
xr_effects.clear_smart_terrain(nil,nil,{"jup_sim_21","true"})
if (obj) then
if (obj:position():distance_to(pos) < dist_2) then
if NI("trapper_chimera_1_init") then
CreateTimeEvent("nr_trapper_blank_1","nr_trapper_blank_1", 10, nr_trapper_chimera_1_spawn)
tsk.stage = 1
GI("trapper_chimera_1_init")
end
end
end
end
end
if (db.actor:position():distance_to(pos) < dist_1) then
if (hrs >= 21) or (hrs < 5) then
actor_menu.set_msg(1, game.translate_string("nr_trapper_chimera_1_info"), 1)
else
actor_menu.set_msg(1, game.translate_string("nr_trapper_chimera_2_info"), 1)
end
end
end
if (tsk.stage == 1) then
return
end
end
function nr_trapper_chimera_1_spawn()
local smart_1 = SIMBOARD.smarts_by_names["jup_sim_21"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
if NI("trapper_chimera_1_init_timed") then
local squad = SIMBOARD:create_squad(smart_1,"trapper_chimera_1")
GI("trapper_chimera_1_init_timed")
return true
end
end
function task_status_functor.give_task_trapper_chimera_2_status_f(tsk,task_id)
local se_obj_1 = get_story_se_object("quest_chimera_bait_brotherhood")
local se_obj_2 = get_story_se_object("radio_micro_quest")
local npc = get_story_se_object("trapper_chimera_2")
local squad_1 = get_story_se_object("jup_b205_monster_04_squad")
local obj_1 = se_obj_1 and level.object_by_id(se_obj_1.id)
local obj_2 = se_obj_2 and level.object_by_id(se_obj_2.id)
local dist_1 = 2
local dist_2 = 5
local dist_3 = 50
local pos_1 = vector():set( -381.40188598633,2.6410093307495,2.5957698822021 )
local pos_2 = vector():set( -290.74948120117,7.8559045791626,-3.1653161048889 )
local smart_1 = SIMBOARD.smarts_by_names["jup_b205_smart_terrain_tushkano"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local hrs = level.get_time_hours()
if (tsk.stage == 0) then
if (db.actor:position():distance_to(pos_2) < dist_1) then
if (hrs >= 21) or (hrs < 5) then
actor_menu.set_msg(1, game.translate_string("nr_trapper_chimera_1_info"), 1)
else
actor_menu.set_msg(1, game.translate_string("nr_trapper_chimera_2_info"), 1)
end
end
if (hrs >= 21) or (hrs < 5) then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_3) then --- releases the burer
if (squad_1) then
alife_release(squad_1)
end
end
if (obj_1) then
if (obj_1:position():distance_to(pos_2) < dist_2) then
if NI("trapper_chimera_2_init") then
CreateTimeEvent("nr_trapper_blank_2","nr_trapper_blank_2", 10, nr_trapper_chimera_2_bait)
tsk.stage = 1
GI("trapper_chimera_2_init")
end
end
end
end
end
if (tsk.stage == 1) then
if (npc.position:distance_to(pos_2) < dist_2) then
if NI("trapper_chimera_3_init") then
alife_release_id(obj_1:id()) --- destroy the bait
CreateTimeEvent("nr_trapper_blank_3","nr_trapper_blank_3", 45, nr_trapper_chimera_3_bait)
tsk.stage = 2
GI("trapper_chimera_3_init")
end
end
if (db.actor:position():distance_to(pos_1) < dist_1) then
actor_menu.set_msg(1, game.translate_string("nr_trapper_chimera_1_info"), 1)
end
end
if (tsk.stage == 2) then
if (db.actor:position():distance_to(pos_1) < dist_1) then
actor_menu.set_msg(1, game.translate_string("nr_trapper_chimera_1_info"), 1)
end
if (obj_2) then
if (obj_2:position():distance_to(pos_1) < dist_2) then
GI("trapper_chimera_record_in_place")
if NI("trapper_chimera_2_dead") then
if (npc.position:distance_to(pos_1) < dist_2) then
GI("trapper_chimera_record_set")
tsk.stage = 3
end
end
end
end
end
if (tsk.stage == 3) then
if HI("trapper_chimera_2_recording_done") then
if (obj_2:position():distance_to(pos_1) < dist_2) and (npc.position:distance_to(pos_1) < dist_2) then
news_manager.send_tip(db.actor, game.translate_string("st_trapper_chimera_2_recording_done"), 0, "stalker", 11000, 1)
GI("trapper_chimera_2_recording_done_success")
tsk.stage = 4
else
news_manager.send_tip(db.actor, game.translate_string("st_trapper_chimera_recover_failed"), 0, "stalker", 11000, 1)
tsk.stage = 0
dialogs_brotherhood.reset_trapper_chimera_2()
alife_release_id(obj_2:id()) --- destroy the recorder
end
end
end
if (tsk.stage == 4) then
end
if HI("trapper_chimera_10_done") then
if npc then
local commander = alife_object(npc:commander_id())
if commander and commander:alive() then
news_manager.send_tip(db.actor, game.translate_string("st_trapper_chimera_2_chimera_back"), 0, "stalker", 11000, 1)
DI("trapper_chimera_10_done")
DI("trapper_chimera_2_dead")
GI("trapper_chimera_2_back")
dialogs_brotherhood.reset_trapper_chimera_2()
if NI("trapper_chimera_2_recording_done_success") then
tsk.stage = 0
end
end
end
end
end
function nr_trapper_chimera_2_bait()
if NI("trapper_chimera_2_init_timed") then
GI("trapper_chimera_2_bait_active")
GI("trapper_chimera_2_init_timed")
return true
end
end
function nr_trapper_chimera_3_bait()
if NI("trapper_chimera_3_init_timed") then
DI("trapper_chimera_2_bait_active")
GI("trapper_chimera_3_init_timed")
return true
end
end
function task_status_functor.give_task_trapper_missing_hunter_1_status_f(tsk,task_id)
local pos_1 = vector():set( 365.19027709961,-5.8573417663574,362.37469482422 ) --- Lesun corpse
local pos_2 = vector():set( 383.57675170898,-5.8499975204468,382.04071044922 ) --- Bloodsucker 1
local pos_3 = vector():set( 362.181640625,-4.8819522857666,386.53329467773 ) --- Bloodsucker 2
local dist_1 = 2
if (tsk.stage == 0) then
if NI("trapper_missing_hunter_1_init") then
local se_squad = spawn_squad("nr_trapper_missing_hunter_1_squad", pos_1, 1296707, 4756)
xr_effects.kill_squad(nil,nil,{"nr_trapper_missing_hunter_1_squad"})
GI("trapper_missing_hunter_1_init")
tsk.stage = 1
end
end
if (tsk.stage == 1) then
if level.name() == "jupiter" then
if (db.actor:position():distance_to(pos_1) < dist_1) then
if NI("trapper_missing_hunter_1_mutant_init") then
local se_squad_2 = spawn_squad("pack_trapper_bloodsucker_1", pos_2, 1322932, 4811)
local se_squad_3 = spawn_squad("pack_trapper_bloodsucker_2", pos_3, 1292260, 4756)
GI("trapper_missing_hunter_1_mutant_init")
end
end
end
if HI("pack_trapper_bloodsucker_1_dead") and HI("pack_trapper_bloodsucker_2_dead") then
GI("give_task_trapper_missing_hunter_1_all")
end
end
end
function task_status_functor.give_task_trapper_missing_hunter_2_status_f(tsk,task_id)
local pos_1 = vector():set( 423.30490112305,9.9538507461548,-86.548324584961 ) --- trigger
local pos_2 = vector():set( 414.94821166992,9.8523788452148,-120.08416748047 ) --- Fasan corpse
local pos_3 = vector():set( 423.58679199219,9.9551553726196,-72.242469787598 ) --- Burer 1
local pos_4 = vector():set( 416.53118896484,9.8503370285034,-110.60095214844 ) --- Pseudogiant
local pos_5 = vector():set( 391.01727294922,4.4709033966064,-114.56340026855 ) --- Burer 2
local smart_1 = SIMBOARD.smarts_by_names["jup_b208"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local dist_1 = 2
local dist_2 = 30
if (tsk.stage == 0) then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_2) then
xr_effects.clear_smart_terrain(nil,nil,{"jup_b208","true"})
tsk.stage = 1
end
end
if (tsk.stage == 1) then
if level.name() == "jupiter" then
if (db.actor:position():distance_to(pos_1) < dist_1) then
if NI("trapper_missing_hunter_2_init") then
local se_squad = spawn_squad("nr_trapper_missing_hunter_2_squad", pos_2, 1371645, 4823)
xr_effects.kill_squad(nil,nil,{"nr_trapper_missing_hunter_2_squad"})
GI("trapper_missing_hunter_2_init")
tsk.stage = 2
end
end
end
end
if (tsk.stage == 2) then
if NI("trapper_missing_hunter_2_mutant_init") then
local se_squad_3 = spawn_squad("pack_trapper_burer_1", pos_3, 1384994, 4825)
local se_squad_4 = spawn_squad("pack_trapper_gigant_1", pos_4, 1374021, 4823)
local se_squad_5 = spawn_squad("pack_trapper_burer_2", pos_5, 1333053, 4677)
GI("trapper_missing_hunter_2_mutant_init")
end
if HI("pack_trapper_burer_1_dead") and HI("pack_trapper_burer_2_dead") and HI("pack_trapper_gigant_1_dead") then
GI("give_task_trapper_missing_hunter_2_mutants_dead")
end
if (db.actor:position():distance_to(pos_2) < dist_1) then
GI("give_task_trapper_missing_hunter_2_found")
end
if HI("give_task_trapper_missing_hunter_2_mutants_dead") and HI("give_task_trapper_missing_hunter_2_found") then
GI("give_task_trapper_missing_hunter_2_all")
end
end
end
function task_status_functor.give_task_trapper_missing_hunter_3_status_f(tsk,task_id)
local pos_1 = vector():set( -317.50521850586,-3.5592434406281,181.98251342773 ) --- Andrey Corpse
local pos_2 = vector():set( -354.77172851563,-0.72435384988785,173.37098693848 ) --- Controller
local pos_3 = vector():set( -306.46594238281,-1.8311321735382,171.57833862305 ) --- Snorks
local dist_1 = 2
if (tsk.stage == 0) then
if level.name() == "jupiter" then
if NI("trapper_missing_hunter_3_init") then
local se_squad = spawn_squad("nr_trapper_missing_hunter_3_squad", pos_1, 177898, 4527)
xr_effects.kill_squad(nil,nil,{"nr_trapper_missing_hunter_3_squad"})
GI("trapper_missing_hunter_3_init")
tsk.stage = 1
end
end
end
if (tsk.stage == 1) then
if (db.actor:position():distance_to(pos_1) < dist_1) then
if NI("trapper_missing_hunter_3_mutant_init") then
local se_squad_3 = spawn_squad("pack_trapper_controller_1", pos_2, 116265, 4527)
local se_squad_4 = spawn_squad("pack_trapper_snorks_1", pos_3, 196742, 4742)
GI("trapper_missing_hunter_3_mutant_init")
end
end
if HI("pack_trapper_controller_1_dead") and HI("pack_trapper_snorks_1_dead") then
GI("give_task_trapper_missing_hunter_3_mutants_dead")
end
end
end
---- Legendary Hunt -----
--- Calydonian Boar ---
function task_status_functor.give_hunt_legendary_2_status_f(tsk,task_id)
local dist = 60
local dist_2 = 50
local dist_3 = 75
local dist_4 = 300
local dist_5 = 15
local smart_1 = SIMBOARD.smarts_by_names["mar_smart_terrain_7_7"]
local smart_2 = SIMBOARD.smarts_by_names["mar_smart_terrain_6_7"]
local smart_3 = SIMBOARD.smarts_by_names["mar_smart_terrain_4_7"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local smrt_2 = SIMBOARD.smarts[smart_2.id]
local smrt_3 = SIMBOARD.smarts[smart_3.id]
if (tsk.stage == 0) then
printe("Control Boar 1")
if smart_1 and smart_1.online and smart_2 and smart_2.online and smart_3 and smart_3.online then
printe("Control Boar 2")
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist) then
if NI("legendary_pack_boars_1_spawned") then
local squad = SIMBOARD:create_squad(smart_1,"legendary_pack_boars_1")
GI("legendary_pack_boars_1_spawned")
tsk.stage = 1
return
end
elseif smrt_2 and (db.actor:position():distance_to(smart_2.position) < dist) then
if NI("legendary_pack_boars_2_spawned") then
local squad = SIMBOARD:create_squad(smart_2,"legendary_pack_boars_2")
GI("legendary_pack_boars_2_spawned")
tsk.stage = 2
return
end
elseif smrt_3 and (db.actor:position():distance_to(smart_3.position) < dist) then
if NI("legendary_pack_boars_3_spawned") then
local squad = SIMBOARD:create_squad(smart_3,"legendary_pack_boars_3")
GI("legendary_pack_boars_3_spawned")
tsk.stage = 3
return
end
end
end
end
if (tsk.stage == 1) then --- smart_1 already spawned
if HI("legendary_pack_boars_1_dead") then
if smrt_2 and (db.actor:position():distance_to(smart_2.position) < dist_2) then
if NI("legendary_pack_boars_2_spawned") then
local squad = SIMBOARD:create_squad(smart_2,"legendary_pack_boars_2")
GI("legendary_pack_boars_2_spawned")
tsk.stage = 4
return
end
elseif smrt_3 and (db.actor:position():distance_to(smart_3.position) < dist_2) then
if NI("legendary_pack_boars_3_spawned") then
local squad = SIMBOARD:create_squad(smart_3,"legendary_pack_boars_3")
GI("legendary_pack_boars_3_spawned")
tsk.stage = 5
return
end
end
elseif (db.actor:position():distance_to(smart_1.position) > dist_4) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
end
end
if (tsk.stage == 2) then --- smart_2 already spawned
if HI("legendary_pack_boars_2_dead") then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_2) then
if NI("legendary_pack_boars_2_spawned") then
local squad = SIMBOARD:create_squad(smart_1,"legendary_pack_boars_1")
GI("legendary_pack_boars_1_spawned")
tsk.stage = 4
return
end
elseif smrt_3 and (db.actor:position():distance_to(smart_3.position) < dist_2) then
if NI("legendary_pack_boars_3_spawned") then
local squad = SIMBOARD:create_squad(smart_3,"legendary_pack_boars_3")
GI("legendary_pack_boars_3_spawned")
tsk.stage = 6
return
end
end
elseif (db.actor:position():distance_to(smart_1.position) > dist_4) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
end
end
if (tsk.stage == 3) then --- smart_3 already spawned
if HI("legendary_pack_boars_3_dead") then
if smrt_2 and (db.actor:position():distance_to(smart_2.position) < dist_2) then
if NI("legendary_pack_boars_2_spawned") then
local squad = SIMBOARD:create_squad(smart_2,"legendary_pack_boars_2")
GI("legendary_pack_boars_2_spawned")
tsk.stage = 6
return
end
elseif smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_2) then
if NI("legendary_pack_boars_1_spawned") then
local squad = SIMBOARD:create_squad(smart_1,"legendary_pack_boars_1")
GI("legendary_pack_boars_1_spawned")
tsk.stage = 5
return
end
end
elseif (db.actor:position():distance_to(smart_1.position) > dist_4) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
end
end
if (tsk.stage == 4) then --- smart_1 and smart_2 spawned
if HI("legendary_pack_boars_1_dead") and HI("legendary_pack_boars_2_dead") then
if smrt_3 and (db.actor:position():distance_to(smart_3.position) < dist_2) then
if NI("legendary_pack_boars_3_spawned") then
local squad = SIMBOARD:create_squad(smart_3,"legendary_pack_boars_3")
GI("legendary_pack_boars_3_spawned")
tsk.stage = 7
return
end
end
elseif (db.actor:position():distance_to(smart_1.position) > dist_4) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
end
end
if (tsk.stage == 5) then --- smart_1 and smart_3 spawned
if HI("legendary_pack_boars_1_dead") and HI("legendary_pack_boars_3_dead") then
if smrt_2 and (db.actor:position():distance_to(smart_2.position) < dist_2) then
if NI("legendary_pack_boars_2_spawned") then
local squad = SIMBOARD:create_squad(smart_2,"legendary_pack_boars_2")
GI("legendary_pack_boars_2_spawned")
tsk.stage = 7
return
end
end
elseif (db.actor:position():distance_to(smart_1.position) > dist_4) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
end
end
if (tsk.stage == 6) then --- smart_2 and smart_3 spawned
if HI("legendary_pack_boars_2_dead") and HI("legendary_pack_boars_3_dead") then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_2) then
if NI("legendary_pack_boars_1_spawned") then
local squad = SIMBOARD:create_squad(smart_1,"legendary_pack_boars_1")
GI("legendary_pack_boars_1_spawned")
tsk.stage = 7
return
end
end
elseif (db.actor:position():distance_to(smart_1.position) > dist_4) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
end
end
if (tsk.stage == 7) then --- smart_1 and smart_2 and smart_3 spawned
if HI("legendary_pack_boars_2_dead") and HI("legendary_pack_boars_1_dead") and HI("legendary_pack_boars_3_dead") then
if NI("legendary_boar_calydonian_spawned") then
dialogs_brotherhood.pseudo_dynamic_spawn_legendary_1()
tsk.stage = 8
return
end
local npc = get_story_se_object("legendary_pack_boars_calydonian")
elseif npc and (npc.position:distance_to(db.actor:position()) > dist_3) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
end
end
if (tsk.stage == 8) then --- when the guard of the Calydonian boar dies spawn reinforcment
if HI("legendary_pack_boars_calydonian_guard_dead") and NI("legendary_pack_boars_calydonian_dead") then
if NI("legendary_boar_reinforcment_1_spawned") then
dialogs_brotherhood.pseudo_dynamic_spawn_legendary_1()
tsk.stage = 9
return
end
local npc = get_story_se_object("legendary_pack_boars_calydonian")
elseif npc and (npc.position:distance_to(db.actor:position()) > dist_3) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
elseif HI("legendary_pack_boars_calydonian_dead") then
tsk.stage = 12
news_manager.send_tip(db.actor, game.translate_string("Calydonian Boar is dead"), 0, "stalker", 11000, 1)
end
end
if (tsk.stage == 9) then --- when the reinforcment_1 of the Calydonian boar dies spawn reinforcment_2
if HI("legendary_pack_boars_reinf_1_dead") and NI("legendary_pack_boars_calydonian_dead") then
if NI("legendary_boar_reinforcment_2_spawned") then
dialogs_brotherhood.pseudo_dynamic_spawn_legendary_1()
tsk.stage = 10
return
end
local npc = get_story_se_object("legendary_pack_boars_calydonian")
elseif npc and (npc.position:distance_to(db.actor:position()) > dist_3) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
elseif HI("legendary_pack_boars_calydonian_dead") then
tsk.stage = 12
news_manager.send_tip(db.actor, game.translate_string("Calydonian Boar is dead"), 0, "stalker", 11000, 1)
end
end
if (tsk.stage == 10) then --- when the reinforcment_2 of the Calydonian boar dies spawn reinforcment_3
if HI("legendary_pack_boars_reinf_2_dead") and NI("legendary_pack_boars_calydonian_dead") then
if NI("legendary_boar_reinforcment_3_spawned") then
dialogs_brotherhood.pseudo_dynamic_spawn_legendary_1()
tsk.stage = 11
return
end
local npc = get_story_se_object("legendary_pack_boars_calydonian")
elseif npc and (npc.position:distance_to(db.actor:position()) > dist_3) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
elseif HI("legendary_pack_boars_calydonian_dead") then
tsk.stage = 12
news_manager.send_tip(db.actor, game.translate_string("Calydonian Boar is dead"), 0, "stalker", 11000, 1)
end
end
if (tsk.stage == 11) then --- when the reinforcment_3 of the Calydonian boar dies no reinforcment
if HI("legendary_pack_boars_calydonian_dead") then
tsk.stage = 12
news_manager.send_tip(db.actor, game.translate_string("Calydonian Boar is dead"), 0, "stalker", 11000, 1)
local npc = get_story_se_object("legendary_pack_boars_calydonian")
elseif npc and (npc.position:distance_to(db.actor:position()) > dist_3) then
news_manager.send_tip(db.actor, game.translate_string("st_calydonian_boar_fleed_1"), 0, "communication", 11000, 1)
GI("player_fled_from_calydonian_boar")
return
end
end
if (tsk.stage == 12) then --- when the Calydonian boar dies
return
end
end
function task_status_functor.give_hunt_legendary_1_status_f(tsk,task_id)
local dist = 70
local dist_2 = 15
local dist_3 = 30
local spawn_squad = dialogs_brotherhood.spawn_squad
local smart = SIMBOARD.smarts_by_names["red_smart_terrain_monsters"]
local smrt = SIMBOARD.smarts[smart.id]
local hrs = level.get_time_hours()
local pos_1 = vector():set( 186.6668548584,0.79058438539505,90.37654876709 )
local pos_2 = vector():set( 255.88650512695,-0.52286732196808,63.478019714355 )
local pos_3 = vector():set( 221.20915222168,1.4110627174377,24.584827423096 )
local pos_4 = vector():set( 238.7276763916,2.0450139045715,96.016990661621 )
if (tsk.stage == 0) then
if (hrs >= 21) or (hrs < 5) then
if smart and smart.online then
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
if NI("forester_news_legendary_1") then
news_manager.send_tip(db.actor, game.translate_string("st_forester_legendary_1_info"), 0, "stalker", 11000, 1)
GI("forester_news_legendary_1")
end
if smrt and (db.actor:position():distance_to(smart.position) < dist_2) then
if db.actor:item_in_slot(7) ~= nil and db.actor:item_in_slot(7):section() == "trenchcoat_green_outfit_brotherhood_forester" then
if (NI("hunt_vlad_drakul_1_init")) then
local se_squad_1 = spawn_squad("legendary_bloodsucker_1", pos_1, 122161, 2775)
local se_squad_2 = spawn_squad("legendary_bloodsucker_2", pos_2, 153543, 2842)
local se_squad_3 = spawn_squad("legendary_bloodsucker_3", pos_3, 138640, 2829)
local se_squad_4 = spawn_squad("legendary_bloodsucker_4", pos_4, 146467, 2850)
GI("hunt_vlad_drakul_1_init")
tsk.stage = 1
return
end
end
end
end
end
end
end
if (tsk.stage == 1) then
if HI("legendary_bloodsucker_1_dead") and HI("legendary_bloodsucker_2_dead") and HI("legendary_bloodsucker_3_dead") and HI("legendary_bloodsucker_4_dead") then
if (hrs >= 21) or (hrs < 5) then
if smart and smart.online then
if smrt and (db.actor:position():distance_to(smart.position) < dist_3) then
if db.actor:item_in_slot(7) ~= nil and db.actor:item_in_slot(7):section() == "trenchcoat_green_outfit_brotherhood_forester" then
if (NI("hunt_vlad_drakul_2_init")) then
if NI("forester_news_legendary_2") then
news_manager.send_tip(db.actor, game.translate_string("st_forester_legendary_2_info"), 0, "stalker", 11000, 1)
GI("forester_news_legendary_2")
end
local se_squad_5 = spawn_squad("legendary_bloodsucker_v", pos_2, 153543, 2842)
local se_squad_6 = spawn_squad("legendary_bloodsucker_5", pos_1, 122161, 2775)
local se_squad_7 = spawn_squad("legendary_bloodsucker_d", pos_4, 146467, 2850)
local se_squad_8 = spawn_squad("legendary_bloodsucker_6", pos_3, 138640, 2829)
GI("hunt_vlad_drakul_2_init")
tsk.stage = 2
return
end
end
elseif smrt and (db.actor:position():distance_to(smart.position) > dist_3) then
if NI("forester_news_legendary_4") then
news_manager.send_tip(db.actor, game.translate_string("st_forester_legendary_4_info"), 0, "stalker", 11000, 1)
GI("forester_news_legendary_4")
end
end
end
else
if NI("forester_news_legendary_3") then
news_manager.send_tip(db.actor, game.translate_string("st_forester_legendary_3_info"), 0, "stalker", 11000, 1)
GI("forester_news_legendary_3")
end
end
end
end
if (tsk.stage == 2) then
if HI("legendary_bloodsucker_d_dead") and HI("legendary_bloodsucker_v_dead") then
GI("legendary_bloodsucker_vlad_drakul_dead")
end
end
end
function task_status_functor.give_rescue_orion_quest_status_f(tsk,task_id)
local pos_1 = vector():set(26.031335830688,-8.2342977523804,143.26322937012 )
local pos_2 = vector():set(16.905651092529,-8.2306518554688,122.2557220459 )
local pos_3 = vector():set(14.258852958679,-8.2303371429443,123.04223632813 )
local pos_5 = vector():set(84.709777832031,-16.126983642578,66.559776306152 )
local pos_6 = vector():set(87.101875305176,-16.129384994507,64.91136932373 )
local pos_7 = vector():set(71.884750366211,-16.126708984375,94.465553283691 )
local pos_8 = vector():set(29.322734832764,-8.2383699417114,100.76599121094 )
local pos_9 = vector():set(47.349697113037,-8.2361946105957,103.71166992188 )
local pos_10 = vector():set(29.101696014404,-8.2312469482422,80.914306640625 )
local pos_11 = vector():set(18.270523071289,-8.2423601150513,66.437576293945 )
local pos_12 = vector():set(45.599113464355,4.2125010490417,12.874862670898 )
local pos_13 = vector():set(41.886127471924,3.7325174808502,2.285183429718 )
local pos_14 = vector():set(10.946595191956,-8.2365570068359,90.858016967773 )
local pos_15 = vector():set(108.85188293457,-11.439143180847,52.803562164307 )
local pos_16 = vector():set(108.54220581055,-7.7326726913452,38.519180297852)
local pos_17 = vector():set(103.87827301025,-7.6534037590027,38.086296081543 )
local pos_18 = vector():set(113.21655273438,-7.7315864562988,38.295310974121 )
local pos_20 = vector():set(79.766120910645,-7.9560108184814,-18.753499984741 )
local pos_21 = vector():set(112.30296325684,-7.7722730636597,-52.072357177734)
local pos_22 = vector():set(138.6630859375,-7.7427062988281,-24.461986541748 )
local pos_23 = vector():set(112.4231262207,-6.9253225326538,-34.570152282715 )
local pos_24 = vector():set(110.73091888428,-7.9594664573669,5.9682545661926 )
local pos_25 = vector():set(108.39345550537,-7.7746415138245,1.4874260425568 )
local pos_26 = vector():set(116.1070022583,-6.9230275154114,-0.30516818165779 )
local pos_27 = vector():set(110.04892730713,-7.7252421379089,13.748426437378 )
local pos_4 = vector():set(13.428091049194,-8.23570728302,100.07263183594 )
local pos_19 = vector():set(8.1462268829346,-8.2311153411865,98.834182739258 )
local spawn_squad = dialogs_brotherhood.spawn_squad
local smart = SIMBOARD.smarts_by_names["agr_u_monsters"]
local smrt = SIMBOARD.smarts[smart.id]
local dist_1 = 4
local dist_2 = 2
local dist_3 = 1
if (tsk.stage == 0) then
if level.name() == "l03u_agr_underground" then --spawns common mutants if on the Agroprom Underground level
if (db.actor:position():distance_to(pos_1) < dist_1) then
if NI("orion_spawn_2") then
local se_squad_2 = spawn_squad("pack_agru_mutants_1", pos_2, 2056, 3673)
GI("orion_spawn_2")
end
end
if (db.actor:position():distance_to(pos_4) < dist_2) then
if NI("orion_spawn_19") then
if HI("orion_spawn_2") then
local se_squad_19 = spawn_squad("pack_agru_mutants_2", pos_19, 1040, 3622)
GI("orion_spawn_19")
end
end
end
if (db.actor:position():distance_to(pos_7) < dist_2) then
if NI("orion_spawn_5") then
local se_squad_5 = spawn_squad("pack_agru_mutants_3", pos_5, 6716, 3650)
GI("orion_spawn_5")
end
end
if (db.actor:position():distance_to(pos_8) < dist_1) then
if NI("orion_spawn_9") then
local se_squad_9 = spawn_squad("pack_agru_mutants_2", pos_9, 4195, 3629)
GI("orion_spawn_9")
end
if NI("orion_spawn_10") then
local se_squad_10 = spawn_squad("pack_agru_mutants_2", pos_10, 2714, 3658)
GI("orion_spawn_10")
end
end
if (db.actor:position():distance_to(pos_11) < dist_1) then
if NI("orion_spawn_10") then
local se_squad_10 = spawn_squad("pack_agru_mutants_2", pos_10, 2714, 3658)
GI("orion_spawn_10")
end
end
if (db.actor:position():distance_to(pos_12) < dist_2) then
if NI("orion_spawn_13") then
local se_squad_13 = spawn_squad("pack_agru_mutants_2", pos_13, 3585, 3716)
GI("orion_spawn_13")
end
end
if (db.actor:position():distance_to(pos_14) < dist_1) then
if NI("orion_spawn_2") then
local se_squad_2 = spawn_squad("pack_agru_mutants_1", pos_2, 2056, 3673)
GI("orion_spawn_2")
end
end
if (db.actor:position():distance_to(pos_15) < dist_2) then
if NI("agru_orion_mutants_1_init") then
xr_effects.clear_smart_terrain(nil,nil,{"agr_u_monsters","true"})
local se_squad_16 = spawn_squad("pack_agru_mutants_1", pos_16, 8598, 3727)
GI("agru_orion_mutants_1_init")
tsk.stage = 1
return
end
end
end
end
if (tsk.stage == 1) then
if (NI("give_task_kill_controller_1_init")) then
if (db.actor:position():distance_to(pos_27) < dist_2) then --trigger for Burer and Orion spawn
if NI("orion_spawn_27") then
local se_squad_20 = spawn_squad("pack_agru_burer_1", pos_20, 6338, 3727)
local se_squad_21 = spawn_squad("pack_agru_burer_2", pos_21, 9143, 3724)
local se_squad_22 = spawn_squad("pack_agru_burer_3", pos_22, 11555, 3727)
GI("orion_spawn_27")
end
tsk.stage = 2
GI("give_task_kill_controller_1_init")
return
end
end
end
if (tsk.stage == 2) then
if HI("pack_agru_burer_1_dead") and HI("pack_agru_burer_2_dead") and HI("pack_agru_burer_3_dead")then
if (db.actor:position():distance_to(pos_23) < dist_3) then
if NI("orion_spawn_24") then
local se_squad_24 = spawn_squad("pack_agru_controller_1", pos_24, 8967, 3727)
local se_squad_25 = spawn_squad("pack_agru_burer_1", pos_25, 8552, 3727)
local se_squad_26 = spawn_squad("pack_agru_burer_1", pos_26, 9760, 3727)
GI("orion_spawn_24")
end
end
end
if HI("brotherhood_agru_controller_dead") then
DI("agr_snork_infestion")
return
end
end
end
function task_status_functor.give_rpg_missile_in_the_sky_status_f(tsk,task_id)
if (tsk.stage == 0) then
printe("Control RPG in the sky running")
if level.name() == "l01_escape" then
printe("Control RPG in the sky on level")
if (is_empty(db.heli)) then
printe("Control RPG in the sky spawning heli")
local pos = vector():set( -25.020586013794,-12.214082717896,-117.88251495361 )
local heli_se = alife_create("helicopter",pos,268396,555)
tsk.stage = 1
else
printe("Control RPG in the sky heli already spawned")
tsk.stage = 1
end
end
end
if (tsk.stage == 1) then
printe("Control RPG in the sky task stage 1")
end
end
------ Northern Rush -----
---- Fanatic ----
function task_status_functor.give_task_fanat_rookie_training_1_status_f(tsk,task_id)
local npc = get_story_se_object("nr_iliaz_squad")
local squad_1 = get_story_se_object("nr_iliaz_boar_squad")
local dist_1 = 2
local dist_2 = 10
local dist_3 = 50
local dist_4 = 25
local dist_5 = 3
local pos_1 = vector():set( -207.83670043945,-6.3246264457703,-17.561170578003 )
local pos_2 = vector():set( -222.81701660156,-9.301365852356,-13.697906494141 )
local pos_3 = vector():set( -235.4893951416,-13.486360549927,-14.958400726318 )
local pos_4 = vector():set( -223.73385620117,-19.864381790161,-163.76029968262 )
local smart_1 = SIMBOARD.smarts_by_names["esc_smart_terrain_5_12"]
local smrt_1 = SIMBOARD.smarts[smart_1.id]
local smart_2 = SIMBOARD.smarts_by_names["esc_smart_terrain_2_12"]
local smrt_2 = SIMBOARD.smarts[smart_1.id]
if (tsk.stage == 0) then
if NI("nr_iliaz_squad_init") then
local se_squad = spawn_squad("nr_iliaz_squad", pos_4, 31839, 454)
GI("nr_iliaz_squad_init")
end
if HI("nr_iliaz_0_done") then
tsk.stage = 1
end
end
if (tsk.stage == 1) then
if smrt_1 and (db.actor:position():distance_to(smart_1.position) < dist_3) then ---clears boar smart and spawns the boars
if NI("nr_iliaz_boar_squad_init") then
xr_effects.clear_smart_terrain(nil,nil,{"esc_smart_terrain_5_12","true"})
GI("nr_iliaz_boar_squad_init")
end
if HI("nr_iliaz_boar_squad_init") and NI("nr_iliaz_boar_spawn") then
local squad = SIMBOARD:create_squad(smart_1,"nr_iliaz_boar_squad")
GI("nr_iliaz_boar_spawn")
end
end
if HI("nr_iliaz_1_done") then
tsk.stage = 2
return
end
end
if (tsk.stage == 2) then
if (db.actor:position():distance_to(pos_1) < dist_2) then
GI("nr_iliaz_arrived_1")
end
if (npc.position:distance_to(pos_1) < dist_1) then
GI("nr_ilyaz_point_1")
end
if (npc.position:distance_to(pos_2) < dist_1) then
CreateTimeEvent("nr_ilyaz_blank_1","nr_ilyaz_blank_1", 5, nr_ilyaz_1_init)
GI("nr_ilyaz_point_2")
tsk.stage = 3
end
end
if (tsk.stage == 3) then
if (npc.position:distance_to(pos_2) < dist_1) then
end
if (npc.position:distance_to(pos_1) < dist_5) then
tsk.stage = 4
GI("nr_ilyaz_artifact_back")
end
end
if (tsk.stage == 4) then
if smrt_2 and (db.actor:position():distance_to(smart_2.position) < dist_4) then
GI("nr_iliaz_arrived_2")
DI("nr_ilyaz_artfiact_hunt_1")
end
end
end
function nr_ilyaz_1_init()
if NI("nr_ilyaz_1_init_timed") then
DI("nr_ilyaz_point_1")
GI("nr_ilyaz_1_init_timed")
return true
end
end
---- Scamlok ----
function task_status_functor.give_task_join_scamlok_1_status_f(tsk,task_id)
if (tsk.stage == 0) then
local dist = 25
local smart = SIMBOARD.smarts_by_names["jup_a6"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
GI("nr_fool_you_arrived")
return
end
end
end
if HI("nr_hawaiian_scamlok_0_done") or HI("barkeep_confirm_scam") then
GI("give_task_join_scamlok_1_done")
end
end
function task_status_functor.give_task_escort_sorokin_1_status_f(tsk,task_id)
if (tsk.stage == 0) then
local dist = 25
local smart = SIMBOARD.smarts_by_names["jup_a6"]
if smart and smart.online then
local smrt = SIMBOARD.smarts[smart.id]
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
GI("sorokin_1_you_arrived")
return
end
end
end
end
----- Bezsonik ----
function nr_bezsonik_init()
local dist = 3
local dist_2 = 15
local hrs = level.get_time_hours()
local smart = SIMBOARD.smarts_by_names["mil_smart_terrain_7_12"]
local smrt = SIMBOARD.smarts[smart.id]
local pos_1 = vector():set( -6.8887801170349,-6.1277666091919,65.943511962891 )
local pos_2 = vector():set( -6.7903175354004,-6.0532302856445,44.868602752686 )
local pos_3 = vector():set( -6.7579164505005,-6.1126184463501,86.457405090332 )
local pos_4 = vector():set( 4.3408036231995,-8.8730173110962,3.7783288955688 )
if (NI("nr_bezsonik_init")) then
if level.name() == "l07_military" then
if (hrs >= 20) and (hrs < 24) then
if (NI("nr_bezsonik_init_random")) then
if (db.actor:position():distance_to(pos_1) < dist) then
GI("bezsonik_1")
end
if HI("bezsonik_1") and (db.actor:position():distance_to(pos_2) < dist) then
if (math.random(50) < 25) then
if NI("nr_bezsonik_init") then
local squad = SIMBOARD:create_squad(smart,"nr_bezsonik_squad")
GI("nr_bezsonik_init")
end
else
brotherhood_timer.bezsonik_init_random()
GI("nr_bezsonik_init_random")
DI("bezsonik_1")
end
end
if HI("bezsonik_1") and (db.actor:position():distance_to(pos_3) < dist) then
DI("bezsonik_1")
end
end
end
end
end
if HI("nr_bezsonik_init") then
if (db.actor:position():distance_to(pos_4) < dist_2) then
if NI("nr_bezsonik_shout") then
actor_menu.set_msg(1, game.translate_string("nr_bezsonik_info"), 10)
GI("nr_bezsonik_shout")
end
end
end
end
function task_status_functor.give_task_bezsonik_1_status_f(tsk,task_id)
local smart = SIMBOARD.smarts_by_names["mil_smart_terrain_8_3"]
local smrt = SIMBOARD.smarts[smart.id]
local hrs = level.get_time_hours()
if (tsk.stage == 0) then
local dist = 80
if smart and smart.online then
if smrt and (db.actor:position():distance_to(smart.position) < dist) then
xr_effects.clear_smart_terrain(nil,nil,{"mil_smart_terrain_8_3","true"})
tsk.stage = 1
return
end
end
end
if (tsk.stage == 1) then
if NI("bezsonik_dogs_init") then
local squad = SIMBOARD:create_squad(smart,"pack_dogs_bezsonik_1")
GI("bezsonik_dogs_init")
end
if HI("pack_dogs_bezsonik_1_dead") then
if (hrs >= 20) or (hrs < 3) then
GI("bezsonik_dogs_sleep")
tsk.stage = 2
else
GI("bezsonik_dogs_nosleep")
tsk.stage = 2
end
end
end
if (tsk.stage == 2) then
return
end
end
---- Butcher Trouble ----
function butcher_troubble_init()
local dist = 3
local dist_2 = 5
local dist_3 = 2
local pos_1 = vector():set( -113.33467102051,0.59587639570236,8.8507452011108 )
local pos_2 = vector():set( -105.58847045898,0.96052712202072,4.7404828071594 )
local pos_3 = vector():set( -98.773048400879,0.71849876642227,-1.2279287576675 )
local pos_4 = vector():set( -98.735130310059,0.7244935631752,-3.1979916095734 )
local pos_5 = vector():set( -82.451950073242,0.96916776895523,3.7255098819733 )
local pos_6 = vector():set( -91.589393615723,0.96841841936111,3.613053560257 )
local pos_7 = vector():set( -70.399047851563,0.96921545267105,4.7191781997681 )
local pos_8 = vector():set( -107.49711608887,1.0145883560181,14.611536026001 )
local pos_9 = vector():set( -142.93444824219,0.62204450368881,9.111102104187 )
if (NI("butcher_troubble_init")) then
if level.name() == "l02_garbage" then
if (NI("butcher_troubble_init_random")) then
if (db.actor:position():distance_to(pos_1) < dist) then --- approach from west
GI("butcher_troubble_1")
end
if HI("butcher_troubble_1") and (db.actor:position():distance_to(pos_2) < dist) then
if (math.random(24) < 25) then
if NI("butcher_troubble_init") then
local se_squad_1 = spawn_squad("butcher_tug_1_squad", pos_3, 101729, 726)
local se_squad_2 = spawn_squad("butcher_tug_2_squad", pos_4, 101727, 726)
GI("butcher_troubble_init")
end
else
brotherhood_timer.butcher_troubble_init_random()
GI("butcher_troubble_init_random")
DI("butcher_troubble_1")
end
end
if HI("butcher_troubble_1") and (db.actor:position():distance_to(pos_8) < dist_2) then
DI("butcher_troubble_1")
end
if HI("butcher_troubble_1") and (db.actor:position():distance_to(pos_9) < dist_2) then
DI("butcher_troubble_1")
end
if (db.actor:position():distance_to(pos_5) < dist) then --- approach from east
GI("butcher_troubble_2")
end
if HI("butcher_troubble_2") and (db.actor:position():distance_to(pos_6) < dist) then
if (math.random(24) < 25) then
if NI("butcher_troubble_init") then
local se_squad_1 = spawn_squad("butcher_tug_1_squad", pos_3, 101729, 726)
local se_squad_2 = spawn_squad("butcher_tug_2_squad", pos_4, 101727, 726)
GI("butcher_troubble_init")
end
else
brotherhood_timer.butcher_troubble_init_random()
GI("butcher_troubble_init_random")
DI("butcher_troubble_2")
end
end
if HI("butcher_troubble_2") and (db.actor:position():distance_to(pos_7) < dist_2) then
DI("butcher_troubble_2")
end
end
end
end
if HI("butcher_troubble_init") then
if NI("butcher_troubble_shout") then
actor_menu.set_msg(1, game.translate_string("butcher_troubble_info_1"), 4)
GI("butcher_troubble_shout")
end
if (db.actor:position():distance_to(pos_3) < dist_3) then --- interrupt the conversation
GI("butcher_troubble_interrupt")
end
end
end
---- Gutalin ----
local brotherhood_artifact_table = {
"af_dragon_eye",
"af_ameba_mica",
"af_ameba_slime",
"af_ameba_slug",
"af_baloon",
"af_blood",
"af_compass",
"af_cristall",
"af_cristall_flower",
"af_drops",
"af_dummy_battery",
"af_dummy_dummy",
"af_dummy_glassbeads",
"af_dummy_pellicle",
"af_dummy_spring",
"af_electra_flash",
"af_electra_moonlight",
"af_electra_sparkler",
"af_eye",
"af_fire",
"af_fireball",
"af_fuzz_kolobok",
"af_glass",
"af_gold_fish",
"af_gravi",
"af_ice",
"af_medusa",
"af_mincer_meat",
"af_night_star",
"af_oasis_heart",
"af_quest_b14_twisted",
"af_rusty_kristall",
"af_rusty_sea",
"af_rusty_thorn",
"af_soul",
"af_vyvert",
"jup_b1_half_artifact",
"af_monolith",
"af_cocoon",
"af_cell",
"af_fountain",
"af_spaika",
"af_signet",
"af_repei",
"af_bat",
"af_sun",
"af_ear",
"af_chelust",
"af_atom",
"af_lighthouse",
"af_fire_loop",
"af_zhelch",
"af_sandstone",
"af_kislushka",
"af_black_angel",
"af_grapes",
"af_skull_miser",
"af_star_phantom",
"af_medallion",
"af_peas",
"af_generator",
"af_fonar",
"af_tapeworm",
"af_moh",
"af_serofim",
"af_elektron",
"af_kogot",
"af_ball",
"af_black_spray",
"af_bracelet",
"af_empty",
"af_full_empty",
"af_itcher",
"af_lobster_eyes",
"af_pin",
"af_ring",
"af_sponge",
"af_death_lamp",
"af_misery_bread_lead_box",
"af_medusa_lead_box",
"af_cristall_flower_lead_box",
"af_night_star_lead_box",
"af_vyvert_lead_box",
"af_gravi_lead_box",
"af_gold_fish_lead_box",
"af_cristall_lead_box",
"af_fireball_lead_box",
"af_dummy_glassbeads_lead_box",
"af_eye_lead_box",
"af_fire_lead_box",
"af_blood_lead_box",
"af_mincer_meat_lead_box",
"af_soul_lead_box",
"af_fuzz_kolobok_lead_box",
"af_baloon_lead_box",
"af_glass_lead_box",
"af_electra_sparkler_lead_box",
"af_electra_flash_lead_box",
"af_electra_moonlight_lead_box",
"af_dummy_battery_lead_box",
"af_dummy_dummy_lead_box",
"af_ice_lead_box",
"af_compass_lead_box",
"af_oasis_heart_lead_box",
"jup_b1_half_artifact_lead_box",
"af_quest_b14_twisted_lead_box",
"af_black_spray_lead_box",
"af_bracelet_lead_box",
"af_death_lamp_lead_box",
"af_empty_lead_box",
"af_full_empty_lead_box",
"af_itcher_lead_box",
"af_lobster_eyes_lead_box",
"af_pin_lead_box",
"af_ring_lead_box",
"af_sponge_lead_box",
}
function meet_gutalin_init()
local dist = 3
local dist_2 = 12
local dist_3 = 20
local dist_4 = 1
local pos_1 = vector():set( 225.18710327148,-0.011421859264374,13.123934745789 )
local pos_2 = vector():set( 224.59652709961,-0.01020672917366,17.893041610718 )
local pos_3 = vector():set( 223.60771179199,-0.010213196277618,-3.2195067405701 )
local pos_4 = vector():set( 239.3835144043,-0.011857271194458,3.8250217437744 )
local pos_5 = vector():set( 215.75396728516,-0.0045666992664337,44.321727752686 )
local pos_6 = vector():set( -206.23277282715,-19.894157409668,-136.4208984375 )
local npc = get_story_se_object("bh_gutalin_squad")
local smart = SIMBOARD.smarts_by_names["bar_visitors"]
local smrt = SIMBOARD.smarts[smart.id]
if NI("meet_gutalin_done") then
if (NI("meet_gutalin_init")) then --- meeting Gutalin
if level.name() == "l05_bar" then
if (NI("meet_gutalin_init_random")) then
if (db.actor:position():distance_to(pos_1) < dist) then --- initial point
GI("meet_gutalin_init_1")
end
if HI("meet_gutalin_init_1") and (db.actor:position():distance_to(pos_2) < dist) then --- trigger meeting
if (math.random(100) < 25) then
if NI("meet_gutalin_init") then
local se_squad_1 = spawn_squad("bh_gutalin_squad", pos_5, 54199, 1764)
GI("meet_gutalin_init")
end
else
brotherhood_timer.meet_gutalin_init_random()
GI("meet_gutalin_init_random")
DI("meet_gutalin_init_1")
end
end
if HI("meet_gutalin_init_1") and (db.actor:position():distance_to(pos_3) < dist) then --- wipe
DI("meet_gutalin_init_1")
end
if HI("meet_gutalin_init_1") and (db.actor:position():distance_to(pos_4) < dist) then --- wipe
DI("meet_gutalin_init_1")
end
end
end
end
if HI("meet_gutalin_init") then
if npc then
if (npc.position:distance_to(db.actor:position()) < dist_2) then
if NI("meet_gutalin_shout") then
actor_menu.set_msg(1, game.translate_string("meet_gutalin_info_1"), 4)
GI("meet_gutalin_shout")
end
end
end
end
if HI("bh_gutalin_start_dialog_done") and NI("bh_gutalin_relocation_init") then --- teleport Gutalin to Cordon
if smrt and (db.actor:position():distance_to(smart.position) < dist_3) then
dialogs_brotherhood.relocation_bh_gutalin()
end
end
if HI("bh_gutalin_relocation_init") and (level.name() == "l01_escape") then
if npc then
if (npc.position:distance_to(db.actor:position()) < dist_2) and (npc.position:distance_to(pos_6) < dist_4) then
if NI("meet_gutalin_preaching") then
local rand = math.random(1,4)
if (rand == 1) then
actor_menu.set_msg(1, game.translate_string("meet_gutalin_info_2"), 8)
GI("meet_gutalin_preaching")
CreateTimeEvent("bh_gutalin_blank_1","bh_gutalin_blank_1", 14, bh_gutalin_1_init)
elseif (rand == 2) then
actor_menu.set_msg(1, game.translate_string("meet_gutalin_info_3"), 8)
GI("meet_gutalin_preaching")
CreateTimeEvent("bh_gutalin_blank_1","bh_gutalin_blank_1", 14, bh_gutalin_1_init)
elseif (rand == 3) then
actor_menu.set_msg(1, game.translate_string("meet_gutalin_info_4"), 8)
GI("meet_gutalin_preaching")
CreateTimeEvent("bh_gutalin_blank_1","bh_gutalin_blank_1", 14, bh_gutalin_1_init)
elseif (rand == 4) then
actor_menu.set_msg(1, game.translate_string("meet_gutalin_info_5"), 8)
GI("meet_gutalin_preaching")
CreateTimeEvent("bh_gutalin_blank_1","bh_gutalin_blank_1", 14, bh_gutalin_1_init)
end
end
end
end
end
end
end
function bh_gutalin_1_init()
DI("meet_gutalin_preaching")
return true
end
function task_status_functor.give_task_bh_gutalin_1_status_f(tsk,task_id)
local npc = get_story_object("bh_gutalin")
local squad = get_story_se_object("bh_gutalin_squad")
local hrs = level.get_time_hours()
local dist_1 = 3
local pos_1 = vector():set( -84.095733642578,-6.1258764266968,-19.095394134521 )
if (hrs >= 22) then
if npc then
for i, v in ipairs(brotherhood_artifact_table) do
if npc:object(v) ~= nil then
GI("bh_gutalin_treasure")
end
end
end
end
if squad and (squad.position:distance_to(pos_1) < dist_1) then
CreateTimeEvent("bh_gutalin_burry_treasure_1","bh_gutalin_burry_treasure_1", 6, bh_gutalin_burry_treasure_1)
end
if HI("bh_gutalin_squad_dead") then
GI("meet_gutalin_done")
end
end
function bh_gutalin_burry_treasure_1()
local npc = get_story_object("bh_gutalin")
for i, v in ipairs(brotherhood_artifact_table) do
item = npc:object(v)
if item then
npc:drop_item(item)
end
end
DI("bh_gutalin_treasure")
return true
end
---- random events
--- Controller ambush
function nr_primankov_init()
local smart = SIMBOARD.smarts_by_names["jup_b203"]
local smrt = SIMBOARD.smarts[smart.id]
local dist_1 = 25
local dist_2 = 15
local dist_3 = 1
local pos_1 = vector():set( -190.61285400391,0.75813418626785,-278.00579833984 )
local pos_2 = vector():set( -188.34548950195,0.96719044446945,-272.51498413086 )
local pos_3 = vector():set( -184.74633789063,0.75744158029556,-284.82553100586 )
if NI("nr_primankov_init") then
if level.name() == "jupiter" then
if NI("market_share_block_random_quest") then
if smart and smart.online then
if smrt and (db.actor:position():distance_to(smart.position) < dist_1) then
if NI("nr_primankov_random") then
if NI("nr_primakov_spawn_1") then
if (math.random(75) < 25) then
xr_effects.clear_smart_terrain(nil,nil,{"jup_b203","true"})
local se_squad_1 = spawn_squad("controller_victim_1_squad", pos_3, 403174, 4704)
GI("nr_primakov_spawn_1")
else
brotherhood_timer.nr_primakov_random()
GI("nr_primankov_random")
end
end
end
if HI("nr_primakov_spawn_1") then
if NI("nr_primakov_ambush") then
if (db.actor:position():distance_to(pos_1) < dist_3) then --- trigger ambush
dialogs_brotherhood.nr_primakov_turn()
local se_squad_2 = spawn_squad("pack_random_controller_1", pos_2, 397277, 4704)
GI("nr_primakov_ambush")
GI("nr_primankov_init")
end
end
if NI("nr_primakov_ambush") then --- cry for help
if NI("nr_primakov_help") then
local rand = math.random(1,4)
if (rand == 1) then
actor_menu.set_msg(1, game.translate_string("nr_primakov_help_1"), 8)
GI("nr_primakov_help")
CreateTimeEvent("nr_primakov_help","nr_primakov_help", 8, nr_primakov_help_init)
elseif (rand == 2) then
actor_menu.set_msg(1, game.translate_string("nr_primakov_help_2"), 8)
GI("nr_primakov_help")
CreateTimeEvent("nr_primakov_help","nr_primakov_help", 8, nr_primakov_help_init)
elseif (rand == 3) then
actor_menu.set_msg(1, game.translate_string("nr_primakov_help_3"), 8)
GI("nr_primakov_help")
CreateTimeEvent("nr_primakov_help","nr_primakov_help", 8, nr_primakov_help_init)
elseif (rand == 4) then
actor_menu.set_msg(1, game.translate_string("nr_primakov_help_4"), 8)
GI("nr_primakov_help")
CreateTimeEvent("nr_primakov_help","nr_primakov_help", 8, nr_primakov_help_init)
end
end
end
end
end
end
end
end
end
end
function nr_primakov_help_init()
DI("nr_primakov_help")
return true
end
--- Jupiter execution
function nr_execution_yanov_init()
local smart = SIMBOARD.smarts_by_names["jup_a6"]
local smrt = SIMBOARD.smarts[smart.id]
local dist_1 = 25
local dist_2 = 15
local dist_3 = 15
local pos_1 = vector():set( -53.964504241943,3.5118420124054,160.3719329834 ) --- convict 1
--local pos_1 = vector():set( -55.452903747559,3.5291602611542,160.1261138916 ) --- convict 1 old pos
local pos_2 = vector():set( -58.915637969971,3.6456756591797,159.9506072998 ) --- convict 2
local pos_3 = vector():set( -53.715953826904,3.45143699646,167.76420593262 ) --- executioner 1
local pos_4 = vector():set( -56.438800811768,3.4529418945313,168.19071960449 ) --- executioner 2
local pos_5 = vector():set( -47.242031097412,3.4872958660126,161.45401000977 ) --- executioner 3
if NI("nr_execution_yanov_init") then
if level.name() == "jupiter" then
if NI("nr_execution_yanov_init_spawn") then
--local se_squad_1 = spawn_squad("nr_dead_convict_1_squad", pos_1, 627190, 4494) --old pos
local se_squad_1 = spawn_squad("nr_dead_convict_1_squad", pos_1, 629310, 4494)
local se_squad_3 = spawn_squad("nr_executioner_1_squad", pos_3, 629320, 4494)
local se_squad_4 = spawn_squad("nr_executioner_2_squad", pos_4, 624937, 4494)
local se_squad_5 = spawn_squad("nr_executioner_3_squad", pos_5, 640837, 4494)
GI("nr_execution_yanov_init_spawn")
end
if (db.actor:position():distance_to(pos_1) < dist_3) then --- init execution
if NI("nr_execution_yanov_1_init") then
actor_menu.set_msg(1, game.translate_string("st_nr_execution_0"), 8)
CreateTimeEvent("nr_execution_yanov_st_1","nr_execution_yanov_st_1", 4,nr_execution_yanov_dialogue_1)
CreateTimeEvent("nr_execution_yanov_st_2","nr_execution_yanov_st_2", 8,nr_execution_yanov_dialogue_2)
CreateTimeEvent("nr_execution_yanov_st_3","nr_execution_yanov_st_3", 12,nr_execution_yanov_dialogue_3)
CreateTimeEvent("nr_execution_yanov_st_4","nr_execution_yanov_st_4", 14,nr_execution_yanov_dialogue_4)
CreateTimeEvent("nr_execution_yanov_st_5","nr_execution_yanov_st_5", 18,nr_execution_yanov_dialogue_5)
CreateTimeEvent("nr_execution_yanov_st_6","nr_execution_yanov_st_6", 20,nr_execution_yanov_dialogue_6)
---CreateTimeEvent("nr_execution_yanov_1","nr_execution_yanov_1", 20.5, nr_execution_yanov_1_execute)
GI("nr_execution_yanov_1_init")
end
end
end
end
end
function nr_execution_yanov_1_execute()
GI("nr_execution_firing_1")
-- dialogs_brotherhood.nr_dead_convict_1_turn()
return true
end
function nr_execution_yanov_dialogue_1()
local pos_1 = vector():set( -53.964504241943,3.5118420124054,160.3719329834 ) --- convict 1
local dist_3 = 20
if (db.actor:position():distance_to(pos_1) < dist_3) then
actor_menu.set_msg(1, game.translate_string("st_nr_execution_1"), 8)
end
return true
end
function nr_execution_yanov_dialogue_2()
local pos_1 = vector():set( -53.964504241943,3.5118420124054,160.3719329834 ) --- convict 1
local dist_3 = 20
if (db.actor:position():distance_to(pos_1) < dist_3) then
actor_menu.set_msg(1, game.translate_string("st_nr_execution_2"), 8)
end
return true
end
function nr_execution_yanov_dialogue_3()
local pos_1 = vector():set( -53.964504241943,3.5118420124054,160.3719329834 ) --- convict 1
local dist_3 = 20
if (db.actor:position():distance_to(pos_1) < dist_3) then
actor_menu.set_msg(1, game.translate_string("st_nr_execution_3"), 8)
end
return true
end
function nr_execution_yanov_dialogue_4()
local pos_1 = vector():set( -53.964504241943,3.5118420124054,160.3719329834 ) --- convict 1
local dist_3 = 20
if (db.actor:position():distance_to(pos_1) < dist_3) then
actor_menu.set_msg(1, game.translate_string("st_nr_execution_4"), 8)
end
return true
end
function nr_execution_yanov_dialogue_5()
local pos_1 = vector():set( -53.964504241943,3.5118420124054,160.3719329834 ) --- convict 1
local dist_3 = 20
if (db.actor:position():distance_to(pos_1) < dist_3) then
actor_menu.set_msg(1, game.translate_string("st_nr_execution_5"), 8)
end
return true
end
function nr_execution_yanov_dialogue_6()
local pos_1 = vector():set( -53.964504241943,3.5118420124054,160.3719329834 ) --- convict 1
local dist_3 = 20
if (db.actor:position():distance_to(pos_1) < dist_3) then
actor_menu.set_msg(1, game.translate_string("st_nr_execution_6"), 8)
end
GI("nr_execution_firing_1")
return true
end
function task_status_functor.give_task_nr_strange_meat_status_f(tsk,task_id)
--- pos Lyoshik
local pos_1 = vector():set( 15.033114433289,-7.2893815040588,20.447532653809 )
if NI("nr_strange_meat_spawn_init") then --- spawn NPCs
local se_squad_1 = spawn_squad("nr_lyoshik_squad", pos_1, 305953, 2165)
GI("nr_strange_meat_spawn_init")
end
end
--- Sasha Baltunov
function nr_baltunov_init()
local pos_1 = vector():set( 133.56050109863,-4.825080871582,27.625020980835 ) --- trigger
local pos_2 = vector():set( 122.6502456665,-4.3441872596741,31.141521453857 ) --- spawn
local pos_3 = vector():set( 125.42021179199,-4.3464636802673,28.191061019897 ) --- speech
local pos_4 = vector():set( 127.67053985596,-4.8243117332458,23.232620239258 ) ---bar
local pos_5 = vector():set( 115.9564666748,-0.0015365779399872,49.205066680908 ) ---murder
local dist_1 = 3
local dist_2 = 2
local dist_3 = 50
local npc = get_story_se_object("nr_sasha_baltunov_squad")
local smart = SIMBOARD.smarts_by_names["bar_visitors"]
local smrt = SIMBOARD.smarts[smart.id]
if NI("nr_baltunov_init") then
if level.name() == "l05_bar" then
if (NI("nr_baltunov_init_random")) then
if (db.actor:position():distance_to(pos_1) < dist_1) then --- trigger spawn
if (math.random(100) < 10) then
if NI("nr_baltunov_spawn") then
local se_squad_1 = spawn_squad("nr_sasha_baltunov_squad", pos_2, 34993, 1740)
GI("nr_baltunov_spawn")
GI("nr_baltunov_init_random")
end
else
brotherhood_timer.nr_baltunov_init_random()
GI("nr_baltunov_init_random")
end
end
end
if npc and (npc.position:distance_to(pos_3) < dist_2) then
if NI("nr_baltunov_init_speech") then
actor_menu.set_msg(1, game.translate_string("st_nr_sahsa_baltun_round_1"), 8)
CreateTimeEvent("nr_baltunov_init_1","nr_baltunov_init_1", 4, nr_baltunov_round_init)
GI("nr_baltunov_init_speech")
end
end
if HI("nr_sasha_baltunov_1_job_init") then
if smrt and (db.actor:position():distance_to(smart.position) > dist_3) then
if NI("nr_baltunov_init_murder") then
xr_effects.spawn_nr_sasha_baltun_murder_weapon()
dialogs_brotherhood.relocation_nr_sasha_baltun_murder()
dialogs_brotherhood.nr_sasha_baltun_murder()
end
end
end
if HI("nr_baltunov_init_murder") then
if (db.actor:position():distance_to(pos_5) < dist_1) then
actor_menu.set_msg(1, game.translate_string("st_nr_sahsa_baltun_murder_1"), 8)
GI("nr_baltunov_init")
end
end
end
end
end
function nr_baltunov_round_init()
actor_menu.set_msg(1, game.translate_string("st_nr_sahsa_baltun_round_2"), 8)
GI("nr_sasha_baltunov_1_job_init")
return true
end
function xr_effects.spawn_nr_sasha_baltun_murder_weapon()
local pos = vector():set( 116.98554229736,-0.0014335215091705,49.7780418396 )
local se_obj = alife_create( "wpn_knife2", pos, 34072, 1759 )
if ( not se_obj ) then
printe("!ERROR: unable to spawn murder weapon" )
end
end
function bh_starik_1_init()
if NI("nr_starik_1_init") then
if level.name() == "k00_marsh" then
local pos_1 = vector():set( -41.169841766357,-1.2703860998154,268.60656738281 ) --- bandit 1
local pos_2 = vector():set( -43.523834228516,-1.2712132930756,268.31134033203 ) --- badnit 2
local pos_3 = vector():set( -42.306156158447,-0.81166511774063,267.18487548828 ) --- Corpse
local pos_4 = vector():set( -41.992389678955,1.0363459587097,276.58703613281 ) --- trigger
local dist_1 = 10
local dist_2 = 2
if (NI("nr_starik_1_init_random")) then
if (db.actor:position():distance_to(pos_4) < dist_1) then --- trigger spawn
if (math.random(65) < 25) then
if NI("nr_starik_1_spawn") then
local se_squad_1 = spawn_squad("nr_starik_murder_bandit_1_squad", pos_1, 121773, 76)
local se_squad_2 = spawn_squad("nr_starik_murder_bandit_2_squad", pos_2, 120618, 76)
local se_squad_3 = spawn_squad("nr_starik_murdered_squad", pos_3, 121371, 76)
xr_effects.kill_squad(nil,nil,{"nr_starik_murdered_squad"})
xr_effects.spawn_nr_starik_murdered_stash()
GI("nr_starik_1_spawn")
GI("nr_starik_1_init_random")
end
else
brotherhood_timer.nr_starik_1_init_random()
GI("nr_starik_1_init_random")
end
end
end
if HI("nr_starik_1_spawn") then
if NI("nr_starik_1_talk_init") then
actor_menu.set_msg(1, game.translate_string("st_nr_starik_murder_1"), 8)
CreateTimeEvent("nr_starik_1_talk_init_1","nr_starik_1_talk_init_1", 4, nr_starik_1_talk_init_1)
CreateTimeEvent("nr_starik_1_talk_init_2","nr_starik_1_talk_init_2", 8, nr_starik_1_talk_init_2)
CreateTimeEvent("nr_starik_1_talk_init_3","nr_starik_1_talk_init_3", 12, nr_starik_1_talk_init_3)
CreateTimeEvent("nr_starik_1_talk_init_4","nr_starik_1_talk_init_4", 16, nr_starik_1_talk_init_4)
GI("nr_starik_1_talk_init")
end
end
if NI("nr_starik_1_interrupted") then
if (db.actor:position():distance_to(pos_4) < dist_2) then --- trigger spawn
actor_menu.set_msg(1, game.translate_string("st_nr_starik_murder_interrupted"), 8)
GI("nr_starik_1_interrupted")
GI("nr_starik_1_init")
end
end
end
end
end
function nr_starik_1_talk_init_1()
local dist_1 = 10
local pos_4 = vector():set( -41.992389678955,1.0363459587097,276.58703613281 ) --- trigger
if (db.actor:position():distance_to(pos_4) < dist_1) then --- trigger spawn
if NI("nr_starik_1_interrupted") then
actor_menu.set_msg(1, game.translate_string("st_nr_starik_murder_2"), 8)
end
end
return true
end
function nr_starik_1_talk_init_2()
local dist_1 = 10
local pos_4 = vector():set( -41.992389678955,1.0363459587097,276.58703613281 ) --- trigger
if (db.actor:position():distance_to(pos_4) < dist_1) then --- trigger spawn
if NI("nr_starik_1_interrupted") then
actor_menu.set_msg(1, game.translate_string("st_nr_starik_murder_3"), 8)
end
end
return true
end
function nr_starik_1_talk_init_3()
local dist_1 = 10
local pos_4 = vector():set( -41.992389678955,1.0363459587097,276.58703613281 ) --- trigger
if (db.actor:position():distance_to(pos_4) < dist_1) then --- trigger spawn
if NI("nr_starik_1_interrupted") then
actor_menu.set_msg(1, game.translate_string("st_nr_starik_murder_4"), 8)
end
end
return true
end
function nr_starik_1_talk_init_4()
local dist_1 = 10
local pos_4 = vector():set( -41.992389678955,1.0363459587097,276.58703613281 ) --- trigger
if (db.actor:position():distance_to(pos_4) < dist_1) then --- trigger spawn
if NI("nr_starik_1_interrupted") then
actor_menu.set_msg(1, game.translate_string("st_nr_starik_murder_5"), 8)
end
end
return true
end
function xr_effects.spawn_nr_starik_murdered_stash()
local pos = vector():set( 350.34912109375,8.1314964294434,-74.197410583496 )
local se_obj_1 = alife_create( "wpn_colt1911", pos, 366421, 45 )
local se_obj_2 = alife_create( "itm_advancedkit", pos, 366421, 45 )
local se_obj_3 = alife_create( "detector_advanced", pos, 366421, 45 )
local se_obj_4 = alife_create( "adrenalin", pos, 366421, 45 )
if ( not se_obj_1 ) or ( not se_obj_2 ) or ( not se_obj_3 ) or ( not se_obj_4 ) then
printe("!ERROR: unable to spawn starik stash" )
end
if se_obj_1 then
CreateTimeEvent("comradecatilina", "waiting_for_the_game_object", 0, function(id)
local obj = level.object_by_id(id)
if obj then
obj:set_condition(1 - (math.random(25, 45)/100))
return true
end
end, se_obj_1.id)
else
printf("!ERROR | Failed to spawn my_section !")
end
end
function bh_like_rats_trap_init()
if NI("bh_like_rats_trap_init") then
local pos_1 = vector():set( -39.03401184082,-0.0018443763256073,43.549373626709 ) --- above ground 1
local pos_2 = vector():set( -75.507743835449,1.7313983440399,8.8472261428833 ) --- above ground 2
local pos_3 = vector():set( 76.103713989258,3.7150104045868,128.13946533203 ) --- underground 1
local pos_4 = vector():set( 35.715763092041,-8.2353734970093,157.6732635498 ) --- underground 2
local dist_1 = 150
local dist_2 = 5
local smart = SIMBOARD.smarts_by_names["agr_smart_terrain_4_4"]
local smrt = SIMBOARD.smarts[smart.id]
local knife = db.actor:item_in_slot(1)
local weapon_1 = db.actor:item_in_slot(2)
local weapon_2 = db.actor:item_in_slot(3)
local weapon_3 = db.actor:item_in_slot(4)
if level.name() == "l03_agroprom" then --- if first meeting Naruchnik
news_manager.send_tip(db.actor, game.translate_string("RATS 1"), 0, "stalker", 11000, 1)
if smart and smart.online then
if smrt and (db.actor:position():distance_to(smart.position) < dist_1) then
news_manager.send_tip(db.actor, game.translate_string("RATS 2"), 0, "stalker", 11000, 1)
if NI("bh_rat_guards_spawn") then
news_manager.send_tip(db.actor, game.translate_string("RATS Spawn"), 0, "stalker", 11000, 1)
local squad_1 = SIMBOARD:create_squad(smart,"bh_rat_guards_1_squad")
local squad_2 = SIMBOARD:create_squad(smart,"bh_rat_guards_2_squad")
GI("bh_rat_guards_spawn")
end
end
end
if (db.actor:position():distance_to(pos_1) < dist_2) then
if NI("give_like_rats_trap_1_init") then
if NI("bh_rats_trap_guards_shout") then
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_0"), 8)
CreateTimeEvent("bh_rats_trap_guards_shout_1","bh_rats_trap_guards_shout_1", 4, bh_rats_trap_guards_shout_1)
end
dialogs_brotherhood.give_like_rats_trap_1()
GI("give_like_rats_trap_1_init")
GI("bh_like_rats_trap_init")
end
elseif (db.actor:position():distance_to(pos_2) < dist_2) then
if NI("give_like_rats_trap_1_init") then
if NI("bh_rats_trap_guards_shout") then
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_0"), 8)
CreateTimeEvent("bh_rats_trap_guards_shout_1","bh_rats_trap_guards_shout_1", 4, bh_rats_trap_guards_shout_1)
end
dialogs_brotherhood.give_like_rats_trap_1()
GI("give_like_rats_trap_1_init")
GI("bh_like_rats_trap_init")
end
end
end
if level.name() == "l03u_agr_underground" then --- if first meeting the bandits
if (db.actor:position():distance_to(pos_1) < dist_2) then
if NI("give_like_rats_trap_1_init") then
if NI("bh_rats_trap_bandits_shout") then
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_2"), 8)
CreateTimeEvent("bh_rats_trap_bandits_shout_1","bh_rats_trap_bandits_shout_1", 4, bh_rats_trap_bandits_shout_1)
end
dialogs_brotherhood.give_like_rats_trap_1()
GI("give_like_rats_trap_1_init")
GI("bh_like_rats_trap_init")
end
elseif (db.actor:position():distance_to(pos_2) < dist_2) then
if NI("give_like_rats_trap_1_init") then
if NI("bh_rats_trap_bandits_shout") then
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_2"), 8)
CreateTimeEvent("bh_rats_trap_bandits_shout_1","bh_rats_trap_bandits_shout_1", 4, bh_rats_trap_bandits_shout_1)
end
dialogs_brotherhood.give_like_rats_trap_1()
GI("give_like_rats_trap_1_init")
GI("bh_like_rats_trap_init")
end
end
end
end
end
function bh_rats_trap_bandits_shout_1()
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_3"), 8)
return true
end
function bh_rats_trap_guards_shout_1()
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_1"), 8)
return true
end
function task_status_functor.give_like_rats_trap_1_status_f(tsk,task_id)
local pos_1 = vector():set( 76.488876342773,4.210268497467,180.86875915527 ) --- under ground 1 from couloir
local pos_2 = vector():set( 38.165634155273,1.7712228298187,158.65428161621 ) --- under ground 2 from stairs
local pos_3 = vector():set( 76.103713989258,3.7150104045868,128.13946533203 ) --- underground 3 (1 in init) from electro
local pos_4 = vector():set( 35.715763092041,-8.2353734970093,157.6732635498 ) --- underground 4 (2 in init) from stairs under
local dist_1 = 150
local dist_2 = 5
local smart = SIMBOARD.smarts_by_names["agr_smart_terrain_4_4"]
local smrt = SIMBOARD.smarts[smart.id]
if (tsk.stage == 0) then
if NI("bh_rat_guards_spawn") then
local squad_1 = SIMBOARD:create_squad(smart,"bh_rat_guards_1_squad")
local squad_2 = SIMBOARD:create_squad(smart,"bh_rat_guards_2_squad")
GI("bh_rat_guards_spawn")
end
if level.name() == "l03u_agr_underground" then --- if first meeting the bandits
if (db.actor:position():distance_to(pos_1) < dist_2) then
if NI("give_like_rats_trap_2_init") then
if NI("bh_rats_trap_bandits_shout_2") then
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_2"), 8)
CreateTimeEvent("bh_rats_trap_bandits_shout_2","bh_rats_trap_bandits_shout_2", 4, bh_rats_trap_bandits_shout_1)
end
GI("give_like_rats_trap_2_init")
end
elseif (db.actor:position():distance_to(pos_2) < dist_2) then
if NI("give_like_rats_trap_2_init") then
if NI("bh_rats_trap_bandits_shout_2") then
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_2"), 8)
CreateTimeEvent("bh_rats_trap_bandits_shout_2","bh_rats_trap_bandits_shout_2", 4, bh_rats_trap_bandits_shout_1)
end
GI("give_like_rats_trap_2_init")
end
elseif (db.actor:position():distance_to(pos_3) < dist_2) then
if NI("give_like_rats_trap_2_init") then
if NI("bh_rats_trap_bandits_shout_2") then
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_2"), 8)
CreateTimeEvent("bh_rats_trap_bandits_shout_2","bh_rats_trap_bandits_shout_2", 4, bh_rats_trap_bandits_shout_1)
end
GI("give_like_rats_trap_2_init")
end
elseif (db.actor:position():distance_to(pos_4) < dist_2) then
if NI("give_like_rats_trap_2_init") then
if NI("bh_rats_trap_bandits_shout_2") then
actor_menu.set_msg(1, game.translate_string("st_bh_like_rats_in_trap_2"), 8)
CreateTimeEvent("bh_rats_trap_bandits_shout_2","bh_rats_trap_bandits_shout_2", 4, bh_rats_trap_bandits_shout_1)
end
GI("give_like_rats_trap_2_init")
end
end
end
end
end