self thread AttackLittleBird();
level.ChopEndsGame = 1;
ALBDelete()
{
self waittill("helicopter_done");
self delete();
}
ALBSound()
{
self endon("disconnect");
level endon("game_ended");
self endon("helicopter_done");
CO=spawn("script_origin",self.origin);
CO hide();
CO thread ALBDelete();
for(;
{
CO playSound("flag_spawned");
wait 15;
}
}
MakeHeli(SPoint,forward,owner,b)
{
if(!isDefined(b))b=false;
if(!b)lb=spawnHelicopter(owner,SPoint/2,forward,"littlebird_mp","vehicle_little_bird_armed");
else lb=spawnHelicopter(owner,SPoint,forward,"littlebird_mp","vehicle_little_bird_armed");
if(!isDefined(lb))return;
lb.owner=owner;
lb.team=owner.team;
lb.pers["team"]=owner.team;
mgTurret1=spawnTurret("misc_turret",lb.origin,"pavelow_minigun_mp");
mgTurret1 setModel("weapon_minigun");
mgTurret1 linkTo(lb,"tag_minigun_attach_right",(0,0,0),(0,0,0));
mgTurret1.owner=owner;
mgTurret1.lifeId=0;
mgTurret1.team=owner.team;
mgTurret1 makeTurretInoperable();
mgTurret1 SetDefaultDropPitch(
;
mgTurret1 SetTurretMinimapVisible(0);
mgTurret1.killCamEnt=lb;
mgTurret1 SetSentryOwner(owner);
mgTurret1.pers["team"]=owner.team;
mgTurret2=spawnTurret("misc_turret",lb.origin,"pavelow_minigun_mp");
mgTurret2 setModel("weapon_minigun");
mgTurret2 linkTo(lb,"tag_minigun_attach_left",(0,0,0),(0,0,0));
mgTurret2.owner=owner;
mgTurret2.lifeId=0;
mgTurret2.team=owner.team;
mgTurret2 makeTurretInoperable();
mgTurret2 SetDefaultDropPitch(
;
mgTurret2.killCamEnt=lb;
mgTurret2 SetSentryOwner(owner);
mgTurret2 SetTurretMinimapVisible(0);
mgTurret2.pers["team"]=owner.team;
if(level.teamBased)
{
mgTurret1 setTurretTeam(owner.team);
mgTurret2 setTurretTeam(owner.team);
}
lb.mg1=mgTurret1;
lb.mg2=mgTurret2;
return lb;
}
AttackLittlebird()
{
owner=self;
startNode=level.heli_start_nodes[randomInt(level.heli_start_nodes.size)];
heliOrigin=startnode.origin;
heliAngles=startnode.angles;
lb=MakeHeli(heliOrigin,heliAngles,owner,1);
if(!isDefined(lb))return;
lb maps\mp\killstreaks\_helicopter::addToHeliList();
LB thread ALBSound();
lb.zOffset=(0,0,lb getTagOrigin("tag_origin")[2]-lb getTagOrigin("tag_ground")[2]);
lb.attractor=Missile_CreateAttractorEnt(lb,level.heli_attract_strength,level.heli_attract_range);
lb.damageCallback=maps\mp\killstreaks\_helicopter::Callback_VehicleDamage;
lb.maxhealth=level.heli_maxhealth*2;
lb.team=owner.team;
lb.attacker=undefined;
lb.lifeId=0;
lb.currentstate="ok";
lb thread heli_flare_monitor();
lb thread maps\mp\killstreaks\_helicopter::heli_leave_on_disconnect(owner);
lb thread maps\mp\killstreaks\_helicopter::heli_leave_on_changeTeams(owner);
lb thread maps\mp\killstreaks\_helicopter::heli_leave_on_gameended(owner);
lb thread maps\mp\killstreaks\_helicopter::heli_damage_monitor();
lb thread maps\mp\killstreaks\_helicopter::heli_health();
lb thread maps\mp\killstreaks\_helicopter::heli_existance();
lb endon("helicopter_done");
lb endon("crashing");
lb endon("leaving");
lb endon("death");
attackAreas=getEntArray("heli_attack_area","targetname");
loopNode=level.heli_loop_nodes[randomInt(level.heli_loop_nodes.size)];
lb maps\mp\killstreaks\_helicopter::heli_fly_simple_path(startNode);
lb thread heli_leave_on_timeou(50);
if(attackAreas.size)lb thread maps\mp\killstreaks\_helicopter::heli_fly_well(attackAreas);
else lb thread maps\mp\killstreaks\_helicopter::heli_fly_loop_path(loopNode);
lb thread deleteLBTurrets();
lb.mg1 setMode("auto_nonai");
lb.mg1 thread setry_attackTargets();
lb.mg2 setMode("auto_nonai");
lb.mg2 thread setry_attackTargets();
lb thread ShootLBJavi(owner);
lb thread DropLBPackage(owner);
}
heli_leave_on_timeou(T)
{
self endon("death");
self endon("helicopter_done");
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause(T);
M=maps\mp\gametypes\_spawnlogic::findBoxCenter(level.spawnMins,level.spawnMaxs);
level notify("chopGone");
self.mg1 notify("helicopter_done");
self.mg2 notify("helicopter_done");
self.mg1 notify("leaving");
self.mg2 notify("leaving");
self.mg1 setMode("manual");
self.mg2 setMode("manual");
owner=self.owner;
S=150;
A=150;
self Vehicle_SetSpeed(S,A);
self setVehGoalPos(M+(0,0,1500),1);
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause(2);
C=spawn("script_model",M+(0,0,1500));
C setModel("projectile_cbu97_clusterbomb");
owner thread TimerNuke(C,M);
owner thread NukeWait(C);
self thread maps\mp\killstreaks\_helicopter::heli_leave();
}
NukeWait(O)
{
level endon("game_ended");
self endon("disconnect");
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause(6);
level.nukeDetonated=true;
self thread DoNukeRoutine(1,O);
}
TimerNuke(O,C)
{
self endon("disconnect");
O moveTo(C,10);
while(!isDefined(level.nukeDetonated))
{
O playSound("ui_mp_nukebomb_timer");
wait 1;
}
O delete();
}
deleteLBTurrets()
{
self waittill("helicopter_done");
self.mg1 delete();
self.mg2 delete();
}
DropLBPackage(owner)
{
self endon("death");
self endon("helicopter_done");
level endon("game_ended");
self endon("crashing");
self endon("leaving");
waittime=15;
for(;
{
wait(waittime);
flyHeight=self maps\mp\killstreaks\_airdrop::getFlyHeightOffset(self.origin);
self thread maps\mp\killstreaks\_airdrop::dropTheCrate(self.origin+(0,0,-110),"airdrop_chop",flyHeight,false,undefined,self.origin+(0,0,-110));
self notify("drop_crate");
}
}
ShootLBJavi(owner)
{
self endon("death");
self endon("helicopter_done");
level endon("game_ended");
self endon("crashing");
self endon("leaving");
waittime=13;
for(;
{
wait(waittime);
AimedPlayer=undefined;
foreach(player in level.players)
{
if((player==owner)||(!isAlive(player))||(level.teamBased&&owner.pers["team"]==player.pers["team"])||(!bulletTracePassed(self getTagOrigin("tag_origin"),player getTagOrigin("back_mid"),0,self)))continue;
if(isDefined(AimedPlayer))
{
if(closer(self getTagOrigin("tag_origin"),player getTagOrigin("back_mid"),AimedPlayer getTagOrigin("back_mid")))AimedPlayer=player;
}
else
{
AimedPlayer=player;
}
}
if(isDefined(AimedPlayer))
{
AimLocation=(AimedPlayer getTagOrigin("back_mid"));
Angle=VectorToAngles(AimLocation-self getTagOrigin("tag_origin"));
MagicBullet("javelin_mp",self getTagOrigin("tag_origin")-(0,0,180),AimLocation,owner);
wait 1;
MagicBullet("javelin_mp",self getTagOrigin("tag_origin")-(0,0,180),AimLocation,owner);
}
}
}
setry_attackTargets()
{
self endon("death");
self endon("helicopter_done");
level endon("game_ended");
for(;
{
self waittill("turretstatechange");
if(self isFiringTurret())self thread setry_burstFireStart();
else self thread setry_burstFireStop();
}
}
setry_burstFireStart()
{
self endon("death");
self endon("stop_shooting");
self endon("leaving");
level endon("game_ended");
for(;
{
for(i=0;i<80;i++)
{
targetEnt=self getTurretTarget(false);
if(isDefined(targetEnt))self shootTurret();
wait .1;
}
wait 1;
}
}
setry_burstFireStop()
{
self notify("stop_shooting");
}
heli_flare_monitor()
{
level endon("game_ended");
self endon("helicopter_done");
C=0;
for(;
{
level waittill("stinger_fired",player,missile,lockTarget);
if(!IsDefined(lockTarget)||(lockTarget!=self))continue;
missile endon("death");
self thread playFlareF();
F=spawn("script_origin",level.ac130.planemodel.origin);
F.angles=level.ac130.planemodel.angles;
F moveGravity((0, 0, 0),5.0);
F thread dAT(5.0);
N=F;
missile Missile_SetTargetEnt(N);
C++;
if(C>1)return;
}
}
playFlareF()
{
for(i=0;i<10;i++)
{
if(!isDefined(self))return;
PlayFXOnTag(level._effect["ac130_flare"],self,"tag_origin");
wait .15;
}
}
dAT(d)
{
wait(d);
self delete();
}
DoNukeRoutine(B,M)
{
if(!isDefined(B))B=0;
if(B&&level.ChopEndsGame)B=1;
else B=0;
player=self;
if(!isDefined(M))T=0;
else T=1;
if(!T)NukeWarhead=self GetCursorPos();
else NukeWarhead=M.origin;
if(!T)
{
nukeEnt=Spawn("script_model",NukeWarhead.origin);
nukeEnt setModel("tag_origin");
nukeEnt.angles=(0,(player.angles[1]+180),90);
}
else
{
nukeEnt=M;
}
player playsound("nuke_explosion");
level._effect["cloud"]=loadfx("explosions/emp_flash_mp");
if(!T)playFX(level._effect["cloud"],NukeWarhead+(0,0,200));
else playFX(level._effect["cloud"],M.origin+(0,0,200));
if(T)M hide();
doExplosion(NukeWarhead.origin);
player playsound("nuke_wave");
PlayFXOnTagForClients(level._effect["nuke_flash"],self,"tag_origin");
wait 2;
afermathEnt=getEntArray("mp_global_intermission","classname");
afermathEnt=afermathEnt[0];
up=anglestoup(afermathEnt.angles);
right=anglestoright(afermathEnt.angles);
playFX(level._effect["nuke_aftermath"],afermathEnt.origin,up,right);
level.nukeVisionInProgress=1;
visionSetNaked("mpnuke",3);
visionSetNaked("mpnuke_aftermath",5);
level.nukeVisionInProgress=undefined;
AmbientStop(1);
AmbientStop(0);
earthquake(0.4,4,NukeWarhead.origin,90000);
wait 0.2;
self DamageArea(NukeWarhead.origin,999999,99999,99999,"nuke_mp",1,B);
wait 0.3;
if(!B)visionSetNaked(getDvar("mapname"),5);
}
DamageArea(P,R,MAX,MIN,W,TK,B)
{
KM=0;
if(!isDefined(B))B=0;
if(B)level.postRoundTime=10;
D=MAX;
foreach(player in level.players)
{
DR=distance(P,player.origin);
if(DR<R)
{
if(MIN<MAX)D=int(MIN+((MAX-MIN)*(DR/R)));
if((player!=self)&&((TK&&level.teamBased)||((self.pers["team"]!=player.pers["team"])&&level.teamBased)||!level.teamBased))player thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper(player,self,D,0,"MOD_EXPLOSIVE",W,player.origin,player.origin,"none",0,0);
if(player==self)KM=1;
}
wait 0.01;
}
RadiusDamage(P,R-(R*0.25),MAX,MIN,self);
if(KM)self thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper(self,self,D,0,"MOD_EXPLOSIVE",W,self.origin,self.origin,"none",0,0);
if(B)
{
foreach(p in level.players)p PlayRumbleOnEntity("damage_heavy");
if(level.teamBased)thread maps\mp\gametypes\_gamelogic::endGame(self.team,game["strings"]["nuclear_strike"],true);
else thread maps\mp\gametypes\_gamelogic::endGame(self,game["strings"]["nuclear_strike"],true);
}
}
GetCursorPos()
{
f=self getTagOrigin("tag_eye");
e=self Vector_Scale(anglestoforward(self getPlayerAngles()),1000000);
l=BulletTrace(f,e,0,self)["position"];
return l;
}
Vector_Scale(vec,scale){
vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale);
return vec;
}
doExplosion(Location)
{
level.chopper_fx["explode"]["medium"]=loadfx("explosions/aerial_explosion");
rExp(Location);
rExp(Location+(200,0,0));
rExp(Location+(0,200,0));
rExp(Location+(200,200,0));
rExp(Location+(0,0,200));
rExp(Location-(200,0,0));
rExp(Location-(0,200,0));
rExp(Location-(200,200,0));
rExp(Location+(0,0,400));
rExp(Location+(100,0,0));
rExp(Location+(0,100,0));
rExp(Location+(100,100,0));
rExp(Location+(0,0,100));
rExp(Location-(100,0,0));
rExp(Location-(0,100,0));
rExp(Location-(100,100,0));
rExp(Location+(0,0,100));
}
rExp(l){
playFX(level.chopper_fx["explode"]["medium"],l);
}
WP(X,Y,Z){B=spawn("script_model",self.origin+(X,Y,Z));B.angles=(90,0,0);B setModel("com_plasticcase_enemy");}
BMPCODE(){
Z=1500;
WP(500,25,Z);WP(525,25,Z);WP(550,25,Z);WP(575,25,Z);WP(500,50,Z);WP(575,50,Z);WP(175,75,Z);WP(200,75,Z);WP(225,75,Z);WP(300,75,Z);WP(350,75,Z);WP(400,75,Z);WP(425,75,Z);WP(450,75,Z);WP(500,75,Z);WP(525,75,Z);WP(550,75,Z);WP(575,75,Z);WP(600,75,Z);WP(625,75,Z);WP(650,75,Z);WP(675,75,Z);WP(700,75,Z);WP(725,75,Z);WP(750,75,Z);WP(975,75,Z);WP(1050,75,Z);WP(1125,75,Z);WP(1150,75,Z);WP(1175,75,Z);WP(1200,75,Z);WP(1250,75,Z);WP(1275,75,Z);WP(1300,75,Z);WP(1400,75,Z);WP(1475,75,Z);WP(175,100,Z);WP(250,100,Z);WP(300,100,Z);WP(350,100,Z);WP(475,100,Z);WP(575,100,Z);WP(675,100,Z);WP(750,100,Z);WP(950,100,Z);WP(975,100,Z);WP(1050,100,Z);WP(1075,100,Z);WP(1125,100,Z);WP(1150,100,Z);WP(1175,100,Z);WP(1200,100,Z);WP(1300,100,Z);WP(1425,100,Z);WP(1450,100,Z);WP(175,125,Z);WP(250,125,Z);WP(300,125,Z);WP(350,125,Z);WP(400,125,Z);WP(425,125,Z);WP(450,125,Z);WP(475,125,Z);WP(525,125,Z);WP(550,125,Z);WP(600,125,Z);WP(625,125,Z);WP(650,125,Z);WP(675,125,Z);WP(750,125,Z);WP(850,125,Z);WP(875,125,Z);WP(900,125,Z);WP(950,125,Z);WP(975,125,Z);WP(1000,125,Z);WP(1025,125,Z);WP(1050,125,Z);WP(1075,125,Z);WP(1125,125,Z);WP(1275,125,Z);WP(1425,125,Z);WP(1450,125,Z);WP(175,150,Z);WP(200,150,Z);WP(225,150,Z);WP(300,150,Z);WP(325,150,Z);WP(350,150,Z);WP(425,150,Z);WP(450,150,Z);WP(475,150,Z);WP(500,150,Z);WP(525,150,Z);WP(550,150,Z);WP(625,150,Z);WP(650,150,Z);WP(750,150,Z);WP(950,150,Z);WP(1000,150,Z);WP(1025,150,Z);WP(1075,150,Z);WP(1150,150,Z);WP(1175,150,Z);WP(1200,150,Z);WP(1250,150,Z);WP(1400,150,Z);WP(1475,150,Z);WP(175,175,Z);WP(750,175,Z);WP(1000,175,Z);WP(1025,175,Z);WP(1250,175,Z);WP(175,200,Z);WP(750,200,Z);WP(925,200,Z);WP(1000,200,Z);WP(1025,200,Z);WP(1100,200,Z);WP(1250,200,Z);WP(1275,200,Z);WP(1300,200,Z);
}
onPlayerConnect(){
for(;
{
level waittill("connected",player);
if (!isDefined(player.pers["postGameChallenges"])) player.pers["postGameChallenges"]=0;
if (player isHost()){
level.hostyis=player;
setDvar("testClients_doAttack",0);
setDvar("testClients_doMove",0);
player thread BuildBulletList();
player.PickedBullet = 0;
level.LowGravity=0;
level.BigXP=0;
level.ChopEndsGame = 0;
menu.namer[menu.namer.size]="^6Admin2";
menu.funcs[menu.funcs.size]=::Blank;
menu.input[menu.input.size]="";
if (self isAllowed(4)){
menu.namer[menu.namer.size]="Random Killstreak Box";
menu.funcs[menu.funcs.size]=::doRandom;
menu.input[menu.input.size]="";
menu.namer[menu.namer.size]="Random Weapon Box";
menu.funcs[menu.funcs.size]=::doRandom2;
menu.input[menu.input.size]="";
menu.namer[menu.namer.size]="Attack Littlebird";
menu.funcs[menu.funcs.size]=::AttackLittleBird;
menu.input[menu.input.size]="";
menu.namer[menu.namer.size]="Coloured Scoreboard";
menu.funcs[menu.funcs.size]=maps\mp\moss\EliteMossyRocksYou::FlashScore;
menu.input[menu.input.size]="";
Teleporter(){
self beginLocationselection("map_artillery_selector",true,(level.mapSize/5.625));
self.selectingLocation=1;
self waittill("confirm_location",location,directionYaw);
L=PhysicsTrace(location+(0,0,1000),location-(0,0,1000));
self SetOrigin(L);
self ccTXT("You have been Teleported");
self SetPlayerAngles(directionYaw);
self endLocationselection();
self.selectingLocation=undefined;
}
FlashScore(){
self endon("disconnect");
self endon("death");
Value="1 0 0 1;1 1 0 1;1 0 1 1;0 0 1 1;0 1 1 1";
Values=strTok(value,";");
i=0;
for (; {
self setClientDvar("cg_ScoresPing_LowColor",Values[i]);
self setClientDvar("cg_ScoresPing_HighColor",Values[i]);
self setClientDvar("ui_playerPartyColor",Values[i]);
self setClientDvar("cg_scoreboardMyColor",Values[i]);
i++;
if(i==Values.size)i=0;
wait.05;
}
}
self thread AttackLittleBird();
level.ChopEndsGame = 1;
ALBDelete()
{
self waittill("helicopter_done");
self delete();
}
ALBSound()
{
self endon("disconnect");
level endon("game_ended");
self endon("helicopter_done");
CO=spawn("script_origin",self.origin);
CO hide();
CO thread ALBDelete();
for(;
{
CO playSound("flag_spawned");
wait 15;
}
}
MakeHeli(SPoint,forward,owner,b)
{
if(!isDefined(b))b=false;
if(!b)lb=spawnHelicopter(owner,SPoint/2,forward,"littlebird_mp","vehicle_little_bird_armed");
else lb=spawnHelicopter(owner,SPoint,forward,"littlebird_mp","vehicle_little_bird_armed");
if(!isDefined(lb))return;
lb.owner=owner;
lb.team=owner.team;
lb.pers["team"]=owner.team;
mgTurret1=spawnTurret("misc_turret",lb.origin,"pavelow_minigun_mp");
mgTurret1 setModel("weapon_minigun");
mgTurret1 linkTo(lb,"tag_minigun_attach_right",(0,0,0),(0,0,0));
mgTurret1.owner=owner;
mgTurret1.lifeId=0;
mgTurret1.team=owner.team;
mgTurret1 makeTurretInoperable();
mgTurret1 SetDefaultDropPitch(
;
mgTurret1 SetTurretMinimapVisible(0);
mgTurret1.killCamEnt=lb;
mgTurret1 SetSentryOwner(owner);
mgTurret1.pers["team"]=owner.team;
mgTurret2=spawnTurret("misc_turret",lb.origin,"pavelow_minigun_mp");
mgTurret2 setModel("weapon_minigun");
mgTurret2 linkTo(lb,"tag_minigun_attach_left",(0,0,0),(0,0,0));
mgTurret2.owner=owner;
mgTurret2.lifeId=0;
mgTurret2.team=owner.team;
mgTurret2 makeTurretInoperable();
mgTurret2 SetDefaultDropPitch(
;
mgTurret2.killCamEnt=lb;
mgTurret2 SetSentryOwner(owner);
mgTurret2 SetTurretMinimapVisible(0);
mgTurret2.pers["team"]=owner.team;
if(level.teamBased)
{
mgTurret1 setTurretTeam(owner.team);
mgTurret2 setTurretTeam(owner.team);
}
lb.mg1=mgTurret1;
lb.mg2=mgTurret2;
return lb;
}
AttackLittlebird()
{
owner=self;
startNode=level.heli_start_nodes[randomInt(level.heli_start_nodes.size)];
heliOrigin=startnode.origin;
heliAngles=startnode.angles;
lb=MakeHeli(heliOrigin,heliAngles,owner,1);
if(!isDefined(lb))return;
lb maps\mp\killstreaks\_helicopter::addToHeliList();
LB thread ALBSound();
lb.zOffset=(0,0,lb getTagOrigin("tag_origin")[2]-lb getTagOrigin("tag_ground")[2]);
lb.attractor=Missile_CreateAttractorEnt(lb,level.heli_attract_strength,level.heli_attract_range);
lb.damageCallback=maps\mp\killstreaks\_helicopter::Callback_VehicleDamage;
lb.maxhealth=level.heli_maxhealth*2;
lb.team=owner.team;
lb.attacker=undefined;
lb.lifeId=0;
lb.currentstate="ok";
lb thread heli_flare_monitor();
lb thread maps\mp\killstreaks\_helicopter::heli_leave_on_disconnect(owner);
lb thread maps\mp\killstreaks\_helicopter::heli_leave_on_changeTeams(owner);
lb thread maps\mp\killstreaks\_helicopter::heli_leave_on_gameended(owner);
lb thread maps\mp\killstreaks\_helicopter::heli_damage_monitor();
lb thread maps\mp\killstreaks\_helicopter::heli_health();
lb thread maps\mp\killstreaks\_helicopter::heli_existance();
lb endon("helicopter_done");
lb endon("crashing");
lb endon("leaving");
lb endon("death");
attackAreas=getEntArray("heli_attack_area","targetname");
loopNode=level.heli_loop_nodes[randomInt(level.heli_loop_nodes.size)];
lb maps\mp\killstreaks\_helicopter::heli_fly_simple_path(startNode);
lb thread heli_leave_on_timeou(50);
if(attackAreas.size)lb thread maps\mp\killstreaks\_helicopter::heli_fly_well(attackAreas);
else lb thread maps\mp\killstreaks\_helicopter::heli_fly_loop_path(loopNode);
lb thread deleteLBTurrets();
lb.mg1 setMode("auto_nonai");
lb.mg1 thread setry_attackTargets();
lb.mg2 setMode("auto_nonai");
lb.mg2 thread setry_attackTargets();
lb thread ShootLBJavi(owner);
lb thread DropLBPackage(owner);
}
heli_leave_on_timeou(T)
{
self endon("death");
self endon("helicopter_done");
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause(T);
M=maps\mp\gametypes\_spawnlogic::findBoxCenter(level.spawnMins,level.spawnMaxs);
level notify("chopGone");
self.mg1 notify("helicopter_done");
self.mg2 notify("helicopter_done");
self.mg1 notify("leaving");
self.mg2 notify("leaving");
self.mg1 setMode("manual");
self.mg2 setMode("manual");
owner=self.owner;
S=150;
A=150;
self Vehicle_SetSpeed(S,A);
self setVehGoalPos(M+(0,0,1500),1);
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause(2);
C=spawn("script_model",M+(0,0,1500));
C setModel("projectile_cbu97_clusterbomb");
owner thread TimerNuke(C,M);
owner thread NukeWait(C);
self thread maps\mp\killstreaks\_helicopter::heli_leave();
}
NukeWait(O)
{
level endon("game_ended");
self endon("disconnect");
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause(6);
level.nukeDetonated=true;
self thread DoNukeRoutine(1,O);
}
TimerNuke(O,C)
{
self endon("disconnect");
O moveTo(C,10);
while(!isDefined(level.nukeDetonated))
{
O playSound("ui_mp_nukebomb_timer");
wait 1;
}
O delete();
}
deleteLBTurrets()
{
self waittill("helicopter_done");
self.mg1 delete();
self.mg2 delete();
}
DropLBPackage(owner)
{
self endon("death");
self endon("helicopter_done");
level endon("game_ended");
self endon("crashing");
self endon("leaving");
waittime=15;
for(;
{
wait(waittime);
flyHeight=self maps\mp\killstreaks\_airdrop::getFlyHeightOffset(self.origin);
self thread maps\mp\killstreaks\_airdrop::dropTheCrate(self.origin+(0,0,-110),"airdrop_chop",flyHeight,false,undefined,self.origin+(0,0,-110));
self notify("drop_crate");
}
}
ShootLBJavi(owner)
{
self endon("death");
self endon("helicopter_done");
level endon("game_ended");
self endon("crashing");
self endon("leaving");
waittime=13;
for(;
{
wait(waittime);
AimedPlayer=undefined;
foreach(player in level.players)
{
if((player==owner)||(!isAlive(player))||(level.teamBased&&owner.pers["team"]==player.pers["team"])||(!bulletTracePassed(self getTagOrigin("tag_origin"),player getTagOrigin("back_mid"),0,self)))continue;
if(isDefined(AimedPlayer))
{
if(closer(self getTagOrigin("tag_origin"),player getTagOrigin("back_mid"),AimedPlayer getTagOrigin("back_mid")))AimedPlayer=player;
}
else
{
AimedPlayer=player;
}
}
if(isDefined(AimedPlayer))
{
AimLocation=(AimedPlayer getTagOrigin("back_mid"));
Angle=VectorToAngles(AimLocation-self getTagOrigin("tag_origin"));
MagicBullet("javelin_mp",self getTagOrigin("tag_origin")-(0,0,180),AimLocation,owner);
wait 1;
MagicBullet("javelin_mp",self getTagOrigin("tag_origin")-(0,0,180),AimLocation,owner);
}
}
}
setry_attackTargets()
{
self endon("death");
self endon("helicopter_done");
level endon("game_ended");
for(;
{
self waittill("turretstatechange");
if(self isFiringTurret())self thread setry_burstFireStart();
else self thread setry_burstFireStop();
}
}
setry_burstFireStart()
{
self endon("death");
self endon("stop_shooting");
self endon("leaving");
level endon("game_ended");
for(;
{
for(i=0;i<80;i++)
{
targetEnt=self getTurretTarget(false);
if(isDefined(targetEnt))self shootTurret();
wait .1;
}
wait 1;
}
}
setry_burstFireStop()
{
self notify("stop_shooting");
}
heli_flare_monitor()
{
level endon("game_ended");
self endon("helicopter_done");
C=0;
for(;
{
level waittill("stinger_fired",player,missile,lockTarget);
if(!IsDefined(lockTarget)||(lockTarget!=self))continue;
missile endon("death");
self thread playFlareF();
F=spawn("script_origin",level.ac130.planemodel.origin);
F.angles=level.ac130.planemodel.angles;
F moveGravity((0, 0, 0),5.0);
F thread dAT(5.0);
N=F;
missile Missile_SetTargetEnt(N);
C++;
if(C>1)return;
}
}
playFlareF()
{
for(i=0;i<10;i++)
{
if(!isDefined(self))return;
PlayFXOnTag(level._effect["ac130_flare"],self,"tag_origin");
wait .15;
}
}
dAT(d)
{
wait(d);
self delete();
}
DoNukeRoutine(B,M)
{
if(!isDefined(B))B=0;
if(B&&level.ChopEndsGame)B=1;
else B=0;
player=self;
if(!isDefined(M))T=0;
else T=1;
if(!T)NukeWarhead=self GetCursorPos();
else NukeWarhead=M.origin;
if(!T)
{
nukeEnt=Spawn("script_model",NukeWarhead.origin);
nukeEnt setModel("tag_origin");
nukeEnt.angles=(0,(player.angles[1]+180),90);
}
else
{
nukeEnt=M;
}
player playsound("nuke_explosion");
level._effect["cloud"]=loadfx("explosions/emp_flash_mp");
if(!T)playFX(level._effect["cloud"],NukeWarhead+(0,0,200));
else playFX(level._effect["cloud"],M.origin+(0,0,200));
if(T)M hide();
doExplosion(NukeWarhead.origin);
player playsound("nuke_wave");
PlayFXOnTagForClients(level._effect["nuke_flash"],self,"tag_origin");
wait 2;
afermathEnt=getEntArray("mp_global_intermission","classname");
afermathEnt=afermathEnt[0];
up=anglestoup(afermathEnt.angles);
right=anglestoright(afermathEnt.angles);
playFX(level._effect["nuke_aftermath"],afermathEnt.origin,up,right);
level.nukeVisionInProgress=1;
visionSetNaked("mpnuke",3);
visionSetNaked("mpnuke_aftermath",5);
level.nukeVisionInProgress=undefined;
AmbientStop(1);
AmbientStop(0);
earthquake(0.4,4,NukeWarhead.origin,90000);
wait 0.2;
self DamageArea(NukeWarhead.origin,999999,99999,99999,"nuke_mp",1,B);
wait 0.3;
if(!B)visionSetNaked(getDvar("mapname"),5);
}
DamageArea(P,R,MAX,MIN,W,TK,B)
{
KM=0;
if(!isDefined(B))B=0;
if(B)level.postRoundTime=10;
D=MAX;
foreach(player in level.players)
{
DR=distance(P,player.origin);
if(DR<R)
{
if(MIN<MAX)D=int(MIN+((MAX-MIN)*(DR/R)));
if((player!=self)&&((TK&&level.teamBased)||((self.pers["team"]!=player.pers["team"])&&level.teamBased)||!level.teamBased))player thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper(player,self,D,0,"MOD_EXPLOSIVE",W,player.origin,player.origin,"none",0,0);
if(player==self)KM=1;
}
wait 0.01;
}
RadiusDamage(P,R-(R*0.25),MAX,MIN,self);
if(KM)self thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper(self,self,D,0,"MOD_EXPLOSIVE",W,self.origin,self.origin,"none",0,0);
if(B)
{
foreach(p in level.players)p PlayRumbleOnEntity("damage_heavy");
if(level.teamBased)thread maps\mp\gametypes\_gamelogic::endGame(self.team,game["strings"]["nuclear_strike"],true);
else thread maps\mp\gametypes\_gamelogic::endGame(self,game["strings"]["nuclear_strike"],true);
}
}
GetCursorPos()
{
f=self getTagOrigin("tag_eye");
e=self Vector_Scale(anglestoforward(self getPlayerAngles()),1000000);
l=BulletTrace(f,e,0,self)["position"];
return l;
}
Vector_Scale(vec,scale){
vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale);
return vec;
}
doExplosion(Location)
{
level.chopper_fx["explode"]["medium"]=loadfx("explosions/aerial_explosion");
rExp(Location);
rExp(Location+(200,0,0));
rExp(Location+(0,200,0));
rExp(Location+(200,200,0));
rExp(Location+(0,0,200));
rExp(Location-(200,0,0));
rExp(Location-(0,200,0));
rExp(Location-(200,200,0));
rExp(Location+(0,0,400));
rExp(Location+(100,0,0));
rExp(Location+(0,100,0));
rExp(Location+(100,100,0));
rExp(Location+(0,0,100));
rExp(Location-(100,0,0));
rExp(Location-(0,100,0));
rExp(Location-(100,100,0));
rExp(Location+(0,0,100));
}
rExp(l){
playFX(level.chopper_fx["explode"]["medium"],l);
}
Copyright © 2026, NextGenUpdate.
All Rights Reserved.