Advertisement
Guest User

Untitled

a guest
Jul 31st, 2014
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 28.34 KB | None | 0 0
  1. /*
  2. File : _xperk.gsc
  3. Authors : Rampage
  4.  
  5. How to use:
  6. Place _zombiemode_utility_new.gsc and _xperk.gsc into raw\maps\. Then follow these steps:
  7.  
  8. 1) Go to the map_setup() function and add coordinates for where you want your Perk machines.
  9.  
  10. 2) You may also have to add a blocker to the same coordinates because you will be able to walk
  11. through the machine(s) if you don't
  12.  
  13. 3) Put this in your zone source CSV file (or mod.csv):
  14.     rawfile,maps/_xperk.gsc
  15.     xmodel,zombie_vending_doubletap_on
  16.     xmodel,zombie_vending_jugg_on
  17.     xmodel,zombie_vending_revive_on
  18.     xmodel,zombie_vending_sleight_on
  19.     xmodel,zombie_vending_doubletap
  20.     xmodel,zombie_vending_jugg
  21.     xmodel,zombie_vending_revive
  22.     xmodel,zombie_vending_sleight
  23.     xmodel,collision_geo_64x64x128
  24.     weapon,sp/zombie_perk_bottle_doubletap
  25.     weapon,sp/zombie_perk_bottle_jugg
  26.     weapon,sp/zombie_perk_bottle_revive
  27.     weapon,sp/zombie_perk_bottle_sleight
  28.     material,specialty_juggernaut_zombies
  29.     material,specialty_fastreload_zombies
  30.     material,specialty_doubletap_zombies
  31.     material,specialty_quickrevive_zombies
  32.    
  33. 4) Put this in the main() of _zombiemode.gsc:
  34.     maps\_xperk::init();
  35. */
  36.  
  37. #include common_scripts\utility;
  38. #include maps\_utility;
  39. #include maps\_zombiemode_utility;
  40.  
  41. init()
  42. {
  43.     // PRECACHE SECTION
  44.     PrecacheShader( "specialty_juggernaut_zombies" );
  45.     PrecacheShader( "specialty_fastreload_zombies" );
  46.     PrecacheShader( "specialty_doubletap_zombies" );
  47.     PrecacheShader( "specialty_quickrevive_zombies" );
  48.     PrecacheShader( "specialty_bulletdamage" );
  49.     PrecacheShader( "specialty_boost" );
  50.     PrecacheShader( "zct_fast_rebuild" );
  51.     preCacheShader( "zct_self_defense" );
  52.  
  53.     PrecacheModel("zombie_vending_jugg_sumpf");
  54.     PrecacheModel("zombie_vending_doubletap_sumpf");
  55.     PrecacheModel("zombie_vending_revive_sumpf");
  56.     PrecacheModel("zombie_vending_sleight_sumpf");
  57.     PrecacheModel("zombie_vending_jugg_sumpf_on");
  58.     PrecacheModel("zombie_vending_doubletap_sumpf_on");
  59.     PrecacheModel("zombie_vending_revive_sumpf_on");
  60.     PrecacheModel("zombie_vending_fixzpop_on");
  61.     PrecacheModel("zombie_vending_sleight_sumpf_on");
  62.     precachemodel("collision_geo_64x64x128");
  63.  
  64.     PrecacheItem( "zombie_perk_bottle_doubletap" );
  65.     PrecacheItem( "zombie_perk_bottle_jugg" );
  66.     PrecacheItem( "zombie_perk_bottle_fixzpop" );
  67.     PrecacheItem( "zombie_perk_bottle_revive" );
  68.     PrecacheItem( "zombie_perk_bottle_sleight" );
  69.  
  70.     level._effect["sleight_light"] = loadfx("misc/fx_zombie_cola_on");
  71.     level._effect["doubletap_light"] = loadfx("misc/fx_zombie_cola_dtap_on");
  72.     level._effect["jugger_light"] = loadfx("misc/fx_zombie_cola_jugg_on");
  73.     level._effect["revive_light"] = loadfx("misc/fx_zombie_cola_revive_on");
  74.     level._effect["fixzpop_light"] = loadfx("misc/fx_zombie_titancola_on");
  75.  
  76.     PrecacheString( &"ZOMBIE_PERK_JUGGERNAUT" );
  77.     PrecacheString( &"ZOMBIE_PERK_QUICKREVIVE" );
  78.     PrecacheString( &"ZOMBIE_PERK_FASTRELOAD" );
  79.     PrecacheString( &"ZOMBIE_PERK_DOUBLETAP" );
  80.     PrecacheString( &"ZOMBIE_PERK_FIXZPOP" );
  81.  
  82.     set_zombie_var( "zombie_perk_cost",                 2000 );
  83.     set_zombie_var( "zombie_perk_juggernaut_health",    160 );
  84.     // END PRECACHE SECTION
  85.  
  86.     thread map_setup();
  87.     thread trigger_setup();
  88.  
  89.     level thread turn_jugger_on();
  90.     level thread turn_doubletap_on();
  91.     level thread turn_sleight_on();
  92.     level thread turn_revive_on();
  93.     level thread turn_fixzpop_on();
  94.     level thread machine_watcher();
  95.  
  96.     level.speed_jingle = 0;
  97.     level.revive_jingle = 0;
  98.     level.doubletap_jingle = 0;
  99.     level.jugger_jingle = 0;   
  100. }
  101.  
  102. map_setup()
  103. {
  104.     m = getDvar( "mapname" );
  105.  
  106.     switch(m)
  107.     {
  108.     //***** Nacht Der Untoten *****
  109.         case "nazi_zombie_prototype":
  110.             level.perk_machine = [];
  111.             level.perk_machine[0] = spawn("script_model",(0,0,0));
  112.             level.perk_machine[0].origin = (-186,49,-1);
  113.             level.perk_machine[0].angles = (0,90,0);
  114.             level.perk_machine[0].targetname = "vending_revive";
  115.             level.perk_machine[0] setModel( "zombie_vending_revive_sumpf" );
  116.    
  117.             level.perk_machine[1] = spawn("script_model",(0,0,0));
  118.             level.perk_machine[1].origin = (504,644,-1);
  119.             level.perk_machine[1].angles = (0,180,0);
  120.             level.perk_machine[1].targetname = "vending_sleight";
  121.             level.perk_machine[1] setModel( "zombie_vending_sleight_sumpf" );
  122.    
  123.             level.perk_machine[2] = spawn("script_model",(0,0,0));
  124.             level.perk_machine[2].origin = (169,324,144);
  125.             level.perk_machine[2].angles = (0,0,0);
  126.             level.perk_machine[2].targetname = "vending_jugg";
  127.             level.perk_machine[2] setModel( "zombie_vending_jugg_sumpf" );
  128.    
  129.             level.perk_machine[3] = spawn("script_model",(0,0,0));
  130.             level.perk_machine[3].origin = (192,658,144);
  131.             level.perk_machine[3].angles = (0,-90,0);
  132.             level.perk_machine[3].targetname = "vending_doubletap";
  133.             level.perk_machine[3] setModel( "zombie_vending_doubletap_sumpf" );
  134.            
  135.             level.perk_machine[4] = spawn("script_model",(0,0,0));
  136.             level.perk_machine[4].origin = (935,634,148);
  137.             level.perk_machine[4].angles = (0,180,0);
  138.             level.perk_machine[4].targetname = "vending_fixzpop";
  139.             level.perk_machine[4] setModel( "zombie_vending_fixzpop_on" );
  140.             level.perk_machineCount = level.perk_machine.size;
  141.         break;
  142.     case "nazi_zombie_anzio":
  143.             level.perk_machine = [];
  144.             level.perk_machine[0] = spawn("script_model",(0,0,0));
  145.             level.perk_machine[0].origin = (1,-59,16);
  146.             level.perk_machine[0].angles = (0,-90,0);
  147.             level.perk_machine[0].targetname = "vending_revive";
  148.             level.perk_machine[0] setModel( "zombie_vending_revive_sumpf" );
  149.    
  150.             level.perk_machine[1] = spawn("script_model",(0,0,0));
  151.             level.perk_machine[1].origin = (323,331,-240);
  152.             level.perk_machine[1].angles = (0,-90,0);
  153.             level.perk_machine[1].targetname = "vending_sleight";
  154.             level.perk_machine[1] setModel( "zombie_vending_sleight_sumpf" );
  155.    
  156.             level.perk_machine[2] = spawn("script_model",(0,0,0));
  157.             level.perk_machine[2].origin = (321,-402,-240);
  158.             level.perk_machine[2].angles = (0,-90,0);
  159.             level.perk_machine[2].targetname = "vending_jugg";
  160.             level.perk_machine[2] setModel( "zombie_vending_jugg_sumpf" );
  161.    
  162.             level.perk_machine[3] = spawn("script_model",(0,0,0));
  163.             level.perk_machine[3].origin = (905,153,15);
  164.             level.perk_machine[3].angles = (0,-90,0);
  165.             level.perk_machine[3].targetname = "vending_doubletap";
  166.             level.perk_machine[3] setModel( "zombie_vending_doubletap_sumpf" );
  167.             level.perk_machineCount = level.perk_machine.size;
  168.         break;
  169.    
  170.     }
  171. }
  172.  
  173. trigger_setup()
  174. {
  175.     if( isDefined( level.perk_machine ) )
  176.     {
  177.         for( i = 0; i < level.perk_machineCount; i++ )
  178.         {
  179.             level.perk_trigger[0] = spawn("trigger_radius",(0,0,0),1,35,64);
  180.             level.perk_trigger[0].origin = level.perk_machine[0].origin;
  181.             level.perk_trigger[0].angles = level.perk_machine[0].angles;
  182.             level.perk_trigger[0].targetname = "zombie_vending";
  183.             level.perk_trigger[0].script_noteworthy = "specialty_quickrevive";
  184.  
  185.             level.perk_trigger[1] = spawn("trigger_radius",(0,0,0),1,35,64);
  186.             level.perk_trigger[1].origin = level.perk_machine[1].origin;
  187.             level.perk_trigger[1].angles = level.perk_machine[1].angles;
  188.             level.perk_trigger[1].targetname = "zombie_vending";
  189.             level.perk_trigger[1].script_noteworthy = "specialty_fastreload";
  190.        
  191.             level.perk_trigger[2] = spawn("trigger_radius",(0,0,0),1,35,64);
  192.             level.perk_trigger[2].origin = level.perk_machine[2].origin;
  193.             level.perk_trigger[2].angles = level.perk_machine[2].angles;
  194.             level.perk_trigger[2].targetname = "zombie_vending";
  195.             level.perk_trigger[2].script_noteworthy = "specialty_armorvest";
  196.  
  197.             level.perk_trigger[3] = spawn("trigger_radius",(0,0,0),1,34,64);
  198.             level.perk_trigger[3].origin = level.perk_machine[3].origin +(-5,0,0);
  199.             level.perk_trigger[3].angles = level.perk_machine[3].angles;
  200.             level.perk_trigger[3].targetname = "zombie_vending";
  201.             level.perk_trigger[3].script_noteworthy = "specialty_rof";
  202.        
  203.             level.perk_trigger[4] = spawn("trigger_radius",(0,0,0),1,34,64);
  204.             level.perk_trigger[4].origin = level.perk_machine[4].origin +(-5,0,0);
  205.             level.perk_trigger[4].angles = level.perk_machine[4].angles;
  206.             level.perk_trigger[4].targetname = "zombie_vending";
  207.             level.perk_trigger[4].script_noteworthy = "specialty_recon";
  208.        
  209.             level.perk_trigger[i] thread vending_trigger_think();
  210.        
  211.             level.perk_clip[0] = spawnCollision("collision_geo_64x64x128","collider",level.perk_machine[i].origin+(0,0,35),(0,0,0));
  212.             level.perk_clip[0].origin = level.perk_machine[0].origin;
  213.             level.perk_clip[0].angles = level.perk_machine[0].angles;
  214.            
  215.             level.perk_clip[1] = spawnCollision("collision_geo_64x64x128","collider",level.perk_machine[i].origin+(0,0,35),(0,0,0));
  216.             level.perk_clip[1].origin = level.perk_machine[1].origin;
  217.             level.perk_clip[1].angles = level.perk_machine[1].angles;
  218.            
  219.             level.perk_clip[2] = spawnCollision("collision_geo_64x64x128","collider",level.perk_machine[i].origin+(0,0,35),(0,0,0));
  220.             level.perk_clip[2].origin = level.perk_machine[2].origin;
  221.             level.perk_clip[2].angles = level.perk_machine[2].angles;
  222.            
  223.             level.perk_clip[3] = spawnCollision("collision_geo_64x64x128","collider",level.perk_machine[i].origin+(13,0,35),(0,0,0));
  224.             level.perk_clip[3].origin = level.perk_machine[3].origin;
  225.             level.perk_clip[3].angles = level.perk_machine[3].angles;
  226.            
  227.             level.perk_clip[4] = spawnCollision("collision_geo_64x64x128","collider",level.perk_machine[i].origin+(13,0,35),(0,0,0));
  228.             level.perk_clip[4].origin = level.perk_machine[4].origin;
  229.             level.perk_clip[4].angles = level.perk_machine[4].angles;
  230.         }
  231.     }  
  232. }
  233.  
  234. turn_sleight_on()
  235. {
  236.     machine = getentarray("vending_sleight", "targetname");
  237.     //level waittill("sleight_on");
  238.  
  239.     for( i = 0; i < machine.size; i++ )
  240.     {
  241.         machine[i] setmodel("zombie_vending_sleight_sumpf_on");
  242.         machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  243.         machine[i] playsound("perks_power_on");
  244.         machine[i] thread perk_fx( "sleight_light" );
  245.     }
  246.  
  247.     level notify( "specialty_fastreload_power_on" );
  248. }
  249.  
  250. turn_revive_on()
  251. {
  252.     machine = getentarray("vending_revive", "targetname");
  253.     //level waittill("revive_on");
  254.  
  255.  
  256.     for( i = 0; i < machine.size; i++ )
  257.     {
  258.         machine[i] setmodel("zombie_vending_revive_sumpf_on");
  259.         machine[i] playsound("perks_power_on");
  260.         machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  261.         machine[i] thread perk_fx( "revive_light" );
  262.     }
  263.    
  264.     level notify( "specialty_quickrevive_power_on" );
  265.  
  266.  
  267. }
  268.  
  269. turn_jugger_on()
  270. {
  271.     machine = getentarray("vending_jugg", "targetname");
  272.     //level waittill("juggernog_on");
  273.  
  274.     for( i = 0; i < machine.size; i++ )
  275.     {
  276.         machine[i] setmodel("zombie_vending_jugg_sumpf_on");
  277.         machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  278.         machine[i] playsound("perks_power_on");
  279.         machine[i] thread perk_fx( "jugger_light" );
  280.        
  281.     }
  282.     level notify( "specialty_armorvest_power_on" );
  283.    
  284. }
  285.  
  286. turn_doubletap_on()
  287. {
  288.     machine = getentarray("vending_doubletap", "targetname");
  289.     //level waittill("doubletap_on");
  290.    
  291.     for( i = 0; i < machine.size; i++ )
  292.     {
  293.         machine[i] setmodel("zombie_vending_doubletap_sumpf_on");
  294.         machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  295.         machine[i] playsound("perks_power_on");
  296.         machine[i] thread perk_fx( "doubletap_light" );
  297.     }
  298.     level notify( "specialty_rof_power_on" );
  299. }
  300.  
  301. turn_fixzpop_on()
  302. {
  303.     machine = getentarray("vending_fixzpop", "targetname");
  304.     //level waittill("doubletap_on");
  305.    
  306.     for( i = 0; i < machine.size; i++ )
  307.     {
  308.         machine[i] setmodel("zombie_vending_fixzpop_on");
  309.         machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
  310.         machine[i] playsound("perks_power_on");
  311.         machine[i] thread perk_fx( "fixzpop_light" );
  312.     }
  313.     level notify( "specialty_fixzpop_power_on" );
  314. }
  315.  
  316. perk_fx( fx )
  317. {
  318.     wait(3);
  319.     playfxontag( level._effect[ fx ], self, "tag_origin" );
  320. }
  321.  
  322. vending_trigger_think()
  323. {
  324.     //self thread turn_cola_off();
  325.     perk = self.script_noteworthy;
  326.    
  327.  
  328.     self SetHintString( &"ZOMBIE_FLAMES_UNAVAILABLE" );
  329.  
  330.     self SetCursorHint( "HINT_NOICON" );
  331.     self UseTriggerRequireLookAt();
  332.  
  333.     notify_name = perk + "_power_on";
  334.     //level waittill( notify_name );
  335.    
  336.     perk_hum = spawn("script_origin", self.origin);
  337.     perk_hum playloopsound("perks_machine_loop");
  338.  
  339.     self thread check_player_has_perk(perk);
  340.    
  341.     self vending_set_hintstring(perk);
  342.    
  343.     for( ;; )
  344.     {
  345.         self waittill( "trigger", player );
  346.    
  347.         if( !player useButtonPressed() )
  348.         {
  349.             continue;
  350.         }
  351.        
  352.         cost = level.zombie_vars["zombie_perk_cost"];
  353.         switch( perk )
  354.         {
  355.         case "specialty_armorvest":
  356.             cost = 2500;
  357.             break;
  358.  
  359.         case "specialty_quickrevive":
  360.             cost = 1500;
  361.             break;
  362.  
  363.         case "specialty_fastreload":
  364.             cost = 3000;
  365.             break;
  366.  
  367.         case "specialty_rof":
  368.             cost = 2000;
  369.             break;
  370.        
  371.         case "specialty_recon":
  372.             cost = 3500;
  373.             break;
  374.  
  375.         }
  376.  
  377.         if ( perk == "specialty_recon" )
  378.         {
  379.             perk = randomInt( 8 );
  380.    
  381.             switch( perk )
  382.             {
  383.                 case "specialty_bulletdamage":
  384.                 break;
  385.                
  386.                 case "specialty_fastreload":
  387.                 break;
  388.                
  389.                 case "specialty_rof":
  390.                 break;
  391.                
  392.                 case "specialty_armorvest":
  393.                 break;
  394.                
  395.                 case "specialty_boost":
  396.                 break;
  397.  
  398.                 case "specialty_quickrevive":
  399.                 break;
  400.  
  401.                 case "specialty_extraammo":
  402.                 break;
  403.  
  404.                 case "specialty_holdbreath":
  405.                 break;
  406.             }
  407.         }
  408.        
  409.         if (player maps\_laststand::player_is_in_laststand() )
  410.         {
  411.             continue;
  412.         }
  413.  
  414.         if(player in_revive_trigger())
  415.         {
  416.             continue;
  417.         }
  418.        
  419.         if( player isThrowingGrenade() )
  420.         {
  421.             wait( 0.1 );
  422.             continue;
  423.         }
  424.        
  425.         if( player isSwitchingWeapons() )
  426.         {
  427.             wait(0.1);
  428.             continue;
  429.         }
  430.  
  431.         if ( player HasPerk( perk ) )
  432.         {
  433.             cheat = false;
  434.  
  435.             /#
  436.             if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  437.             {
  438.                 cheat = true;
  439.             }
  440.             #/
  441.  
  442.             if ( cheat != true )
  443.             {
  444.                 //player iprintln( "Already using Perk: " + perk );
  445.                 self playsound("deny");
  446.                 //player thread play_no_money_perk_dialog();
  447.  
  448.                
  449.                 continue;
  450.             }
  451.         }
  452.  
  453.         if ( player.score < cost )
  454.         {
  455.             //player iprintln( "Not enough points to buy Perk: " + perk );
  456.             self playsound("deny");
  457.             continue;
  458.         }
  459.  
  460.         sound = "bottle_dispense3d";
  461.         playsoundatposition(sound, self.origin);
  462.         player maps\_zombiemode_score::minus_to_player_score( cost );
  463.         ///bottle_dispense
  464.         switch( perk )
  465.         {
  466.         case "specialty_armorvest":
  467.             sound = "mx_jugger_sting";
  468.             break;
  469.  
  470.         case "specialty_quickrevive":
  471.             sound = "mx_revive_sting";
  472.             break;
  473.  
  474.         case "specialty_fastreload":
  475.             sound = "mx_speed_sting";
  476.             break;
  477.  
  478.         case "specialty_rof":
  479.             sound = "mx_doubletap_sting";
  480.             break;
  481.  
  482.         default:
  483.             sound = "mx_jugger_sting";
  484.             break;
  485.         }
  486.  
  487.         self thread play_vendor_stings(sound);
  488.    
  489.         //      self waittill("sound_done");
  490.  
  491.  
  492.         // do the drink animation
  493.         gun = player perk_give_bottle_begin( perk );
  494.         player.is_drinking = 1;
  495.         player waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
  496.  
  497.         // restore player controls and movement
  498.         player perk_give_bottle_end( gun, perk );
  499.         player.is_drinking = undefined;
  500.         // TODO: race condition?
  501.         if ( player maps\_laststand::player_is_in_laststand() )
  502.         {
  503.             continue;
  504.         }
  505.  
  506.         player SetPerk( perk );
  507.         player setblur( 4, 0.1 );
  508.         wait(0.1);
  509.         player setblur(0, 0.1);
  510.         //earthquake (0.4, 0.2, self.origin, 100);
  511.         if(perk == "specialty_armorvest")
  512.         {
  513.             player.maxhealth = level.zombie_vars["zombie_perk_juggernaut_health"];
  514.             player.health = level.zombie_vars["zombie_perk_juggernaut_health"];
  515.             //player.health = 160;
  516.         }
  517.  
  518.        
  519.         player perk_hud_create( perk );
  520.  
  521.         //stat tracking
  522.         player.stats["perks"]++;
  523.  
  524.         //player iprintln( "Bought Perk: " + perk );
  525.         bbPrint( "zombie_uses: playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type perk",
  526.             player.playername, player.score, level.round_number, cost, perk, self.origin );
  527.  
  528.         player thread perk_think( perk );
  529.  
  530.     }
  531. }
  532.  
  533. check_player_has_perk(perk)
  534. {
  535.     /#
  536.         if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  537.         {
  538.             return;
  539.         }
  540. #/
  541.  
  542.         dist = 128 * 128;
  543.         while(true)
  544.         {
  545.             players = get_players();
  546.             for( i = 0; i < players.size; i++ )
  547.             {
  548.                 if(DistanceSquared( players[i].origin, self.origin ) < dist)
  549.                 {
  550.                     if(!players[i] hasperk(perk) && !(players[i] in_revive_trigger()))
  551.                     {
  552.                         //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
  553.                         //                   visible to all of them, rather than the last player this check is done for
  554.                         if (IsDefined(level.script) && level.script == "nazi_zombie_theater")
  555.                             self setinvisibletoplayer(players[i], false);
  556.                         else
  557.                             self setvisibletoplayer(players[i]);
  558.                         //END PI CHANGE
  559.                         //iprintlnbold("turn it off to player");
  560.  
  561.                     }
  562.                     else
  563.                     {
  564.                         self SetInvisibleToPlayer(players[i]);
  565.                         //iprintlnbold(players[i].health);
  566.                     }
  567.                 }
  568.  
  569.  
  570.             }
  571.  
  572.             wait(0.1);
  573.  
  574.         }
  575.  
  576. }
  577.  
  578.  
  579. vending_set_hintstring( perk )
  580. {
  581.     switch( perk )
  582.     {
  583.  
  584.     case "specialty_armorvest":
  585.         self SetHintString( &"ZOMBIE_PERK_JUGGERNAUT" );
  586.         break;
  587.  
  588.     case "specialty_quickrevive":
  589.         self SetHintString( &"ZOMBIE_PERK_QUICKREVIVE" );
  590.         break;
  591.  
  592.     case "specialty_fastreload":
  593.         self SetHintString( &"ZOMBIE_PERK_FASTRELOAD" );
  594.         break;
  595.  
  596.     case "specialty_rof":
  597.         self SetHintString( &"ZOMBIE_PERK_DOUBLETAP" );
  598.         break;
  599.    
  600.     case "specialty_fixzpop":
  601.         self SetHintString( "Press & hold &&1 to buy Fixz Pop [Cost: 3500]" );
  602.         break;
  603.  
  604.     default:
  605.         self SetHintString( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] );
  606.         break;
  607.  
  608.     }
  609. }
  610.  
  611.  
  612. perk_think( perk )
  613. {
  614.     /#
  615.         if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  616.         {
  617.             if ( IsDefined( self.perk_hud[ perk ] ) )
  618.             {
  619.                 return;
  620.             }
  621.         }
  622. #/
  623.  
  624.         self waittill_any( "fake_death", "death", "player_downed" );
  625.  
  626.         self UnsetPerk( perk );
  627.         self.maxhealth = 100;
  628.         self perk_hud_destroy( perk );
  629.         //self iprintln( "Perk Lost: " + perk );
  630. }
  631.  
  632.  
  633. perk_hud_create( perk )
  634. {
  635.     if ( !IsDefined( self.perk_hud ) )
  636.     {
  637.         self.perk_hud = [];
  638.     }
  639.  
  640.     /#
  641.         if ( GetDVarInt( "zombie_cheat" ) >= 5 )
  642.         {
  643.             if ( IsDefined( self.perk_hud[ perk ] ) )
  644.             {
  645.                 return;
  646.             }
  647.         }
  648. #/
  649.  
  650.  
  651.         shader = "";
  652.  
  653.         switch( perk )
  654.         {
  655.         case "specialty_armorvest":
  656.             shader = "specialty_juggernaut_zombies";
  657.             break;
  658.  
  659.         case "specialty_quickrevive":
  660.             shader = "specialty_quickrevive_zombies";
  661.             break;
  662.  
  663.         case "specialty_fastreload":
  664.             shader = "specialty_fastreload_zombies";
  665.             break;
  666.  
  667.         case "specialty_rof":
  668.             shader = "specialty_doubletap_zombies";
  669.             break;
  670.        
  671.         case "specialty_boost":
  672.             shader = "specialty_boost";
  673.             break;
  674.  
  675.         case "specialty_bulletdamage":
  676.             shader = "specialty_bulletdamage";
  677.             break;
  678.        
  679.         case "specialty_extraammo":
  680.             shader = "zct_fast_rebuild";
  681.             break;
  682.  
  683.         case "specialty_holdbreath":
  684.             shader = "zct_self_defense";
  685.             break;
  686.  
  687.         default:
  688.             shader = "";
  689.             break;
  690.         }
  691.  
  692.         hud = create_simple_hud( self );
  693.         hud.foreground = true;
  694.         hud.sort = 1;
  695.         hud.hidewheninmenu = false;
  696.         hud.alignX = "left";
  697.         hud.alignY = "bottom";
  698.         hud.horzAlign = "left";
  699.         hud.vertAlign = "bottom";
  700.         hud.x = 45;
  701.         hud.y = hud.y - 70;
  702.         self thread perk_shuffle_hud();
  703.         hud.alpha = 1;
  704.         hud SetShader( shader, 64, 64 );
  705.             hud MoveOverTime(2);
  706.         hud.x = 5;
  707.             hud ScaleOverTime( 2, 24, 24 );
  708.  
  709.         self.perk_hud[ perk ] = hud;
  710.  
  711. }
  712.  
  713. perk_shuffle_hud()
  714. {
  715.   // custom function to move the perks up.
  716.   keys = GetArrayKeys( self.perk_hud );
  717.   for(i=0; i<keys.size; i++)
  718.   {
  719.     self.perk_hud[keys[i]] MoveOverTime(2);
  720.     self.perk_hud[keys[i]].y = self.perk_hud[keys[i]].y - 30;
  721.   }
  722. }
  723.  
  724. perk_hud_destroy( perk )
  725. {
  726.     self.perk_hud[ perk ] destroy_hud();
  727.     self.perk_hud[ perk ] = undefined;
  728. }
  729.  
  730. perk_give_bottle_begin( perk )
  731. {
  732.     self DisableOffhandWeapons();
  733.     self DisableWeaponCycling();
  734.  
  735.     self AllowLean( false );
  736.     self AllowAds( false );
  737.     self AllowSprint( false );
  738.     self AllowProne( false );      
  739.     self AllowMelee( false );
  740.  
  741.     wait( 0.05 );
  742.  
  743.     if ( self GetStance() == "prone" )
  744.     {
  745.         self SetStance( "crouch" );
  746.     }
  747.  
  748.     gun = self GetCurrentWeapon();
  749.     weapon = "";
  750.  
  751.     switch( perk )
  752.     {
  753.     case "specialty_armorvest":
  754.         weapon = "zombie_perk_bottle_jugg";
  755.         break;
  756.  
  757.     case "specialty_quickrevive":
  758.         weapon = "zombie_perk_bottle_revive";
  759.         break;
  760.  
  761.     case "specialty_fastreload":
  762.         weapon = "zombie_perk_bottle_sleight";
  763.         break;
  764.  
  765.     case "specialty_rof":
  766.         weapon = "zombie_perk_bottle_doubletap";
  767.         break;
  768.    
  769.     case "specialty_bulletdamage":
  770.         weapon = "zombie_perk_bottle_fixzpop";
  771.         break;
  772.  
  773.     case "specialty_boost":
  774.         weapon = "zombie_perk_bottle_fixzpop";
  775.         break;
  776.    
  777.     case "specialty_extraammo":
  778.         weapon = "zombie_perk_bottle_fixzpop";
  779.         break;
  780.    
  781.     case "specialty_holdbreath":
  782.         weapon = "zombie_perk_bottle_fixzpop";
  783.         break;
  784.     }
  785.  
  786.     self GiveWeapon( weapon );
  787.     self SwitchToWeapon( weapon );
  788.  
  789.     return gun;
  790. }
  791.  
  792.  
  793. perk_give_bottle_end( gun, perk )
  794. {
  795.     assert( gun != "zombie_perk_bottle_doubletap" );
  796.     assert( gun != "zombie_perk_bottle_revive" );
  797.     assert( gun != "zombie_perk_bottle_jugg" );
  798.     assert( gun != "zombie_perk_bottle_fixzpop" );
  799.     assert( gun != "zombie_perk_bottle_sleight" );
  800.     assert( gun != "syrette" );
  801.  
  802.     self EnableOffhandWeapons();
  803.     self EnableWeaponCycling();
  804.  
  805.     self AllowLean( true );
  806.     self AllowAds( true );
  807.     self AllowSprint( true );
  808.     self AllowProne( true );       
  809.     self AllowMelee( true );
  810.     weapon = "";
  811.     switch( perk )
  812.     {
  813.     case "specialty_armorvest":
  814.         weapon = "zombie_perk_bottle_jugg";
  815.         break;
  816.  
  817.     case "specialty_quickrevive":
  818.         weapon = "zombie_perk_bottle_revive";
  819.         break;
  820.  
  821.     case "specialty_fastreload":
  822.         weapon = "zombie_perk_bottle_sleight";
  823.         break;
  824.  
  825.     case "specialty_rof":
  826.         weapon = "zombie_perk_bottle_doubletap";
  827.         break;
  828.    
  829.     case "specialty_bulletdamage":
  830.         weapon = "zombie_perk_bottle_fixzpop";
  831.         break;
  832.  
  833.     case "specialty_boost":
  834.         weapon = "zombie_perk_bottle_fixzpop";
  835.         break;
  836.  
  837.     case "specialty_extraammo":
  838.         weapon = "zombie_perk_bottle_fixzpop";
  839.         break;
  840.  
  841.     case "specialty_holdbreath":
  842.         weapon = "zombie_perk_bottle_fixzpop";
  843.         break;
  844.     }
  845.  
  846.     // TODO: race condition?
  847.     if ( self maps\_laststand::player_is_in_laststand() )
  848.     {
  849.         self TakeWeapon(weapon);
  850.         return;
  851.     }
  852.  
  853.     if ( gun != "none" && gun != "mine_bouncing_betty" )
  854.     {
  855.         self SwitchToWeapon( gun );
  856.     }
  857.     else
  858.     {
  859.         // try to switch to first primary weapon
  860.         primaryWeapons = self GetWeaponsListPrimaries();
  861.         if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
  862.         {
  863.             self SwitchToWeapon( primaryWeapons[0] );
  864.         }
  865.     }
  866.  
  867.     self TakeWeapon(weapon);
  868. }
  869.  
  870. machine_watcher()
  871. {  
  872.     //level waittill("master_switch_activated");   
  873. }
  874.  
  875. play_vendor_stings(sound)
  876. {  
  877.     if(!IsDefined (level.speed_jingle))
  878.     {
  879.         level.speed_jingle = 0;
  880.     }
  881.     if(!IsDefined (level.revive_jingle))
  882.     {
  883.         level.revive_jingle = 0;
  884.     }
  885.     if(!IsDefined (level.doubletap_jingle))
  886.     {
  887.         level.doubletap_jingle = 0;
  888.     }
  889.     if(!IsDefined (level.jugger_jingle))
  890.     {
  891.         level.jugger_jingle = 0;
  892.     }
  893.     if(!IsDefined (level.packa_jingle))
  894.     {
  895.         level.packa_jingle = 0;
  896.     }
  897.     if(!IsDefined (level.eggs))
  898.     {
  899.         level.eggs = 0;
  900.     }
  901.     if (level.eggs == 0)
  902.     {
  903.         if(sound == "mx_speed_sting" && level.speed_jingle == 0 )
  904.         {
  905. //          iprintlnbold("stinger speed:" + level.speed_jingle);
  906.             level.speed_jingle = 1;    
  907.             temp_org_speed_s = spawn("script_origin", self.origin);    
  908.             temp_org_speed_s playsound (sound, "sound_done");
  909.             temp_org_speed_s waittill("sound_done");
  910.             level.speed_jingle = 0;
  911.             temp_org_speed_s delete();
  912. //          iprintlnbold("stinger speed:" + level.speed_jingle);
  913.         }
  914.         else if(sound == "mx_revive_sting" && level.revive_jingle == 0)
  915.         {
  916.             level.revive_jingle = 1;
  917. //          iprintlnbold("stinger revive:" + level.revive_jingle);
  918.             temp_org_revive_s = spawn("script_origin", self.origin);       
  919.             temp_org_revive_s playsound (sound, "sound_done");
  920.             temp_org_revive_s waittill("sound_done");
  921.             level.revive_jingle = 0;
  922.             temp_org_revive_s delete();
  923. //          iprintlnbold("stinger revive:" + level.revive_jingle);
  924.         }
  925.         else if(sound == "mx_doubletap_sting" && level.doubletap_jingle == 0)
  926.         {
  927.             level.doubletap_jingle = 1;
  928. //          iprintlnbold("stinger double:" + level.doubletap_jingle);
  929.             temp_org_dp_s = spawn("script_origin", self.origin);       
  930.             temp_org_dp_s playsound (sound, "sound_done");
  931.             temp_org_dp_s waittill("sound_done");
  932.             level.doubletap_jingle = 0;
  933.             temp_org_dp_s delete();
  934. //          iprintlnbold("stinger double:" + level.doubletap_jingle);
  935.         }
  936.         else if(sound == "mx_jugger_sting" && level.jugger_jingle == 0)
  937.         {
  938.             level.jugger_jingle = 1;
  939. //          iprintlnbold("stinger juggernog" + level.jugger_jingle);
  940.             temp_org_jugs_s = spawn("script_origin", self.origin);     
  941.             temp_org_jugs_s playsound (sound, "sound_done");
  942.             temp_org_jugs_s waittill("sound_done");
  943.             level.jugger_jingle = 0;
  944.             temp_org_jugs_s delete();
  945. //          iprintlnbold("stinger juggernog:"  + level.jugger_jingle);
  946.         }
  947.         else if(sound == "mx_packa_sting" && level.packa_jingle == 0)
  948.         {
  949.             level.packa_jingle = 1;
  950. //          iprintlnbold("stinger packapunch:" + level.packa_jingle);
  951.             temp_org_pack_s = spawn("script_origin", self.origin);     
  952.             temp_org_pack_s playsound (sound, "sound_done");
  953.             temp_org_pack_s waittill("sound_done");
  954.             level.packa_jingle = 0;
  955.             temp_org_pack_s delete();
  956. //          iprintlnbold("stinger packapunch:"  + level.packa_jingle);
  957.         }
  958.     }
  959. }
  960.  
  961. perks_a_cola_jingle()
  962. {  
  963.     self thread play_random_broken_sounds();
  964.     if(!IsDefined(self.perk_jingle_playing))
  965.     {
  966.         self.perk_jingle_playing = 0;
  967.     }
  968.     if (!IsDefined (level.eggs))
  969.     {
  970.         level.eggs = 0;
  971.     }
  972.     while(1)
  973.     {
  974.         //wait(randomfloatrange(60, 120));
  975.         wait(randomfloatrange(31,45));
  976.         if(randomint(100) < 15 && level.eggs == 0)
  977.         {
  978.             level notify ("jingle_playing");
  979.             //playfx (level._effect["electric_short_oneshot"], self.origin);
  980.             playsoundatposition ("electrical_surge", self.origin);
  981.            
  982.             if(self.script_sound == "mx_speed_jingle" && level.speed_jingle == 0)
  983.             {
  984.                 level.speed_jingle = 1;
  985.                 temp_org_speed = spawn("script_origin", self.origin);
  986.                 wait(0.05);
  987.                 temp_org_speed playsound (self.script_sound, "sound_done");
  988.                 temp_org_speed waittill("sound_done");
  989.                 level.speed_jingle = 0;
  990.                 temp_org_speed delete();
  991.             }
  992.             if(self.script_sound == "mx_revive_jingle" && level.revive_jingle == 0)
  993.             {
  994.                 level.revive_jingle = 1;
  995.                 temp_org_revive = spawn("script_origin", self.origin);
  996.                 wait(0.05);
  997.                 temp_org_revive playsound (self.script_sound, "sound_done");
  998.                 temp_org_revive waittill("sound_done");
  999.                 level.revive_jingle = 0;
  1000.                 temp_org_revive delete();
  1001.             }
  1002.             if(self.script_sound == "mx_doubletap_jingle" && level.doubletap_jingle == 0)
  1003.             {
  1004.                 level.doubletap_jingle = 1;
  1005.                 temp_org_doubletap = spawn("script_origin", self.origin);
  1006.                 wait(0.05);
  1007.                 temp_org_doubletap playsound (self.script_sound, "sound_done");
  1008.                 temp_org_doubletap waittill("sound_done");
  1009.                 level.doubletap_jingle = 0;
  1010.                 temp_org_doubletap delete();
  1011.             }
  1012.             if(self.script_sound == "mx_jugger_jingle" && level.jugger_jingle == 0)
  1013.             {
  1014.                 level.jugger_jingle = 1;
  1015.                 temp_org_jugger = spawn("script_origin", self.origin);
  1016.                 wait(0.05);
  1017.                 temp_org_jugger playsound (self.script_sound, "sound_done");
  1018.                 temp_org_jugger waittill("sound_done");
  1019.                 level.jugger_jingle = 0;
  1020.                 temp_org_jugger delete();
  1021.             }
  1022.             if(self.script_sound == "mx_packa_jingle" && level.packa_jingle == 0)
  1023.             {
  1024.                 level.packa_jingle = 1;
  1025.                 temp_org_packa = spawn("script_origin", self.origin);
  1026.                 temp_org_packa playsound (self.script_sound, "sound_done");
  1027.                 temp_org_packa waittill("sound_done");
  1028.                 level.packa_jingle = 0;
  1029.                 temp_org_packa delete();
  1030.             }
  1031.  
  1032.             self thread play_random_broken_sounds();
  1033.         }      
  1034.     }  
  1035. }
  1036. play_random_broken_sounds()
  1037. {
  1038.     level endon ("jingle_playing");
  1039.     if (!isdefined (self.script_sound))
  1040.     {
  1041.         self.script_sound = "null";
  1042.     }
  1043.     if (self.script_sound == "mx_revive_jingle")
  1044.     {
  1045.         while(1)
  1046.         {
  1047.             wait(randomfloatrange(7, 18));
  1048.             playsoundatposition ("broken_random_jingle", self.origin);
  1049.         //playfx (level._effect["electric_short_oneshot"], self.origin);
  1050.             playsoundatposition ("electrical_surge", self.origin);
  1051.    
  1052.         }
  1053.     }
  1054.     else
  1055.     {
  1056.         while(1)
  1057.         {
  1058.             wait(randomfloatrange(7, 18));
  1059.         // playfx (level._effect["electric_short_oneshot"], self.origin);
  1060.             playsoundatposition ("electrical_surge", self.origin);
  1061.         }
  1062.     }
  1063. }
  1064.  
  1065. set_perk_time( perk, perk_string )
  1066. {
  1067.     time = RandomIntRange( 30, 60 );
  1068.  
  1069.     self iprintln( "You got " + perk_string + " for " + time + " seconds!" );
  1070.     self SetPerk( perk );
  1071.     self setblur( 4, 0.1 );
  1072.     wait(0.1);
  1073.     self setblur(0, 0.1);
  1074.  
  1075.     if(perk == "specialty_armorvest")
  1076.     {
  1077.         self.maxhealth = 160;
  1078.         self.health = 160;
  1079.     }
  1080.  
  1081.     self perk_hud_create( perk );
  1082.     self thread perk_think( perk );
  1083.  
  1084.     wait( time );
  1085.  
  1086.     self UnsetPerk( perk );
  1087.     self.maxhealth = 100;
  1088.     self perk_hud_destroy( perk );
  1089. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement