Advertisement
Guest User

Untitled

a guest
Mar 7th, 2016
626
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 49.78 KB | None | 0 0
  1. #include maps\_utility;
  2. #include common_scripts\utility;
  3. #include maps\_zombiemode_utility;
  4.  
  5. /* ==================== Credits ==================== //
  6.  
  7. HyperFirez - Made the script.
  8. Harrybo21 - Tips on scripting.
  9. NG Caudle - Bug Fixes.
  10. Scobulua - Teaching me how to use 1 weapon file for the bottles.
  11. Mentality - Teaching me how to use 1 weapon file for the bottles.
  12.  
  13. // ================================================= */
  14.  
  15. // ===================== Init ====================== //
  16.  
  17. init()
  18. {
  19. vending_triggers = GetEntArray( "zombie_vending", "targetname" );
  20. revive_trig = GetEnt("quick_revive_trig", "targetname");
  21. level.temp_org_revive = spawn("script_origin", revive_trig.origin);
  22.  
  23. if ( vending_triggers.size < 1 )
  24. {
  25. return;
  26. }
  27.  
  28. vending_upgrade_trigger = GetEntArray("zombie_vending_upgrade", "targetname");
  29.  
  30. if ( vending_upgrade_trigger.size >= 1 )
  31. {
  32. array_thread( vending_upgrade_trigger, ::vending_upgrade );;
  33. }
  34.  
  35. // Precaching Models, Bottles, Shaders and Effects
  36. PrecacheItem( "zombie_perk_bottle" );
  37. PrecacheItem( "zombie_knuckle_crack" );
  38.  
  39. PrecacheShader( "specialty_juggernaut_zombies" );
  40. PrecacheShader( "specialty_fastreload_zombies" );
  41. PrecacheShader( "specialty_doubletap_zombies" );
  42. PrecacheShader( "specialty_quickrevive_zombies" );
  43. PrecacheShader( "specialty_phd_zombies" );
  44. PrecacheShader( "specialty_stamin_zombies" );
  45. PrecacheShader( "specialty_mule_zombies" );
  46. PrecacheShader( "specialty_deadshot_zombies" );
  47. PrecacheShader( "specialty_tomb_zombies" );
  48. PrecacheShader( "specialty_chugabud_zombies" );
  49. PrecacheShader( "specialty_cherry_zombies" );
  50. PrecacheShader( "specialty_vulture_aid_zombies" );
  51. PrecacheShader( "specialty_wunderfizz_zombies" );
  52. //PrecacheShader( "specialty_widows_wine_zombies" );
  53.  
  54. // Items
  55.  
  56. PrecacheModel("zombie_vending_jugg_on");
  57. PrecacheModel("zombie_vending_doubletap_on");
  58. PrecacheModel("zombie_vending_revive_on");
  59. PrecacheModel("zombie_vending_sleight_on");
  60. PrecacheModel("zombie_vending_phd_on");
  61. PrecacheModel("zombie_vending_stamin_on");
  62. PrecacheModel("zombie_vending_mule_on");
  63. PrecacheModel("zombie_vending_deadshot_on");
  64. PrecacheModel("zombie_vending_tomb_on");
  65. PrecacheModel("zombie_vending_chugabud_on");
  66. PrecacheModel("zombie_vending_cherry_on");
  67. PrecacheModel("zombie_vending_vulture_aid_on");
  68. PrecacheModel("zombie_vending_wunderfizz_on");
  69. //PrecacheModel("zombie_vending_widows_wine_on");
  70. PrecacheModel("zombie_vending_packapunch_on");
  71.  
  72. level._effect["sleight_light"] = loadfx("misc/fx_zombie_cola_on");
  73. level._effect["doubletap_light"] = loadfx("misc/fx_zombie_cola_dtap_on");
  74. level._effect["jugger_light"] = loadfx("misc/fx_zombie_cola_jugg_on");
  75. level._effect["revive_light"] = loadfx("misc/fx_zombie_cola_revive_on");
  76. level._effect["packapunch_fx"] = loadfx("maps/zombie/fx_zombie_packapunch");
  77.  
  78. if( !isDefined( level.packapunch_timeout ) )
  79. {
  80. level.packapunch_timeout = 15;
  81. }
  82.  
  83. PrecacheString( &"ZOMBIE_PERK_JUGGERNAUT" );
  84. PrecacheString( &"ZOMBIE_PERK_QUICKREVIVE" );
  85. PrecacheString( &"ZOMBIE_PERK_FASTRELOAD" );
  86. PrecacheString( &"ZOMBIE_PERK_DOUBLETAP" );
  87. PrecacheString( &"ZOMBIE_PERK_PACKAPUNCH" );
  88.  
  89. set_zombie_var( "zombie_perk_cost", 2500 );
  90. set_zombie_var( "zombie_perk_juggernaut_health", 280 );
  91.  
  92. array_thread( vending_triggers, :: vending_trigger_think );
  93. array_thread( vending_triggers, :: electric_perks_dialog );
  94.  
  95. revive_trig thread vending_trigger_think();
  96. revive_trig thread electric_perks_dialog();
  97.  
  98. level thread turn_jugger_on();
  99. level thread turn_doubletap_on();
  100. level thread turn_sleight_on();
  101. level thread turn_revive_on();
  102. level thread turn_phd_flopper_on();
  103. level thread turn_mule_kick_on();
  104. level thread turn_staminup_on();
  105. level thread turn_deadshot_on();
  106. level thread turn_tomb_on();
  107. level thread turn_chugabud_on();
  108. level thread turn_cherry_on();
  109. level thread turn_vulture_aid_on();
  110. level thread turn_wunderfizz_on();
  111. //level thread turn_widows_wine_on();
  112. level thread turn_PackAPunch_on();
  113.  
  114. // Threading Perk Functions
  115.  
  116. level thread machine_watcher();
  117. level.jugger_jingle = 1;
  118. level.speed_jingle = 1;
  119. level.revive_jingle = 1;
  120. level.doubletap_jingle = 1;
  121. level.phd_jingle = 1;
  122. level.stamin_jingle = 1;
  123. level.mule_jingle = 1;
  124. level.deadshot_jingle = 1;
  125. level.tomb_jingle = 1;
  126. level.chugabud_jingle = 1;
  127. level.cherry_jingle = 1;
  128. level.vulture_aid_jingle = 1;
  129. //level.widows_wine_jingle = 1;
  130. level.packa_jingle = 1;
  131. }
  132.  
  133. third_person_weapon_upgrade( current_weapon, origin, angles, packa_rollers, perk_machine )
  134. {
  135. forward = anglesToForward( angles );
  136. interact_pos = origin + (forward*-25);
  137.  
  138. worldgun = spawn( "script_model", interact_pos );
  139. worldgun.angles = self.angles;
  140. worldgun setModel( GetWeaponModel( current_weapon ) );
  141. PlayFx( level._effect["packapunch_fx"], origin+(0,1,-34), forward );
  142.  
  143. worldgun rotateto( angles+(0,90,0), 0.35, 0, 0 );
  144. wait( 0.5 );
  145. worldgun moveto( origin, 0.5, 0, 0 );
  146. packa_rollers playsound( "packa_weap_upgrade" );
  147. if( isDefined( perk_machine.wait_flag ) )
  148. {
  149. perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles+(179, 0, 0), 0.25, 0, 0 );
  150. }
  151. wait( 0.35 );
  152. worldgun delete();
  153. wait( 3 );
  154. packa_rollers playsound( "packa_weap_ready" );
  155. worldgun = spawn( "script_model", origin );
  156. worldgun.angles = angles+(0,90,0);
  157. worldgun setModel( GetWeaponModel( current_weapon+"_upgraded" ) );
  158. worldgun moveto( interact_pos, 0.5, 0, 0 );
  159. if( isDefined( perk_machine.wait_flag ) )
  160. {
  161. perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles-(179, 0, 0), 0.25, 0, 0 );
  162. }
  163. wait( 0.5 );
  164. worldgun moveto( origin, level.packapunch_timeout, 0, 0);
  165. return worldgun;
  166. }
  167.  
  168. vending_upgrade()
  169. {
  170. perk_machine = GetEnt( self.target, "targetname" );
  171. if( isDefined( perk_machine.target ) )
  172. {
  173. perk_machine.wait_flag = GetEnt( perk_machine.target, "targetname" );
  174. }
  175.  
  176. self UseTriggerRequireLookAt();
  177. self SetHintString( "The power must be activated first" );
  178. self SetCursorHint( "HINT_NOICON" );
  179. level waittill("Pack_A_Punch_on");
  180.  
  181. self thread maps\_zombiemode_weapons::decide_hide_show_hint();
  182.  
  183. packa_rollers = spawn("script_origin", self.origin);
  184. packa_timer = spawn("script_origin", self.origin);
  185. packa_rollers playloopsound("packa_rollers_loop");
  186.  
  187. self SetHintString( "Press & hold &&1 to buy Pack A Punch Upgrade [Cost: 5000]" );
  188. cost = level.zombie_vars["zombie_perk_cost"];
  189.  
  190. for( ;; )
  191. {
  192. self waittill( "trigger", player );
  193. index = maps\_zombiemode_weapons::get_player_index(player);
  194. cost = 5000;
  195. plr = "plr_" + index + "_";
  196.  
  197. if( !player maps\_zombiemode_weapons::can_buy_weapon() )
  198. {
  199. wait( 0.1 );
  200. continue;
  201. }
  202.  
  203. if (player maps\_laststand::player_is_in_laststand() )
  204. {
  205. wait( 0.1 );
  206. continue;
  207. }
  208.  
  209. if( player isThrowingGrenade() )
  210. {
  211. wait( 0.1 );
  212. continue;
  213. }
  214.  
  215. if( player isSwitchingWeapons() )
  216. {
  217. wait(0.1);
  218. continue;
  219. }
  220.  
  221. current_weapon = player getCurrentWeapon();
  222.  
  223. if( !IsDefined( level.zombie_include_weapons[current_weapon] ) || !IsDefined( level.zombie_include_weapons[current_weapon + "_upgraded"] ) )
  224. {
  225. continue;
  226. }
  227.  
  228. if(IsDefined(player.is_diving) && player.is_diving)
  229. continue;
  230.  
  231. if ( player.score < cost )
  232. {
  233. //player iprintln( "Not enough points to buy Perk: " + perk );
  234. self playsound("deny");
  235. player thread play_no_money_perk_dialog();
  236. continue;
  237. }
  238. player maps\_zombiemode_score::minus_to_player_score( cost );
  239. self achievement_notify("perk_used");
  240. sound = "bottle_dispense3d";
  241. playsoundatposition(sound, self.origin);
  242. rand = randomintrange(1,100);
  243.  
  244. if( rand <= 8 )
  245. {
  246. player thread play_packa_wait_dialog(plr);
  247. }
  248.  
  249. self thread play_vendor_stings("mx_packa_sting");
  250.  
  251. origin = self.origin;
  252. angles = self.angles;
  253.  
  254. if( isDefined(perk_machine))
  255. {
  256. origin = perk_machine.origin+(0,0,35);
  257. angles = perk_machine.angles+(0,90,0);
  258. }
  259.  
  260. self disable_trigger();
  261.  
  262. player thread do_knuckle_crack();
  263.  
  264.  
  265. self.current_weapon = current_weapon;
  266.  
  267. weaponmodel = player third_person_weapon_upgrade( current_weapon, origin, angles, packa_rollers, perk_machine );
  268.  
  269. self enable_trigger();
  270. self SetHintString( "Press & Hold &&1 to take your upgraded weapon" );
  271. self setvisibletoplayer( player );
  272.  
  273. self thread wait_for_player_to_take( player, current_weapon, packa_timer );
  274. self thread wait_for_timeout( packa_timer );
  275.  
  276. self waittill_either( "pap_timeout", "pap_taken" );
  277.  
  278. self.current_weapon = "";
  279. weaponmodel delete();
  280. self SetHintString( "Press & hold &&1 to Upgrade Weapon [Cost: 5000]" );
  281. self setvisibletoall();
  282. }
  283. }
  284.  
  285. wait_for_player_to_take( player, weapon, packa_timer )
  286. {
  287. index = maps\_zombiemode_weapons::get_player_index(player);
  288. plr = "plr_" + index + "_";
  289.  
  290. self endon( "pap_timeout" );
  291. while( true )
  292. {
  293. packa_timer playloopsound( "ticktock_loop" );
  294. self waittill( "trigger", trigger_player );
  295. packa_timer stoploopsound(.05);
  296. if( trigger_player == player )
  297. {
  298. if( !player maps\_laststand::player_is_in_laststand() )
  299. {
  300. self notify( "pap_taken" );
  301. primaries = player GetWeaponsListPrimaries();
  302. if( isDefined( primaries ) && primaries.size >= 2 )
  303. {
  304. player maps\_zombiemode_weapons::weapon_give( weapon+"_upgraded" );
  305. }
  306. else
  307. {
  308. player GiveWeapon( weapon+"_upgraded" );
  309. player GiveMaxAmmo( weapon+"_upgraded" );
  310. }
  311.  
  312. player SwitchToWeapon( weapon+"_upgraded" );
  313. player achievement_notify( "DLC3_ZOMBIE_PAP_ONCE" );
  314. player achievement_notify( "DLC3_ZOMBIE_TWO_UPGRADED" );
  315. player thread play_packa_get_dialog(plr);
  316. return;
  317. }
  318. }
  319. wait( 0.05 );
  320. }
  321. }
  322.  
  323. wait_for_timeout( packa_timer )
  324. {
  325. self endon( "pap_taken" );
  326.  
  327. wait( level.packapunch_timeout );
  328.  
  329. self notify( "pap_timeout" );
  330. packa_timer stoploopsound(.05);
  331. packa_timer playsound( "packa_deny" );
  332. }
  333.  
  334. do_knuckle_crack()
  335. {
  336. gun = self upgrade_knuckle_crack_begin();
  337.  
  338. self.is_drinking = 1;
  339. self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
  340.  
  341. self upgrade_knuckle_crack_end( gun );
  342. self.is_drinking = undefined;
  343. }
  344.  
  345. upgrade_knuckle_crack_begin()
  346. {
  347. self DisableOffhandWeapons();
  348. self DisableWeaponCycling();
  349.  
  350. self AllowLean( false );
  351. self AllowAds( false );
  352. self AllowSprint( false );
  353. self AllowProne( false );
  354. self AllowMelee( false );
  355.  
  356. if ( self GetStance() == "prone" )
  357. {
  358. self SetStance( "crouch" );
  359. }
  360.  
  361. primaries = self GetWeaponsListPrimaries();
  362.  
  363. gun = self GetCurrentWeapon();
  364. weapon = "zombie_knuckle_crack";
  365.  
  366. if ( gun != "none" && gun != "claymore_zm" )
  367. {
  368. self TakeWeapon( gun );
  369. }
  370. else
  371. {
  372. return;
  373. }
  374.  
  375. if( primaries.size <= 1 )
  376. {
  377. self GiveWeapon( "zombie_colt" );
  378. }
  379.  
  380. self GiveWeapon( weapon );
  381. self SwitchToWeapon( weapon );
  382.  
  383. return gun;
  384. }
  385.  
  386. upgrade_knuckle_crack_end( gun )
  387. {
  388. assert( gun != "zombie_perk_bottle" );
  389. assert( gun != "syrette" );
  390.  
  391. self EnableOffhandWeapons();
  392. self EnableWeaponCycling();
  393.  
  394. self AllowLean( true );
  395. self AllowAds( true );
  396. self AllowSprint( true );
  397. self AllowProne( true );
  398. self AllowMelee( true );
  399. weapon = "zombie_knuckle_crack";
  400.  
  401. // TODO: race condition?
  402. if ( self maps\_laststand::player_is_in_laststand() )
  403. {
  404. self TakeWeapon(weapon);
  405. return;
  406. }
  407.  
  408. self TakeWeapon(weapon);
  409. primaries = self GetWeaponsListPrimaries();
  410. if( isDefined( primaries ) && primaries.size > 0 )
  411. {
  412. self SwitchToWeapon( primaries[0] );
  413. }
  414. else
  415. {
  416. self SwitchToWeapon( "zombie_colt" );
  417. }
  418. }
  419.  
  420. turn_PackAPunch_on()
  421. {
  422. level waittill("Pack_A_Punch_on");
  423.  
  424. vending_upgrade_trigger = GetEntArray("zombie_vending_upgrade", "targetname");
  425. for(i=0; i<vending_upgrade_trigger.size; i++ )
  426. {
  427. perk = getent(vending_upgrade_trigger[i].target, "targetname");
  428. if(isDefined(perk))
  429. {
  430. perk thread activate_PackAPunch();
  431. }
  432. }
  433. }
  434.  
  435. activate_PackAPunch()
  436. {
  437. self setmodel("zombie_vending_packapunch_on");
  438. self playsound("perks_power_on");
  439. self vibrate((0,-100,0), 0.3, 0.4, 3);
  440. timer = 0;
  441. duration = 0.05;
  442.  
  443. level notify( "Carpenter_On" );
  444. }
  445.  
  446. turn_sleight_on()
  447. {
  448. machine = getentarray("vending_sleight", "targetname");
  449.  
  450. flag_wait("electricity_on");
  451.  
  452. for( i = 0; i < machine.size; i++ )
  453. {
  454. machine[i] setmodel("zombie_vending_sleight_on");
  455. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  456. machine[i] playsound("perks_power_on");
  457. machine[i] thread perk_fx( "sleight_light" );
  458. }
  459.  
  460. level notify( "specialty_fastreload_power_on" );
  461. }
  462.  
  463. turn_revive_on()
  464. {
  465. revive_machine = GetEnt("vending_revive", "targetname");
  466. solo_trig = getent("specialty_quickrevive", "script_noteworthy");
  467.  
  468. flag_wait( "all_players_connected" );
  469.  
  470. players = get_players();
  471.  
  472.  
  473. if(players.size == 1)
  474. solo_trig SetHintString( "Press & hold @ to buy Quick Revive [Cost: 500]" );
  475. else
  476. flag_wait("electricity_on");
  477.  
  478. revive_machine setmodel("zombie_vending_revive_on");
  479. revive_machine playsound("perks_power_on");
  480. revive_machine vibrate((0,-100,0), 0.3, 0.4, 3);
  481. revive_machine thread perk_fx( "revive_light" );
  482.  
  483. level notify( "specialty_quickrevive_power_on" );
  484. }
  485.  
  486. turn_jugger_on()
  487. {
  488. machine = getentarray("vending_jugg", "targetname");
  489.  
  490. flag_wait("electricity_on");
  491.  
  492. for( i = 0; i < machine.size; i++ )
  493. {
  494. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  495. machine[i] setmodel("zombie_vending_jugg_on");
  496. machine[i] playsound("perks_power_on");
  497. machine[i] thread perk_fx( "jugger_light" );
  498.  
  499. }
  500. level notify( "specialty_armorvest_power_on" );
  501.  
  502. }
  503.  
  504. turn_doubletap_on()
  505. {
  506. machine = getentarray("vending_doubletap", "targetname");
  507. flag_wait("electricity_on");
  508.  
  509. for( i = 0; i < machine.size; i++ )
  510. {
  511. machine[i] setmodel("zombie_vending_doubletap_on");
  512. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  513. machine[i] playsound("perks_power_on");
  514. machine[i] thread perk_fx( "doubletap_light" );
  515. }
  516. level notify( "specialty_rof_power_on" );
  517. }
  518.  
  519. turn_phd_flopper_on()
  520. {
  521. machine = getentarray("vending_phd_flopper", "targetname");
  522. flag_wait("electricity_on");
  523.  
  524. for( i = 0; i < machine.size; i++ )
  525. {
  526. machine[i] setmodel("zombie_vending_phd_on");
  527. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  528. machine[i] playsound("perks_power_on");
  529. machine[i] thread perk_fx("doubletap_light");
  530. }
  531. level notify( "specialty_detectexplosive_power_on" );
  532. }
  533.  
  534. turn_staminup_on()
  535. {
  536.  
  537. machine = getentarray("vending_staminup", "targetname");
  538. flag_wait("electricity_on");
  539.  
  540. for( i = 0; i < machine.size; i++ )
  541. {
  542. machine[i] setmodel("zombie_vending_stamin_on");
  543. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  544. machine[i] playsound("perks_power_on");
  545. machine[i] thread perk_fx( "doubletap_light" );
  546. }
  547. level notify( "specialty_longersprint_power_on" );
  548. }
  549.  
  550. turn_mule_kick_on()
  551. {
  552. machine = getentarray("vending_mule_kick", "targetname");
  553. flag_wait("electricity_on");
  554.  
  555. for( i = 0; i < machine.size; i++ )
  556. {
  557. machine[i] setmodel("zombie_vending_mule_on");
  558. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  559. machine[i] playsound("perks_power_on");
  560. machine[i] thread perk_fx( "sleight_light" );
  561. }
  562. level notify( "specialty_extraammo_power_on" );
  563. }
  564.  
  565. turn_deadshot_on()
  566. {
  567. machine = getentarray("vending_deadshot", "targetname");
  568. flag_wait("electricity_on");
  569.  
  570. for( i = 0; i < machine.size; i++ )
  571. {
  572. machine[i] setmodel("zombie_vending_deadshot_on");
  573. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  574. machine[i] playsound("perks_power_on");
  575. machine[i] thread perk_fx( "doubletap_light" );
  576. }
  577. level notify( "specialty_bulletaccuracy_power_on" );
  578. }
  579.  
  580. turn_tomb_on()
  581. {
  582. machine = getentarray("vending_tomb", "targetname");
  583. flag_wait("electricity_on");
  584.  
  585. for( i = 0; i < machine.size; i++ )
  586. {
  587. machine[i] setmodel("zombie_vending_tomb_on");
  588. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  589. machine[i] playsound("perks_power_on");
  590. machine[i] thread perk_fx( "doubletap_light" );
  591. }
  592. level notify( "specialty_reconnaissance_power_on" );
  593. }
  594.  
  595. turn_chugabud_on()
  596. {
  597. machine = getentarray("vending_chugabud", "targetname");
  598. flag_wait("electricity_on");
  599.  
  600. for( i = 0; i < machine.size; i++ )
  601. {
  602. machine[i] setmodel("zombie_vending_chugabud_on");
  603. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  604. machine[i] playsound("perks_power_on");
  605. machine[i] thread perk_fx( "doubletap_light" );
  606. }
  607. level notify( "specialty_shades_power_on" );
  608. }
  609.  
  610. turn_cherry_on()
  611. {
  612. machine = getentarray("vending_cherry", "targetname");
  613. flag_wait("electricity_on");
  614.  
  615. for( i = 0; i < machine.size; i++ )
  616. {
  617. machine[i] setmodel("zombie_vending_cherry_on");
  618. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  619. machine[i] playsound("perks_power_on");
  620. machine[i] thread perk_fx( "sleight_light" );
  621. }
  622. level notify( "specialty_boost_power_on" );
  623. }
  624.  
  625. turn_vulture_aid_on()
  626. {
  627. machine = getentarray("vending_vulture_aid", "targetname");
  628. flag_wait("electricity_on");
  629.  
  630. for( i = 0; i < machine.size; i++ )
  631. {
  632. machine[i] setmodel("zombie_vending_vulture_aid_on");
  633. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  634. machine[i] playsound("perks_power_on");
  635. machine[i] thread perk_fx( "doubletap_light" );
  636. }
  637. level notify( "specialty_ordinance_power_on" );
  638. }
  639.  
  640. turn_wunderfizz_on()
  641. {
  642. machine = getentarray("vending_wunderfizz", "targetname");
  643. flag_wait("electricity_on");
  644.  
  645. for( i = 0; i < machine.size; i++ )
  646. {
  647. machine[i] setmodel("zombie_vending_wunderfizz_on");
  648. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  649. machine[i] playsound("perks_power_on");
  650. machine[i] thread perk_fx( "revive_light" );
  651. }
  652. level notify( "wunderfizz_power_on" );
  653. }
  654.  
  655. perk_fx( fx )
  656. {
  657. wait(3);
  658. playfxontag( level._effect[ fx ], self, "tag_origin" );
  659. }
  660.  
  661. electric_perks_dialog()
  662. {
  663.  
  664. self endon ("warning_dialog");
  665. level endon("switch_flipped");
  666. timer =0;
  667. while(1)
  668. {
  669. wait(0.5);
  670. players = get_players();
  671. for(i = 0; i < players.size; i++)
  672. {
  673. dist = distancesquared(players[i].origin, self.origin );
  674. if(dist > 70*70)
  675. {
  676. timer = 0;
  677. continue;
  678. }
  679. if(dist < 70*70 && timer < 3)
  680. {
  681. wait(0.5);
  682. timer ++;
  683. }
  684. if(dist < 70*70 && timer == 3)
  685. {
  686.  
  687. players[i] thread do_player_vo("vox_start", 5);
  688. wait(3);
  689. self notify ("warning_dialog");
  690. iprintlnbold("warning_given");
  691. }
  692. }
  693. }
  694. }
  695.  
  696.  
  697.  
  698.  
  699.  
  700. vending_trigger_think()
  701. {
  702. //self thread turn_cola_off();
  703. perk = self.script_noteworthy;
  704.  
  705. self.timesUsed = 0;
  706.  
  707. self SetHintString( &"ZOMBIE_FLAMES_UNAVAILABLE" );
  708.  
  709. self SetCursorHint( "HINT_NOICON" );
  710. self UseTriggerRequireLookAt();
  711.  
  712. flag_wait("electricity_on");
  713. //notify_name = perk + "_power_on";
  714. //level waittill( notify_name );
  715.  
  716. perk_hum = spawn("script_origin", self.origin);
  717. perk_hum playloopsound("perks_machine_loop");
  718.  
  719. self thread check_player_has_perk(perk);
  720.  
  721. self vending_set_hintstring(perk);
  722.  
  723. for( ;; )
  724. {
  725. self waittill( "trigger", player );
  726. //iprintlnbold("triggered by " + player.playername);
  727. index = maps\_zombiemode_weapons::get_player_index(player);
  728. cost = level.zombie_vars["zombie_perk_cost"];
  729. switch( perk )
  730. {
  731. case "specialty_armorvest":
  732. cost = 2500;
  733. break;
  734.  
  735. case "specialty_quickrevive":
  736. players = get_players();
  737. if (players.size == 1)
  738. cost = 500;
  739. else
  740. cost = 1500;
  741. break;
  742.  
  743. case "specialty_fastreload":
  744. cost = 3000;
  745. break;
  746.  
  747. case "specialty_rof":
  748. cost = 2000;
  749. break;
  750.  
  751. case "specialty_detectexplosive": // phd flopper
  752. cost = 2000;
  753. break;
  754.  
  755. case "specialty_longersprint": // staminup
  756. cost = 2000;
  757. break;
  758.  
  759. case "specialty_extraammo": // mule kick
  760. cost = 4000;
  761. break;
  762.  
  763. case "specialty_bulletaccuracy": // deadshot
  764. cost = 1000;
  765. break;
  766.  
  767. case "specialty_reconnaissance": // tombstone
  768. if (player.size == 1)
  769. cost = 1000;
  770. else
  771. cost = 2000;
  772. break;
  773.  
  774. case "specialty_shades": // who's who?
  775. cost = 2000;
  776. break;
  777.  
  778. case "specialty_boost": // electric cherry
  779. cost = 2000;
  780. break;
  781.  
  782. case "specialty_ordinance": // vulture aid
  783. cost = 2000;
  784. break;
  785.  
  786. }
  787.  
  788. if (player maps\_laststand::player_is_in_laststand() )
  789. {
  790. //iprintlnbold("laststand");
  791. continue;
  792. }
  793.  
  794. if(player in_revive_trigger())
  795. {
  796. //iprintlnbold("in revive trig");
  797. continue;
  798. }
  799.  
  800. if( player isThrowingGrenade() )
  801. {
  802. //iprintlnbold("throwing nade");
  803. wait( 0.1 );
  804. continue;
  805. }
  806.  
  807. if( player isSwitchingWeapons() )
  808. {
  809. //iprintlnbold("switching weapons");
  810. wait(0.1);
  811. continue;
  812. }
  813.  
  814. /* if( player.vars["perk_count"] >= 4 )
  815. {
  816. //iprintlnbold ("perk count too big " + player.vars["perk_count"]);
  817. self playsound("deny");
  818. wait(0.1);
  819. continue;
  820. }*/
  821.  
  822. if ( player HasPerk( perk ) )
  823. {
  824. cheat = false;
  825.  
  826. /#
  827. if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  828. {
  829. cheat = true;
  830. }
  831. #/
  832.  
  833. if ( cheat != true )
  834. {
  835. //player iprintlnbold( "Already using Perk: " + perk );
  836. self playsound("deny");
  837. player thread play_no_money_perk_dialog();
  838.  
  839.  
  840. continue;
  841. }
  842. }
  843.  
  844. if(IsDefined(player.is_diving) && player.is_diving)
  845. continue;
  846.  
  847. if ( player.score < cost )
  848. {
  849. //player iprintlnbold( "Not enough points to buy Perk: " + perk );
  850. self playsound("deny");
  851. player thread play_no_money_perk_dialog();
  852. continue;
  853. }
  854.  
  855. sound = "bottle_dispense3d";
  856. player achievement_notify( "perk_used" );
  857. playsoundatposition(sound, self.origin);
  858. player maps\_zombiemode_score::minus_to_player_score( cost );
  859. ///bottle_dispense
  860. switch( perk )
  861. {
  862. case "specialty_armorvest":
  863. sound = "mx_jugger_sting";
  864. break;
  865.  
  866. case "specialty_quickrevive":
  867. sound = "mx_revive_sting";
  868. break;
  869.  
  870. case "specialty_fastreload":
  871. sound = "mx_speed_sting";
  872. break;
  873.  
  874. case "specialty_rof":
  875. sound = "mx_doubletap_sting";
  876. break;
  877.  
  878. case "specialty_detectexplosive":
  879. sound = "mx_phd_flopper_sting";
  880. break;
  881.  
  882. case "specialty_longersprint":
  883. sound = "mx_staminup_sting";
  884. break;
  885.  
  886. case "specialty_bulletaccuracy":
  887. sound = "mx_deadshot_sting";
  888. break;
  889.  
  890. case "specialty_extraammo":
  891. sound = "mx_three_guns_sting";
  892. break;
  893.  
  894. default:
  895. sound = "mx_jugger_sting";
  896. break;
  897. }
  898.  
  899. self thread play_vendor_stings(sound);
  900.  
  901. // self waittill("sound_done");
  902.  
  903.  
  904. // do the drink animation
  905. gun = player perk_give_bottle_begin( perk );
  906. player.is_drinking = 1;
  907. player waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
  908.  
  909. // restore player controls and movement
  910. player perk_give_bottle_end( gun, perk );
  911. player.is_drinking = undefined;
  912. // TODO: race condition?
  913. if ( player maps\_laststand::player_is_in_laststand() )
  914. {
  915. continue;
  916. }
  917.  
  918. player SetPerk( perk );
  919.  
  920. player thread perk_vo(perk);
  921. player setblur( 4, 0.1 );
  922. wait(0.1);
  923. player setblur(0, 0.1);
  924. //earthquake (0.4, 0.2, self.origin, 100);
  925. if(perk == "specialty_armorvest")
  926. {
  927. player.maxhealth = level.zombie_vars["zombie_perk_juggernaut_health"];
  928. player.health = level.zombie_vars["zombie_perk_juggernaut_health"];
  929. //player.health = 160;
  930. }
  931. if( (perk == "specialty_quickrevive") && ( !is_coop() ) )
  932. {
  933. player.vars["revive_count"]++;
  934. if( player.vars["revive_count"] == 3 )
  935. {
  936. self thread remove_revive();
  937. }
  938. }
  939.  
  940.  
  941. player perk_hud_create( perk );
  942.  
  943. if(perk == "specialty_extraammo")
  944. {
  945. player thread mule_kick();
  946. }
  947.  
  948. //stat tracking
  949. player.stats["perks"]++;
  950. player.vars["perk_count"]++;
  951.  
  952. //player iprintln( "Bought Perk: " + perk );
  953. bbPrint( "zombie_uses: playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type perk",
  954. player.playername, player.score, level.round_number, cost, perk, self.origin );
  955.  
  956. player thread perk_think( perk );
  957. }
  958. }
  959.  
  960. remove_revive()
  961. {
  962. revive_machine = GetEnt("vending_revive", "targetname");
  963. revive_trig = GetEnt("revive_perk", "script_string");
  964. revive_machine_clip = GetEnt("quick_revive_clip", "targetname");
  965. revive_bump = GetEnt( "revive_bump_trigger", "targetname");
  966. revive_sound = GetEnt( "perksacola_revive", "targetname");
  967. revive_hack = GetEnt( "hack_revive", "script_string");
  968.  
  969. revive_stuff = getentarray("specialty_quickrevive", "script_noteworthy");
  970. for(i=0;i<revive_stuff.size;i++)
  971. revive_stuff[i] delete();
  972.  
  973. players = GetPlayers();
  974.  
  975. revive_trig delete();
  976. revive_hack delete();
  977. revive_bump delete();
  978. revive_sound delete();
  979. level.temp_org_revive delete();
  980.  
  981. for(i=0;i<players.size;i++)
  982. players[i] playsound("laugh_child");
  983.  
  984. revive_machine Vibrate( (50, 0, 0), 5, 0.5, 5 );
  985. revive_machine MoveZ( 35, 5 );
  986. revive_machine waittill("movedone");
  987.  
  988. playfx(level._effect["poltergeist"], revive_machine.origin);
  989. playsoundatposition ("box_poof", revive_machine.origin);
  990. wait(0.1);
  991. revive_machine delete();
  992. revive_machine_clip delete();
  993. }
  994.  
  995. play_no_money_perk_dialog()
  996. {
  997.  
  998. index = maps\_zombiemode_weapons::get_player_index(self);
  999. player_index = "plr_" + index + "_";
  1000. if(!IsDefined (self.vox_nomoney_perk))
  1001. {
  1002. num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_nomoney_perk");
  1003. self.vox_nomoney_perk = [];
  1004. for(i=0;i<num_variants;i++)
  1005. {
  1006. self.vox_nomoney_perk[self.vox_nomoney_perk.size] = "vox_nomoney_perk_" + i;
  1007. }
  1008. self.vox_nomoney_perk_available = self.vox_nomoney_perk;
  1009. }
  1010. sound_to_play = random(self.vox_nomoney_perk_available);
  1011.  
  1012. self.vox_nomoney_perk_available = array_remove(self.vox_nomoney_perk_available,sound_to_play);
  1013.  
  1014. if (self.vox_nomoney_perk_available.size < 1 )
  1015. {
  1016. self.vox_nomoney_perk_available = self.vox_nomoney_perk;
  1017. }
  1018.  
  1019. self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, 0.25);
  1020. }
  1021.  
  1022. check_player_has_perk(perk)
  1023. {
  1024. /#
  1025. if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  1026. {
  1027. return;
  1028. }
  1029. #/
  1030.  
  1031. dist = 128 * 128;
  1032. /*
  1033. while(true)
  1034. {
  1035. players = get_players();
  1036. for( i = 0; i < players.size; i++ )
  1037. {
  1038. if(DistanceSquared( players[i].origin, self.origin ) < dist)
  1039. {
  1040. if(!players[i] hasperk(perk) && !(players[i] in_revive_trigger()))
  1041. {
  1042. //PI CHANGE: this change makes it so that if there are multiple players within the trigger for the perk machine, the hint string is still
  1043. // visible to all of them, rather than the last player this check is done for
  1044. if (IsDefined(level.script) && level.script == "nazi_zombie_theater")
  1045. self setinvisibletoplayer(players[i], false);
  1046. else
  1047. self setvisibletoplayer(players[i]);
  1048. //END PI CHANGE
  1049. //iprintlnbold("turn it off to player");
  1050.  
  1051. }
  1052. else
  1053. {
  1054. self SetInvisibleToPlayer(players[i]);
  1055. //iprintlnbold(players[i].health);
  1056. }
  1057. }
  1058.  
  1059.  
  1060. }
  1061.  
  1062. wait(0.1);
  1063.  
  1064. }
  1065. */
  1066. }
  1067.  
  1068.  
  1069. vending_set_hintstring( perk )
  1070. {
  1071. switch( perk )
  1072. {
  1073.  
  1074. case "specialty_armorvest":
  1075. self SetHintString( "^1Press & hold &&1 to buy Jugger-Nog [Cost: 2500]^1" );
  1076. break;
  1077.  
  1078. case "specialty_quickrevive":
  1079. self SetHintString( "Press & hold &&1 to buy Quick Revive [Cost: 1500]^5" );
  1080. break;
  1081.  
  1082. case "specialty_fastreload":
  1083. self SetHintString( "Press & hold &&1 to buy Speed Cola [Cost: 3000]^2" );
  1084. break;
  1085.  
  1086. case "specialty_rof":
  1087. self SetHintString( "Press & hold &&1 to buy Double Tap 2 Root Beer [Cost: 2000]^6" );
  1088. break;
  1089.  
  1090. case "specialty_detectexplosive":
  1091. cost = 2000;
  1092. self SetHintString( "Press & hold &&1 to buy PHD Flopper [Cost: 2000]" );
  1093. break;
  1094.  
  1095. case "specialty_longersprint":
  1096. cost = 2000;
  1097. self SetHintString( "Press & hold &&1 to buy Stamin-Up [Cost: 2000]" );
  1098. break;
  1099.  
  1100. case "specialty_extraammo":
  1101. cost = 4000;
  1102. self SetHintString( "Press & hold &&1 to buy Mule Kick [Cost: 4000]" );
  1103. break;
  1104.  
  1105. case "specialty_bulletaccuracy":
  1106. cost = 1500;
  1107. self SetHintString( "Press & hold &&1 to buy Deadshot Daiquiri [Cost: 1000]" );
  1108. break;
  1109.  
  1110. case "specialty_reconnaissance":
  1111. cost = 2000;
  1112. self SetHintString( "Press & hold &&1 to buy Tombstone Soda [Cost: 2000]" );
  1113. break;
  1114.  
  1115. case "specialty_shades":
  1116. cost = 2000;
  1117. self SetHintString( "Press & hold &&1 to buy Who's Who? [Cost: 2000]" );
  1118. break;
  1119.  
  1120. case "specialty_boost":
  1121. cost = 2000;
  1122. self SetHintString( "Press & hold &&1 to buy Electric Cherry [Cost: 2000]" );
  1123. break;
  1124.  
  1125. case "specialty_ordinance":
  1126. cost = 2000;
  1127. self SetHintString( "Press & hold &&1 to buy Vulture Aid [Cost: 2000]" );
  1128. break;
  1129.  
  1130. default:
  1131. self SetHintString( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] );
  1132. break;
  1133.  
  1134. }
  1135. }
  1136.  
  1137. perk_think( perk )
  1138. {
  1139. /#
  1140. if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  1141. {
  1142. if ( IsDefined( self.perk_hud[ perk ] ) )
  1143. {
  1144. return;
  1145. }
  1146. }
  1147. #/
  1148.  
  1149. self waittill_any( "fake_death", "death", "player_downed", "player_remove_perks" );
  1150.  
  1151. self UnsetPerk( perk );
  1152. self.maxhealth = 100;
  1153. self perk_hud_destroy( perk );
  1154. if(perk == "specialty_extraammo")
  1155. self.vars["max_weap"] = 2;
  1156. self.vars["perk_count"] = 0;
  1157.  
  1158. //self iprintln( "Perk Lost: " + perk );
  1159. }
  1160.  
  1161. perk_hud_create( perk )
  1162. {
  1163. if ( !IsDefined( self.perk_hud ) )
  1164. {
  1165. self.perk_hud = [];
  1166. }
  1167.  
  1168. /#
  1169. if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  1170. {
  1171. if ( IsDefined( self.perk_hud[ perk ] ) )
  1172. {
  1173. return;
  1174. }
  1175. }
  1176. #/
  1177.  
  1178.  
  1179. shader = "";
  1180.  
  1181. switch( perk )
  1182. {
  1183. case "specialty_armorvest":
  1184. shader = "specialty_juggernaut_zombies";
  1185. break;
  1186.  
  1187. case "specialty_quickrevive":
  1188. shader = "specialty_quickrevive_zombies";
  1189. break;
  1190.  
  1191. case "specialty_fastreload":
  1192. shader = "specialty_fastreload_zombies";
  1193. break;
  1194.  
  1195. case "specialty_rof":
  1196. shader = "specialty_doubletap_zombies";
  1197. break;
  1198.  
  1199. case "specialty_detectexplosive":
  1200. shader = "specialty_phd_zombies";
  1201. break;
  1202.  
  1203. case "specialty_longersprint":
  1204. shader = "specialty_stamin_zombies";
  1205. break;
  1206.  
  1207. case "specialty_extraammo":
  1208. shader = "specialty_mule_zombies";
  1209. break;
  1210.  
  1211. case "specialty_bulletaccuracy":
  1212. shader = "specialty_deadshot_zombies";
  1213. break;
  1214.  
  1215. case "specialty_reconnaissance":
  1216. shader = "vending_tomb_shader";
  1217. break;
  1218.  
  1219. case "specialty_shades":
  1220. shader = "vending_chugabud_shader";
  1221. break;
  1222.  
  1223. case "specialty_ordinance":
  1224. shader = "vending_vulture_aid_shader";
  1225. break;
  1226.  
  1227. default:
  1228. shader = "";
  1229. break;
  1230. }
  1231.  
  1232. hud = create_simple_hud( self );
  1233. hud.foreground = true;
  1234. hud.sort = 1;
  1235. hud.hidewheninmenu = false;
  1236. hud.alignX = "left";
  1237. hud.alignY = "bottom";
  1238. hud.horzAlign = "left";
  1239. hud.vertAlign = "bottom";
  1240. hud.x = self.perk_hud.size * 30;
  1241. hud.y = hud.y - 70;
  1242. hud.alpha = 1;
  1243. hud SetShader( shader, 24, 24 );
  1244.  
  1245. self.perk_hud[ perk ] = hud;
  1246. }
  1247.  
  1248. perk_hud_destroy( perk )
  1249. {
  1250. self.perk_hud[ perk ] destroy_hud();
  1251. self.perk_hud[ perk ] = undefined;
  1252. }
  1253.  
  1254. perk_give_bottle_begin( perk )
  1255. {
  1256. self DisableOffhandWeapons();
  1257. self DisableWeaponCycling();
  1258.  
  1259. self AllowLean( false );
  1260. self AllowAds( false );
  1261. self AllowSprint( false );
  1262. self AllowProne( false );
  1263. self AllowMelee( false );
  1264.  
  1265. wait( 0.05 );
  1266.  
  1267. if ( self GetStance() == "prone" )
  1268. {
  1269. self SetStance( "crouch" );
  1270. }
  1271.  
  1272. gun = self GetCurrentWeapon();
  1273. weapon = "";
  1274. //self GiveWeapon( "zombie_perk_bottle", weapon );
  1275. //self SwitchToWeapon( "zombie_perk_bottle" );
  1276. //self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
  1277.  
  1278. //self TakeWeapon( "zombie_perk_bottle" );
  1279.  
  1280. //self SwitchToWeapon( gun );
  1281.  
  1282.  
  1283. switch( perk )
  1284. {
  1285. case "specialty_armorvest":
  1286. weapon = "zombie_perk_bottle";
  1287. break;
  1288.  
  1289. /*case "specialty_quickrevive":
  1290. //weapon = "zombie_perk_bottle_jugg";
  1291. break;
  1292.  
  1293. case "specialty_fastreload":
  1294. //weapon = "zombie_perk_bottle_jugg";
  1295. break;
  1296.  
  1297. case "specialty_rof":
  1298. //weapon = "zombie_perk_bottle_jugg";
  1299. break;
  1300.  
  1301. case "specialty_detectexplosive":
  1302. //weapon = "zombie_perk_bottle_jugg";
  1303. break;
  1304.  
  1305. case "specialty_longersprint":
  1306. //weapon = "zombie_perk_bottle_jugg";
  1307. break;
  1308.  
  1309. case "specialty_extraammo":
  1310. //weapon = "zombie_perk_bottle_jugg";
  1311. break;
  1312.  
  1313. case "specialty_bulletaccuracy":
  1314. //weapon = "zombie_perk_bottle_jugg";
  1315. break;
  1316.  
  1317. case "specialty_reconnaissance":
  1318. //weapon = "zombie_perk_bottle_jugg";
  1319. break;
  1320.  
  1321. case "specialty_shades":
  1322. //weapon = "zombie_perk_bottle_jugg";
  1323. break;
  1324.  
  1325. case "specialty_boost":
  1326. //weapon = "zombie_perk_bottle_jugg";
  1327. break;
  1328.  
  1329. case "specialty_ordinance":
  1330. //weapon = "zombie_perk_bottle_jugg";
  1331. break;*/
  1332. }
  1333.  
  1334. //self GiveWeapon( weapon );
  1335. //self SwitchToWeapon( weapon );
  1336.  
  1337. self GiveWeapon( "zombie_perk_bottle", weapon );
  1338. self SwitchToWeapon( "zombie_perk_bottle" );
  1339.  
  1340. return gun;
  1341. }
  1342.  
  1343.  
  1344. perk_give_bottle_end( gun, perk )
  1345. {
  1346. assert( gun != "zombie_perk_bottle" );
  1347. assert( gun != "syrette" );
  1348.  
  1349. self EnableOffhandWeapons();
  1350. self EnableWeaponCycling();
  1351.  
  1352. self AllowLean( true );
  1353. self AllowAds( true );
  1354. self AllowSprint( true );
  1355. self AllowProne( true );
  1356. self AllowMelee( true );
  1357. //gun = self GetCurrentWeapon();
  1358. weapon = "";
  1359. switch( perk )
  1360. {
  1361. case "specialty_armorvest":
  1362. weapon = "zombie_perk_bottle";
  1363. break;
  1364. }
  1365.  
  1366. // TODO: race condition?
  1367. if ( self maps\_laststand::player_is_in_laststand() )
  1368. {
  1369. self TakeWeapon(weapon);
  1370. return;
  1371. }
  1372.  
  1373. if ( gun != "none" && gun != "mine_bouncing_betty" )
  1374. {
  1375. self SwitchToWeapon( gun );
  1376. }
  1377. else
  1378. {
  1379. // try to switch to first primary weapon
  1380. primaryWeapons = self GetWeaponsListPrimaries();
  1381. if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
  1382. {
  1383. self SwitchToWeapon( primaryWeapons[0] );
  1384. }
  1385. }
  1386.  
  1387. self TakeWeapon(weapon);
  1388. }
  1389.  
  1390. perk_vo(type)
  1391. {
  1392. self endon("death");
  1393. self endon("disconnect");
  1394.  
  1395. index = maps\_zombiemode_weapons::get_player_index(self);
  1396. sound = undefined;
  1397.  
  1398. if(!isdefined (level.player_is_speaking))
  1399. {
  1400. level.player_is_speaking = 0;
  1401. }
  1402. player_index = "plr_" + index + "_";
  1403. //wait(randomfloatrange(1,2));
  1404.  
  1405. //TUEY We need to eventually store the dialog in an array so you can add multiple variants...but we only have 1 now anyway.
  1406. switch(type)
  1407. {
  1408. case "specialty_armorvest":
  1409. sound_to_play = "vox_perk_jugga_0";
  1410. break;
  1411. case "specialty_fastreload":
  1412. sound_to_play = "vox_perk_speed_0";
  1413. break;
  1414. case "specialty_quickrevive":
  1415. sound_to_play = "vox_perk_revive_0";
  1416. break;
  1417. case "specialty_rof":
  1418. sound_to_play = "vox_perk_doubletap_0";
  1419. break;
  1420. case "specialty_detectexplosive":
  1421. sound_to_play = "vox_perk_flopper_0";
  1422. break;
  1423. case "specialty_longersprint":
  1424. sound_to_play = "vox_perk_staminup_0";
  1425. break;
  1426. case "specialty_extraammo":
  1427. sound_to_play = "vox_perk_mulekick_0";
  1428. break;
  1429. case "specialty_bulletaccuracy":
  1430. sound_to_play = "vox_perk_deadshot_0";
  1431. break;
  1432.  
  1433. default:
  1434. sound_to_play = "vox_perk_jugga_0";
  1435. break;
  1436. }
  1437.  
  1438. wait(1.0);
  1439. self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, 0.25);
  1440. }
  1441. machine_watcher()
  1442. {
  1443. //PI ESM - support for two level switches for Factory
  1444. if (isDefined(level.DLC3.perksNeedPowerOn) && level.DLC3.perksNeedPowerOn)
  1445. {
  1446. level thread machine_watcher_factory("juggernog_on");
  1447. level thread machine_watcher_factory("sleight_on");
  1448. level thread machine_watcher_factory("doubletap_on");
  1449. level thread machine_watcher_factory("revive_on");
  1450. level thread machine_watcher_factory("phd_flopper_on");
  1451. level thread machine_watcher_factory("mule_kick_on");
  1452. level thread machine_watcher_factory("deadshot_on");
  1453. level thread machine_watcher_factory("staminup_on");
  1454. level thread machine_watcher_factory("tomb_on");
  1455. level thread machine_watcher_factory("chugabud_on");
  1456. level thread machine_watcher_factory("cherry_on");
  1457. level thread machine_watcher_factory("vulture_on");
  1458. level thread machine_watcher_factory("Pack_A_Punch_on");
  1459. }
  1460. else
  1461. {
  1462. level waittill("master_switch_activated");
  1463. //array_thread(getentarray( "zombie_vending", "targetname" ), ::perks_a_cola_jingle);
  1464.  
  1465. }
  1466. }
  1467.  
  1468. //PI ESM - added for support for two switches in factory
  1469. machine_watcher_factory(vending_name)
  1470. {
  1471. level waittill(vending_name);
  1472. switch(vending_name)
  1473. {
  1474. case "juggernog_on":
  1475. temp_script_sound = "mx_jugger_jingle";
  1476. break;
  1477.  
  1478. case "sleight_on":
  1479. temp_script_sound = "mx_speed_jingle";
  1480. break;
  1481.  
  1482. case "doubletap_on":
  1483. temp_script_sound = "mx_doubletap_jingle";
  1484. break;
  1485.  
  1486. case "revive_on":
  1487. temp_script_sound = "mx_revive_jingle";
  1488. break;
  1489.  
  1490. case "phd_flopper_on":
  1491. temp_script_sound = "mx_phd_flopper_jingle";
  1492. break;
  1493.  
  1494. case "staminup_on":
  1495. temp_script_sound = "mx_staminup_jingle";
  1496. break;
  1497.  
  1498. case "mule_kick_on":
  1499. temp_script_sound = "mx_three_guns_jingle";
  1500. break;
  1501.  
  1502. case "deadshot_on":
  1503. temp_script_sound = "mx_deadshot_jingle";
  1504. break;
  1505.  
  1506. case "Pack_A_Punch_on":
  1507. temp_script_sound = "mx_packa_jingle";
  1508. break;
  1509.  
  1510. default:
  1511. temp_script_sound = "mx_jugger_jingle";
  1512. break;
  1513. }
  1514.  
  1515.  
  1516. temp_machines = getstructarray("perksacola", "targetname");
  1517. revive_machine = GetEnt("perksacola_revive", "targetname");
  1518. for (x = 0; x < temp_machines.size; x++)
  1519. {
  1520. if (temp_machines[x].script_sound == temp_script_sound)
  1521. temp_machines[x] thread perks_a_cola_jingle();
  1522. }
  1523. revive_machine thread perks_a_cola_jingle();
  1524. }
  1525.  
  1526. play_vendor_stings(sound)
  1527. {
  1528. if(!IsDefined (level.speed_jingle))
  1529. {
  1530. level.speed_jingle = 0;
  1531. }
  1532. if(!IsDefined (level.revive_jingle))
  1533. {
  1534. level.revive_jingle = 0;
  1535. }
  1536. if(!IsDefined (level.doubletap_jingle))
  1537. {
  1538. level.doubletap_jingle = 0;
  1539. }
  1540. if(!IsDefined (level.jugger_jingle))
  1541. {
  1542. level.jugger_jingle = 0;
  1543. }
  1544. if(!IsDefined (level.phd_flopper_jingle))
  1545. {
  1546. level.phd_flopper_jingle = 0;
  1547. }
  1548. if(!IsDefined (level.staminup_jingle))
  1549. {
  1550. level.staminup_jingle = 0;
  1551. }
  1552. if(!IsDefined (level.mule_kick_jingle))
  1553. {
  1554. level.mule_kick_jingle = 0;
  1555. }
  1556. if(!IsDefined (level.deadshot_jingle))
  1557. {
  1558. level.deadshot_jingle = 0;
  1559. }
  1560. if(!IsDefined (level.packa_jingle))
  1561. {
  1562. level.packa_jingle = 0;
  1563. }
  1564. if(!IsDefined (level.eggs))
  1565. {
  1566. level.eggs = 0;
  1567. }
  1568. if (level.eggs == 0)
  1569. {
  1570. if(sound == "mx_speed_sting" && level.speed_jingle == 0 )
  1571. {
  1572. level.speed_jingle = 1;
  1573. temp_org_speed_s = spawn("script_origin", self.origin);
  1574. temp_org_speed_s playsound (sound, "sound_done");
  1575. temp_org_speed_s waittill("sound_done");
  1576. level.speed_jingle = 0;
  1577. temp_org_speed_s delete();
  1578. }
  1579. else if(sound == "mx_revive_sting" && level.revive_jingle == 0)
  1580. {
  1581. level.revive_jingle = 1;
  1582. temp_org_revive_s = spawn("script_origin", self.origin);
  1583. temp_org_revive_s playsound (sound, "sound_done");
  1584. temp_org_revive_s waittill("sound_done");
  1585. level.revive_jingle = 0;
  1586. temp_org_revive_s delete();
  1587. }
  1588. else if(sound == "mx_doubletap_sting" && level.doubletap_jingle == 0)
  1589. {
  1590. level.doubletap_jingle = 1;
  1591. temp_org_dp_s = spawn("script_origin", self.origin);
  1592. temp_org_dp_s playsound (sound, "sound_done");
  1593. temp_org_dp_s waittill("sound_done");
  1594. level.doubletap_jingle = 0;
  1595. temp_org_dp_s delete();
  1596. }
  1597. else if(sound == "mx_jugger_sting" && level.jugger_jingle == 0)
  1598. {
  1599. level.jugger_jingle = 1;
  1600. temp_org_jugs_s = spawn("script_origin", self.origin);
  1601. temp_org_jugs_s playsound (sound, "sound_done");
  1602. temp_org_jugs_s waittill("sound_done");
  1603. level.jugger_jingle = 0;
  1604. temp_org_jugs_s delete();
  1605. }
  1606. else if(sound == "mx_phd_flopper_sting" && level.phd_flopper_jingle == 0)
  1607. {
  1608. level.phd_flopper_jingle = 1;
  1609. temp_org_phd_s = spawn("script_origin", self.origin);
  1610. temp_org_phd_s playsound (sound, "sound_done");
  1611. temp_org_phd_s waittill("sound_done");
  1612. level.phd_flopper_jingle = 0;
  1613. temp_org_phd_s delete();
  1614. }
  1615. else if(sound == "mx_staminup_sting" && level.staminup_jingle == 0)
  1616. {
  1617. level.staminup_jingle = 1;
  1618. temp_org_stam_s = spawn("script_origin", self.origin);
  1619. temp_org_stam_s playsound (sound, "sound_done");
  1620. temp_org_stam_s waittill("sound_done");
  1621. level.staminup_jingle = 0;
  1622. temp_org_stam_s delete();
  1623. }
  1624. else if(sound == "mx_deadshot_sting" && level.deadshot_jingle == 0)
  1625. {
  1626. level.deadshot_jingle = 1;
  1627. temp_org_dead_s = spawn("script_origin", self.origin);
  1628. temp_org_dead_s playsound (sound, "sound_done");
  1629. temp_org_dead_s waittill("sound_done");
  1630. level.deadshot_jingle = 0;
  1631. temp_org_dead_s delete();
  1632. }
  1633. else if(sound == "mx_three_guns_sting" && level.mule_kick_jingle == 0)
  1634. {
  1635. level.mule_kick_jingle = 1;
  1636. temp_org_mule_s = spawn("script_origin", self.origin);
  1637. temp_org_mule_s playsound (sound, "sound_done");
  1638. temp_org_mule_s waittill("sound_done");
  1639. level.mule_kick_jingle = 0;
  1640. temp_org_mule_s delete();
  1641. }
  1642. else if(sound == "mx_packa_sting" && level.packa_jingle == 0)
  1643. {
  1644. level.packa_jingle = 1;
  1645. temp_org_pack_s = spawn("script_origin", self.origin);
  1646. temp_org_pack_s playsound (sound, "sound_done");
  1647. temp_org_pack_s waittill("sound_done");
  1648. level.packa_jingle = 0;
  1649. temp_org_pack_s delete();
  1650. }
  1651. }
  1652. }
  1653.  
  1654. perks_a_cola_jingle()
  1655. {
  1656. self thread play_random_broken_sounds();
  1657. if(!IsDefined(self.perk_jingle_playing))
  1658. {
  1659. self.perk_jingle_playing = 0;
  1660. }
  1661. if (!IsDefined (level.eggs))
  1662. {
  1663. level.eggs = 0;
  1664. }
  1665. while(1)
  1666. {
  1667. //wait(randomfloatrange(60, 120));
  1668. wait(randomfloatrange(31,45));
  1669. if(randomint(100) < 15 && level.eggs == 0)
  1670. {
  1671. level notify ("jingle_playing");
  1672. //playfx (level._effect["electric_short_oneshot"], self.origin);
  1673. playsoundatposition ("electrical_surge", self.origin);
  1674.  
  1675. if(self.script_sound == "mx_speed_jingle" && level.speed_jingle == 0)
  1676. {
  1677. level.speed_jingle = 1;
  1678. temp_org_speed = spawn("script_origin", self.origin);
  1679. wait(0.05);
  1680. temp_org_speed playsound (self.script_sound, "sound_done");
  1681. temp_org_speed waittill("sound_done");
  1682. level.speed_jingle = 0;
  1683. temp_org_speed delete();
  1684. }
  1685. if(self.script_sound == "mx_revive_jingle" && level.revive_jingle == 0)
  1686. {
  1687. level.revive_jingle = 1;
  1688. level.temp_org_revive = spawn("script_origin", self.origin);
  1689. wait(0.05);
  1690. level.temp_org_revive playsound (self.script_sound, "sound_done");
  1691. level.temp_org_revive waittill("sound_done");
  1692. level.revive_jingle = 0;
  1693. level.temp_org_revive delete();
  1694. }
  1695. if(self.script_sound == "mx_doubletap_jingle" && level.doubletap_jingle == 0)
  1696. {
  1697. level.doubletap_jingle = 1;
  1698. temp_org_doubletap = spawn("script_origin", self.origin);
  1699. wait(0.05);
  1700. temp_org_doubletap playsound (self.script_sound, "sound_done");
  1701. temp_org_doubletap waittill("sound_done");
  1702. level.doubletap_jingle = 0;
  1703. temp_org_doubletap delete();
  1704. }
  1705. if(self.script_sound == "mx_jugger_jingle" && level.jugger_jingle == 0)
  1706. {
  1707. level.jugger_jingle = 1;
  1708. temp_org_jugger = spawn("script_origin", self.origin);
  1709. wait(0.05);
  1710. temp_org_jugger playsound (self.script_sound, "sound_done");
  1711. temp_org_jugger waittill("sound_done");
  1712. level.jugger_jingle = 0;
  1713. temp_org_jugger delete();
  1714. }
  1715. if(self.script_sound == "mx_phd_flopper_jingle" && level.phd_flopper_jingle == 0)
  1716. {
  1717. level.phd_flopper_jingle = 1;
  1718. temp_org_phd = spawn("script_origin", self.origin);
  1719. wait(0.05);
  1720. temp_org_phd playsound (self.script_sound, "sound_done");
  1721. temp_org_phd waittill("sound_done");
  1722. level.phd_flopper_jingle = 0;
  1723. temp_org_phd delete();
  1724. }
  1725. if(self.script_sound == "mx_staminup_jingle" && level.staminup_jingle == 0)
  1726. {
  1727. level.staminup_jingle = 1;
  1728. temp_org_stam = spawn("script_origin", self.origin);
  1729. wait(0.05);
  1730. temp_org_stam playsound (self.script_sound, "sound_done");
  1731. temp_org_stam waittill("sound_done");
  1732. level.staminup_jingle = 0;
  1733. temp_org_stam delete();
  1734. }
  1735. if(self.script_sound == "mx_deadshot_jingle" && level.deadshot_jingle == 0)
  1736. {
  1737. level.deadshot_jingle = 1;
  1738. temp_org_dead = spawn("script_origin", self.origin);
  1739. wait(0.05);
  1740. temp_org_dead playsound (self.script_sound, "sound_done");
  1741. temp_org_dead waittill("sound_done");
  1742. level.deadshot_jingle = 0;
  1743. temp_org_dead delete();
  1744. }
  1745. if(self.script_sound == "mx_mule_kick_jingle" && level.mule_kick_jingle == 0)
  1746. {
  1747. level.mule_kick_jingle = 1;
  1748. temp_org_mule = spawn("script_origin", self.origin);
  1749. wait(0.05);
  1750. temp_org_mule playsound (self.script_sound, "sound_done");
  1751. temp_org_mule waittill("sound_done");
  1752. level.mule_kick_jingle = 0;
  1753. temp_org_mule delete();
  1754. }
  1755. if(self.script_sound == "mx_packa_jingle" && level.packa_jingle == 0)
  1756. {
  1757. level.packa_jingle = 1;
  1758. temp_org_packa = spawn("script_origin", self.origin);
  1759. temp_org_packa playsound (self.script_sound, "sound_done");
  1760. temp_org_packa waittill("sound_done");
  1761. level.packa_jingle = 0;
  1762. temp_org_packa delete();
  1763. }
  1764.  
  1765. self thread play_random_broken_sounds();
  1766. }
  1767. }
  1768. }
  1769.  
  1770. play_random_broken_sounds()
  1771. {
  1772. level endon ("jingle_playing");
  1773. if (!isdefined (self.script_sound))
  1774. {
  1775. self.script_sound = "null";
  1776. }
  1777. if (self.script_sound == "mx_revive_jingle")
  1778. {
  1779. while(1)
  1780. {
  1781. wait(randomfloatrange(7, 18));
  1782. playsoundatposition ("broken_random_jingle", self.origin);
  1783. //playfx (level._effect["electric_short_oneshot"], self.origin);
  1784. playsoundatposition ("electrical_surge", self.origin);
  1785.  
  1786. }
  1787. }
  1788. else
  1789. {
  1790. while(1)
  1791. {
  1792. wait(randomfloatrange(7, 18));
  1793. // playfx (level._effect["electric_short_oneshot"], self.origin);
  1794. playsoundatposition ("electrical_surge", self.origin);
  1795. }
  1796. }
  1797. }
  1798.  
  1799. play_packa_wait_dialog(player_index)
  1800. {
  1801. waittime = 0.05;
  1802. if(!IsDefined (self.vox_perk_packa_wait))
  1803. {
  1804. num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_perk_packa_wait");
  1805. self.vox_perk_packa_wait = [];
  1806. for(i=0;i<num_variants;i++)
  1807. {
  1808. self.vox_perk_packa_wait[self.vox_perk_packa_wait.size] = "vox_perk_packa_wait_" + i;
  1809. }
  1810. self.vox_perk_packa_wait_available = self.vox_perk_packa_wait;
  1811. }
  1812. if(!isdefined (level.player_is_speaking))
  1813. {
  1814. level.player_is_speaking = 0;
  1815. }
  1816. sound_to_play = random(self.vox_perk_packa_wait_available);
  1817. self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, waittime);
  1818. self.vox_perk_packa_wait_available = array_remove(self.vox_perk_packa_wait_available,sound_to_play);
  1819.  
  1820. if (self.vox_perk_packa_wait_available.size < 1 )
  1821. {
  1822. self.vox_perk_packa_wait_available = self.vox_perk_packa_wait;
  1823. }
  1824. }
  1825.  
  1826. play_packa_get_dialog(player_index)
  1827. {
  1828. waittime = 0.05;
  1829. if(!IsDefined (self.vox_perk_packa_get))
  1830. {
  1831. num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_perk_packa_get");
  1832. self.vox_perk_packa_get = [];
  1833. for(i=0;i<num_variants;i++)
  1834. {
  1835. self.vox_perk_packa_get[self.vox_perk_packa_get.size] = "vox_perk_packa_get_" + i;
  1836. }
  1837. self.vox_perk_packa_get_available = self.vox_perk_packa_get;
  1838. }
  1839. if(!isdefined (level.player_is_speaking))
  1840. {
  1841. level.player_is_speaking = 0;
  1842. }
  1843. sound_to_play = random(self.vox_perk_packa_get_available);
  1844. self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, waittime);
  1845. self.vox_perk_packa_get_available = array_remove(self.vox_perk_packa_get_available,sound_to_play);
  1846.  
  1847. if (self.vox_perk_packa_get_available.size < 1 )
  1848. {
  1849. self.vox_perk_packa_get_available = self.vox_perk_packa_get;
  1850. }
  1851. }
  1852.  
  1853. staminup()
  1854. {
  1855. players = GetPlayers();
  1856. while(1)
  1857. {
  1858. for(i=0;i<players.size;i++)
  1859. {
  1860. if(players[i] hasperk("specialty_longersprint"))
  1861. {
  1862. players[i] setmovespeedscale(1.1);
  1863. players[i] SetClientDVar("perk_sprintMultiplier", "2");
  1864. }
  1865. else
  1866. {
  1867. players[i] setmovespeedscale(1);
  1868. players[i] SetClientDVar("perk_sprintMultiplier", "1");
  1869. }
  1870. }
  1871. wait(0.1);
  1872. }
  1873. }
  1874.  
  1875. mule_kick()
  1876. {
  1877. self.vars["max_weap"] = 3;
  1878. self endon("mule");
  1879. while(1)
  1880. {
  1881. player_load = self GetWeaponsListPrimaries();
  1882. if(( !self HasPerk("specialty_extraammo") && player_load.size == 3 ))
  1883. {
  1884. self takeweapon( self.mule_weapon );
  1885. guns = self GetWeaponsListPrimaries();
  1886. if(!isdefined(self.customLastStand))
  1887. self SwitchToWeapon( guns[0] );
  1888. self notify("mule");
  1889. self.mule_weapon = undefined;
  1890. }
  1891. wait_network_frame();
  1892. }
  1893. }
  1894.  
  1895. deadshot()
  1896. {
  1897. players = Get_Players();
  1898. while(1)
  1899. {
  1900. for(i=0;i<players.size;i++)
  1901. {
  1902. if(players[i] hasperk("specialty_bulletaccuracy"))
  1903. {
  1904. players[i] SetClientDVar("perk_weapSpreadMultiplier", "0.5");
  1905. players[i] SetClientDVar("perk_extraBreath", "2");
  1906. }
  1907. else
  1908. {
  1909. players[i] SetClientDVar("perk_weapSpreadMultiplier", "1");
  1910. players[i] SetClientDVar("perk_extraBreath", "1");
  1911. }
  1912. }
  1913. wait(0.1);
  1914. }
  1915. }
  1916.  
  1917. give_random_perk()
  1918. {
  1919. vending_triggers = GetEntArray( "zombie_vending", "targetname" );
  1920. players = GetPlayers();
  1921.  
  1922. perks = [];
  1923. for ( i = 0; i < vending_triggers.size; i++ )
  1924. {
  1925. perk = vending_triggers[i].script_noteworthy;
  1926.  
  1927. if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk )
  1928. {
  1929. continue;
  1930. }
  1931.  
  1932. if( players.size > 1 && perk == "specialty_null")
  1933. {
  1934. continue;
  1935. }
  1936.  
  1937. if ( !self HasPerk( perk ) )
  1938. {
  1939. perks[ perks.size ] = perk;
  1940. }
  1941. }
  1942.  
  1943. if ( perks.size > 0 )
  1944. {
  1945. perks = array_randomize( perks );
  1946. self give_perk( perks[0] );
  1947. }
  1948. }
  1949.  
  1950. give_perk( perk, bought )
  1951. {
  1952. self SetPerk( perk );
  1953.  
  1954. if(perk == "specialty_armorvest")
  1955. {
  1956. self.maxhealth = level.zombie_vars["zombie_perk_juggernaut_health"];
  1957. self.health = level.zombie_vars["zombie_perk_juggernaut_health"];
  1958. }
  1959.  
  1960. if(perk == "specialty_extraammo")
  1961. {
  1962. self thread mule_kick();
  1963. }
  1964.  
  1965. self perk_hud_create( perk );
  1966.  
  1967. //stat tracking
  1968. self.stats["perks"]++;
  1969. self.vars["perk_count"]++;
  1970.  
  1971. self thread perk_think( perk );
  1972. }
  1973.  
  1974. give_all_perks()
  1975. {
  1976. vending_triggers = GetEntArray( "zombie_vending", "targetname" );
  1977. players = GetPlayers();
  1978.  
  1979. perks = [];
  1980. for ( i = 0; i < vending_triggers.size; i++ )
  1981. {
  1982. perk = vending_triggers[i].script_noteworthy;
  1983.  
  1984. if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk )
  1985. {
  1986. continue;
  1987. }
  1988.  
  1989. if ( !self HasPerk( perk ) )
  1990. {
  1991. self give_perk( perk );
  1992. }
  1993. }
  1994. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement