Advertisement
Guest User

_zm_chugabud.gsc

a guest
Dec 31st, 2020
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.19 KB | None | 0 0
  1. #include maps/mp/_visionset_mgr;
  2. #include maps/mp/zombies/_zm;
  3. #include maps/mp/zombies/_zm_equipment;
  4. #include maps/mp/zombies/_zm_weap_cymbal_monkey;
  5. #include maps/mp/zombies/_zm_weapons;
  6. #include maps/mp/zombies/_zm_clone;
  7. #include maps/mp/zombies/_zm_chugabud;
  8. #include maps/mp/zombies/_zm_laststand;
  9. #include maps/mp/zombies/_zm_utility;
  10. #include common_scripts/utility;
  11. #include maps/mp/_utility;
  12. #include maps/mp/zombies/_zm_perks;
  13. #include maps/mp/gametypes_zm/_clientids;
  14.  
  15. init() //checked matches cerberus output
  16. {
  17. level.chugabud_laststand_func = ::chugabud_laststand;
  18. level thread chugabud_hostmigration();
  19. level._effect[ "chugabud_revive_fx" ] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" );
  20. level._effect[ "chugabud_bleedout_fx" ] = loadfx( "weapon/quantum_bomb/fx_player_position_effect" );
  21. add_custom_limited_weapon_check( ::is_weapon_available_in_chugabud_corpse );
  22. }
  23.  
  24. chugabug_precache() //checked matches cerberus output
  25. {
  26. }
  27.  
  28. chugabud_player_init() //checked matches cerberus output
  29. {
  30. }
  31.  
  32. chugabud_laststand() //checked changed to match cerberus output
  33. {
  34. self endon( "player_suicide" );
  35. self endon( "disconnect" );
  36. self endon( "chugabud_bleedout" );
  37. if(isDefined(self.hasPHD))
  38. self.hadPHD = true;
  39. else
  40. self.hadPHD = undefined;
  41. self maps/mp/zombies/_zm_laststand::increment_downed_stat();
  42. self.ignore_insta_kill = 1;
  43. self.health = self.maxhealth;
  44. self maps/mp/zombies/_zm_chugabud::chugabud_save_loadout();
  45. self maps/mp/zombies/_zm_chugabud::chugabud_fake_death();
  46. wait 3;
  47. if ( isDefined( self.insta_killed ) && self.insta_killed || isDefined( self.disable_chugabud_corpse ) )
  48. {
  49. create_corpse = 0;
  50. }
  51. else
  52. {
  53. create_corpse = 1;
  54. }
  55. if ( create_corpse == 1 )
  56. {
  57. if ( isDefined( level._chugabug_reject_corpse_override_func ) )
  58. {
  59. reject_corpse = self [[ level._chugabug_reject_corpse_override_func ]]( self.origin );
  60. if ( reject_corpse )
  61. {
  62. create_corpse = 0;
  63. }
  64. }
  65. }
  66. logline1 = "INFO: _zm_chugabud.gsc chugabud_laststand() create_corpse: " + create_corpse + "\n";
  67. logprint( logline1 );
  68. if ( create_corpse == 1 )
  69. {
  70. self thread activate_chugabud_effects_and_audio();
  71. corpse = self chugabud_spawn_corpse();
  72. corpse thread chugabud_corpse_revive_icon( self );
  73. self.e_chugabud_corpse = corpse;
  74. corpse thread chugabud_corpse_cleanup_on_spectator( self );
  75. if ( isDefined( level.whos_who_client_setup ) )
  76. {
  77. corpse setclientfield( "clientfield_whos_who_clone_glow_shader", 1 );
  78. }
  79. }
  80. self chugabud_fake_revive();
  81. wait 0.1;
  82. self.ignore_insta_kill = undefined;
  83. self.disable_chugabud_corpse = undefined;
  84. if ( create_corpse == 0 )
  85. {
  86. self notify( "chugabud_effects_cleanup" );
  87. return;
  88. }
  89. bleedout_time = getDvarFloat( "player_lastStandBleedoutTime" );
  90. self thread chugabud_bleed_timeout( bleedout_time, corpse );
  91. self thread chugabud_handle_multiple_instances( corpse );
  92. corpse waittill( "player_revived", e_reviver );
  93. if ( isDefined( e_reviver ) && e_reviver == self )
  94. {
  95. self notify( "whos_who_self_revive" );
  96. }
  97. self perk_abort_drinking( 0.1 );
  98. self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 );
  99. self setorigin( corpse.origin );
  100. self setplayerangles( corpse.angles );
  101. if ( self player_is_in_laststand() )
  102. {
  103. self thread chugabud_laststand_cleanup( corpse, "player_revived" );
  104. self enableweaponcycling();
  105. self enableoffhandweapons();
  106. self auto_revive( self, 1 );
  107. return;
  108. }
  109. self chugabud_laststand_cleanup( corpse, undefined );
  110. }
  111.  
  112. chugabud_laststand_cleanup( corpse, str_notify ) //checked matches cerberus output
  113. {
  114. if ( isDefined( str_notify ) )
  115. {
  116. self waittill( str_notify );
  117. }
  118. self chugabud_give_loadout();
  119. self chugabud_corpse_cleanup( corpse, 1 );
  120. }
  121.  
  122. chugabud_bleed_timeout( delay, corpse ) //checked changed to match cerberus output
  123. {
  124. self endon( "player_suicide" );
  125. self endon( "disconnect" );
  126. corpse endon( "death" );
  127. wait delay;
  128. if ( isDefined( corpse.revivetrigger ) )
  129. {
  130. while ( corpse.revivetrigger.beingrevived )
  131. {
  132. wait 0.01;
  133. }
  134. }
  135. if ( isDefined( self.loadout.perks ) && flag( "solo_game" ) )
  136. {
  137. for ( i = 0; i < self.loadout.perks.size; i++ )
  138. {
  139. perk = self.loadout.perks[ i ];
  140. if ( perk == "specialty_quickrevive" )
  141. {
  142. arrayremovevalue( self.loadout.perks, self.loadout.perks[ i ] );
  143. corpse notify( "player_revived" );
  144. return;
  145. }
  146. }
  147. }
  148. self chugabud_corpse_cleanup( corpse, 0 );
  149. }
  150.  
  151. chugabud_corpse_cleanup( corpse, was_revived ) //checked matches cerberus output
  152. {
  153. self notify( "chugabud_effects_cleanup" );
  154. if ( was_revived )
  155. {
  156. playsoundatposition( "evt_ww_appear", corpse.origin );
  157. playfx( level._effect[ "chugabud_revive_fx" ], corpse.origin );
  158. }
  159. else
  160. {
  161. playsoundatposition( "evt_ww_disappear", corpse.origin );
  162. playfx( level._effect[ "chugabud_bleedout_fx" ], corpse.origin );
  163. self notify( "chugabud_bleedout" );
  164. }
  165. if ( isDefined( corpse.revivetrigger ) )
  166. {
  167. corpse notify( "stop_revive_trigger" );
  168. corpse.revivetrigger delete();
  169. corpse.revivetrigger = undefined;
  170. }
  171. if ( isDefined( corpse.revive_hud_elem ) )
  172. {
  173. corpse.revive_hud_elem destroy();
  174. corpse.revive_hud_elem = undefined;
  175. }
  176. self.loadout = undefined;
  177. wait 0.1;
  178. corpse delete();
  179. self.e_chugabud_corpse = undefined;
  180. }
  181.  
  182. chugabud_handle_multiple_instances( corpse ) //checked matches cerberus output
  183. {
  184. corpse endon( "death" );
  185. self waittill( "perk_chugabud_activated" );
  186. self chugabud_corpse_cleanup( corpse, 0 );
  187. }
  188.  
  189. chugabud_spawn_corpse() //checked matches cerberus output
  190. {
  191. corpse = maps/mp/zombies/_zm_clone::spawn_player_clone( self, self.origin, undefined, self.whos_who_shader );
  192. corpse.angles = self.angles;
  193. corpse maps/mp/zombies/_zm_clone::clone_give_weapon( "m1911_zm" );
  194. corpse maps/mp/zombies/_zm_clone::clone_animate( "laststand" );
  195. corpse.revive_hud = self chugabud_revive_hud_create();
  196. corpse thread maps/mp/zombies/_zm_laststand::revive_trigger_spawn();
  197. return corpse;
  198. }
  199.  
  200. chugabud_revive_hud_create() //checked matches cerberus output
  201. {
  202. self.revive_hud = newclienthudelem( self );
  203. self.revive_hud.alignx = "center";
  204. self.revive_hud.aligny = "middle";
  205. self.revive_hud.horzalign = "center";
  206. self.revive_hud.vertalign = "bottom";
  207. self.revive_hud.y = -50;
  208. self.revive_hud.foreground = 1;
  209. self.revive_hud.font = "default";
  210. self.revive_hud.fontscale = 1.5;
  211. self.revive_hud.alpha = 0;
  212. self.revive_hud.color = ( 1, 1, 1 );
  213. self.revive_hud settext( "" );
  214. return self.revive_hud;
  215. }
  216.  
  217. chugabud_save_loadout() //checked changed to match cerberus output
  218. {
  219. primaries = self getweaponslistprimaries();
  220. currentweapon = self getcurrentweapon();
  221. self.loadout = spawnstruct();
  222. self.loadout.player = self;
  223. self.loadout.weapons = [];
  224. self.loadout.score = self.score;
  225. self.loadout.current_weapon = -1;
  226. index = 0;
  227. foreach ( weapon in primaries )
  228. {
  229. logline1 = "weapon: " + weapon + "\n";
  230. logprint( logline1 );
  231. self.loadout.weapons[ index ] = maps/mp/zombies/_zm_weapons::get_player_weapondata( self, weapon );
  232. if ( weapon == currentweapon || self.loadout.weapons[ index ][ "alt_name" ] == currentweapon )
  233. {
  234. self.loadout.current_weapon = index;
  235. }
  236. index++;
  237. }
  238. self.loadout.equipment = self get_player_equipment();
  239. if ( isDefined( self.loadout.equipment ) )
  240. {
  241. self equipment_take( self.loadout.equipment );
  242. }
  243. self.loadout save_weapons_for_chugabud( self );
  244. if ( self hasweapon( "claymore_zm" ) )
  245. {
  246. self.loadout.hasclaymore = 1;
  247. self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" );
  248. }
  249. self.loadout.perks = chugabud_save_perks( self );
  250. self chugabud_save_grenades();
  251. if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() )
  252. {
  253. self.loadout.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" );
  254. }
  255. }
  256.  
  257. chugabud_save_grenades() //checked matches cerberus output
  258. {
  259. if ( self hasweapon( "emp_grenade_zm" ) )
  260. {
  261. self.loadout.hasemp = 1;
  262. self.loadout.empclip = self getweaponammoclip( "emp_grenade_zm" );
  263. }
  264. lethal_grenade = self get_player_lethal_grenade();
  265. if ( self hasweapon( lethal_grenade ) )
  266. {
  267. self.loadout.lethal_grenade = lethal_grenade;
  268. self.loadout.lethal_grenade_count = self getweaponammoclip( lethal_grenade );
  269. }
  270. else
  271. {
  272. self.loadout.lethal_grenade = undefined;
  273. }
  274. }
  275.  
  276. chugabud_give_loadout() //checked partially changed to match cerberus output continues in for loops bad see the github for more info
  277. {
  278. self takeallweapons();
  279. loadout = self.loadout;
  280. primaries = self getweaponslistprimaries();
  281. if ( loadout.weapons.size > 1 || primaries.size > 1 )
  282. {
  283. foreach ( weapon in primaries )
  284. {
  285. self takeweapon( weapon );
  286. }
  287. }
  288. i = 0;
  289. while ( i < loadout.weapons.size )
  290. {
  291. // logline1 = "loadout.weapons[ " + i + " ][ name ] " + loadout.weapons[ i ][ "name" ] + "\n";
  292. // logprint( logline1 );
  293. if ( !isDefined( loadout.weapons[ i ] ) )
  294. {
  295. i++;
  296. continue;
  297. }
  298. if ( loadout.weapons[ i ][ "name" ] == "none" )
  299. {
  300. i++;
  301. continue;
  302. }
  303. self maps/mp/zombies/_zm_weapons::weapondata_give( loadout.weapons[ i ] );
  304. i++;
  305. }
  306. if ( loadout.current_weapon >= 0 && isDefined( loadout.weapons[ loadout.current_weapon ][ "name" ] ) )
  307. {
  308. self switchtoweapon( loadout.weapons[ loadout.current_weapon ][ "name" ] );
  309. }
  310. self giveweapon( "knife_zm" );
  311. self maps/mp/zombies/_zm_equipment::equipment_give( self.loadout.equipment );
  312. loadout restore_weapons_for_chugabud( self );
  313. self chugabud_restore_claymore();
  314. self.score = loadout.score;
  315. self.pers[ "score" ] = loadout.score;
  316. perk_array = maps/mp/zombies/_zm_perks::get_perk_array( 1 );
  317. for ( i = 0; i < perk_array.size; i++ )
  318. {
  319. perk = perk_array[ i ];
  320. self unsetperk( perk );
  321. self.num_perks--;
  322. self set_perk_clientfield( perk, 0 );
  323. }
  324. if ( isDefined( loadout.perks ) && loadout.perks.size > 0 )
  325. {
  326.  
  327. i = 0;
  328. while ( i < loadout.perks.size )
  329. {
  330. if ( self hasperk( loadout.perks[ i ] ) )
  331. {
  332. i++;
  333. continue;
  334. }
  335. if ( loadout.perks[ i ] == "specialty_quickrevive" && flag( "solo_game" ) )
  336. {
  337. level.solo_game_free_player_quickrevive = 1;
  338. }
  339. if ( loadout.perks[ i ] == "specialty_longersprint" )
  340. {
  341. self setperk( "specialty_longersprint" ); //gives the staminup perk functionality
  342. self.hasStaminUp = true; //sets the staminup variable
  343. self thread maps/mp/gametypes_zm/_clientids::drawCustomPerkHUD("specialty_juggernaut_zombies", 0, (1, 1, 0));
  344. arrayremovevalue( loadout.perks, "specialty_longersprint" );
  345.  
  346. continue;
  347. }
  348. if ( loadout.perks[ i ] == "specialty_deadshot" )
  349. {
  350. self setperk( "specialty_deadshot"); //gives the deadshot perk functionality
  351. self.hasDeadshot = true; //sets the deadshot variable
  352. self thread maps/mp/gametypes_zm/_clientids::drawCustomPerkHUD("specialty_quickrevive_zombies", 0, (0.125, 0.125, 0.125));
  353. arrayremovevalue( loadout.perks, "specialty_deadshot" );
  354. continue;
  355. }
  356. if ( loadout.perks[ i ] == "specialty_finalstand" )
  357. {
  358. i++;
  359. continue;
  360. }
  361. maps/mp/zombies/_zm_perks::give_perk( loadout.perks[ i ] );
  362. i++;
  363. }
  364. }
  365. self chugabud_restore_grenades();
  366. if ( maps/mp/zombies/_zm_weap_cymbal_monkey::cymbal_monkey_exists() )
  367. {
  368. if ( loadout.zombie_cymbal_monkey_count )
  369. {
  370. self maps/mp/zombies/_zm_weap_cymbal_monkey::player_give_cymbal_monkey();
  371. self setweaponammoclip( "cymbal_monkey_zm", loadout.zombie_cymbal_monkey_count );
  372. }
  373. }
  374. }
  375.  
  376. chugabud_restore_grenades() //checked matches cerberus output
  377. {
  378. if ( isDefined( self.loadout.hasemp ) && self.loadout.hasemp )
  379. {
  380. self giveweapon( "emp_grenade_zm" );
  381. self setweaponammoclip( "emp_grenade_zm", self.loadout.empclip );
  382. }
  383. if ( isDefined( self.loadout.lethal_grenade ) )
  384. {
  385. self giveweapon( self.loadout.lethal_grenade );
  386. self setweaponammoclip( self.loadout.lethal_grenade, self.loadout.lethal_grenade_count );
  387. }
  388. }
  389.  
  390. chugabud_restore_claymore() //checked matches cerberus output
  391. {
  392. if ( isDefined( self.loadout.hasclaymore ) && self.loadout.hasclaymore && !self hasweapon( "claymore_zm" ) )
  393. {
  394. self giveweapon( "claymore_zm" );
  395. self set_player_placeable_mine( "claymore_zm" );
  396. self setactionslot( 4, "weapon", "claymore_zm" );
  397. self setweaponammoclip( "claymore_zm", self.loadout.claymoreclip );
  398. }
  399. }
  400.  
  401. chugabud_fake_death() //checked matches cerberus output
  402. {
  403. level notify( "fake_death" );
  404. self notify( "fake_death" );
  405. self takeallweapons();
  406. self allowstand( 0 );
  407. self allowcrouch( 0 );
  408. self allowprone( 1 );
  409. self.ignoreme = 1;
  410. self enableinvulnerability();
  411. wait 0.1;
  412. self freezecontrols( 1 );
  413. wait 0.9;
  414. }
  415.  
  416. chugabud_fake_revive() //checked matches cerberus output
  417. {
  418. level notify( "fake_revive" );
  419. self notify( "fake_revive" );
  420. playsoundatposition( "evt_ww_disappear", self.origin );
  421. playfx( level._effect[ "chugabud_revive_fx" ], self.origin );
  422. spawnpoint = chugabud_get_spawnpoint();
  423. if ( isDefined( level._chugabud_post_respawn_override_func ) )
  424. {
  425. self [[ level._chugabud_post_respawn_override_func ]]( spawnpoint.origin );
  426. }
  427. if ( isDefined( level.chugabud_force_corpse_position ) )
  428. {
  429. if ( isDefined( self.e_chugabud_corpse ) )
  430. {
  431. self.e_chugabud_corpse forceteleport( level.chugabud_force_corpse_position );
  432. }
  433. level.chugabud_force_corpse_position = undefined;
  434. }
  435. if ( isDefined( level.chugabud_force_player_position ) )
  436. {
  437. spawnpoint.origin = level.chugabud_force_player_position;
  438. level.chugabud_force_player_position = undefined;
  439. }
  440. self setorigin( spawnpoint.origin );
  441. self setplayerangles( spawnpoint.angles );
  442. playsoundatposition( "evt_ww_appear", spawnpoint.origin );
  443. playfx( level._effect[ "chugabud_revive_fx" ], spawnpoint.origin );
  444. self allowstand( 1 );
  445. self allowcrouch( 1 );
  446. self allowprone( 1 );
  447. self.ignoreme = 0;
  448. self setstance( "stand" );
  449. self freezecontrols( 0 );
  450. self giveweapon( "knife_zm" );
  451. self give_start_weapon( 1 );
  452. self.score = self.loadout.score;
  453. self.pers[ "score" ] = self.loadout.score;
  454. self giveweapon( "frag_grenade_zm" );
  455. self setweaponammoclip( "frag_grenade_zm", 2 );
  456. self chugabud_restore_claymore();
  457. wait 1;
  458. self disableinvulnerability();
  459. }
  460.  
  461. chugabud_get_spawnpoint() //checked partially changed to match cerberus output nested foreach is probably bad
  462. {
  463. spawnpoint = undefined;
  464. if ( get_chugabug_spawn_point_from_nodes( self.origin, 500, 700, 64, 1 ) )
  465. {
  466. spawnpoint = level.chugabud_spawn_struct;
  467. }
  468. if ( !isDefined( spawnpoint ) )
  469. {
  470. if ( get_chugabug_spawn_point_from_nodes( self.origin, 100, 400, 64, 1 ) )
  471. {
  472. spawnpoint = level.chugabud_spawn_struct;
  473. }
  474. }
  475. if ( !isDefined( spawnpoint ) )
  476. {
  477. if ( get_chugabug_spawn_point_from_nodes( self.origin, 50, 400, 256, 0 ) )
  478. {
  479. spawnpoint = level.chugabud_spawn_struct;
  480. }
  481. }
  482. if ( !isDefined( spawnpoint ) )
  483. {
  484. spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 );
  485. }
  486. if ( !isDefined( spawnpoint ) )
  487. {
  488. match_string = "";
  489. location = level.scr_zm_map_start_location;
  490. if ( (location == "default" || location == "" ) && isdefined( level.default_start_location ) )
  491. {
  492. location = level.default_start_location;
  493. }
  494. match_string = level.scr_zm_ui_gametype + "_" + location;
  495. spawnpoints = [];
  496. structs = getstructarray( "initial_spawn", "script_noteworthy" );
  497. if ( isdefined( structs ) )
  498. {
  499. foreach ( struct in structs )
  500. {
  501. if ( isdefined( struct.script_string ) )
  502. {
  503. tokens = strtok( struct.script_string, " " );
  504. i = 0;
  505. while ( i < tokens.size )
  506. {
  507. if ( tokens[ i ] == match_string )
  508. {
  509. spawnpoints[ spawnpoints.size ] = struct;
  510. }
  511. i++;
  512. }
  513. }
  514. }
  515. }
  516. if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 )
  517. {
  518. spawnpoints = getstructarray( "initial_spawn_points", "targetname" );
  519. }
  520. /*
  521. /#
  522. assert( isDefined( spawnpoints ), "Could not find initial spawn points!" );
  523. #/
  524. */
  525. spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self );
  526. }
  527. return spawnpoint;
  528. }
  529.  
  530. get_chugabug_spawn_point_from_nodes( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) //checked partially changed to match cerberus output changed at own discretion
  531. {
  532. if ( !isDefined( level.chugabud_spawn_struct ) )
  533. {
  534. level.chugabud_spawn_struct = spawnstruct();
  535. }
  536. found_node = undefined;
  537. a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" );
  538. if ( isDefined( a_nodes ) && a_nodes.size > 0 )
  539. {
  540. a_player_volumes = getentarray( "player_volume", "script_noteworthy" );
  541. index = a_nodes.size - 1;
  542. i = index;
  543. while ( i >= 0 )
  544. {
  545. n_node = a_nodes[ i ];
  546. if ( ignore_targetted_nodes == 1 )
  547. {
  548. if ( isDefined( n_node.target ) )
  549. {
  550. i--;
  551. continue;
  552. }
  553. }
  554. if ( !positionwouldtelefrag( n_node.origin ) )
  555. {
  556. if ( maps/mp/zombies/_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) )
  557. {
  558. v_start = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] + 30 );
  559. v_end = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] - 30 );
  560. trace = bullettrace( v_start, v_end, 0, undefined );
  561. if ( trace[ "fraction" ] < 1 )
  562. {
  563. override_abort = 0;
  564. if ( isDefined( level._chugabud_reject_node_override_func ) )
  565. {
  566. override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node );
  567. }
  568. if ( !override_abort )
  569. {
  570. found_node = n_node;
  571. break;
  572. }
  573. }
  574. }
  575. }
  576. i--;
  577. }
  578. }
  579. if ( isDefined( found_node ) )
  580. {
  581. level.chugabud_spawn_struct.origin = found_node.origin;
  582. v_dir = vectornormalize( v_origin - level.chugabud_spawn_struct.origin );
  583. level.chugabud_spawn_struct.angles = vectorToAngles( v_dir );
  584. return 1;
  585. }
  586. return 0;
  587. }
  588.  
  589. force_corpse_respawn_position( forced_corpse_position ) //checked matches cerberus output
  590. {
  591. level.chugabud_force_corpse_position = forced_corpse_position;
  592. }
  593.  
  594. force_player_respawn_position( forced_player_position ) //checked matches cerberus output
  595. {
  596. level.chugabud_force_player_position = forced_player_position;
  597. }
  598.  
  599. save_weapons_for_chugabud( player ) //checked changed to match cerberus output
  600. {
  601. self.chugabud_melee_weapons = [];
  602. for ( i = 0; i < level._melee_weapons.size; i++ )
  603. {
  604. self save_weapon_for_chugabud( player, level._melee_weapons[ i ].weapon_name );
  605. }
  606. }
  607.  
  608. save_weapon_for_chugabud( player, weapon_name ) //checked matches cerberus output
  609. {
  610. if ( player hasweapon( weapon_name ) )
  611. {
  612. self.chugabud_melee_weapons[ weapon_name ] = 1;
  613. }
  614. }
  615.  
  616. restore_weapons_for_chugabud( player ) //checked changed to match cerberus output
  617. {
  618. for ( i = 0; i < level._melee_weapons.size; i++ )
  619. {
  620. self restore_weapon_for_chugabud( player, level._melee_weapons[ i ].weapon_name );
  621. }
  622. self.chugabud_melee_weapons = undefined;
  623. }
  624.  
  625. restore_weapon_for_chugabud( player, weapon_name ) //checked changed to match cerberus output
  626. {
  627. if ( !isDefined( weapon_name ) || !isDefined( self.chugabud_melee_weapons ) || !isDefined( self.chugabud_melee_weapons[ weapon_name ] ) )
  628. {
  629. return;
  630. }
  631. if ( isDefined( self.chugabud_melee_weapons[ weapon_name ] ) && self.chugabud_melee_weapons[ weapon_name ] )
  632. {
  633. player giveweapon( weapon_name );
  634. player set_player_melee_weapon( weapon_name );
  635. self.chugabud_melee_weapons[ weapon_name ] = 0;
  636. }
  637. }
  638.  
  639. chugabud_save_perks( ent ) //checked changed to match cerberus output
  640. {
  641. perk_array = ent get_perk_array( 1 );
  642. foreach ( perk in perk_array )
  643. {
  644. ent unsetperk( perk );
  645. }
  646. return perk_array;
  647. }
  648.  
  649. playchugabudtimeraudio() //checked matches cerberus output
  650. {
  651. self endon( "chugabud_grabbed" );
  652. self endon( "chugabud_timedout" );
  653. player = self.player;
  654. self thread playchugabudtimerout( player );
  655. while ( 1 )
  656. {
  657. player playsoundtoplayer( "zmb_chugabud_timer_count", player );
  658. wait 1;
  659. }
  660. }
  661.  
  662. playchugabudtimerout( player ) //checked matches cerberus output
  663. {
  664. self endon( "chugabud_grabbed" );
  665. self waittill( "chugabud_timedout" );
  666. player playsoundtoplayer( "zmb_chugabud_timer_out", player );
  667. }
  668.  
  669. chugabud_hostmigration() //checked changed to match cerberus output
  670. {
  671. level endon( "end_game" );
  672. level notify( "chugabud_hostmigration" );
  673. level endon( "chugabud_hostmigration" );
  674. while ( 1 )
  675. {
  676. level waittill( "host_migration_end" );
  677. chugabuds = getentarray( "player_chugabud_model", "script_noteworthy" );
  678. foreach ( model in chugabuds )
  679. {
  680. playfxontag( level._effect[ "powerup_on" ], model, "tag_origin" );
  681. }
  682. }
  683. }
  684.  
  685. player_revived_cleanup_chugabud_corpse() //checked matches cerberus output
  686. {
  687. }
  688.  
  689. player_has_chugabud_corpse() //checked matches cerberus output
  690. {
  691. if ( isDefined( self.e_chugabud_corpse ) )
  692. {
  693. return 1;
  694. }
  695. return 0;
  696. }
  697.  
  698. is_weapon_available_in_chugabud_corpse( weapon, player_to_check ) //checked partially changed to match cerberus output
  699. {
  700. count = 0;
  701. upgradedweapon = weapon;
  702. if ( isDefined( level.zombie_weapons[ weapon ] ) && isDefined( level.zombie_weapons[ weapon ].upgrade_name ) )
  703. {
  704. upgradedweapon = level.zombie_weapons[ weapon ].upgrade_name;
  705. }
  706. players = getplayers();
  707. if ( isDefined( players ) )
  708. {
  709. player_index = 0;
  710. while ( player_index < players.size )
  711. {
  712. player = players[ player_index ];
  713. if ( isDefined( player_to_check ) && player != player_to_check )
  714. {
  715. player_index++;
  716. continue;
  717. }
  718. if ( player player_has_chugabud_corpse() )
  719. {
  720. if ( isDefined( player.loadout ) && isDefined( player.loadout.weapons ) )
  721. {
  722. for ( i = 0; i < player.loadout.weapons.size; i++ )
  723. {
  724. chugabud_weapon = player.loadout.weapons[ i ];
  725. if ( isDefined( chugabud_weapon ) && chugabud_weapon[ "name" ] == weapon || chugabud_weapon[ "name" ] == upgradedweapon )
  726. {
  727. count++;
  728. }
  729. }
  730. }
  731. }
  732. player_index++;
  733. }
  734. }
  735. return count;
  736. }
  737.  
  738. chugabud_corpse_cleanup_on_spectator( player ) //checked changed to match cerberus output
  739. {
  740. self endon( "death" );
  741. player endon( "disconnect" );
  742. while ( 1 )
  743. {
  744. if ( player.sessionstate == "spectator" )
  745. {
  746. break;
  747. }
  748. wait 0.01;
  749. }
  750. player chugabud_corpse_cleanup( self, 0 );
  751. }
  752.  
  753. chugabud_corpse_revive_icon( player ) //checked changed to match cerberus output
  754. {
  755. self endon( "death" );
  756. height_offset = 30;
  757. index = player.clientid;
  758. hud_elem = newhudelem();
  759. self.revive_hud_elem = hud_elem;
  760. hud_elem.x = self.origin[ 0 ];
  761. hud_elem.y = self.origin[ 1 ];
  762. hud_elem.z = self.origin[ 2 ] + height_offset;
  763. hud_elem.alpha = 1;
  764. hud_elem.archived = 1;
  765. hud_elem setshader( "waypoint_revive", 5, 5 );
  766. hud_elem setwaypoint( 1 );
  767. hud_elem.hidewheninmenu = 1;
  768. hud_elem.immunetodemogamehudsettings = 1;
  769. while ( 1 )
  770. {
  771. if ( !isDefined( self.revive_hud_elem ) )
  772. {
  773. break;
  774. }
  775. hud_elem.x = self.origin[ 0 ];
  776. hud_elem.y = self.origin[ 1 ];
  777. hud_elem.z = self.origin[ 2 ] + height_offset;
  778. wait 0.01;
  779. }
  780. }
  781.  
  782. activate_chugabud_effects_and_audio() //checked matches cerberus output
  783. {
  784. if ( isDefined( level.whos_who_client_setup ) )
  785. {
  786. if ( !isDefined( self.whos_who_effects_active ) )
  787. {
  788. if ( isDefined( level.chugabud_shellshock ) )
  789. {
  790. self shellshock( "whoswho", 60 );
  791. }
  792. if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) )
  793. {
  794. maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_whos_who", self );
  795. }
  796. self setclientfieldtoplayer( "clientfield_whos_who_audio", 1 );
  797. self setclientfieldtoplayer( "clientfield_whos_who_filter", 1 );
  798. self.whos_who_effects_active = 1;
  799. self thread deactivate_chugabud_effects_and_audio();
  800. }
  801. }
  802. }
  803.  
  804. deactivate_chugabud_effects_and_audio() //checked matches cerberus output
  805. {
  806. self waittill_any( "death", "chugabud_effects_cleanup", "spawned_player" );
  807. if ( isDefined( level.whos_who_client_setup ) )
  808. {
  809. if ( isDefined( self.whos_who_effects_active ) && self.whos_who_effects_active == 1 )
  810. {
  811. if ( isDefined( level.chugabud_shellshock ) )
  812. {
  813. self stopshellshock();
  814. }
  815. if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) )
  816. {
  817. maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_whos_who", self );
  818. }
  819. self setclientfieldtoplayer( "clientfield_whos_who_audio", 0 );
  820. self setclientfieldtoplayer( "clientfield_whos_who_filter", 0 );
  821. }
  822. self.whos_who_effects_active = undefined;
  823. }
  824. }
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement