Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include maps\_anim;
- #include maps\_utility;
- #include common_scripts\utility;
- #include maps\_zombiemode_utility;
- #include maps\_zombiemode_net;
- cherry_init()
- {
- PrecacheItem( "zombie_perk_bottle_cherry" );
- PrecacheShader( "cherry_vending_zombies" );
- cherry_trigger = GetEnt( "zombie_vending_cherry", "targetname" );
- cherry_trigger thread cherry_trigger_think();
- level thread maps\_zombiemode_perks::machine_watcher_factory("cherry_on");
- PrecacheModel("bo2_p6_zm_vending_electric_cherry_off");
- PrecacheModel("bo2_p6_zm_vending_electric_cherry_on");
- thread wait_a_little();
- thread turn_cherry_on();
- }
- wait_a_little()
- {
- flag_wait( "all_players_connected" );
- level._effect["electric_cherry"] = LoadFx("electric_cherry");
- players = get_players();
- for(i=0;i<players.size;i++)
- {
- players[i] thread cherry_think();
- }
- }
- cherry_think()
- {
- flag_wait( "all_players_connected");
- while(1)
- {
- self.current_cherry_weapon = self GetCurrentWeapon();
- self waittill("reload_start");
- if(self hasPerk("specialty_boost"))
- {
- self.tag_origin_cherry = spawn("script_model",self.origin + (0,0,48));
- self.tag_origin_cherry setmodel("tag_origin");
- self.tag_origin_cherry linkTo(self);
- //self.tag_origin delete();
- self.currentweapon = self GetCurrentWeapon();
- self.clipSize = WeaponClipSize(self.currentweapon);
- self.clipRemaining = self GetCurrentWeaponClipAmmo();
- zombies = getaiarray( "axis", "all" );
- self.cherry_ratio = 1 - (self.clipRemaining/self.clipSize);
- self.cherry_radius = (200 * self.cherry_ratio) + 64;
- for(k=0;k<zombies.size;k++)
- {
- if(Distance2D( self.origin, zombies[k].origin ) < self.cherry_radius)
- {
- if(zombies[k].health < 1500)
- {
- zombies[k] DoDamage( zombies[k].health + 666 , zombies[k].origin);
- zombies[k].deathanim = random( level._zombie_tesla_death[zombies[k].animname] );
- zombies[k] maps\_zombiemode_tesla::tesla_play_death_fx(1);
- }
- else
- {
- zombies[k] DoDamage( 1500 , zombies[k].origin);
- zombies[k] enable_pain();
- zombies[k] cherry_play_death_fx();
- }
- }
- wait .01;
- }
- network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect["tesla_shock"],self.tag_origin_cherry,"tag_origin");
- self playsound( "imp_tesla" );
- for(k=0;k<zombies.size;k++)
- {
- zombies[k] disable_pain();
- }
- wait .01;
- }
- wait 1;
- self.tag_origin_cherry delete();
- }
- }
- turn_cherry_on()
- {
- machine = getent("vending_cherry", "targetname");
- machine setmodel("bo2_p6_zm_vending_electric_cherry_off");
- level waittill("electricity_on");
- machine setmodel("bo2_p6_zm_vending_electric_cherry_on");
- machine vibrate((0,-100,0), 0.3, 0.4, 3);
- machine playsound("perks_power_on");
- machine thread maps\_zombiemode_perks::perk_fx("doubletap_light");
- level notify( "specialty_boost_power_on" );
- }
- cherry_trigger_think()
- {
- perk = "specialty_boost";
- self SetHintString( &"ZOMBIE_FLAMES_UNAVAILABLE" );
- self SetCursorHint( "HINT_NOICON" );
- self UseTriggerRequireLookAt();
- notify_name = perk + "_power_on";
- level waittill("electricity_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 ) )
- {
- self playsound("deny");
- player thread maps\_zombiemode_perks::play_no_money_perk_dialog();
- continue;
- }
- if ( player.score < cost )
- {
- self playsound("deny");
- player thread maps\_zombiemode_perks::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 );
- sound = "mx_cherry_sting";
- self thread maps\_zombiemode_perks::play_vendor_stings(sound);
- gun = player perk_give_bottle_begin();
- player.is_drinking = 1;
- player waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
- // restore player controls and movement
- player perk_give_bottle_end( gun, "specialty_boost" );
- player.is_drinking = undefined;
- // TODO: race condition?
- if ( player maps\_laststand::player_is_in_laststand() )
- {
- continue;
- }
- player SetPerk("specialty_boost");
- player thread maps\_zombiemode_perks::perk_vo(perk);
- player setblur( 4, 0.1 );
- wait(0.1);
- player setblur(0, 0.1);
- 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 );
- }
- }
- check_player_has_perk(perk)
- {
- 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()))
- {
- if (IsDefined(level.script) && level.script == "nazi_zombie_theater")
- self setinvisibletoplayer(players[i], false);
- else
- self setvisibletoplayer(players[i]);
- }
- else
- {
- self SetInvisibleToPlayer(players[i]);
- }
- }
- }
- wait(0.1);
- }
- }
- perk_hud_create( perk )
- {
- if ( !IsDefined( self.perk_hud ) )
- {
- self.perk_hud = [];
- }
- shader = "cherry_vending_zombies";
- 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_think()
- {
- self waittill_any( "fake_death", "death", "player_downed" );
- self UnsetPerk("specialty_boost");
- self.maxhealth = 100;
- self maps\_zombiemode_perks::perk_hud_destroy("specialty_boost");
- }
- perk_give_bottle_begin()
- {
- 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 )
- {
- assert( gun != "zombie_perk_bottle_cherry" );
- assert( gun != "syrette" );
- self EnableOffhandWeapons();
- self EnableWeaponCycling();
- self AllowLean( true );
- self AllowAds( true );
- self AllowSprint( true );
- self AllowProne( true );
- self AllowMelee( true );
- weapon = "";
- weapon = "zombie_perk_bottle_cherry";
- // TODO: race condition?
- if ( self maps\_laststand::player_is_in_laststand() )
- {
- self TakeWeapon(weapon);
- 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);
- }
- cherry_play_death_fx()
- {
- tag = "J_SpineUpper";
- fx = "tesla_shock";
- network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect["tesla_shock"], self, tag );
- self playsound( "imp_tesla" );
- if ( !self enemy_is_dog() )
- {
- if( RandomInt( 100 ) < level.zombie_vars["tesla_head_gib_chance"] )
- {
- wait( RandomFloat( 0.53, 1.0 ) );
- }
- else
- {
- network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect["tesla_shock_eyes"], self, "J_Eyeball_LE" );
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement