3824 lines
		
	
	
		
			121 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			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 |