sr2lua/sh_ss_crackhouse.lua

  1. --[[------------------------------------------------------------------------------- 
  2. -- sh_ss_crackhouse.lua 
  3. -- sons of samedi stronghold 2 - redlight crackhouse 
  4. --  First pass by alvan "traitor" monje 
  5. -- Good Stuff by David Bowring 
  6.  
  7.     
  8. NOTES 
  9. - when aircraft pathfinding is in w/necessary script support, change end objective to shooting chopper as it takes off 
  10.  
  11. - BUGS 
  12. 	- cover should go in district! 
  13. 	- vehicle_enter_teleport causing an assert 
  14. 		- unjackable flag not working; related to above? 
  15. ----------------------------------------------------------------------------------]] 
  16.  
  17.   
  18.  
  19. --Globals------- 
  20. johns = {"sh_ss_crackhouse_$c-john1", "sh_ss_crackhouse_$c-john2", "sh_ss_crackhouse_$c-john3", "sh_ss_crackhouse_$c-john4", 
  21. 			"sh_ss_crackhouse_$c-john5", "sh_ss_crackhouse_$c-john6", "sh_ss_crackhouse_$c-john7"} 
  22.  
  23. drug_equipment = {"sh_ss_crackhouse_RLMisCRACK_DrugStillA070", "sh_ss_crackhouse_RLMisCRACK_DrugStillA020","sh_ss_crackhouse_RLMisCRACK_DrugStillA030","sh_ss_crackhouse_RLMisCRACK_DrugStillA040"} 
  24. --Mover name changed 7 times - last change 3/28/2007 
  25.  
  26. loaders = {"sh_ss_crackhouse_$c-loader1", "sh_ss_crackhouse_$c-loader2", "sh_ss_crackhouse_$c-loader3", "sh_ss_crackhouse_$c-loader4"} 
  27. load_handles ={0,0,0,0} 
  28. num_johns = sizeof_table(johns) 
  29. num_equipment = sizeof_table(drug_equipment) 
  30. num_loaders = sizeof_table(loaders) 
  31.  
  32. johns_killed = 0 
  33. equipment_killed = 0 
  34. boxes_loaded = 0 
  35. boxes_target = 15 
  36. loaders_killed = 0 
  37. Handle_load_boxes = 0 
  38. Helicopter = false 
  39. load = true 
  40. crack_labs_destroyed = false 
  41. DOOR_TO_ROOF="sh_ss_crackhouse_DoorMM110" 
  42. DOOR_TO_BACK="sh_ss_crackhouse_frontdoor" 
  43. DOOR_TO_UPSTAIRS="sh_ss_crackhouse__doormm18000" 
  44. heli_destroyed = false 
  45.  
  46. --Functions------- 
  47. function sh_ss_crackhouse_start(checkpoint, is_restart) 
  48. 	set_mission_author("David Bowring") 
  49. 	if checkpoint == MISSION_START_CHECKPOINT then 
  50. 		mission_start_fade_out() 
  51. 		notoriety_force_no_spawn("samedi", true) 
  52.  
  53. 		-- On first runs, only play the cutscene - it does group creation and player positioning 
  54. 		if (not is_restart) then 
  55. 			cutscene_play( "sh_ss_crackhouse_ct1", { "sh_ss_crackhouse_$G-flr1-gang", "sh_ss_crackhouse_$G-flr1-civ", 
  56. 																  "sh_ss_crackhouse_$G-flr1-johns", "sh_ss_crackhouse_$G-roof-gang" }, 
  57. 								{ "sh_ss_crackhouse_$nstart","sh_ss_crackhouse_$nstart (0)" }, false ) 
  58. 		-- Otherwise, teleport the players and create the groups 
  59. 		else 
  60. 			teleport_coop( "sh_ss_crackhouse_$nstart","sh_ss_crackhouse_$nstart (0)" ) 
  61. 			group_create_hidden( "sh_ss_crackhouse_$G-flr1-gang", true ) 
  62. 			group_create_hidden( "sh_ss_crackhouse_$G-flr1-civ", true ) 
  63. 			group_create_hidden( "sh_ss_crackhouse_$G-flr1-johns", true ) 
  64. 			group_create_hidden( "sh_ss_crackhouse_$G-roof-gang", true ) 
  65. 		end 
  66. 		-- Show the groups that were created 
  67. 		group_show( "sh_ss_crackhouse_$G-flr1-gang" ) 
  68. 		group_show(	"sh_ss_crackhouse_$G-flr1-civ" ) 
  69. 		group_show( "sh_ss_crackhouse_$G-flr1-johns" ) 
  70. 		group_show( "sh_ss_crackhouse_$G-roof-gang" ) 
  71.  
  72. 		door_lock(DOOR_TO_BACK,true) 
  73. 		door_lock(DOOR_TO_UPSTAIRS,true) 
  74. 		door_lock(DOOR_TO_ROOF,true) 
  75.  
  76. 		on_door_opened("sh_ss_crackhouse_open_frontdoor_opened", "sh_ss_crackhouse_frontdoor") 
  77. 		on_trigger("sh_ss_crackhouse_open_frontdoor", "sh_ss_crackhouse_$tfront") 
  78. 		trigger_enable("sh_ss_crackhouse_$tfront", true) 
  79. 		marker_add_navpoint("sh_ss_crackhouse_$tfront", MINIMAP_ICON_LOCATION, INGAME_EFFECT_LOCATION) 
  80.  
  81. 		set_unjackable_flag("sh_ss_crackhouse_$v000", true)  
  82. 		on_vehicle_destroyed("sh_ss_crackhouse_heli_destroyed", "sh_ss_crackhouse_$v000") 
  83. 		mission_help_table("sh_ss_crackhouse_start")  -- "Find the backroom and kill the customers." 
  84. 		objective_text(0, "sh_ss_crackhouse_customers_left", johns_killed, num_johns) 
  85. 		mission_start_fade_in() 
  86. 	else 
  87. 		for i = 1, num_equipment, 1 do 
  88. 			mesh_mover_hide(drug_equipment[i]) 
  89. 		end 
  90. 	fade_in(1) 
  91. 	sh_ss_crackhouse_phase_three() 
  92. 	end	 
  93. end 
  94.  
  95.  
  96. function sh_ss_crackhouse_cleanup() 
  97. 	-- disable and unregister all triggers 
  98. 	trigger_enable("sh_ss_crackhouse_$t-window", false) 
  99. 	on_trigger("", "sh_ss_crackhouse_$t-window") 
  100. 	mesh_mover_reset(DOOR_TO_BACK) 
  101. 	mesh_mover_reset(DOOR_TO_UPSTAIRS) 
  102. 	mesh_mover_reset(DOOR_TO_ROOF) 
  103. 	set_player_can_enter_exit_vehicles(LOCAL_PLAYER, true)	 
  104. 	if coop_is_active then 
  105. 		set_player_can_enter_exit_vehicles(REMOTE_PLAYER, true) 
  106. 	end	 
  107. 	-- remove markers on johns; unregister on_ functions 
  108. 	for i = 1, num_johns, 1 do 
  109. 		marker_remove_npc(johns[i]) 
  110. 		on_death("", johns[i]) 
  111. 	end 
  112. 	-- remove markers on drug equipment; unregister on_ functions 
  113. 	for i = 1, num_equipment, 1 do 
  114. 		marker_remove_mover(drug_equipment[i]) 
  115. 		on_mover_destroyed("", drug_equipment[i]) 
  116. 	end 
  117. 	-- remove markers on loader NPCs; unregister on_ functions 
  118. 	for i = 1, num_loaders, 1 do 
  119. 		marker_remove_npc(loaders[i]) 
  120. 		on_death("", loaders[i]) 
  121. 	end 
  122. 	marker_remove_navpoint("sh_ss_crackhouse_$tupper_door") 
  123. 	marker_remove_navpoint("sh_ss_crackhouse_$t-flr1-stairs") 
  124. 	marker_remove_navpoint("sh_ss_crackhouse_$tfront") 
  125. 	marker_remove_vehicle("sh_ss_crackhouse_$v000") 
  126. 	-- release all groups (but destroy helicopter) 
  127. 	release_to_world("sh_ss_crackhouse_$G-flr1-gang") 
  128. 	release_to_world("sh_ss_crackhouse_$G-flr1-civ") 
  129. 	release_to_world("sh_ss_crackhouse_$G-flr1-johns") 
  130. 	release_to_world("sh_ss_crackhouse_$G-flr2-gang") 
  131. 	release_to_world("sh_ss_crackhouse_$G-roof-gang") 
  132. end 
  133.  
  134.  
  135. function sh_ss_crackhouse_success() 
  136. end 
  137.  
  138. function sh_ss_crackhouse_open_frontdoor_opened() 
  139. 	notoriety_set("samedi", 3) 
  140. 	on_door_opened("", "sh_ss_crackhouse_frontdoor")  
  141. end 
  142.  
  143. function sh_ss_crackhouse_open_frontdoor() 
  144. 	door_lock("sh_ss_crackhouse_frontdoor",false) 
  145. 	marker_remove_navpoint("sh_ss_crackhouse_$tfront") 
  146. 	on_trigger("", "sh_ss_crackhouse_$tfront") 
  147. 	trigger_enable("sh_ss_crackhouse_$tfront", false) 
  148. 	for i = 1, num_johns, 1 do 
  149. 		marker_add_npc(johns[i], MINIMAP_ICON_KILL, INGAME_EFFECT_KILL) 
  150. 		on_death("sh_ss_crackhouse_killcount_johns", johns[i]) 
  151. 	end	 
  152. end 
  153.  
  154.  
  155.  
  156.  
  157. function sh_ss_crackhouse_killcount_johns(npc) 
  158. 	johns_killed = johns_killed + 1 
  159. 	marker_remove_npc(npc) 
  160. 	objective_text(0, "sh_ss_crackhouse_customers_left", johns_killed, num_johns) 
  161. 	if (johns_killed == num_johns) then 
  162. 		delay(2) 
  163. 		mission_help_table("sh_ss_crackhouse_drugs")  -- "Now head upstairs and destroy the drug equipment!" 
  164. 		on_trigger("sh_ss_crackhouse_floor_two_minmap", "sh_ss_crackhouse_$t-flr1-stairs") 
  165. 		trigger_enable("sh_ss_crackhouse_$t-flr1-stairs", true) 
  166. 		marker_add_navpoint("sh_ss_crackhouse_$t-flr1-stairs", MINIMAP_ICON_LOCATION, INGAME_EFFECT_LOCATION) 
  167. 	end 
  168. end 
  169.  
  170. function sh_ss_crackhouse_floor_two_minmap() 
  171. 	marker_remove_navpoint("sh_ss_crackhouse_$t-flr1-stairs") 
  172. 	trigger_enable("sh_ss_crackhouse_$t-flr1-stairs", false) 
  173. 	on_trigger("sh_ss_crackhouse_floor_two",	"sh_ss_crackhouse_$tupper_door") 
  174. 	trigger_enable("sh_ss_crackhouse_$tupper_door", true) 
  175. 	group_create("sh_ss_crackhouse_$G-flr2-gang", true) 
  176. 	door_lock(DOOR_TO_UPSTAIRS,false) 
  177. 	marker_add_navpoint("sh_ss_crackhouse_$tupper_door", MINIMAP_ICON_LOCATION, INGAME_EFFECT_LOCATION) 
  178. end 
  179.  
  180. function sh_ss_crackhouse_floor_two()	 
  181. 	trigger_enable("sh_ss_crackhouse_$tupper_door", false) 
  182. 	marker_remove_navpoint("sh_ss_crackhouse_$tupper_door") 
  183. 	on_trigger("", "sh_ss_crackhouse_$t-flr1-stairs")		 
  184. 	objective_text(0, "sh_ss_crackhouse_drugs_left", equipment_killed, num_equipment) 
  185. 	for i = 1, num_equipment, 1 do 
  186. 		mesh_mover_reset(drug_equipment[i]) 
  187. 		marker_add_mover(drug_equipment[i], MINIMAP_ICON_KILL, INGAME_EFFECT_KILL) 
  188. 		on_mover_destroyed("sh_ss_crackhouse_killcount_drugs", drug_equipment[i]) 
  189. 	end 
  190. end 
  191.  
  192.  
  193. function sh_ss_crackhouse_killcount_drugs(drug) 
  194. 	equipment_killed = equipment_killed + 1 
  195. 	marker_remove_mover(drug) 
  196. 	objective_text(0, "sh_ss_crackhouse_drugs_left", equipment_killed, num_equipment) 
  197. 	if (equipment_killed == num_equipment) then 
  198. 		mission_set_checkpoint("roof") 
  199. 		crack_labs_destroyed = true 
  200. 		if crack_labs_destroyed and heli_destroyed then	 
  201. 			mission_end_success("sh_ss_crackhouse")	 
  202. 		else 
  203. 		sh_ss_crackhouse_phase_three() 
  204. 		end 
  205. 	end 
  206. end 
  207.  
  208.  
  209. function sh_ss_crackhouse_phase_three() 
  210. 	crack_labs_destroyed = true	 
  211. 	on_trigger("sh_ss_crackhouse_setup_rooftop", "sh_ss_crackhouse_$t-setup-roof") 
  212. 	trigger_enable("sh_ss_crackhouse_$t-setup-roof", true) 
  213. 	marker_add_trigger("sh_ss_crackhouse_$t-setup-roof", MINIMAP_ICON_LOCATION, INGAME_EFFECT_LOCATION) 
  214. 	objective_text_clear(0) 
  215. 	mission_help_table("sh_ss_crackhouse_fire_escape")  -- "Head to the fire escape." 
  216. end 
  217.  
  218. function sh_ss_crackhouse_setup_rooftop() 
  219. 	on_vehicle_enter("sh_ss_crackhouse_heli_stolen", "sh_ss_crackhouse_$v000") 
  220. 	--[[ 
  221. 	set_player_can_enter_exit_vehicles(LOCAL_PLAYER, false) 
  222. 	if coop_is_active then 
  223. 		set_player_can_enter_exit_vehicles(REMOTE_PLAYER, false) 
  224. 	end 
  225. 	trigger_enable("sh_ss_crackhouse_$t-setup-roof", false) 
  226. 	--]] 
  227. 	marker_remove_trigger("sh_ss_crackhouse_$t-setup-roof") 
  228. 	--door_lock("sh_ss_crackhouse_DoorMM180", false) 
  229. 	door_lock(DOOR_TO_ROOF, false) 
  230. 	release_to_world("sh_ss_crackhouse_$G-flr1-gang") -- release old groups so we don't run out of slots for the new group 
  231. 	release_to_world("sh_ss_crackhouse_$G-flr1-civ") 
  232.  
  233. 	if group_is_loaded("sh_ss_crackhouse_$G-roof-gang")== false then 
  234. 		group_create("sh_ss_crackhouse_$G-roof-gang", true) 
  235. 	end 
  236. 	trigger_enable("sh_ss_crackhouse_$t-window", true) 
  237. 	on_trigger("", "sh_ss_crackhouse_$t-window") 
  238. 	-- setup heli and pilot 
  239. 	if character_is_dead("sh_ss_crackhouse_$c-heli-driver") == false then  
  240. 		vehicle_enter_teleport("sh_ss_crackhouse_$c-heli-driver", "sh_ss_crackhouse_$v000", 0) 
  241. 	end 
  242.  
  243. 	if character_is_dead("sh_ss_crackhouse_$c-heli-driver (0)") == false then  
  244. 		vehicle_enter_teleport("sh_ss_crackhouse_$c-heli-driver (0)", "sh_ss_crackhouse_$v000", 4) 
  245. 	end 
  246.  
  247. 	if character_is_dead("sh_ss_crackhouse_$c-heli-driver (1)") == false then  
  248. 		vehicle_enter_teleport("sh_ss_crackhouse_$c-heli-driver (1)", "sh_ss_crackhouse_$v000", 5) 
  249. 	end 
  250. 	npc_go_idle("sh_ss_crackhouse_$c-heli-driver")  
  251. 	--set_unjackable_flag("sh_ss_crackhouse_$c-heli-driver", true) 
  252. 	--set_unjackable_flag("sh_ss_crackhouse_$c-heli-driver (0)", true) 
  253. 	--set_unjackable_flag("sh_ss_crackhouse_$c-heli-driver (1)", true) 
  254.  
  255. 	if vehicle_is_destroyed("sh_ss_crackhouse_$v000") == false then 
  256. 		on_vehicle_destroyed("sh_ss_crackhouse_heli_destroyed", "sh_ss_crackhouse_$v000") 
  257. 	end 
  258. 	 
  259. 	 
  260. 	--Script Function to make strippers use poles.  
  261. 	--npc_use_closest_action_node_of_type(char, "Blunt_Smoker") 
  262.  
  263. 	-- setup loaders 
  264. 	--[[ 
  265. 	for i = 1, num_loaders, 1 do 
  266. 		marker_add_npc(loaders[i], MINIMAP_ICON_KILL, INGAME_EFFECT_KILL) 
  267. 		on_death("sh_ss_crackhouse_killcount_loaders", loaders[i]) 
  268. 	end 
  269. 	--]] 
  270. 	mission_help_table("sh_ss_crackhouse_rooftop")  -- "Head to the rooftop and stop the helicopter from taking off with the merchandise!" 
  271. 	--objective_text(0, "sh_ss_crackhouse_crates", boxes_loaded, boxes_target) 
  272. 		 -- make loaders load 
  273. 		--Handle_load_boxes = thread_new("sh_ss_crackhouse_load_boxes")		 
  274. 		delay(5) 
  275. 		sh_ss_crackhouse_heli_takeoff()	 
  276. end 
  277.  
  278.  
  279. function sh_ss_crackhouse_killcount_loaders(npc) 
  280. 	loaders_killed = loaders_killed + 1	 
  281. 	marker_remove_npc(npc) 
  282. 	if (loaders_killed == num_loaders) then 
  283. 		delay(3) 
  284. 		release_to_world("sh_ss_crackhouse_$v000") 
  285. 		mission_end_success("sh_ss_crackhouse") 
  286. 	end 
  287. end 
  288.  
  289.  
  290. function sh_ss_crackhouse_heli_destroyed() 
  291. 	--thread_kill(Handle_load_boxes) -- kill box loading thread so player doesn't fail during the oncoming 3 second delay even though technically he's won already 
  292. 	heli_destroyed = true 
  293. 	if crack_labs_destroyed then 
  294. 	delay(3)	 
  295. 	mission_end_success("sh_ss_crackhouse") 
  296. 	end 
  297. end 
  298.  
  299.  
  300. function sh_ss_crackhouse_load_boxes() 
  301. 	-- load 1st box, then... 
  302. 	 
  303. 	--store proccess handles in a table for later killing 
  304. 	for i = 1, num_loaders, 1 do 
  305. 		load_handles[i] = thread_new("sh_ss_crackhouse_load_handler", loaders[i])			 
  306. 	end 
  307.  
  308. 	while (1) do 
  309. 		thread_yield() 
  310.  
  311. 		if (load == false) then 
  312. 			for i = 1, num_loaders, 1 do 
  313. 			 
  314. 				if character_is_dead(loaders[i]) == false then 
  315. 					thread_kill(load_handles[i]) 
  316. 				end 
  317. 			end 
  318.  
  319. 			-- We are done 
  320. 			return 
  321. 		end 
  322. 	end 
  323. end 
  324.  
  325. function sh_ss_crackhouse_load_handler(npc)	 
  326. 	while (1) do 
  327. 		if (boxes_loaded >= boxes_target) then 
  328. 				if Helicopter == false then 
  329. 					attack(npc) 
  330. 					thread_new("sh_ss_crackhouse_heli_takeoff") 
  331. 				end 
  332. 			--set load to false and then kill the thread 
  333. 			load = false 
  334. 			return 
  335. 		end 
  336. 		move_to(npc, "sh_ss_crackhouse_$n001") 
  337. 		delay(1) --play anim		 
  338. 		if Helicopter == false and boxes_loaded <= 15 then 
  339. 			boxes_loaded = boxes_loaded + 1 -- increment counter 
  340. 		end 
  341. 		objective_text(0, "sh_ss_crackhouse_crates", boxes_loaded, boxes_target) -- display new crate total 
  342. 		move_to_safe(npc, "sh_ss_crackhouse_$n000", 2) 
  343. 		delay(1) --play anim 
  344. 	end 
  345. end 
  346.  
  347. function sh_ss_crackhouse_heli_stolen() 
  348.  
  349. 	for i = 1, num_loaders, 1 do 
  350. 		if (character_is_dead(loaders[i]) == false) then 
  351. 			marker_remove_npc(loaders[i]) 
  352. 			on_death("", loaders[i]) 
  353. 		end 
  354. 	end 
  355.  
  356. 	for i = 1, num_loaders, 1 do 
  357. 		if character_is_dead(loaders[i]) == false then			 
  358. 			thread_kill(load_handles[i]) 
  359. 		end 
  360. 	end 
  361. mission_end_success("function sh_ss_crackhouse") 
  362. end 
  363.  
  364. function sh_ss_crackhouse_heli_takeoff() 
  365. local count = 0 
  366. Helicopter = true 
  367. load = false 
  368. --thread_kill(Handle_load_boxes) 
  369. objective_text_clear(0) 
  370.  
  371. if character_is_dead("sh_ss_crackhouse_$c-heli-driver (0)")== false then 
  372. 	attack("sh_ss_crackhouse_$c-heli-driver (0)") 
  373. end 
  374.  
  375. if character_is_dead("sh_ss_crackhouse_$c-heli-driver (1)")== false then 
  376. 	attack("sh_ss_crackhouse_$c-heli-driver (1)") 
  377. end 
  378.  
  379. if vehicle_is_destroyed("sh_ss_crackhouse_$v000") == false then 
  380. 	marker_add_vehicle("sh_ss_crackhouse_$v000", MINIMAP_ICON_KILL,  INGAME_EFFECT_VEHICLE_KILL) 
  381. 	 
  382. 	vehicle_chase("sh_ss_crackhouse_$v000", LOCAL_PLAYER, false, false, true) 
  383. end 
  384.  
  385.  
  386.  
  387. -- add text "Destory the Helicopter" 
  388. delay(10) 
  389. mission_help_table("sh_ss_crackhouse_fail") 
  390. mission_debug("attack") 
  391.  
  392. while vehicle_is_destroyed("sh_ss_crackhouse_$v000") == false do 
  393. 	helicopter_fly_to("sh_ss_crackhouse_$v000", -1, "sh_ss_crackhouse_$nHeliAttack") 
  394. 	delay(1) 
  395. 	helicopter_fly_to("sh_ss_crackhouse_$v000", -1, "sh_ss_crackhouse_$nHeliAttack (0)") 
  396. 	delay(1) 
  397. 	helicopter_fly_to("sh_ss_crackhouse_$v000", -1, "sh_ss_crackhouse_$nHeliAttack (1)") 
  398. 	delay(1) 
  399. 	vehicle_chase("sh_ss_crackhouse_$v000", LOCAL_PLAYER, false, false, true) 
  400. 	delay(30) 
  401. end 
  402.  
  403. end