Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include maps\_utility;
- #include common_scripts\utility;
- #include maps\_zombiemode_utility;
- #include maps\_zombiemode_net;
- #include animscripts\death;
- Electric_Cherry_init()
- {
- PrecacheItem( "zombie_perk_bottle_cherry" ); // this is the weapon file name of the perk bottle
- PrecacheShader( "specalty_electric_cherry" ); // name of the perk shader
- PrecacheModel(""); // The on model of the perk machine
- level._effect["revive_light"] = loadfx("misc/fx_zombie_cola_revive_on");
- vending_trigger = GetEntarray( "zombie_vending_cherry", "targetname" );
- array_thread( vending_trigger, ::vending_trigger_think );
- thread perk_thread();
- thread turn_cherry_on();
- }
- turn_cherry_on()
- {
- machine = getentarray("vending_cherry", "targetname");
- flag_wait("electricity_on");
- for( i = 0; i < machine.size; i++ )
- {
- // machine[i] setmodel("");
- machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
- machine[i] playsound("perks_power_on");
- machine[i] thread perk_fx( "revive_light" );
- }
- level notify("specialty_boost_power_on");
- }
- perk_fx( fx )
- {
- wait(3);
- playfxontag( level._effect[ fx ], self, "tag_origin" );
- }
- electric_perks_dialog()
- {
- self endon ("warning_dialog");
- level endon("switch_flipped");
- timer =0;
- while(1)
- {
- wait(0.5);
- players = get_players();
- for(i = 0; i < players.size; i++)
- {
- dist = distancesquared(players[i].origin, self.origin );
- if(dist > 70*70)
- {
- timer = 0;
- continue;
- }
- if(dist < 70*70 && timer < 3)
- {
- wait(0.5);
- timer ++;
- }
- if(dist < 70*70 && timer == 3)
- {
- players[i] thread do_player_vo("vox_start", 5);
- wait(3);
- self notify ("warning_dialog");
- iprintlnbold("warning_given");
- }
- }
- }
- }
- vending_trigger_think()
- {
- perk = "specialty_boost";
- self SetHintString( "power must be activated first" );
- self SetCursorHint( "HINT_NOICON" );
- self UseTriggerRequireLookAt();
- level waittill( "specialty_boost_power_on" );
- perk_hum = spawn("script_origin", self.origin);
- perk_hum playloopsound("perks_machine_loop");
- self thread check_player_has_perk(perk);
- self SetHintString( "Press & Hold &&1 to buy Electric cherry [cost: 2000]" );
- for( ;; )
- {
- self waittill( "trigger", player );
- index = maps\_zombiemode_weapons::get_player_index(player);
- cost = 2000;
- if (player maps\_laststand::player_is_in_laststand() )
- {
- continue;
- }
- if(player in_revive_trigger())
- {
- continue;
- }
- if( player isThrowingGrenade() )
- {
- wait( 0.1 );
- continue;
- }
- if( player isSwitchingWeapons() )
- {
- wait(0.1);
- continue;
- }
- if ( player HasPerk( perk ) )
- {
- cheat = false;
- /#
- if ( GetDVarInt( "zombie_cheat" ) >= 5 )
- {
- cheat = true;
- }
- #/
- if ( cheat != true )
- {
- //player iprintln( "Already using Perk: " + perk );
- self playsound("deny");
- player thread play_no_money_perk_dialog();
- continue;
- }
- }
- if ( player.score < cost )
- {
- //player iprintln( "Not enough points to buy Perk: " + perk );
- self playsound("deny");
- player thread play_no_money_perk_dialog();
- continue;
- }
- sound = "bottle_dispense3d";
- player achievement_notify( "perk_used" );
- playsoundatposition(sound, self.origin);
- player maps\_zombiemode_score::minus_to_player_score( cost );
- ///bottle_dispense
- // do the drink animation
- gun = player perk_give_bottle_begin( perk );
- player.is_drinking = 1;
- wait 1.5;
- // restore player controls and movement
- player perk_give_bottle_end( gun, perk );
- player.is_drinking = undefined;
- // TODO: race condition?
- if ( player maps\_laststand::player_is_in_laststand() )
- {
- continue;
- }
- player SetPerk( perk );
- player setblur( 4, 0.1 );
- wait(0.1);
- player setblur(0, 0.1);
- //earthquake (0.4, 0.2, self.origin, 100);
- if(perk == "specialty_armorvest")
- {
- player.maxhealth = level.zombie_vars["zombie_perk_juggernaut_health"];
- player.health = level.zombie_vars["zombie_perk_juggernaut_health"];
- //player.health = 320;
- }
- player perk_hud_create( perk );
- //stat tracking
- player.stats["perks"]++;
- //player iprintln( "Bought Perk: " + perk );
- bbPrint( "zombie_uses: playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type perk",
- player.playername, player.score, level.round_number, cost, perk, self.origin );
- player thread perk_think( perk );
- }
- }
- perk_think( perk )
- {
- self waittill_any( "fake_death", "death", "player_downed" );
- self UnsetPerk( perk );
- self.maxhealth = 100;
- self perk_hud_destroy( perk );
- }
- check_player_has_perk(perk)
- {
- /#
- if ( GetDVarInt( "zombie_cheat" ) >= 5 )
- {
- return;
- }
- #/
- dist = 128 * 128;
- while(true)
- {
- players = get_players();
- for( i = 0; i < players.size; i++ )
- {
- if(DistanceSquared( players[i].origin, self.origin ) < dist)
- {
- if(!players[i] hasperk(perk) && !(players[i] in_revive_trigger()))
- {
- //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
- // visible to all of them, rather than the last player this check is done for
- if (IsDefined(level.script) && level.script == "nazi_zombie_theater")
- self setinvisibletoplayer(players[i], false);
- else
- self setvisibletoplayer(players[i]);
- //END PI CHANGE
- //iprintlnbold("turn it off to player");
- }
- else
- {
- self SetInvisibleToPlayer(players[i]);
- //iprintlnbold(players[i].health);
- }
- }
- }
- wait(0.1);
- }
- }
- perk_give_bottle_begin( perk )
- {
- self DisableOffhandWeapons();
- self DisableWeaponCycling();
- self AllowLean( false );
- self AllowAds( false );
- self AllowSprint( false );
- self AllowProne( false );
- self AllowMelee( false );
- wait( 0.05 );
- if ( self GetStance() == "prone" )
- {
- self SetStance( "crouch" );
- }
- gun = self GetCurrentWeapon();
- weapon = "";
- self GiveWeapon( "zombie_perk_bottle_cherry" );
- self SwitchToWeapon( "zombie_perk_bottle_cherry" );
- return gun;
- }
- perk_give_bottle_end( gun, perk )
- {
- self EnableOffhandWeapons();
- self EnableWeaponCycling();
- self AllowLean( true );
- self AllowAds( true );
- self AllowSprint( true );
- self AllowProne( true );
- self AllowMelee( true );
- weapon = "";
- // TODO: race condition?
- if ( self maps\_laststand::player_is_in_laststand() )
- {
- self TakeWeapon("zombie_perk_bottle_cherry");
- return;
- }
- if ( gun != "none" && gun != "mine_bouncing_betty" )
- {
- self SwitchToWeapon( gun );
- }
- else
- {
- // try to switch to first primary weapon
- primaryWeapons = self GetWeaponsListPrimaries();
- if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
- {
- self SwitchToWeapon( primaryWeapons[0] );
- }
- }
- self TakeWeapon(weapon);
- }
- perk_hud_create( perk )
- {
- if ( !IsDefined( self.perk_hud ) )
- {
- self.perk_hud = [];
- }
- /#
- if ( GetDVarInt( "zombie_cheat" ) >= 5 )
- {
- if ( IsDefined( self.perk_hud[ perk ] ) )
- {
- return;
- }
- }
- #/
- shader = "";
- switch( perk )
- {
- case "specialty_boost":
- shader = "specalty_electric_cherry";
- break;
- default:
- shader = "";
- break;
- }
- hud = create_simple_hud( self );
- hud.foreground = true;
- hud.sort = 1;
- hud.hidewheninmenu = false;
- hud.alignX = "left";
- hud.alignY = "bottom";
- hud.horzAlign = "left";
- hud.vertAlign = "bottom";
- hud.x = self.perk_hud.size * 30;
- hud.y = hud.y - 70;
- hud.alpha = 1;
- hud SetShader( shader, 24, 24 );
- self.perk_hud[ perk ] = hud;
- }
- perk_hud_destroy( perk )
- {
- self.perk_hud[ perk ] destroy_hud();
- self.perk_hud[ perk ] = undefined;
- }
- play_no_money_perk_dialog()
- {
- index = maps\_zombiemode_weapons::get_player_index(self);
- player_index = "plr_" + index + "_";
- if(!IsDefined (self.vox_nomoney_perk))
- {
- num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_nomoney_perk");
- self.vox_nomoney_perk = [];
- for(i=0;i<num_variants;i++)
- {
- self.vox_nomoney_perk[self.vox_nomoney_perk.size] = "vox_nomoney_perk_" + i;
- }
- self.vox_nomoney_perk_available = self.vox_nomoney_perk;
- }
- sound_to_play = random(self.vox_nomoney_perk_available);
- self.vox_nomoney_perk_available = array_remove(self.vox_nomoney_perk_available,sound_to_play);
- if (self.vox_nomoney_perk_available.size < 1 )
- {
- self.vox_nomoney_perk_available = self.vox_nomoney_perk;
- }
- self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, 0.25);
- }
- perk_thread()
- {
- flag_wait( "all_players_connected" );
- players = getplayers();
- for(i=0;i<players.size;i++)
- {
- players[i] thread electric_cherry();
- }
- }
- electric_cherry()
- {
- self.cherry_reloaded = true;
- for(;;)
- {
- self waittill( "reload_start" );
- //iprintln("RELOADING");
- if( self hasPerk( "specialty_boost" ) && self.cherry_reloaded )
- {
- self thread cherry_reload_reset();
- //self iPrintLnBold( "This works :D" );
- self.cherry_tag = spawn( "script_model", self.origin + (0, 0, 48) );
- self.cherry_tag setModel("tag_origin");
- self.cherry_tag linkTo( self );
- self playSound( "taser_imp" );
- playFXOnTag( level._effect["tesla_shock"], self.cherry_tag, "tag_origin" );
- self.cherry_multiplier = 1 - ( self getCurrentWeaponClipAmmo() / weaponClipSize( self getCurrentWeapon() ) );
- self.cherry_radius = 196 * self.cherry_multiplier + 64;
- self.cherry_damage = 5000 * self.cherry_multiplier;
- zombies = getAIArray( "axis", "all" );
- for( i = 0; i < zombies.size; i++ )
- {
- if( distance( self.origin, zombies[i].origin ) <= self.cherry_radius )
- {
- zombies[i] doDamage( self.cherry_damage, zombies[i].origin );
- if( self.cherry_damage >= zombies[i].health && isDefined( zombies[i].has_legs ) && zombies[i].has_legs )
- {
- zombies[i].deathanim = random( level._zombie_tesla_death[ zombies[i].animname ] );
- zombies[i] thread maps\_zombiemode_tesla::tesla_play_death_fx(1);
- }
- else
- playFXOnTag( level._effect["tesla_shock"], zombies[i], "J_SpineUpper" );
- }
- }
- wait 1;
- self.cherry_tag Delete();
- }
- }
- }
- cherry_reload_reset()
- {
- self.cherry_reloaded = false;
- self waittill( "reload" );
- self.cherry_reloaded = true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement