Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.42 KB | None | 0 0
  1. #include maps\_utility;
  2. #include common_scripts\utility;
  3. #include maps\_zombiemode_utility;
  4. #include maps\_zombiemode_net;
  5. #include animscripts\death;
  6.  
  7. Electric_Cherry_init()
  8. {
  9. PrecacheItem( "zombie_perk_bottle_cherry" ); // this is the weapon file name of the perk bottle
  10. PrecacheShader( "specalty_electric_cherry" ); // name of the perk shader
  11. PrecacheModel(""); // The on model of the perk machine
  12. level._effect["revive_light"] = loadfx("misc/fx_zombie_cola_revive_on");
  13.  
  14. vending_trigger = GetEntarray( "zombie_vending_cherry", "targetname" );
  15.  
  16. array_thread( vending_trigger, ::vending_trigger_think );
  17. thread perk_thread();
  18. thread turn_cherry_on();
  19. }
  20.  
  21. turn_cherry_on()
  22. {
  23. machine = getentarray("vending_cherry", "targetname");
  24. flag_wait("electricity_on");
  25.  
  26. for( i = 0; i < machine.size; i++ )
  27. {
  28. // machine[i] setmodel("");
  29. machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  30. machine[i] playsound("perks_power_on");
  31. machine[i] thread perk_fx( "revive_light" );
  32. }
  33. level notify("specialty_boost_power_on");
  34. }
  35.  
  36. perk_fx( fx )
  37. {
  38. wait(3);
  39. playfxontag( level._effect[ fx ], self, "tag_origin" );
  40. }
  41.  
  42. electric_perks_dialog()
  43. {
  44.  
  45. self endon ("warning_dialog");
  46. level endon("switch_flipped");
  47. timer =0;
  48. while(1)
  49. {
  50. wait(0.5);
  51. players = get_players();
  52. for(i = 0; i < players.size; i++)
  53. {
  54. dist = distancesquared(players[i].origin, self.origin );
  55. if(dist > 70*70)
  56. {
  57. timer = 0;
  58. continue;
  59. }
  60. if(dist < 70*70 && timer < 3)
  61. {
  62. wait(0.5);
  63. timer ++;
  64. }
  65. if(dist < 70*70 && timer == 3)
  66. {
  67.  
  68. players[i] thread do_player_vo("vox_start", 5);
  69. wait(3);
  70. self notify ("warning_dialog");
  71. iprintlnbold("warning_given");
  72. }
  73. }
  74. }
  75. }
  76.  
  77. vending_trigger_think()
  78. {
  79. perk = "specialty_boost";
  80.  
  81.  
  82. self SetHintString( "power must be activated first" );
  83.  
  84. self SetCursorHint( "HINT_NOICON" );
  85. self UseTriggerRequireLookAt();
  86.  
  87. level waittill( "specialty_boost_power_on" );
  88.  
  89. perk_hum = spawn("script_origin", self.origin);
  90. perk_hum playloopsound("perks_machine_loop");
  91.  
  92. self thread check_player_has_perk(perk);
  93.  
  94. self SetHintString( "Press & Hold &&1 to buy Electric cherry [cost: 2000]" );
  95.  
  96. for( ;; )
  97. {
  98. self waittill( "trigger", player );
  99. index = maps\_zombiemode_weapons::get_player_index(player);
  100.  
  101. cost = 2000;
  102.  
  103. if (player maps\_laststand::player_is_in_laststand() )
  104. {
  105. continue;
  106. }
  107.  
  108. if(player in_revive_trigger())
  109. {
  110. continue;
  111. }
  112.  
  113. if( player isThrowingGrenade() )
  114. {
  115. wait( 0.1 );
  116. continue;
  117. }
  118.  
  119. if( player isSwitchingWeapons() )
  120. {
  121. wait(0.1);
  122. continue;
  123. }
  124.  
  125. if ( player HasPerk( perk ) )
  126. {
  127. cheat = false;
  128.  
  129. /#
  130. if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  131. {
  132. cheat = true;
  133. }
  134. #/
  135.  
  136. if ( cheat != true )
  137. {
  138. //player iprintln( "Already using Perk: " + perk );
  139. self playsound("deny");
  140. player thread play_no_money_perk_dialog();
  141.  
  142.  
  143. continue;
  144. }
  145. }
  146.  
  147. if ( player.score < cost )
  148. {
  149. //player iprintln( "Not enough points to buy Perk: " + perk );
  150. self playsound("deny");
  151. player thread play_no_money_perk_dialog();
  152. continue;
  153. }
  154.  
  155. sound = "bottle_dispense3d";
  156. player achievement_notify( "perk_used" );
  157. playsoundatposition(sound, self.origin);
  158. player maps\_zombiemode_score::minus_to_player_score( cost );
  159. ///bottle_dispense
  160.  
  161.  
  162. // do the drink animation
  163. gun = player perk_give_bottle_begin( perk );
  164. player.is_drinking = 1;
  165. wait 1.5;
  166.  
  167. // restore player controls and movement
  168. player perk_give_bottle_end( gun, perk );
  169. player.is_drinking = undefined;
  170. // TODO: race condition?
  171. if ( player maps\_laststand::player_is_in_laststand() )
  172. {
  173. continue;
  174. }
  175.  
  176. player SetPerk( perk );
  177. player setblur( 4, 0.1 );
  178. wait(0.1);
  179. player setblur(0, 0.1);
  180. //earthquake (0.4, 0.2, self.origin, 100);
  181. if(perk == "specialty_armorvest")
  182. {
  183. player.maxhealth = level.zombie_vars["zombie_perk_juggernaut_health"];
  184. player.health = level.zombie_vars["zombie_perk_juggernaut_health"];
  185. //player.health = 320;
  186. }
  187.  
  188.  
  189. player perk_hud_create( perk );
  190.  
  191. //stat tracking
  192. player.stats["perks"]++;
  193.  
  194. //player iprintln( "Bought Perk: " + perk );
  195. bbPrint( "zombie_uses: playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type perk",
  196. player.playername, player.score, level.round_number, cost, perk, self.origin );
  197.  
  198. player thread perk_think( perk );
  199.  
  200. }
  201. }
  202.  
  203. perk_think( perk )
  204. {
  205. self waittill_any( "fake_death", "death", "player_downed" );
  206.  
  207. self UnsetPerk( perk );
  208. self.maxhealth = 100;
  209. self perk_hud_destroy( perk );
  210. }
  211.  
  212. check_player_has_perk(perk)
  213. {
  214. /#
  215. if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  216. {
  217. return;
  218. }
  219. #/
  220.  
  221. dist = 128 * 128;
  222. while(true)
  223. {
  224. players = get_players();
  225. for( i = 0; i < players.size; i++ )
  226. {
  227. if(DistanceSquared( players[i].origin, self.origin ) < dist)
  228. {
  229. if(!players[i] hasperk(perk) && !(players[i] in_revive_trigger()))
  230. {
  231. //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
  232. // visible to all of them, rather than the last player this check is done for
  233. if (IsDefined(level.script) && level.script == "nazi_zombie_theater")
  234. self setinvisibletoplayer(players[i], false);
  235. else
  236. self setvisibletoplayer(players[i]);
  237. //END PI CHANGE
  238. //iprintlnbold("turn it off to player");
  239.  
  240. }
  241. else
  242. {
  243. self SetInvisibleToPlayer(players[i]);
  244. //iprintlnbold(players[i].health);
  245. }
  246. }
  247.  
  248.  
  249. }
  250.  
  251. wait(0.1);
  252.  
  253. }
  254.  
  255. }
  256.  
  257. perk_give_bottle_begin( perk )
  258. {
  259. self DisableOffhandWeapons();
  260. self DisableWeaponCycling();
  261.  
  262. self AllowLean( false );
  263. self AllowAds( false );
  264. self AllowSprint( false );
  265. self AllowProne( false );
  266. self AllowMelee( false );
  267.  
  268. wait( 0.05 );
  269.  
  270. if ( self GetStance() == "prone" )
  271. {
  272. self SetStance( "crouch" );
  273. }
  274.  
  275. gun = self GetCurrentWeapon();
  276. weapon = "";
  277.  
  278. self GiveWeapon( "zombie_perk_bottle_cherry" );
  279. self SwitchToWeapon( "zombie_perk_bottle_cherry" );
  280.  
  281. return gun;
  282. }
  283.  
  284.  
  285. perk_give_bottle_end( gun, perk )
  286. {
  287. self EnableOffhandWeapons();
  288. self EnableWeaponCycling();
  289.  
  290. self AllowLean( true );
  291. self AllowAds( true );
  292. self AllowSprint( true );
  293. self AllowProne( true );
  294. self AllowMelee( true );
  295. weapon = "";
  296.  
  297. // TODO: race condition?
  298. if ( self maps\_laststand::player_is_in_laststand() )
  299. {
  300. self TakeWeapon("zombie_perk_bottle_cherry");
  301. return;
  302. }
  303.  
  304. if ( gun != "none" && gun != "mine_bouncing_betty" )
  305. {
  306. self SwitchToWeapon( gun );
  307. }
  308. else
  309. {
  310. // try to switch to first primary weapon
  311. primaryWeapons = self GetWeaponsListPrimaries();
  312. if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
  313. {
  314. self SwitchToWeapon( primaryWeapons[0] );
  315. }
  316. }
  317.  
  318. self TakeWeapon(weapon);
  319. }
  320.  
  321. perk_hud_create( perk )
  322. {
  323. if ( !IsDefined( self.perk_hud ) )
  324. {
  325. self.perk_hud = [];
  326. }
  327.  
  328. /#
  329. if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  330. {
  331. if ( IsDefined( self.perk_hud[ perk ] ) )
  332. {
  333. return;
  334. }
  335. }
  336. #/
  337.  
  338.  
  339. shader = "";
  340.  
  341. switch( perk )
  342. {
  343. case "specialty_boost":
  344. shader = "specalty_electric_cherry";
  345. break;
  346.  
  347. default:
  348. shader = "";
  349. break;
  350. }
  351.  
  352. hud = create_simple_hud( self );
  353. hud.foreground = true;
  354. hud.sort = 1;
  355. hud.hidewheninmenu = false;
  356. hud.alignX = "left";
  357. hud.alignY = "bottom";
  358. hud.horzAlign = "left";
  359. hud.vertAlign = "bottom";
  360. hud.x = self.perk_hud.size * 30;
  361. hud.y = hud.y - 70;
  362. hud.alpha = 1;
  363. hud SetShader( shader, 24, 24 );
  364.  
  365. self.perk_hud[ perk ] = hud;
  366. }
  367.  
  368. perk_hud_destroy( perk )
  369. {
  370. self.perk_hud[ perk ] destroy_hud();
  371. self.perk_hud[ perk ] = undefined;
  372. }
  373.  
  374. play_no_money_perk_dialog()
  375. {
  376.  
  377. index = maps\_zombiemode_weapons::get_player_index(self);
  378.  
  379. player_index = "plr_" + index + "_";
  380. if(!IsDefined (self.vox_nomoney_perk))
  381. {
  382. num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_nomoney_perk");
  383. self.vox_nomoney_perk = [];
  384. for(i=0;i<num_variants;i++)
  385. {
  386. self.vox_nomoney_perk[self.vox_nomoney_perk.size] = "vox_nomoney_perk_" + i;
  387. }
  388. self.vox_nomoney_perk_available = self.vox_nomoney_perk;
  389. }
  390. sound_to_play = random(self.vox_nomoney_perk_available);
  391.  
  392. self.vox_nomoney_perk_available = array_remove(self.vox_nomoney_perk_available,sound_to_play);
  393.  
  394. if (self.vox_nomoney_perk_available.size < 1 )
  395. {
  396. self.vox_nomoney_perk_available = self.vox_nomoney_perk;
  397. }
  398.  
  399. self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, 0.25);
  400. }
  401.  
  402. perk_thread()
  403. {
  404. flag_wait( "all_players_connected" );
  405. players = getplayers();
  406. for(i=0;i<players.size;i++)
  407. {
  408. players[i] thread electric_cherry();
  409. }
  410. }
  411.  
  412. electric_cherry()
  413. {
  414. self.cherry_reloaded = true;
  415.  
  416. for(;;)
  417. {
  418. self waittill( "reload_start" );
  419. //iprintln("RELOADING");
  420. if( self hasPerk( "specialty_boost" ) && self.cherry_reloaded )
  421. {
  422. self thread cherry_reload_reset();
  423.  
  424. //self iPrintLnBold( "This works :D" );
  425.  
  426. self.cherry_tag = spawn( "script_model", self.origin + (0, 0, 48) );
  427. self.cherry_tag setModel("tag_origin");
  428. self.cherry_tag linkTo( self );
  429.  
  430. self playSound( "taser_imp" );
  431. playFXOnTag( level._effect["tesla_shock"], self.cherry_tag, "tag_origin" );
  432.  
  433. self.cherry_multiplier = 1 - ( self getCurrentWeaponClipAmmo() / weaponClipSize( self getCurrentWeapon() ) );
  434. self.cherry_radius = 196 * self.cherry_multiplier + 64;
  435. self.cherry_damage = 5000 * self.cherry_multiplier;
  436.  
  437. zombies = getAIArray( "axis", "all" );
  438. for( i = 0; i < zombies.size; i++ )
  439. {
  440. if( distance( self.origin, zombies[i].origin ) <= self.cherry_radius )
  441. {
  442. zombies[i] doDamage( self.cherry_damage, zombies[i].origin );
  443.  
  444. if( self.cherry_damage >= zombies[i].health && isDefined( zombies[i].has_legs ) && zombies[i].has_legs )
  445. {
  446. zombies[i].deathanim = random( level._zombie_tesla_death[ zombies[i].animname ] );
  447. zombies[i] thread maps\_zombiemode_tesla::tesla_play_death_fx(1);
  448. }
  449. else
  450. playFXOnTag( level._effect["tesla_shock"], zombies[i], "J_SpineUpper" );
  451. }
  452. }
  453.  
  454. wait 1;
  455. self.cherry_tag Delete();
  456. }
  457. }
  458. }
  459.  
  460. cherry_reload_reset()
  461. {
  462. self.cherry_reloaded = false;
  463. self waittill( "reload" );
  464. self.cherry_reloaded = true;
  465. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement