sr2lua/sh_bh_apartments.lua

  1. --Tables 
  2. targets =	{ 
  3. 			"sh_bh_apartments_$c001","sh_bh_apartments_$c001 (0)","sh_bh_apartments_$c001 (1)", 
  4. 			"sh_bh_apartments_$c002","sh_bh_apartments_$c002 (0)","sh_bh_apartments_$c002 (1)", 
  5. 			"sh_bh_apartments_$c004","sh_bh_apartments_$c004 (0)","sh_bh_apartments_$c004 (1)" 
  6. 				} 
  7.  
  8. waveOne = {"sh_bh_apartments_$cW00","sh_bh_apartments_$cW01","sh_bh_apartments_$cW02","sh_bh_apartments_$cW03","sh_bh_apartments_$cW00 (0)","sh_bh_apartments_$cW01 (0)","sh_bh_apartments_$cW02 (0)","sh_bh_apartments_$cW03 (0)"} 
  9. waveTwo = {"sh_bh_apartments_$cW01 (1)","sh_bh_apartments_$cW02 (1)","sh_bh_apartments_$cW03 (1)"} 
  10.  
  11. groupone = {"sh_bh_apartments_$c001 (1)", "sh_bh_apartments_$c001 (0)", "sh_bh_apartments_$c001"}  
  12. grouptwo = {"sh_bh_apartments_$c002", "sh_bh_apartments_$c002 (0)", "sh_bh_apartments_$c002 (1)"} 
  13. groupfour = {"sh_bh_apartments_$c004", "sh_bh_apartments_$c004 (0)", "sh_bh_apartments_$c004 (1)"} 
  14. area_done = {false, false, false} 
  15. areas =	{"sh_bh_apartments_$tgoto_one", "sh_bh_apartments_$tgoto_two", "sh_bh_apartments_$tgoto_four"} 
  16. groups = {groupone,grouptwo, groupfour} 
  17. group_names = {"sh_bh_apartments_$Gone", "sh_bh_apartments_$GTwo", "sh_bh_apartments_$Gfour"} 
  18. door_triggers = {"sh_bh_apartments_$tDoor_one", "sh_bh_apartments_$tDoor_two", "sh_bh_apartments_$tDoor_three"} 
  19.  
  20. -- door variables and table 
  21. DOOR_ONE="sh_bh_apartments_APT083_P_MM_Door010" 
  22. DOOR_TWO="sh_bh_apartments_APT083_G_MM_Door010" 
  23. DOOR_THREE="sh_bh_apartments_APT083_D_moverDoor010" 
  24. doors={DOOR_ONE,DOOR_TWO,DOOR_THREE} 
  25. --Globals 
  26. door_triggers_size = sizeof_table(door_triggers) 
  27. targets_total = 0 
  28. targets_left = sizeof_table(areas) 
  29. in_area = false 
  30. in_area_remote = false 
  31. waveOne_total = sizeof_table(waveOne) 
  32. waveTwo_total = sizeof_table(waveTwo) 
  33. groupone_total = sizeof_table(groupone) 
  34. groupone_count = 0 
  35. grouptwo_total = sizeof_table(grouptwo) 
  36. groupfour_total = sizeof_table(groupfour) 
  37. --groupfive_total = sizeof_table(groupfive) 
  38. grouptwo_count = 0 
  39. groupfour_count = 0 
  40. groupfive_count = 0 
  41. areas_total = sizeof_table(areas) 
  42. areas_count = 0 
  43. groups_total = sizeof_table(groups) 
  44. group_names_total = sizeof_table(group_names) 
  45. groups_count = 0 
  46. areatracker = 0 
  47. groups_size = {groupone_total, grouptwo_total, groupfour_total} 
  48. groups_count = {groupone_count, grouptwo_count, groupfour_count}  
  49. temp_point = "" 
  50. closest_point = 0 
  51. operations_done = false 
  52. methvan_active = false 
  53. nav_set = false 
  54. nav_thread_handle ="" 
  55. current_waypoint = "" 
  56.  
  57.  
  58. function sh_bh_apartments_start(checkpoint, is_restart) 
  59.  
  60. 	set_mission_author("David Bowring") 
  61. 	notoriety_set_max("brotherhood", 2) 
  62. 	notoriety_set_min("brotherhood", 2) 
  63. 	notoriety_set_max("police", 0) 
  64. 	if checkpoint == MISSION_START_CHECKPOINT then 
  65. 	mission_start_fade_out() 
  66. 	teleport_coop("sr2_city_$sh_bh_apartments","sh_bh_apartments_$nplayer2") 
  67. 	group_create("sh_bh_apartments_$Gguards") 
  68. 	--cutscene_play("sh_bh_apartmentsct1") 
  69. 	if (not is_restart) then 
  70. 		cutscene_play("sh_bh_apartmentsct2") 
  71. 	end 
  72. 	sh_bh_apartments_one() 
  73. 	else		 
  74. 		fade_in(1) 
  75. 		sh_bh_apartments_methvan() 
  76. 	end 
  77. end	 
  78.  
  79.  
  80. function sh_bh_apartments_one() 
  81. 	notoriety_force_no_spawn("brotherhood", true)  
  82. 		for i = 1, areas_total, 1 do 
  83. 			marker_add_navpoint(door_triggers[i],MINIMAP_ICON_LOCATION, INGAME_EFFECT_LOCATION) 
  84. 			on_trigger("sh_bh_apartments_in_area", areas[i]) 
  85. 			--on_trigger("sh_bh_apartments_door_triggers", door_triggers[i]) 
  86. 			trigger_enable(areas[i], true) 
  87. 			trigger_enable(door_triggers[i], true) 
  88. 			door_lock(doors[i],true) 
  89. 		end		 
  90. 	nav_thread_handle = thread_new("sh_bh_apartments_nearest") 
  91. 	objective_text(0, "sh_bh_apartments_ltcount", areas_count, areas_total) --"Operations Left: %s" <-- Must Change 
  92. 	mission_start_fade_in() 
  93. end 
  94.  
  95.  
  96. function sh_bh_apartments_door_triggers(char, trigger_name) 
  97. marker_remove_trigger(trigger_name) 
  98. trigger_enable(trigger_name, false) 
  99. end 
  100.  
  101. function sh_bh_apartments_methvan() 
  102. 	methvan_active = true 
  103. 	mission_debug("Meth van activate")	 
  104. 	objective_text_clear(0) 
  105. 	for i =1, group_names_total, 1 do 
  106. 		if group_is_loaded(group_names[i]) then 
  107. 			release_to_world(group_names[i]) 
  108. 		end 
  109. 	end 
  110. 	mission_help_table("sh_bh_apartments_instruct_three") 
  111. 	if  not group_is_loaded("sh_bh_apartments_$Gseven") then 
  112. 		group_create("sh_bh_apartments_$Gseven", true) 
  113. 	end 
  114. 	vehicle_enter_group_teleport({"sh_bh_apartments_$c007", "sh_bh_apartments_$c007 (0)"}, "sh_bh_apartments_$vCar") 
  115. 	set_unjackable_flag("sh_bh_apartments_$vCar", true) 
  116. 	on_damage("sh_bh_apartments_methvan_damage", "sh_bh_apartments_$vCar", .90)  
  117. 	on_vehicle_destroyed("sh_bh_apartments_methvan_death", "sh_bh_apartments_$vCar") 
  118. 	vehicle_suppress_npc_exit("sh_bh_apartments_$vCar", true)  
  119. 	marker_add_vehicle("sh_bh_apartments_$vCar", MINIMAP_ICON_KILL, INGAME_EFFECT_VEHICLE_KILL) 
  120. 	mission_waypoint_add("sh_bh_apartments_$vCar", SYNC_ALL) 
  121. 	vehicle_pathfind_to("sh_bh_apartments_$vCar", "sh_bh_apartments_$pathcrack", false, true) --nav mesh = traffic laws 
  122. 	vehicle_pathfind_to("sh_bh_apartments_$vCar", "sh_bh_apartments_$pathcrack2", false, true) 
  123. end 
  124.  
  125. function sh_bh_apartments_methvan_damage(car) 
  126. vehicle_flee(car) 
  127. end 
  128.  
  129.  
  130.  
  131. function sh_bh_apartments_methvan_death(car) 
  132. on_vehicle_destroyed("", "sh_bh_apartments_$vCar") 
  133. marker_remove_vehicle(car) 
  134. --delay(3) 
  135. sh_bh_apartments_end() 
  136. end 
  137.  
  138.  
  139. function sh_bh_apartments_in_area( triggerer_name, trigger_name ) 
  140. 	 
  141. 	objective_text_clear(0) --Clear out the "Shop Owners Left:" line 
  142. 	mission_help_table("sh_bh_apartments_instruct_one") --Destroy the storefronts to get the shopkeepers to come out 
  143. 	in_area = true 
  144. 	thread_kill(nav_thread_handle) 
  145.  
  146. 	if triggerer_name == REMOTE_PLAYER then 
  147. 	in_area_remote = true 
  148. 	end 
  149.  
  150.  
  151. 	for i = 1, areas_total, 1 do			 
  152. 		if area_done[i] == false then 
  153. 			marker_remove_navpoint(areas[i])		--remove area markers 
  154. 			marker_remove_navpoint(door_triggers[i]) 
  155. 		end 
  156. 	end 
  157. 	 
  158. 	for i = 1, areas_total, 1 do 
  159. 		if (areas[i] == trigger_name) then 
  160. 				areatracker = i 
  161. 				door_lock(doors[i],false) 
  162. 				on_trigger("", trigger_name) 
  163. 				mission_debug("Player enters area",5) 
  164. 				mission_waypoint_remove(SYNC_ALL)				 
  165. 				objective_text(0, "sh_bh_apartments_instruct_two", groups_count[areatracker], groups_size[areatracker]) 
  166. 				group_create(group_names[areatracker], true) 
  167.  
  168. 				for i = 1, groups_size[areatracker], 1 do					 
  169. 					marker_add_npc(groups[areatracker][i], MINIMAP_ICON_KILL, INGAME_EFFECT_KILL) 
  170. 					on_death("sh_bh_apartments_killcount_targets", groups[areatracker][i]) 
  171. 				end		 
  172. 			mission_debug( "created group "..group_names[areatracker].."", 15 ) 
  173. 		end 
  174.  
  175. 		if (i ~= areatracker) and (area_done[i] ~= true) then 
  176. 		trigger_enable(areas[i], false)		 
  177. 		end 
  178.  
  179. 	end 
  180.  
  181. end 
  182.  
  183.  
  184.  
  185.  
  186. function sh_bh_apartments_killcount_targets(char)	 
  187. 	groups_count[areatracker] = groups_count[areatracker]+1 
  188. 	 
  189. 	 
  190.  
  191.  
  192. 		 
  193. 	 
  194. 	marker_remove_npc(char) 
  195. 	objective_text(0, "sh_bh_apartments_instruct_two", groups_count[areatracker], groups_size[areatracker]) 
  196. 	on_death("", char) 
  197. 	release_to_world(char)	 
  198. 	mission_debug("kill called="..char) 
  199. 	if (groups_count[areatracker] == groups_size[areatracker]) then 
  200. 		areas_count = areas_count + 1 
  201. 		area_done[areatracker] = true 
  202. 		in_area = false 
  203. 		objective_text_clear(0) 
  204. 		if areas_count == areas_total then 
  205. 				in_area = false 
  206. 				operations_done = true 
  207. 				mission_debug("areas done="..char) 
  208. 				mission_set_checkpoint("van") 
  209. 				sh_bh_apartments_methvan() 
  210. 				--return 
  211. 				--sh_bh_apartments_end() 
  212. 		elseif methvan_active == false then 
  213. 			nav_set= false 
  214. 			nav_thread_handle = thread_new("sh_bh_apartments_nearest") 
  215. 		end 
  216. 		 
  217. 		delay(1) 
  218. 		for i = 1, areas_total, 1 do				 
  219. 			if (area_done[i] == false) then 
  220. 				marker_add_navpoint(door_triggers[i],MINIMAP_ICON_LOCATION, INGAME_EFFECT_LOCATION) 
  221. 				--marker_add_navpoint(areas[i],MINIMAP_ICON_LOCATION, INGAME_EFFECT_LOCATION) 
  222. 				on_trigger("sh_bh_apartments_in_area", areas[i]) 
  223. 				trigger_enable(areas[i], true)				 
  224. 				objective_text(0, "sh_bh_apartments_ltcount", areas_count, areas_total) 
  225. 			end 
  226. 		end		 
  227. 	end 
  228.  
  229. 	if	areas_count == 1 then 
  230. 		notoriety_force_no_spawn("brotherhood", false)  
  231. 	end	 
  232.  
  233. end 
  234.  
  235.  
  236. function sh_bh_apartments_nearest()	 
  237. 		mission_debug("nearest Called") 
  238. 		objective_text_clear(0) 
  239. 		if operations_done==false and methvan_active == false then 
  240. 		mission_help_table("MSN_SH_BH_APARTMENTS_INSTRUCT_INITIAL") -- "Kill all the BH LTs running each operation!" 
  241. 		end 
  242. 		while (in_area == false and methvan_active == false) do 
  243. 		mission_debug("near loop") 
  244. 		delay(.5) 
  245. 		sh_bh_apartments_get_closest_nav_to_char( areas, LOCAL_PLAYER ) 
  246. 		end 
  247. end 
  248.  
  249. function sh_bh_apartments_get_closest_nav_to_char( navpoint_names, character_name ) 
  250.    local closest_nav_name = navpoint_names[1] 
  251.    local closest_dist = 2000 --get_dist_char_to_nav( character_name, navpoint_names[1] ) 
  252.    local closest_index = 0 
  253. 	local cur_dist = 0 
  254. 	local new_nav_required = false 
  255.  
  256. 	for nav_index, nav_name in pairs( navpoint_names ) do 
  257. 		  
  258. 			if area_done[nav_index] == false then 
  259. 			cur_dist = get_dist_char_to_nav( character_name, nav_name ) 
  260. 			--mission_debug( "nav_name = "..nav_name..", cur_dist = "..cur_dist, 15 ) 
  261. 			 
  262. 				if ( cur_dist < closest_dist ) then 
  263. 					closest_nav_name = nav_name 
  264. 					closest_dist = cur_dist 
  265. 					closest_index = nav_index 
  266. 					new_nav_required = true 
  267. 				end 
  268. 			 
  269. 			end 
  270. 	end 
  271.  
  272. 	if closest_index == 0 then 
  273. 		return 
  274. 	end 
  275.  
  276. 	--mission_debug( "nav_name = "..closest_nav_name..", cur_dist = "..cur_dist, 15 ) 
  277. 	 
  278. 	 
  279. 	if current_waypoint ~= closest_nav_name then 
  280. 	nav_set = true 
  281. 	mission_debug("waypoint set") 
  282. 	current_waypoint=closest_nav_name 
  283. 	mission_waypoint_add(closest_nav_name, SYNC_ALL) 
  284. 	end 
  285. 	  
  286.    --return closest_nav_name, closest_index, closest_dist 
  287. end 
  288.  
  289.  
  290. 		 
  291.  
  292.  
  293.  
  294.  
  295.  
  296. function sh_bh_apartments_timer(time_left) 
  297. 	while(hud_timer_get_remainder() > time_left) do 
  298. 		thread_yield(0) 
  299. 	end 
  300. end 
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307. function sh_bh_apartments_two() 
  308.  
  309. 	release_to_world("sh_bh_apartments_$Gone") 
  310. 	release_to_world("sh_bh_apartments_$GTwo") 
  311. 	release_to_world("sh_bh_apartments_$GThree") 
  312. 	release_to_world("sh_bh_apartments_$Gfour") 
  313. 	release_to_world("sh_bh_apartments_$GFive") 
  314. 	release_to_world("sh_bh_apartments_$Gsix") 
  315. 	release_to_world("sh_bh_apartments_$Gseven") 
  316. 	notoriety_set_max("brotherhood", 3) 
  317. 	notoriety_set_min("brotherhood", 3) 
  318. 	minimap_icon_add_navpoint_radius( "sh_bh_apartments_$tRadius", MINIMAP_ICON_LOCATION, 50, nil, SYNC_ALL ) 
  319. 	on_trigger("sh_bh_apartments_back", "sh_bh_apartments_$tRadius") 
  320. 	trigger_enable("sh_bh_apartments_$tRadius", true) 
  321. 	on_trigger_exit("sh_bh_apartments_leave","sh_bh_apartments_$tRadius") 
  322. 	 
  323. 		while (not in_area) do 
  324. 			--mission_help_table("The brotherhood are trying to take back the district. Go defend the apartments!") 
  325. 			mission_debug("Get to the area!") 
  326. 			thread_yield() 
  327. 		end	 
  328. 	objective_text(0, "sh_bh_apartments_instruct_two") 
  329. 	hud_timer_set(0, 180000,"sh_bh_apartments_end") 
  330.  
  331. 	sh_bh_apartments_timer(160000) 
  332. 	 
  333. 	if  (not group_is_loaded("sh_bh_apartments_$GWaveOne")) then 
  334. 		mission_debug("wave 1 start") 
  335. 		group_create("sh_bh_apartments_$GWaveOne") 
  336. 		vehicle_enter_group_teleport("sh_bh_apartments_$cW00", "sh_bh_apartments_$cW01", "sh_bh_apartments_$cW02", "sh_bh_apartments_$cW03", "sh_bh_apartments_$v000") 		 
  337. 		vehicle_enter_group_teleport("sh_bh_apartments_$cW00 (0)", "sh_bh_apartments_$cW01 (0)", "sh_bh_apartments_$cW02 (0)", "sh_bh_apartments_$cW03 (0)", "sh_bh_apartments_$v000 (0)") 		 
  338.  
  339. 		for i = 1, waveOne_total, 1 do 
  340. 			set_blitz_flag(waveOne[i], true) 
  341. 			set_always_sees_player_flag(waveOne[i], true) 
  342. 			attack(waveOne[i],"#PLAYER#") 
  343. 		end 
  344.  
  345. 	end 
  346.  
  347. 	sh_bh_apartments_timer(110000) 
  348. 	 
  349. 	if  (not group_is_loaded("sh_bh_apartments_$GWaveTwo")) then 
  350. 		mission_debug("wave 2 start") 
  351. 		group_create("sh_bh_apartments_$GWaveTwo") 
  352. 		vehicle_enter_group_teleport("sh_bh_apartments_$cW01 (1)", "sh_bh_apartments_$cW02 (1)", "sh_bh_apartments_$cW03 (1)", "sh_bh_apartments_$v000 (1)") 		 
  353. 		for i = 1, waveTwo_total, 1 do 
  354. 			set_blitz_flag(waveTwo[i], true) 
  355. 			set_always_sees_player_flag(waveTwo[i], true) 
  356. 			attack(waveTwo[i], LOCAL_PLAYER) 
  357. 		end 
  358.  
  359. 	end 
  360. end 
  361.  
  362.  
  363. function sh_bh_apartments_back() 
  364. 	in_area = true 
  365. end 
  366.  
  367.  
  368. 	 
  369. function sh_bh_apartments_leave() 
  370. 	local time = 0 
  371. 	local messone = true 
  372. 	local messtwo = true 
  373. 	in_area = false 
  374. 	mission_debug("LEAVE") 
  375.  
  376. 		while(not in_area) do 
  377. 				time = time + hud_timer_get_remainder()  --get_frame_time() 
  378.  
  379. 				if (time > 5) then 
  380. 					-- You have 15 seconds to return 
  381. 					if (messone == true) then 
  382. 					mission_help_table("sh_bh_airport_warning_one") 
  383. 					messone = false 
  384. 				end 
  385. 			end 
  386.  
  387. 				if (time > 10) then 
  388. 					if (messtwo == true) then 
  389. 						--You have 10 seconds to return 
  390. 						mission_help_table("sh_bh_airport_warning_two") 
  391. 						messtwo = false 
  392. 					end 
  393. 				end 
  394.  
  395. 			if (time > 15) then 
  396. 			--You have 5 seconds to return 
  397. 				mission_help_table("sh_bh_airport_warning_three") 
  398. 					sh_bh_apartments_failure() 
  399. 			end 
  400. 				thread_yield() 
  401. 			end 
  402.  
  403. end 
  404.  
  405.  
  406.  
  407. function sh_bh_apartments_cleanup() 
  408.  
  409. for i = 1, areas_total, 1 do 
  410. 	marker_remove_navpoint(door_triggers[i]) 
  411. 	on_trigger("", areas[i]) 
  412. 	--on_trigger("sh_bh_apartments_door_triggers", door_triggers[i]) 
  413. 	trigger_enable(areas[i], false) 
  414. 	trigger_enable(door_triggers[i],false) 
  415. 	door_lock(doors[i],false) 
  416. end 
  417. marker_remove_vehicle("sh_bh_apartments_$vCar") 
  418. end 
  419.  
  420.  
  421. function sh_bh_apartments_failure() 
  422. end 
  423.  
  424. function sh_bh_apartments_success() 
  425. 	--mission_end_success("sh_bh_apartments") 
  426. end 
  427.  
  428. function sh_bh_apartments_end() 
  429. 	delay(3) 
  430. 	mission_end_success("sh_bh_apartments") 
  431. end	 
  432.