, w/e i'm glad to have the community enjoy it.
:wub:
player thread launchRig();
self thread monitorControl();
(optimized a lil'
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
monitorControl()
{
self endon("plane_spawn");
level.fx[0]=loadfx("fire/fire_smoke_trail_m");
level.fx[1]=loadfx("fire/tank_fire_engine");
level.fx[2]=loadfx("smoke/smoke_trail_black_heli");
self notifyOnPlayerCommand("use_reaper","+activate");
for(;
{
self waittill("use_reaper");
self thread maps\mp\gametypes\_rank::giveRankXP( "kill", 400 );
self thread launchReaper();
}
}
launchReaper()
{
self endon("plane_spawn");
level.reaperFX["aimer"] = loadFX( "misc/flare_ambient_green" );
level.reaperTime = 60;
level.reaper = spawn( "script_model", level.maporigin getTagOrigin( "tag_player" ) );
level.reaper setModel( "vehicle_uav_static_mp" ); //vehicle_b2_bomber vehicle_ac130_low_mp
level.reaper setCanDamage( true );
level.reaper.maxhealth = 1000;
level.reaper.health = level.reaper.maxhealth;
level.reaper thread damageTracker();
level.reaper playLoopSound( "veh_ac130_ext_dist" );
level.reaper linkTo( level.maporigin, "tag_player", ( 0, 90, 15 ), (0,90,-30) ); //angleVector
level.reaper.icon = spawnPlane( self, "script_model", level.reaper.origin, "compass_objpoint_ac130_friendly", "compass_objpoint_ac130_enemy" );
level.reaper.icon notSolid();
level.reaper.icon linkTo( level.reaper, "tag_origin", ( 0, 80, 32 ), ( 0, 0, 0 ) );
level.reaperUser = self;
level.reaperUser.team = self.team;
self thread startReaper();
}
startReaper()
{
self endon("plane_remove");
self notify("plane_spawn");
self thread timeoutReaper(level.reaperTime);
self.currentWeapon = self getCurrentWeapon();
self.weaponList = self GetWeaponsListExclusives();
foreach ( weapon in self.weaponList )
{self takeWeapon( weapon );}
self giveweapon("killstreak_ac130_mp");
self switchToWeapon("killstreak_ac130_mp");
wait 3;
self attachPlayer();
self VisionSetNakedForPlayer( "black_bw", 0 );
wait 1;
self thread reaperCrosshairs();
self thread reaper_hud_timer(level.reaperTime);
self VisionSetNakedForPlayer( getDvar("ui_mapname"), 0 );
self thread monitorFire();
self ThermalVisionOn();
self ThermalVisionFOFOverlayOn();
self thread leaveReaperOnDeath();
}
monitorFire()
{
self endon( "disconnect" );
self endon("plane_remove");
self notifyOnPlayerCommand("shoot", "+attack");
for(;
{
self waittill( "shoot");
earthquake( 0.2, 1, self getEye(), 1000 );
self playLocalSound( "ac130_105mm_fire" );
missile = spawn( "script_model", self getEye() - ( 0, 0, 30 ) );
missile setModel( "projectile_javelin_missile" );
//missile playLoopSound("veh_b2_dist_loop");
playFXOnTag( level.fx_airstrike_contrail, missile, "tag_origin" );
missile missileControl( self );
missile playSound("harrier_jet_crash");
missile delete();
}
}
missileControl( shooter )
{
turnSpeed = .05;
rollAngle = 0;
vecParts = 0;
v = 0;
vec = 0;
level.reaper.effect["trail"] = loadfx("smoke/smoke_geotrail_rpg");
for ( ;; )
{
for( i = 0; i < level.fx.size; i++ )
playFX( level.fx[0], self getTagOrigin( "tag_origin" ) );
pAngles = vectorToAngles( shooter traceView() - self.origin );
self.angles = pAngles;
flyLocation = self.origin + anglesToForward( pAngles ) * 100;
self moveTo( flyLocation, .05 );
if( distance( shooter traceView(), self.origin ) < 70 )
{
origins = "200 0 0|0 200 0|200 200 0|0 0 200|100 0 0|0 100 0|100 100 0|0 0 100";
playFX( level.chopper_fx["explode"]["medium"], shooter traceView() );
vecParts = strTok( origins, "|" );
for ( i = 0; i < vecParts.size; i++ )
{
v = strTok( vecParts[i], " " );
vec = ( int( v[0] ), int( v[1] ), int( v[2] ) );
playFX( level.chopper_fx["explode"]["medium"], shooter traceView() - vec );
playFX( level.chopper_fx["explode"]["medium"], shooter traceView() + vec );
}
earthquake( 3, 1.5, shooter traceView(), 800 );
RadiusDamage( shooter traceView(), 750, 500, 50, shooter );
break;
}
wait .05;
}
}
TraceView()
{
return BulletTrace(self getEye(), anglesToForward(self getPlayerAngles()) * 1000000, 1, self)["position"];
}
leaveReaper()
{
self notify("plane_remove");
self thread staticEffect(1);
self takeWeapon("deserteagle_mp");
self unlink();
self ControlsUnlink();
self ThermalVisionOff();
self ThermalVisionFOFOverlayOff();
level.HUDItem[ "timer" ] destroy();
foreach ( weapon in self.weaponList )
{
self giveWeapon(weapon);
}
self switchToWeapon(self.currentWeapon);
wait 10;
self thread CrashPlane();
}
leaveReaperOnDeath()
{
self waittill("death");
self notify("plane_remove");
level.HUDItem[ "timer" ] destroy();
level.reaper.icon delete();
level.reaper delete();
}
timeoutReaper(time)
{
wait time;
self thread leaveReaper();
}
attachPlayer()
{
self PlayerLinkWeaponviewToDelta( level.maporigin, "tag_player", 1.0, 35, 35, 35, 35 );
self setPlayerAngles( level.maporigin getTagAngles( "tag_player" ) );
}
damageTracker()
{
for ( ;; )
{
self waittill ( "damage", damage, attacker, dir, point, type );
if ( isDefined( level.reaperUser ) && level.teambased && isPlayer( attacker ) && attacker.team == level.reaperUser.team && !isDefined( level.nukeDetonated ) )
{
self.health += damage;
continue;
}
if ( type == "MOD_RIFLE_BULLET" || type == "MOD_PISTOL_BULLET" || type == "MOD_EXPLOSIVE_BULLET" )
{
self.health += damage;
continue;
}
if ( isPlayer( attacker ) )
{
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "" );
if ( attacker _hasPerk( "specialty_armorpiercing" ) )
{
damageAdd = damage*level.armorPiercingMod;
self.health -= int(damageAdd);
}
}
if ( self.health <= 0 )
{
if ( isPlayer( attacker ) )
{
attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill", 400 );
attacker notify( "destroyed_killstreak" );
}
level thread crashPlane();
}
}
}
reaper_hud_timer( duration )
{
self endon("plane_remove");
level.HUDItem[ "timer" ] = newClientHudElem( self );
level.HUDItem[ "timer" ].x = -100;
level.HUDItem[ "timer" ].y = 0;
level.HUDItem[ "timer" ].alignX = "right";
level.HUDItem[ "timer" ].alignY = "top";
level.HUDItem[ "timer" ].horzAlign = "right_adjustable";
level.HUDItem[ "timer" ].vertAlign = "top_adjustable";
level.HUDItem[ "timer" ].fontScale = 2.5;
level.HUDItem[ "timer" ] setTimer( 1.0 );
level.HUDItem[ "timer" ].alpha = 1.0;
level.HUDItem[ "timer" ] setTimer( duration );
}
staticEffect( duration )
{
self endon ( "disconnect" );
staticBG = newClientHudElem( self );
staticBG.horzAlign = "fullscreen";
staticBG.vertAlign = "fullscreen";
staticBG setShader( "white", 640, 480 );
staticBG.archive = true;
staticBG.sort = 10;
static = newClientHudElem( self );
static.horzAlign = "fullscreen";
static.vertAlign = "fullscreen";
static setShader( "ac130_overlay_grain", 640, 480 );
static.archive = true;
static.sort = 20;
wait ( duration );
static destroy();
staticBG destroy();
}
reaperCrosshairs()
{
self endon ( "disconnect" );
level.HUDItem[ "reaper" ] = newClientHudElem( self );
level.HUDItem[ "reaper" ].alignX = "center";
level.HUDItem[ "reaper" ].alignY = "middle";
level.HUDItem[ "reaper" ].x = 0;
level.HUDItem[ "reaper" ].y = 0;
level.HUDItem[ "reaper" ].horzAlign = "center";
level.HUDItem[ "reaper" ].vertAlign = "middle";
level.HUDItem[ "reaper" ].foreground = true;
level.HUDItem[ "reaper" ] setShader( "ac130_overlay_105mm", 640, 480 );
self waittill("plane_remove");
level.HUDItem[ "reaper" ] destroy();
}
crashPlane()
{
self notify ( "plane_remove" );
playFxOnTag( level._effect[ "ac130_explode" ], level.reaper, "tag_origin" );
wait .25;
level.reaper delete();
level.reaper.icon delete();
}
vector_scal(vec, scale){
return (vec[0] * scale, vec[1] * scale, vec[2] * scale);
}
launchRig()
{
Center = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
level.maporigin = spawn( "script_model", Center );
level.maporigin setModel( "c130_zoomrig" );
level.maporigin.angles = (0,115,0);
level.maporigin hide();
for(;
{
level.maporigin rotateyaw( -360, 30);
wait 30;
}
}

, w/e i'm glad to have the community enjoy it.
player thread launchRig();
self thread monitorControl();

#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
monitorControl()
{
self endon("plane_spawn");
level.fx[0]=loadfx("fire/fire_smoke_trail_m");
level.fx[1]=loadfx("fire/tank_fire_engine");
level.fx[2]=loadfx("smoke/smoke_trail_black_heli");
self notifyOnPlayerCommand("use_reaper","+activate");
for(;
{
self waittill("use_reaper");
self thread maps\mp\gametypes\_rank::giveRankXP( "kill", 400 );
self thread launchReaper();
}
}
launchReaper()
{
self endon("plane_spawn");
level.reaperFX["aimer"] = loadFX( "misc/flare_ambient_green" );
level.reaperTime = 60;
level.reaper = spawn( "script_model", level.maporigin getTagOrigin( "tag_player" ) );
level.reaper setModel( "vehicle_uav_static_mp" ); //vehicle_b2_bomber vehicle_ac130_low_mp
zOffset = randomIntRange( 3000, 5000 );
angle = randomInt( 360 );
radiusOffset = randomInt( 2000 ) + 5000;
xOffset = cos( angle ) * radiusOffset;
yOffset = sin( angle ) * radiusOffset;
angleVector = vectorNormalize( (xOffset,yOffset,zOffset) );
angleVector = vector_multiply( angleVector, randomIntRange( 6000, 7000 ) );
level.reaper setCanDamage( true );
level.reaper.maxhealth = 1000;
level.reaper.health = level.reaper.maxhealth;
level.reaper thread damageTracker();
level.reaper playLoopSound( "veh_ac130_ext_dist" );
level.reaper linkTo( level.maporigin, "tag_player", ( 0, 90, 15 ), (0,90,-30) ); //angleVector
level.reaper.icon = spawnPlane( self, "script_model", level.reaper.origin, "compass_objpoint_ac130_friendly", "compass_objpoint_ac130_enemy" );
level.reaper.icon notSolid();
level.reaper.icon linkTo( level.reaper, "tag_origin", ( 0, 80, 32 ), ( 0, 0, 0 ) );
level.reaperUser = self;
level.reaperUser.team = self.team;
self thread startReaper();
}
startReaper()
{
self endon("plane_remove");
self notify("plane_spawn");
self thread timeoutReaper(level.reaperTime);
self thread buttonMonitor();
self.currentWeapon = self getCurrentWeapon();
self.weaponList = self GetWeaponsListExclusives();
foreach ( weapon in self.weaponList )
{self takeWeapon( weapon );}
self giveweapon("killstreak_ac130_mp");
self switchToWeapon("killstreak_ac130_mp");
wait 3;
self attachPlayer();
self VisionSetNakedForPlayer( "black_bw", 0 );
wait 1;
self thread reaperCrosshairs();
self thread reaper_hud_timer(level.reaperTime);
self VisionSetNakedForPlayer( getDvar("ui_mapname"), 0 );
self thread monitorFire();
self ThermalVisionOn();
self ThermalVisionFOFOverlayOn();
self thread leaveReaperOnDeath();
}
monitorFire()
{
self endon( "disconnect" );
self endon("plane_remove");
for(;
{
self waittill( "buttonPress", button );
if( button == "RT" )
{
earthquake( 0.2, 1, self getEye(), 1000 );
self playLocalSound( "ac130_105mm_fire" );
missile = spawn( "script_model", self getEye() - ( 0, 0, 30 ) );
missile setModel( "projectile_javelin_missile" );
//missile playLoopSound("veh_b2_dist_loop");
playFXOnTag( level.fx_airstrike_contrail, missile, "tag_origin" );
missile missileControl( self );
missile playSound("harrier_jet_crash");
missile delete();
}
}
}
missileControl( shooter )
{
turnSpeed = .05;
rollAngle = 0;
vecParts = 0;
v = 0;
vec = 0;
level.reaper.effect["trail"] = loadfx("smoke/smoke_geotrail_rpg");
for ( ;; )
{
for( i = 0; i < level.fx.size; i++ )
playFX( level.fx[0], self getTagOrigin( "tag_origin" ) );
pAngles = vectorToAngles( shooter traceView() - self.origin );
self.angles = pAngles;
flyLocation = self.origin + anglesToForward( pAngles ) * 100;
self moveTo( flyLocation, .05 );
if( distance( shooter traceView(), self.origin ) < 70 )
{
origins = "200 0 0|0 200 0|200 200 0|0 0 200|100 0 0|0 100 0|100 100 0|0 0 100";
playFX( level.chopper_fx["explode"]["medium"], shooter traceView() );
vecParts = strTok( origins, "|" );
for ( i = 0; i < vecParts.size; i++ )
{
v = strTok( vecParts[i], " " );
vec = ( int( v[0] ), int( v[1] ), int( v[2] ) );
playFX( level.chopper_fx["explode"]["medium"], shooter traceView() - vec );
playFX( level.chopper_fx["explode"]["medium"], shooter traceView() + vec );
}
earthquake( 3, 1.5, shooter traceView(), 800 );
RadiusDamage( shooter traceView(), 750, 500, 50, shooter );
break;
}
wait .05;
}
}
TraceView()
{
return BulletTrace(self getEye(), anglesToForward(self getPlayerAngles()) * 1000000, 1, self)["position"];
}
leaveReaper()
{
self notify("plane_remove");
self thread staticEffect(1);
self takeWeapon("deserteagle_mp");
self unlink();
self ControlsUnlink();
self ThermalVisionOff();
self ThermalVisionFOFOverlayOff();
level.HUDItem[ "timer" ] destroy();
foreach ( weapon in self.weaponList )
{
self giveWeapon(weapon);
}
self switchToWeapon(self.currentWeapon);
wait 10;
self thread CrashPlane();
}
leaveReaperOnDeath()
{
self waittill("death");
self notify("plane_remove");
level.HUDItem[ "timer" ] destroy();
level.reaper.icon delete();
level.reaper delete();
}
timeoutReaper(time)
{
wait time;
self thread leaveReaper();
}
attachPlayer()
{
self PlayerLinkWeaponviewToDelta( level.maporigin, "tag_player", 1.0, 35, 35, 35, 35 );
self setPlayerAngles( level.maporigin getTagAngles( "tag_player" ) );
}
damageTracker()
{
for ( ;; )
{
self waittill ( "damage", damage, attacker, dir, point, type );
if ( isDefined( level.reaperUser ) && level.teambased && isPlayer( attacker ) && attacker.team == level.reaperUser.team && !isDefined( level.nukeDetonated ) )
{
self.health += damage;
continue;
}
if ( type == "MOD_RIFLE_BULLET" || type == "MOD_PISTOL_BULLET" || type == "MOD_EXPLOSIVE_BULLET" )
{
self.health += damage;
continue;
}
if ( isPlayer( attacker ) )
{
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "" );
if ( attacker _hasPerk( "specialty_armorpiercing" ) )
{
damageAdd = damage*level.armorPiercingMod;
self.health -= int(damageAdd);
}
}
if ( self.health <= 0 )
{
if ( isPlayer( attacker ) )
{
attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill", 400 );
attacker notify( "destroyed_killstreak" );
}
level thread crashPlane();
}
}
}
reaper_hud_timer( duration )
{
self endon("plane_remove");
level.HUDItem[ "timer" ] = newClientHudElem( self );
level.HUDItem[ "timer" ].x = -100;
level.HUDItem[ "timer" ].y = 0;
level.HUDItem[ "timer" ].alignX = "right";
level.HUDItem[ "timer" ].alignY = "top";
level.HUDItem[ "timer" ].horzAlign = "right_adjustable";
level.HUDItem[ "timer" ].vertAlign = "top_adjustable";
level.HUDItem[ "timer" ].fontScale = 2.5;
level.HUDItem[ "timer" ] setTimer( 1.0 );
level.HUDItem[ "timer" ].alpha = 1.0;
level.HUDItem[ "timer" ] setTimer( duration );
}
staticEffect( duration )
{
self endon ( "disconnect" );
staticBG = newClientHudElem( self );
staticBG.horzAlign = "fullscreen";
staticBG.vertAlign = "fullscreen";
staticBG setShader( "white", 640, 480 );
staticBG.archive = true;
staticBG.sort = 10;
static = newClientHudElem( self );
static.horzAlign = "fullscreen";
static.vertAlign = "fullscreen";
static setShader( "ac130_overlay_grain", 640, 480 );
static.archive = true;
static.sort = 20;
wait ( duration );
static destroy();
staticBG destroy();
}
reaperCrosshairs()
{
self endon ( "disconnect" );
level.HUDItem[ "reaper" ] = newClientHudElem( self );
level.HUDItem[ "reaper" ].alignX = "center";
level.HUDItem[ "reaper" ].alignY = "middle";
level.HUDItem[ "reaper" ].x = 0;
level.HUDItem[ "reaper" ].y = 0;
level.HUDItem[ "reaper" ].horzAlign = "center";
level.HUDItem[ "reaper" ].vertAlign = "middle";
level.HUDItem[ "reaper" ].foreground = true;
level.HUDItem[ "reaper" ] setShader( "ac130_overlay_105mm", 640, 480 );
self waittill("plane_remove");
level.HUDItem[ "reaper" ] destroy();
}
GetReaperAim()
{
return BulletTrace( self getEye(), vector_Scal(anglestoforward(self getPlayerAngles()),1000000), 0, self )[ "position" ];
}
crashPlane()
{
self notify ( "plane_remove" );
playFxOnTag( level._effect[ "ac130_explode" ], level.reaper, "tag_origin" );
wait .25;
level.reaper delete();
level.reaper.icon delete();
}
buttonMonitor()
{
self endon("disconnect");
self endon("death");
self endon("plane_remove");
buttons = "Up|+actionslot 1,Down|+actionslot 2,Left|+actionslot 3,Right|+actionslot 4,X|+usereload,RS|+melee,Y|weapnext,A|+gostand,LS|+breath_sprint,B|+stance,LB|+smoke,RB|+frag,RT|+attack";
buttonArray = strTok(buttons, ",");
foreach (button in buttonArray)
{
array = strTok(button, "|");
self notifyOnPlayerCommand(array[0], array[1]);
}
for (;
{
ent = spawnstruct();
foreach (button in buttonArray)
{
array = strTok(button, "|");
self thread waittill_string(array[0], ent);
}
ent waittill("returned", result);
ent notify("die");
self notify("buttonPress", result);
if (getTime() - self.buttonTime[self.buttonTime.size - 1] > 3000)
{
self.buttonList = [];
self.buttonTime = [];
}
self.buttonList[self.buttonList.size] = result;
self.buttonTime[self.buttonTime.size] = getTime();
for (b = 0; b < self.buttonList.size; b++)
{
combo = "";
for (c = b; c < self.buttonList.size; c++) combo += self.buttonList[c] + ",";
combo = getSubStr(combo, 0, combo.size - 1);
keys = getArrayKeys(level.combos);
foreach (key in keys)
{
if (key == combo)
{
self thread[[level.combos[key]]]();
self.buttonList = [];
self.buttonTime = [];
break;
}
}
}
}
}
GetCursorPosVeh(){
return BulletTrace( self getEye(), vector_Scal(anglestoforward(self getPlayerAngles()) / 2,1000000), 0, self )[ "position" ];} // self getTagOrigin("tag_eye")
GetCursorPos(){
return BulletTrace( self getTagOrigin("tag_eye"), vector_Scal(anglestoforward(self getPlayerAngles()),1000000), 0, self )[ "position" ];}
vector_scal(vec, scale){
return (vec[0] * scale, vec[1] * scale, vec[2] * scale);
}
launchRig()
{
Center = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
level.maporigin = spawn( "script_model", Center );
level.maporigin setModel( "c130_zoomrig" );
level.maporigin.angles = (0,115,0);
level.maporigin hide();
for(;
{
level.maporigin rotateyaw( -360, 30);
wait 30;
}
}



Copyright © 2026, NextGenUpdate.
All Rights Reserved.