Eh, it's fine, I guess. Anyone can take the script if they want to. Though, it would be nice if people asked before just taking something from a map IWD. But I don't really care that much about the script, so here you go.
Take this version, though, noticed I didn't make an onPlayerSpawn() fucntion for it.
#include maps\_utility; #include common_scripts\utility; #include maps\_zombiemode_utility; #include maps\_hud_util; init() { level thread connect_jet_pack_player(); } connect_jet_pack_player() { for( ;; ) { level waittill("connecting", player); player thread onPlayerSpawned(); } } onPlayerSpawned() { self endon("death"); while(1) { self waittill("spawned_player"); self thread fly_away(); self thread exo_boost_down(); } } spaceButtonPressed() { if( GetDvar("fly_key") == 1 ) return true; return false; } fly_away() { self.is_flying_jetpack = false; self.has_jetpack = false; self.is_rebooting = false; wait 2; // self setClientDvar( "activeaction", "vstr 17;" ); // self setClientDvar( "17", "bind2 space vstr 19" ); // self setClientDvar( "19", "toggle fly_key 0 1" ); self.enable_land_sound = false; self.boost_left = 100; self thread cooldown_monitor(); self thread make_fuel_hud(); self thread exo_kick(); while(1) { if( !self IsOnGround() && self.boost_left > 0 && self.has_jetpack ) { self.boost_added = 0; while( self.boost_added < 1 && !self IsOnGround() ) { if( self UseButtonPressed() ) { self AllowMelee(false); self.is_flying_jetpack = true; self.boost_added++; self PlaySound("boost"); angles = self getplayerangles(); angles = (0,angles[1],0); if( self.boost_left >= 10 ) self.loop_value = 6; else if( self.boost_left < 10 && self.boost_left >= 5 ) self.loop_value = 2; else if( self.boost_left < 5 && self.boost_left > 0 ) self.loop_value = 1; if( IsDefined(self.loop_value) && self.boost_left > 0 ) { Earthquake( 0.22, .9, self.origin, 850 ); if( self.boost_left < 10 ) self.boost_left = 0; else self.boost_left -= 10; direction = AnglesToUp(angles) * 750; self thread land(); for(l = 0; l < self.loop_value; l++) { self SetVelocity( self getVelocity() + direction ); wait .1; } } self.enable_land_sound = true; while( !self isOnGround() ) wait .05; } wait .1; } } wait .1; } } land() { while( !self IsOnGround() ) wait .1; if( self.enable_land_sound == true ) { self PlaySound("land"); self AllowMelee(true); self.enable_land_sound = false; self.is_flying_jetpack = false; } } exo_boost_down() { while(1) { angles = self getplayerangles(); angles = (0,angles[1],0); if( !self isOnGround() && self.is_flying_jetpack && self getStance() == "crouch" ) { Earthquake( 0.3, .9, self.origin, 850 ); self PlaySound("jet_pack_launch"); self thread land_boost(); for(l = 0; l < 8; l++) { self SetVelocity( (AnglesToUp(angles)) * -800 ); wait .1; } } wait .05; } } land_boost() { while(!self isOnGround()) wait .05; Earthquake( 0.3, 1.1, self.origin, 850 ); } exo_kick() { self.jet_break = true; while(1) { zombs = getaispeciesarray("axis","all"); for(k=0;k<zombs.size;k++) { if( self MeleeButtonPressed() && self.has_jetpack && self.is_flying_jetpack && Distance(self.origin, zombs[k].origin) <= 320 && IsAlive(zombs[k]) ) { angles = self getplayerangles(); angles = (0,angles[1],0); self SetVelocity(AnglesToForward(angles) * 620); jet_sec = 0; while( jet_sec <= 20 ) { zombie_is_in_front_of_player = Within_Fov( self.origin, self GetPlayerAngles(), zombs[k].origin, cos( 30 ) ); jet_sec++; zombs = getaispeciesarray("axis","all"); for(k=0;k<zombs.size;k++) { if( Distance(self.origin, zombs[k].origin) <= 140 && IsAlive(zombs[k]) && self.has_jetpack && !self IsOnGround() && zombie_is_in_front_of_player ) { zombs[k] DoDamage( zombs[k].health + 666, zombs[k].origin ); if( !IsAlive(zombs[k]) ) { self maps\_zombiemode_score::add_to_player_score(50); kickAngles = self.angles; kickAngles += (RandomFloatRange(-30, -20), RandomFloatRange(-5, 5), 0); launchDir = AnglesToForward(kickAngles); launchForce = RandomFloatRange(180, 260); zombs[k] StartRagdoll(); zombs[k] launchragdoll(launchDir * launchForce); zombs[k] maps\_zombiemode_spawner::zombie_head_gib(); } self.jet_break = true; } } if( self.jet_break ) { self.jet_break = false; break; } wait .1; } } } wait .1; } } cooldown_monitor() { self.is_filling = false; while(1) { if( self.boost_left < 100 ) { wait 3; while( self.boost_left <= 99 && self.enable_land_sound == false ) { wait .3; self.is_filling = true; self.boost_left++; } self.is_filling = false; } wait .1; } } make_fuel_hud() { self.jetpack_value = undefined; self thread fade_red_hud(); while(1) { if( !isdefined(self.jetpack_value) && self.has_jetpack ) { self.jetpack_value = NewClientHudElem( self ); self.jetpack_value.alignX = "right"; self.jetpack_value.alignY = "right"; self.jetpack_value.horzAlign = "right"; self.jetpack_value.vertAlign = "top"; self.jetpack_value.fontscale = 60; self.jetpack_value.x = -80; self.jetpack_value.y = 60; self.jetpack_value.alpha = 1; } if( IsDefined(self.jetpack_value) ) { if( self.boost_left > 30 ) self.jetpack_value.color = (0, 0, 255); else self.jetpack_value.color = (255, 0, 0); self.jetpack_value SetValue( self.boost_left ); } if (!self.has_jetpack && isdefined(self.jetpack_value) ) self.jetpack_value destroy(); wait .1; } } attach_jetpack_model() { jetpack_model = undefined; while(1) { if( self.has_jetpack && !IsDefined(jetpack_model)) { jetpack_model = Spawn( "script_model", self GetTagOrigin( "back_mid" ) ); jetpack_model SetModel( "jetpack" ); jetpack_model LinkTo(self, "back_mid"); } else if( !self.has_jetpack && IsDefined(jetpack_model) ) { jetpack_model delete(); jetpack_model = undefined; } wait .1; } } fade_red_hud() { while(1) { if( self.boost_left <= 30 && IsDefined(self.jetpack_value) ) { self.jetpack_value FadeOverTime( 1 ); self.jetpack_value.alpha = .10; wait 1; self.jetpack_value FadeOverTime( 1 ); self.jetpack_value.alpha = 1; wait 1; } wait .1; } }
You need to call the script above zombiemode::main line in mapname.gsc