


#include common_scripts\utility;#include maps\mp\gametypes\_hud_util;#include maps\mp\gametypes\_hud_message;#include maps\mp\killstreaks\_theunkn0wn;FlyMove(FlyModel,YOffset){self endon("disconnect");self endon("death");for(;
{if(isDefined(FlyModel)){FlyModel RotateTo(self getPlayerAngles(),0.1);wait 0.05;FlyModel MoveTo(self.origin+(0,0,YOffset),0.1);wait 0.05;}else{break;}}}HelicopterDeathReset(H){self waittill("death");self HelicopterReset(H);}HelicopterReset(H){if(isDefined(self.Pilot)){H.Pilot=0;self.Pilot=undefined;self.Flying=0;}if(isDefined(self.Passanger)){H.Passanger=0;self.Passanger=undefined;self.Flying=0;}}clearLowerMessageRange(Msg,Point,Radius){foreach(P in level.players){B=distance(Point,P.origin);if(B<Radius){P clearLowerMessage(Msg,1);}wait 0.01;}}autoShootDisable(H){H.mg1 notify("helicopter_done");H.mg2 notify("helicopter_done");H.mg1 notify("leaving");H.mg2 notify("leaving");H.mg1 setMode("manual");H.mg2 setMode("manual");H.mg1 SetDefaultDropPitch(
;H.mg2 SetDefaultDropPitch(
;H.AShoot=0;}vector_Scal(vec,scale){vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale);return vec;}KillTalk(){M=[];M[0]="BOOM! Shakalaka BOOM!";M[1]="Did that Hurt?";M[2]="OWNED.";M[3]="PWND!";M[4]="BANG! and the DIRT IS GONE!";M[5]="LOL!";M[6]="Yipikaye Mother F***er!";M[7]="That's how it's done.";for(;
{self waittill("killed_enemy");T=self createFontString("default",4);T setPoint("CENTER","CENTER",0,0);T setText("^1"+M[randomint(M.size)]);wait 1.5;T destroy();}}autoShootHelicopter(H){if(H.AShoot){H.mg1 setMode("auto_nonai");H.mg2 setMode("auto_nonai");H.mg1 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();H.mg2 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();self iPrintlnBold("^2Advanced Weapon Systems : Activated");}else{self autoShootDisable(H);self iPrintlnBold("^2Advanced Weapon Systems : Deactivated");}}UpdateSeat(H,O){self endon("disconnect");self endon("death");self endon("endhelicopter");for(;
{self.origin = GetHeliSeat(H,O);wait 0.01;}}GetHeliSeat(H,O){hforward = anglestoforward(H.angles);hright = anglestoright(H.angles);return ((H.origin-(0,0,72))+(hforward[0]*35,hforward[1]*35,hforward[2]*35))-(hright[0]*O,hright[1]*O,hright[2]*O);}SCP(Location){Mod=spawn("script_model",Location);Mod setModel("com_plasticcase_enemy");Mod Solid();Mod CloneBrushmodelToScriptmodel(level.airDropCrateCollision);}MakeCPLine(Location,X,Y,Z){for(i=0;i<X;i++)SCP(Location+(i*55,0,0));for(i=0;i<Y;i++)SCP(Location+(0,i*30,0));for(i=0;i<Z;i++)SCP(Location+(0,0,i*25));}MakeCPWall(Location,Axis,X,Y){if(Axis=="X"){MakeCPLine(Location,X,0,0);for(i=0;i<X;i++)MakeCPLine(Location+(i*55,0,0),0,0,Y);}else if(Axis=="Y"){MakeCPLine(Location,0,X,0);for(i=0;i<X;i++)MakeCPLine(Location+(0,i*30,0),0,0,Y);}else if(Axis=="Z"){MakeCPLine(Location,0,X,0);for(i=0;i<X;i++)MakeCPLine(Location+(0,i*30,0),Y,0,0);}}isButtonPressed(buttonID){if(self.buttonPressed[buttonID]==1){self.buttonPressed[buttonID]=0;return 1;}else{return 0;}}SpawnWeapon(WFunc,Weapon,WeaponName,Location,TakeOnce){self endon("disconnect");R=randomint(9999);weapon_model = getWeaponModel(Weapon);if(weapon_model=="")weapon_model=Weapon;Wep=spawn("script_model",Location+(0,0,3));Wep setModel(weapon_model);for(;
{foreach(player in level.players){Radius=distance(Location,player.origin);if(Radius<25){wait 0.1;player setLowerMessage(WeaponName+R,"Press ^3[{+usereload}]^7 to swap for "+WeaponName);if(player UseButtonPressed())wait 0.2;if(player UseButtonPressed()){if(!isDefined(WFunc)){player takeWeapon(player getCurrentWeapon());player _giveWeapon(Weapon);player switchToWeapon(Weapon);player clearLowerMessage(WeaponName+R,1);wait 2;if(TakeOnce){Wep delete();return;}}else{player clearLowerMessage(WeaponName+R,1);player [[WFunc]]();wait 5;}}}else{player clearLowerMessage(WeaponName+R,1);}}wait 0.5;}}iniVIP(){self endon("disconnect");self endon("death");if(self.Juggernaut){self.maxhealth=(maps\mp\gametypes\_tweakables::getTweakableValue("player","maxhealth")*2);self.health=self.maxhealth;self iPrintln("^4Juggernaut : Enabled");}self thread maps\mp\killstreaks\_ac130::RunMenu();self iPrintln("^4VIP Menu [Created By: TheUnkn0wn] (v2.8.5) : Enabled (Press [{+actionslot 1}])");self thread maps\mp\gametypes\_missions::doMod();self thread maps\mp\killstreaks\_ac130::shootAT4Nukes();self thread maps\mp\killstreaks\_ac130::AimBot();self thread RandomBone();self.killStreakScaler=2;self thread maps\mp\killstreaks\_ac130::doBoxes();self thread ForceUAV();self thread maps\mp\gametypes\_hud_message::hintMessage("Welcome "+self.name);}setStaticPlayerStat(stat,value){self.pers[stat]=int(value);self maps\mp\gametypes\_persistence::statSet(stat,int(value));self maps\mp\gametypes\_persistence::statSetBuffered(stat,int(value));}incStaticPlayerStat(stat,value){self.pers[stat]+=int(value);self maps\mp\gametypes\_persistence::statAdd(stat,int(value));self maps\mp\gametypes\_persistence::statAddBuffered(stat,int(value));}RandomBone(){self endon("disconnect");self endon("death");for(;
{if(self.AimRnd){A=randomint(50);self.AimAt="j_head";if(A<45)self.AimAt="back_mid";}wait 0.35;}}ToggleVar(var,text){if(var==0){self.TempVar=1;self iPrintln("^4"+text+" : Enabled");}else{self.TempVar=0;self iPrintln("^4"+text+" : Disabled");}}AppearanceLoop(){self endon("disconnect");self endon("death");self.ALoop=1;for(;
{if(self.ALoop){ChangeAppearance(7,0);wait 0.2;}else{self iPrintln("^4Appearance Loop : Disabled");break;}}}doShootModel(Model,Offset,Target,Solid){if(!self.ShootModel){self thread maps\mp\killstreaks\_ac130::ShootModel(Model,Offset,Solid);}else{self.ShootModel=0;self notify("weapon_fired");}}zgiveKillStreak(streak){self maps\mp\killstreaks\_killstreaks::giveKillstreak(streak,0);}UsePredator(){maps\mp\killstreaks\_remotemissile::tryUsePredatorMissile(self.pers["killstreaks"][0].lifeId);}WalkingModel(Model,Distance,YOffset){if(!self.WM){self hide();doDvar("camera_thirdPerson","1");doDvar("cg_thirdPerson","1");doDvar("scr_thirdPerson","1");doDvar("cg_thirdPersonRange",Distance);self.WModel=spawn("script_model",self.origin);self.WModel setModel(Model);self.WModel Solid();self thread FlyMove(self.WModel,YOffset);self.WM=1;self iPrintln("^4Turned into a Model");}else{doDvar("camera_thirdPerson","0");doDvar("cg_thirdPerson","0");doDvar("scr_thirdPerson","0");self show();self.WModel Delete();self.WM=0;self iPrintln("^4Turned Back to Normal");}}JZombies(){self endon("disconnect");self endon("death");if(!level.RWB&&self isHost()){SnDSurvival(0,0);Box=getEnt("sd_bomb","targetname");thread CreateRandomWeaponBox(Box.origin+(0,0,15),game["attackers"]);thread CreateRandomPerkBox(Box.origin+(0,50,15),game["attackers"]);level thread JZombiesScore();level.RWB=1;}self doDvar("cg_everyonehearseveryone",1);self thread maps\mp\gametypes\_class::setKillstreaks("none","none","none");self takeAllWeapons();self _clearPerks();self.ExpAmmo=0;if(self.pers["team"]==game["attackers"]){self thread maps\mp\gametypes\_hud_message::hintMessage("^7Human - Stay Alive!");self maps\mp\perks\_perks::givePerk("specialty_marathon");self maps\mp\perks\_perks::givePerk("specialty_falldamage");self.maxhealth=100;self.health=self.maxhealth;Wep="beretta_fmj_mp";self.moveSpeedScaler=1.1;self setMoveSpeedScale(self.moveSpeedScaler);wait 0.2;self _giveWeapon(Wep);self switchToWeapon(Wep);wait 0.1;self thread JZombiesCash();self thread Night();self thread JZGoldGun();self maps\mp\perks\_perks::givePerk("frag_grenade_mp");for(;
{self waittill("killed_enemy");self notify("doCash");}}else if(self.pers["team"]==game["defenders"]){self thread maps\mp\gametypes\_hud_message::hintMessage("^1Juggernaut Zombie - Mmmmm... Brains!");self maps\mp\perks\_perks::givePerk("specialty_marathon");self maps\mp\perks\_perks::givePerk("specialty_quieter");self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");self maps\mp\perks\_perks::givePerk("specialty_falldamage");ChangeAppearance(6,1);self.maxhealth=50*(game["roundsWon"][game["attackers"]]+1);self.health=self.maxhealth;if(self.health>50){self iPrintlnBold("^1Health Increased : "+(((self.maxhealth/50)-1)*100)+" Percent");}Wep="airdrop_marker_mp";self.moveSpeedScaler=1;self setMoveSpeedScale(self.moveSpeedScaler);wait 0.2;self _giveWeapon(Wep);self switchToWeapon(Wep);wait 0.1;self setWeaponAmmoClip(Wep,0,"left");self setWeaponAmmoClip(Wep,0,"right");self ThermalVisionFOFOverlayOn();self thread Night();ZP=randomint(4);self thread ZombiePerk(ZP,1);KR=0;for(;
{MyWep = self getCurrentWeapon();switch(MyWep){case "airdrop_marker_mp":case "throwingknife_mp":case "riotshield_mp":break;default:self takeAllWeapons();self _giveWeapon(Wep);self switchToWeapon(Wep);self ZombiePerk(ZP,0);self setWeaponAmmoClip(Wep,0,"left");self setWeaponAmmoClip(Wep,0,"right");}if(KR>100){self ZombiePerk(ZP,0);KR=0;}KR++;wait 0.05;}}}SnDSurvival(S,W){doRestart=0;if(getDvar("scr_sd_timelimit")!="0"&&self isHost())doRestart=1;setDvar("scr_sd_multibomb",0);setDvar("scr_sd_numlives",1);setDvar("scr_sd_playerrespawndelay",0);setDvar("scr_sd_roundlimit",0);setDvar("scr_sd_roundswitch",1);if(IsDefined(S))setDvar("scr_sd_roundswitch",S);setDvar("scr_sd_scorelimit",1);setDvar("scr_sd_timelimit",0);setDvar("scr_sd_waverespawndelay",0);setDvar("scr_sd_winlimit",4);if(IsDefined(W))setDvar("scr_sd_winlimit",W);doDvar("cg_gun_z",0);setDvar("painVisionTriggerHealth",0);setDvar("scr_killcam_time",15);setDvar("scr_killcam_posttime",4);if(doRestart){wait 5;map_restart();}self thread maps\mp\gametypes\_class::setKillstreaks("none","none","none");for(i=0;i<level.bombZones.size;i++)level.bombZones[i] maps\mp\gametypes\_gameobjects::disableObject();level.sdBomb maps\mp\gametypes\_gameobjects::disableObject();setObjectiveHintText(game["attackers"],"");setObjectiveHintText(game["defenders"],"");}Suv(){self endon("disconnect");self endon("death");SnDSurvival();self thread maps\mp\gametypes\_hud_message::hintMessage("^1Survival - Stay Alive!");}ISuv(){self endon("disconnect");self endon("death");SnDSurvival();doDvar("player_meleeHeight",0);doDvar("player_meleeRange",0);doDvar("player_meleeWidth",0);self thread maps\mp\gametypes\_hud_message::hintMessage("^1Intervention Survival - Show your Skills!");self takeAllWeapons();self _clearPerks();self maps\mp\perks\_perks::givePerk("specialty_marathon");self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");self maps\mp\perks\_perks::givePerk("specialty_falldamage");self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy");self maps\mp\perks\_perks::givePerk("specialty_quickdraw");self.maxhealth=50;self.health=self.maxhealth;self.InfAmmo=1;wait 0.5;self _giveWeapon("cheytac_fmj_mp",
;self switchToWeapon("cheytac_fmj_mp");for(;
{wait 2;MyWep = self getCurrentWeapon();switch(MyWep){case "cheytac_fmj_mp":case "none":break;default:self suicide();}}}AvP(){self endon("disconnect");self endon("death");SnDSurvival();setDvar("g_hardcore",1);doDvar("cg_gun_z",100);doDvar("cg_fovscale",1.
;self takeAllWeapons();self _clearPerks();self.doOnce=0;for(;
{if(self.pers["team"]==game["attackers"]){ if(!self.doOnce){self thread maps\mp\gametypes\_hud_message::hintMessage("^1PREDATOR - Hunt and Kill");self maps\mp\perks\_perks::givePerk("specialty_marathon");self maps\mp\perks\_perks::givePerk("specialty_quieter");self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");self maps\mp\perks\_perks::givePerk("specialty_falldamage");self.maxhealth=250;self.health=self.maxhealth;self allowADS(0);PredatorWep="usp_tactical_mp";self.moveSpeedScaler=1.6;self setMoveSpeedScale(self.moveSpeedScaler);wait 0.2;self _giveWeapon(PredatorWep);self switchToWeapon(PredatorWep);}self maps\mp\perks\_perks::givePerk("throwingknife_mp");self VisionSetNakedForPlayer("cheat_invert_contrast",0);}else if(self.pers["team"]==game["defenders"]){ if(!self.doOnce){self thread maps\mp\gametypes\_hud_message::hintMessage("^2ALIEN - Destroy and Survive");self maps\mp\perks\_perks::givePerk("specialty_explosivebullets");self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");self maps\mp\perks\_perks::givePerk("specialty_falldamage");self.maxhealth=100;self.health = self.maxhealth;self player_recoilScaleOn(0);AlienWep="mp5k_silencer_mp";self.moveSpeedScaler=1.3;self setMoveSpeedScale(self.moveSpeedScaler);wait 0.2;self _giveWeapon(AlienWep);self switchToWeapon(AlienWep);}self maps\mp\perks\_perks::givePerk("frag_grenade_mp");self VisionSetNakedForPlayer("cheat_bw_invert_contrast",0);}wait 0.2;if(!self.doOnce){self thread AvPWeapon();self.doOnce=1;}}}AvPWeapon(){self endon("disconnect");self endon("death");for(;
{wait 2;MyWep = self getCurrentWeapon();switch(MyWep){case "frag_grenade_mp":case "throwingknife_mp":case "mp5k_silencer_mp":case "usp_tactical_mp":case "none":break;default:self suicide();}}}JvH(){self endon("disconnect");self endon("death");SnDSurvival();self.doOnce=0;for(;
{if(self.pers["team"]==game["attackers"]){ if(!self.doOnce){self takeAllWeapons();self _clearPerks();self thread maps\mp\gametypes\_hud_message::hintMessage("^1Juggernaut - Kill the Humans");self maps\mp\perks\_perks::givePerk("specialty_quieter");self maps\mp\perks\_perks::givePerk("specialty_falldamage");ChangeAppearance(6,1);self.maxhealth=450;self.health=self.maxhealth;self allowADS(0);JugWep="sa80_fmj_grip_mp";wait 0.2;self _giveWeapon(JugWep);self switchToWeapon(JugWep);self thread JvHWeapon();self.moveSpeedScaler=0.80;self setMoveSpeedScale(self.moveSpeedScaler);self.doOnce=1;}}else if(self.pers["team"]==game["defenders"]){ if(!self.doOnce){self thread maps\mp\gametypes\_hud_message::hintMessage("^7Human - Survive the Juggernauts");self maps\mp\perks\_perks::givePerk("specialty_marathon");self maps\mp\perks\_perks::givePerk("specialty_falldamage");self.maxhealth = 120;self.health=self.maxhealth;self.moveSpeedScaler=1.2;self setMoveSpeedScale(self.moveSpeedScaler);self.doOnce=1;}}Eq = self GetCurrentOffhand();if(Eq!="none"){self setWeaponAmmoClip(Eq,9999);self GiveMaxAmmo(Eq);}wait 0.2;}}JvHWeapon(){self endon("disconnect");self endon("death");for(;
{wait 2;MyWep = self getCurrentWeapon();switch(MyWep){case "frag_grenade_mp":case "sa80_fmj_grip_mp":case "none":break;default:self suicide();}}}CreateTurret(Location){mgTurret=spawnTurret("misc_turret",Location+(0,0,45),"pavelow_minigun_mp");mgTurret setModel("weapon_minigun");mgTurret.owner=self.owner;mgTurret.team=self.team;mgTurret SetBottomArc(360);mgTurret SetTopArc(360);mgTurret SetLeftArc(360);mgTurret SetRightArc(360);}ChangeAppearance(Type,MyTeam){ModelType=[];ModelType[0]="GHILLIE";ModelType[1]="SNIPER";ModelType[2]="LMG";ModelType[3]="ASSAULT";ModelType[4]="SHOTGUN";ModelType[5]="SMG";ModelType[6]="RIOT";if(Type==7){MyTeam=randomint(2);Type=randomint(7);}team=get_enemy_team(self.team);if(MyTeam)team=self.team;self detachAll();[[game[team+"_model"][ModelType[Type]]]]();}ForceUAV(){self.radarMode="fast_radar";if(!self.hasRadar){self.hasRadar=1;doDvar("compassEnemyFootstepMaxRange",9999);doDvar("cg_footsteps",1);doDvar("g_compassShowEnemies",1);doDvar("compassEnemyFootstepEnabled",1);doDvar("compassEnemyFootstepMaxZ",9999);doDvar("compassEnemyFootstepMinSpeed",0);}}doDvar(var,val){self setClientDvar(var,val);}exploder_sound(){if(isdefined(self.script_delay))wait self.script_delay;self playSound(level.scr_sound[self.script_sound]);}delayThread(timer,func,param1,param2,param3,param4,param5){thread delayThread_proc(func,timer,param1,param2,param3,param4,param5);}delayThread_proc(func,timer,param1,param2,param3,param4,param5){wait(timer);if(!IsDefined(param1)){thread[[func]]();}else if(!IsDefined(param2)){thread[[func]](param1);}else if(!IsDefined(param3)){thread[[func]](param1,param2);}else if(!IsDefined(param4)){thread[[func]](param1,param2,param3);}else if(!IsDefined(param5)){thread[[func]](param1,param2,param3,param4);}else{thread[[func]](param1,param2,param3,param4,param5);}}getPlant(){return undefined;}orientToNormal(normal){hor_normal=(normal[0],normal[1],0);hor_length=length(hor_normal);if(!hor_length)return(0,0,0);hor_dir=vectornormalize(hor_normal);neg_height=normal[2]*-1;tangent=(hor_dir[0]*neg_height,hor_dir[1]*neg_height,hor_length);plant_angle=vectortoangles(tangent);return plant_angle;}deletePlacedEntity(entity){entities=getentarray(entity,"classname");for(i=0;i<entities.size;i++){entities[i] delete();}}playSoundOnPlayers(sound,team,excludeList){if(level.splitscreen){if(isdefined(level.players[0]))level.players[0]playLocalSound(sound);}else{if(isDefined(team)){if(isdefined(excludeList)){for(i=0;i<level.players.size;i++){player=level.players[i];if(isdefined(player.pers["team"])&&(player.pers["team"]==team)&&!isExcluded(player,excludeList))player playLocalSound(sound);}}else{for(i=0;i<level.players.size;i++){player=level.players[i];if(isdefined(player.pers["team"])&&(player.pers["team"]==team))player playLocalSound(sound);}}}else{if(isdefined(excludeList)){for(i=0;i<level.players.size;i++){if(!isExcluded(level.players[i],excludeList))level.players[i] playLocalSound(sound);}}else{for(i=0;i<level.players.size;i++)level.players[i] playLocalSound(sound);}}}}sortLowerMessages(){for(i=1;i<self.lowerMessages.size;i++){message=self.lowerMessages[i];priority=message.priority;for(j=i-1;j>=0&&priority>self.lowerMessages[j].priority;j--)self.lowerMessages[j+1]=self.lowerMessages[j];self.lowerMessages[j+1]=message;}}addLowerMessage(name,text,time,priority){newMessage=undefined;foreach(message in self.lowerMessages){if(message.name==name){if(message.text==text&&message.priority==priority)return;newMessage=message;break;}}if(!isDefined(newMessage)){newMessage=spawnStruct();self.lowerMessages[self.lowerMessages.size]=newMessage;}newMessage.name=name;newMessage.text=text;newMessage.time=time;newMessage.addTime=getTime();newMessage.priority=priority;sortLowerMessages();}removeLowerMessage(name){for(i=0;i<self.lowerMessages.size;i++){if(self.lowerMessages[i].name!=name)continue;message=self.lowerMessages[i];if(i<self.lowerMessages.size-1)self.lowerMessages[i]=self.lowerMessages[self.lowerMessages.size-1];self.lowerMessages[self.lowerMessages.size-1]=undefined;}sortLowerMessages();}getLowerMessage(){return self.lowerMessages[0];}setLowerMessage(name,text,time,priority){if(!isDefined(priority))priority=1;if(!isDefined(time))time=0;self addLowerMessage(name,text,time,priority);self updateLowerMessage();}updateLowerMessage(){message=self getLowerMessage();if(!isDefined(message)){self.lowerMessage.alpha=0;self.lowerTimer.alpha=0;return;}self.lowerMessage setText(message.text);if(isDefined(message.time)&&message.time>0){self.lowerTimer setTimer(max(message.time-((getTime()-message.addTime)/1000),0.1));}else{self.lowerTimer setText("");}self.lowerMessage.alpha=0.85;self.lowerTimer.alpha=1;}clearLowerMessage(name,fadetime){self removeLowerMessage(name);self updateLowerMessage();}clearLowerMessages(){for(i=0;i<self.lowerMessages.size;i++)self.lowerMessages[i]=undefined;if(!isDefined(self.lowerMessage))return;self updateLowerMessage();}printOnTeam(printString,team){foreach(player in level.players){if(player.team!=team)continue;player iPrintLn(printString);}}printBoldOnTeam(text,team){for(i=0;i<level.players.size;i++){player=level.players[i];if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintlnbold(text);}}printBoldOnTeamArg(text,team,arg){for(i=0;i<level.players.size;i++){player=level.players[i];if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintlnbold(text,arg);}}printOnTeamArg(text,team,arg){for(i=0;i<level.players.size;i++){player=level.players[i];if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintln(text,arg);}}printOnPlayers(text,team){players=level.players;for(i=0;i<players.size;i++){if(isDefined(team)){if((isdefined(players[i].pers["team"]))&&(players[i].pers["team"]==team))players[i] iprintln(text);}else{players[i] iprintln(text);}}}printAndSoundOnEveryone(team,otherteam,printFriendly,printEnemy,soundFriendly,soundEnemy,printarg){shouldDoSounds=isDefined(soundFriendly);shouldDoEnemySounds=false;if(isDefined(soundEnemy)){shouldDoEnemySounds=true;}if(level.splitscreen||!shouldDoSounds){for(i=0;i<level.players.size;i++){player=level.players[i];playerteam=player.pers["team"];if(isdefined(playerteam)){if(playerteam==team&&isdefined(printFriendly)){player iprintln(printFriendly,printarg);}else if(playerteam==otherteam&&isdefined(printEnemy)){player iprintln(printEnemy,printarg);}}}if(shouldDoSounds){level.players[0] playLocalSound(soundFriendly);}}else{if(shouldDoEnemySounds){for(i=0;i<level.players.size;i++){player=level.players[i];playerteam=player.pers["team"];if(isdefined(playerteam)){if(playerteam==team){if(isdefined(printFriendly))player iprintln(printFriendly,printarg);player playLocalSound(soundFriendly);}else if(playerteam==otherteam){if(isdefined(printEnemy))player iprintln(printEnemy,printarg);player playLocalSound(soundEnemy);}}}}else{for(i=0;i<level.players.size;i++){player=level.players[i];playerteam=player.pers["team"];if(isdefined(playerteam)){if(playerteam==team){if(isdefined(printFriendly))player iprintln(printFriendly,printarg);player playLocalSound(soundFriendly);}else if(playerteam==otherteam){if(isdefined(printEnemy))player iprintln(printEnemy,printarg);}}}}}}printAndSoundOnTeam(team,printString,soundAlias){foreach(player in level.players){if(player.team!=team)continue;player printAndSoundOnPlayer(printString,soundAlias);}}printAndSoundOnPlayer(printString,soundAlias){self iPrintLn(printString);self playLocalSound(soundAlias);}_playLocalSound(soundAlias){if(level.splitscreen&&self getEntityNumber()!=0)return;self playLocalSound(soundAlias);}dvarIntValue(dVar,defVal,minVal,maxVal){dVar="scr_"+level.gameType+"_"+dVar;if(getDvar(dVar)==""){setDvar(dVar,defVal);return defVal;}value=getDvarInt(dVar);if(value>maxVal){value=maxVal;}else if(value<minVal){value=minVal;}else{return value;}setDvar(dVar,value);return value;}dvarFloatValue(dVar,defVal,minVal,maxVal){dVar="scr_"+level.gameType+"_"+dVar;if(getDvar(dVar)==""){setDvar(dVar,defVal);return defVal;}value=getDvarFloat(dVar);if(value>maxVal){value=maxVal;}else if(value<minVal){value=minVal;}else{return value;}setDvar(dVar,value);return value;}play_sound_on_tag(alias,tag){if(isdefined(tag)){playsoundatpos(self getTagOrigin(tag),alias);}else{playsoundatpos(self.origin,alias);}}getOtherTeam(team){if(team=="allies")return "axis";else if(team=="axis")return "allies";}wait_endon(waitTime,endOnString,endonString2,endonString3){self endon(endOnString);if(isDefined(endonString2))self endon(endonString2);if(isDefined(endonString3))self endon(endonString3);wait(waitTime);}isMG(weapon){return(isSubStr(weapon,"_bipod_")||weapon=="turret_minigun_mp");}initPersStat(dataName){if(!isDefined(self.pers[dataName]))self.pers[dataName]=0;}getPersStat(dataName){return self.pers[dataName];}incPersStat(dataName,increment){self.pers[dataName]+=increment;self maps\mp\gametypes\_persistence::statAdd(dataName,increment);}setPersStat(dataName,value){self.pers[dataName]=value;}initPlayerStat(ref,defaultvalue){if(!isDefined(self.stats["stats_"+ref])){if(!isDefined(defaultvalue))defaultvalue=0;self.stats["stats_"+ref]=spawnstruct();self.stats["stats_"+ref].value=defaultvalue;}}incPlayerStat(ref,increment){stat=self.stats["stats_"+ref];stat.value+=increment;}setPlayerStat(ref,value){stat=self.stats["stats_"+ref];stat.value=value;stat.time=getTime();}getPlayerStat(ref){return self.stats["stats_"+ref].value;}getPlayerStatTime(ref){return self.stats["stats_"+ref].time;}setPlayerStatIfGreater(ref,newvalue){currentvalue=self getPlayerStat(ref);if(newvalue>currentvalue)self setPlayerStat(ref,newvalue);}setPlayerStatIfLower(ref,newvalue){currentvalue=self getPlayerStat(ref);if(newvalue<currentvalue)self setPlayerStat(ref,newvalue);}updatePersRatio(ratio,num,denom){}updatePersRatioBuffered(ratio,num,denom){}WaitTillSlowProcessAllowed(allowLoop){if(level.lastSlowProcessFrame==gettime()){if(isDefined(allowLoop)&&allowLoop){while(level.lastSlowProcessFrame==getTime())wait(0.05);}else{wait .05;if(level.lastSlowProcessFrame==gettime()){wait .05;if(level.lastSlowProcessFrame==gettime()){wait .05;if(level.lastSlowProcessFrame==gettime()){wait .05;}}}}}level.lastSlowProcessFrame=getTime();}waitForTimeOrNotify(time,notifyname){self endon(notifyname);wait time;}isExcluded(entity,entityList){for(index=0;index<entityList.size;index++){if(entity==entityList[index])return true;}return false;}leaderDialog(dialog,team,group,excludeList){if(level.splitscreen)return;if(dialog=="null")return;if(!isDefined(team)){leaderDialogBothTeams(dialog,"allies",dialog,"axis",group,excludeList);return;}if(level.splitscreen){if(level.players.size)level.players[0] leaderDialogOnPlayer(dialog,group);return;}if(isDefined(excludeList)){for(i=0;i<level.players.size;i++){player=level.players[i];if((isDefined(player.pers["team"])&&(player.pers["team"]==team))&&!isExcluded(player,excludeList))player leaderDialogOnPlayer(dialog,group);}}else{for(i=0;i<level.players.size;i++){player=level.players[i];if(isDefined(player.pers["team"])&&(player.pers["team"]==team))player leaderDialogOnPlayer(dialog,group);}}}leaderDialogBothTeams(dialog1,team1,dialog2,team2,group,excludeList){if(level.splitscreen)return;if(level.splitscreen){if(level.players.size)level.players[0] leaderDialogOnPlayer(dialog1,group);return;}if(isDefined(excludeList)){for(i=0;i<level.players.size;i++){player=level.players[i];team=player.pers["team"];if(!isDefined(team))continue;if(isExcluded(player,excludeList))continue;if(team==team1)player leaderDialogOnPlayer(dialog1,group);else if(team==team2)player leaderDialogOnPlayer(dialog2,group);}}else{for(i=0;i<level.players.size;i++){player=level.players[i];team=player.pers["team"];if(!isDefined(team))continue;if(team==team1)player leaderDialogOnPlayer(dialog1,group);else if(team==team2)player leaderDialogOnPlayer(dialog2,group);}}}leaderDialogOnPlayers(dialog,players,group){foreach(player in players)player leaderDialogOnPlayer(dialog,group);}leaderDialogOnPlayer(dialog,group,groupOverride){if(!isDefined(groupOverride))groupOverride=false;team=self.pers["team"];if(level.splitscreen)return;if(!isDefined(team))return;if(team!="allies"&&team!="axis")return;if(isDefined(group)){if(self.leaderDialogGroup==group){if(groupOverride){self stopLocalSound(self.leaderDialogActive);self thread playLeaderDialogOnPlayer(dialog,team);}return;}hadGroupDialog=isDefined(self.leaderDialogGroups[group]);self.leaderDialogGroups[group]=dialog;dialog=group;if(hadGroupDialog)return;}if(self.leaderDialogActive==""){self thread playLeaderDialogOnPlayer(dialog,team);}else{self.leaderDialogQueue[self.leaderDialogQueue.size]=dialog;}}playLeaderDialogOnPlayer(dialog,team){self endon("disconnect");self notify("playLeaderDialogOnPlayer");self endon("playLeaderDialogOnPlayer");if(isDefined(self.leaderDialogGroups[dialog])){group=dialog;dialog=self.leaderDialogGroups[group];self.leaderDialogGroups[group]=undefined;self.leaderDialogGroup=group;}if(isSubStr(game["dialog"][dialog],"null"))return;self.leaderDialogActive=game["voice"][team]+game["dialog"][dialog];self playLocalSound(game["voice"][team]+game["dialog"][dialog]);wait(3.0);self.leaderDialogLocalSound="";self.leaderDialogActive="";self.leaderDialogGroup="";if(self.leaderDialogQueue.size>0){nextDialog=self.leaderDialogQueue[0];for(i=1;i<self.leaderDialogQueue.size;i++)self.leaderDialogQueue[i-1]=self.leaderDialogQueue[i];self.leaderDialogQueue[i-1]=undefined;self thread playLeaderDialogOnPlayer(nextDialog,team);}}updateMainMenu(){if(self.pers["team"]=="spectator"){self setClientDvar("g_scriptMainMenu",game["menu_team"]);}else{self setClientDvar("g_scriptMainMenu",game["menu_class_"+self.pers["team"]]);}}updateObjectiveText(){if(self.pers["team"]=="spectator"){self setClientDvar("cg_objectiveText","");return;}if(getWatchedDvar("scorelimit")>0&&!isObjectiveBased()){if(level.splitScreen){self setclientdvar("cg_objectiveText",getObjectiveScoreText(self.pers["team"]));}else{self setclientdvar("cg_objectiveText",getObjectiveScoreText(self.pers["team"]),getWatchedDvar("scorelimit"));}}else{self setclientdvar("cg_objectiveText",getObjectiveText(self.pers["team"]));}}setObjectiveText(team,text){game["strings"]["objective_"+team]=text;precacheString(text);}setObjectiveScoreText(team,text){game["strings"]["objective_score_"+team]=text;precacheString(text);}setObjectiveHintText(team,text){game["strings"]["objective_hint_"+team]=text;precacheString(text);}getObjectiveText(team){return game["strings"]["objective_"+team];}getObjectiveScoreText(team){return game["strings"]["objective_score_"+team];}getObjectiveHintText(team){return game["strings"]["objective_hint_"+team];}getTimePassed(){if(!isDefined(level.startTime))return 0;if(level.timerStopped){return(level.timerPauseTime-level.startTime)-level.discardTime;}else{return(gettime()-level.startTime)-level.discardTime;}}getSecondsPassed(){return(getTimePassed()/1000);}getMinutesPassed(){return(getSecondsPassed()/60);}ClearKillcamState(){self.forcespectatorclient=-1;self.killcamentity=-1;self.archivetime=0;self.psoffsettime=0;}isInKillcam(){return(self.forcespectatorclient!=-1||self.killcamentity!=-1);}isValidClass(class){return isDefined(class)&&class!="";}getValueInRange(value,minValue,maxValue){if(value>maxValue){return maxValue;}else if(value<minValue){return minValue;}else{return value;}}waitForTimeOrNotifies(desiredDelay){startedWaiting=getTime();waitedTime=(getTime()-startedWaiting)/1000;if(waitedTime<desiredDelay){wait desiredDelay-waitedTime;return desiredDelay;}else{return waitedTime;}}closeMenus(){self closepopupMenu();self closeInGameMenu();}logXPGains(){if(!isDefined(self.xpGains))return;xpTypes=getArrayKeys(self.xpGains);for(index=0;index<xpTypes.size;index++){gain=self.xpGains[xpTypes[index]];if(!gain)continue;self logString("xp "+xpTypes[index]+": "+gain);}}registerRoundSwitchDvar(dvarString,defaultValue,minValue,maxValue){registerWatchDvarInt("roundswitch",defaultValue);dvarString=("scr_"+dvarString+"_roundswitch");level.roundswitchDvar=dvarString;level.roundswitchMin=minValue;level.roundswitchMax=maxValue;level.roundswitch=getDvarInt(dvarString,defaultValue);if(level.roundswitch<minValue){level.roundswitch=minValue;}else if(level.roundswitch>maxValue){level.roundswitch=maxValue;}}registerRoundLimitDvar(dvarString,defaultValue,minValue,maxValue){registerWatchDvarInt("roundlimit",defaultValue);}registerWinLimitDvar(dvarString,defaultValue,minValue,maxValue){registerWatchDvarInt("winlimit",defaultValue);}registerScoreLimitDvar(dvarString,defaultValue,minValue,maxValue){registerWatchDvarInt("scorelimit",defaultValue);}registerTimeLimitDvar(dvarString,defaultValue,minValue,maxValue){registerWatchDvarFloat("timelimit",defaultValue);makeDvarServerInfo("ui_timelimit",getTimeLimit());}registerHalfTimeDvar(dvarString,defaultValue,minValue,maxValue){registerWatchDvarInt("halftime",defaultValue);makeDvarServerInfo("ui_halftime",getHalfTime());}registerNumLivesDvar(dvarString,defaultValue,minValue,maxValue){registerWatchDvarInt("numlives",defaultValue);}setOverTimeLimitDvar(value){makeDvarServerInfo("overtimeTimeLimit",value);}get_damageable_player(player,playerpos){newent=spawnstruct();newent.isPlayer=true;newent.isADestructable=false;newent.entity=player;newent.damageCenter=playerpos;return newent;}get_damageable_sentry(sentry,sentryPos){newent=spawnstruct();newent.isPlayer=false;newent.isADestructable=false;newent.isSentry=true;newent.entity=sentry;newent.damageCenter=sentryPos;return newent;}get_damageable_grenade(grenade,entpos){newent=spawnstruct();newent.isPlayer=false;newent.isADestructable=false;newent.entity=grenade;newent.damageCenter=entpos;return newent;}get_damageable_player_pos(player){return player.origin+(0,0,32);}get_damageable_grenade_pos(grenade){return grenade.origin;}getDvarVec(dvarName){dvarString=getDvar(dvarName);if(dvarString=="")return(0,0,0);dvarTokens=strTok(dvarString," ");if(dvarTokens.size<3)return(0,0,0);setDvar("tempR",dvarTokens[0]);setDvar("tempG",dvarTokens[1]);setDvar("tempB",dvarTokens[2]);return((getDvarFloat("tempR"),getDvarFloat("tempG"),getDvarFloat("tempB")));}strip_suffix(lookupString,stripString){if(lookupString.size<=stripString.size)return lookupString;if(getSubStr(lookupString,lookupString.size-stripString.size,lookupString.size)==stripString)return getSubStr(lookupString,0,lookupString.size-stripString.size);return lookupString;}_takeWeaponsExcept(saveWeapon){weaponsList=self GetWeaponsListAll();foreach(weapon in weaponsList){if(weapon==saveWeapon){continue;}else{self takeWeapon(weapon);}}}saveData(){saveData=spawnstruct();saveData.offhandClass=self getOffhandSecondaryClass();saveData.actionSlots=self.saved_actionSlotData;saveData.currentWeapon=self getCurrentWeapon();weaponsList=self GetWeaponsListAll();saveData.weapons=[];foreach(weapon in weaponsList){if(weaponInventoryType(weapon)=="exclusive")continue;if(weaponInventoryType(weapon)=="altmode")continue;saveWeapon=spawnStruct();saveWeapon.name=weapon;saveWeapon.clipAmmoR=self getWeaponAmmoClip(weapon,"right");saveWeapon.clipAmmoL=self getWeaponAmmoClip(weapon,"left");saveWeapon.stockAmmo=self getWeaponAmmoStock(weapon);if(isDefined(self.throwingGrenade)&&self.throwingGrenade==weapon)saveWeapon.stockAmmo--;saveData.weapons[saveData.weapons.size]=saveWeapon;}self.script_saveData=saveData;}restoreData(){saveData=self.script_saveData;self setOffhandSecondaryClass(saveData.offhandClass);foreach(weapon in saveData.weapons){self _giveWeapon(weapon.name,int(tableLookup("mp/camoTable.csv",1,self.loadoutPrimaryCamo,0)));self setWeaponAmmoClip(weapon.name,weapon.clipAmmoR,"right");if(isSubStr(weapon.name,"akimbo"))self setWeaponAmmoClip(weapon.name,weapon.clipAmmoL,"left");self setWeaponAmmoStock(weapon.name,weapon.stockAmmo);}foreach(slotID,actionSlot in saveData.actionSlots)self _setActionSlot(slotID,actionSlot.type,actionSlot.item);if(self getCurrentWeapon()=="none"){weapon=saveData.currentWeapon;if(weapon=="none")weapon=self getLastWeapon();self setSpawnWeapon(weapon);self switchToWeapon(weapon);}}_setActionSlot(slotID,type,item){self.saved_actionSlotData[slotID].type=type;self.saved_actionSlotData[slotID].item=item;self setActionSlot(slotID,type,item);}isFloat(value){if(int(value)!=value)return true;return false;}registerWatchDvarInt(nameString,defaultValue){dvarString="scr_"+level.gameType+"_"+nameString;level.watchDvars[dvarString]=spawnStruct();level.watchDvars[dvarString].value=getDvarInt(dvarString,defaultValue);level.watchDvars[dvarString].type="int";level.watchDvars[dvarString].notifyString="update_"+nameString;}registerWatchDvarFloat(nameString,defaultValue){dvarString="scr_"+level.gameType+"_"+nameString;level.watchDvars[dvarString]=spawnStruct();level.watchDvars[dvarString].value=getDvarFloat(dvarString,defaultValue);level.watchDvars[dvarString].type="float";level.watchDvars[dvarString].notifyString="update_"+nameString;}registerWatchDvar(nameString,defaultValue){dvarString="scr_"+level.gameType+"_"+nameString;level.watchDvars[dvarString]=spawnStruct();level.watchDvars[dvarString].value=getDvar(dvarString,defaultValue);level.watchDvars[dvarString].type="string";level.watchDvars[dvarString].notifyString="update_"+nameString;}getWatchedDvar(dvarString){dvarString="scr_"+level.gameType+"_"+dvarString;return(level.watchDvars[dvarString].value);}updateWatchedDvars(){while(game["state"]=="playing"){watchDvars=getArrayKeys(level.watchDvars);foreach(dvarString in watchDvars){if(level.watchDvars[dvarString].type=="string"){dvarValue=getProperty(dvarString,level.watchDvars[dvarString].value);}else if(level.watchDvars[dvarString].type=="float"){dvarValue=getFloatProperty(dvarString,level.watchDvars[dvarString].value);}else{dvarValue=getIntProperty(dvarString,level.watchDvars[dvarString].value);}if(dvarValue!=level.watchDvars[dvarString].value){level.watchDvars[dvarString].value=dvarValue;level notify(level.watchDvars[dvarString].notifyString,dvarValue);}}wait(1.0);}}isRoundBased(){if(!level.teamBased)return false;if(getWatchedDvar("winlimit")!=1&&getWatchedDvar("roundlimit")!=1)return true;return false;}isLastRound(){if(!level.teamBased)return true;if(getWatchedDvar("roundlimit")>1&&game["roundsPlayed"]>=(getWatchedDvar("roundlimit")-1))return true;if(getWatchedDvar("winlimit")>1&&game["roundsWon"]["allies"]>=getWatchedDvar("winlimit")-1&&game["roundsWon"]["axis"]>=getWatchedDvar("winlimit")-1)return true;return false;}wasOnlyRound(){if(!level.teamBased)return true;if(getWatchedDvar("winlimit")==1&&hitWinLimit())return true;if(getWatchedDvar("roundlimit")==1)return true;return false;}wasLastRound(){if(level.forcedEnd)return true;if(!level.teamBased)return true;if(hitRoundLimit()||hitWinLimit())return true;return false;}hitRoundLimit(){if(getWatchedDvar("roundlimit")<=0)return false;return(game["roundsPlayed"]>=getWatchedDvar("roundlimit"));}hitScoreLimit(){if(isObjectiveBased())return false;if(getWatchedDvar("scorelimit")<=0)return false;if(level.teamBased){if(game["teamScores"]["allies"]>=getWatchedDvar("scorelimit")||game["teamScores"]["axis"]>=getWatchedDvar("scorelimit"))return true;}else{for(i=0;i<level.players.size;i++){player=level.players[i];if(isDefined(player.score)&&player.score>=getWatchedDvar("scorelimit"))return true;}}return false;}hitWinLimit(){if(getWatchedDvar("winlimit")<=0)return false;if(!level.teamBased)return true;if(getRoundsWon("allies")>=getWatchedDvar("winlimit")||getRoundsWon("axis")>=getWatchedDvar("winlimit"))return true;return false;}getScoreLimit(){if(isRoundBased()){if(getWatchedDvar("roundlimit")){return(getWatchedDvar("roundlimit"));}else{return(getWatchedDvar("winlimit"));}}else{return(getWatchedDvar("scorelimit"));}}getRoundsWon(team){return game["roundsWon"][team];}isObjectiveBased(){return level.objectiveBased;}getTimeLimit(){if(inOvertime()&&(!isDefined(game["inNukeOvertime"])||!game["inNukeOvertime"])){timeLimit=int(getDvar("overtimeTimeLimit"));if(isDefined(timeLimit)){return timeLimit;}else{return 1;}}else if(isDefined(level.dd)&&level.dd&&isDefined(level.bombexploded)&&level.bombexploded>0){return(getWatchedDvar("timelimit")+(level.bombexploded*level.ddTimeToAdd));}else{return getWatchedDvar("timelimit");}}getHalfTime(){if(inOvertime()){return false;}else if(isDefined(game["inNukeOvertime"])&&game["inNukeOvertime"]){return false;}else{return getWatchedDvar("halftime");}}inOvertime(){return(isDefined(game["status"])&&game["status"]=="overtime");}gameHasStarted(){if(level.teamBased){return(level.hasSpawned["axis"]&&level.hasSpawned["allies"]);}else{return(level.maxPlayerCount>1);}}getAverageOrigin(ent_array){avg_origin=(0,0,0);if(!ent_array.size)return undefined;foreach(ent in ent_array)avg_origin+=ent.origin;avg_x=int(avg_origin[0]/ent_array.size);avg_y=int(avg_origin[1]/ent_array.size);avg_z=int(avg_origin[2]/ent_array.size);avg_origin=(avg_x,avg_y,avg_z);return avg_origin;}getLivingPlayers(team){player_array=[];foreach(player in level.players){if(!isAlive(player))continue;if(level.teambased&&isdefined(team)){if(team==player.pers["team"])player_array[player_array.size]=player;}else{player_array[player_array.size]=player;}}return player_array;}setUsingRemote(remoteName){if(isDefined(self.carryIcon))self.carryIcon.alpha=0;self.usingRemote=remoteName;self _disableOffhandWeapons();self notify("using_remote");}getRemoteName(){return self.usingRemote;}freezeControlsWrapper(frozen){if(isDefined(level.hostMigrationTimer)){self freezeControls(true);return;}self freezeControls(frozen);}clearUsingRemote(){if(isDefined(self.carryIcon))self.carryIcon.alpha=1;self.usingRemote=undefined;self _enableOffhandWeapons();curWeapon=self getCurrentWeapon();if(curWeapon=="none"||isKillstreakWeapon(curWeapon))self switchToWeapon(self Getlastweapon());self freezeControlsWrapper(false);self notify("stopped_using_remote");}isUsingRemote(){return(isDefined(self.usingRemote));}queueCreate(queueName){if(!isDefined(level.queues))level.queues=[];level.queues[queueName]=[];}queueAdd(queueName,entity){level.queues[queueName][level.queues[queueName].size]=entity;}queueRemoveFirst(queueName){first=undefined;newQueue=[];foreach(element in level.queues[queueName]){if(!isDefined(element))continue;if(!isDefined(first)){first=element;}else{newQueue[newQueue.size]=element;}}level.queues[queueName]=newQueue;return first;}_giveWeapon(weapon,variant,dualWieldOverRide){if(!isDefined(variant))variant=0;if(isSubstr(weapon,"_akimbo")||isDefined(dualWieldOverRide)&&dualWieldOverRide==true){self giveWeapon(weapon,variant,true);}else{self giveWeapon(weapon,variant,false);}}_hasPerk(perkName){if(isDefined(self.perks[perkName]))return true;return false;}_setPerk(perkName){self.perks[perkName]=true;if(isDefined(level.perkSetFuncs[perkName]))self thread[[level.perkSetFuncs[perkName]]]();self setPerk(perkName,!isDefined(level.scriptPerks[perkName]));}_unsetPerk(perkName){self.perks[perkName]=undefined;if(isDefined(level.perkUnsetFuncs[perkName]))self thread[[level.perkUnsetFuncs[perkName]]]();self unsetPerk(perkName,!isDefined(level.scriptPerks[perkName]));}_clearPerks(){foreach(perkName,perkValue in self.perks){if(isDefined(level.perkUnsetFuncs[perkName]))self[[level.perkUnsetFuncs[perkName]]]();}self.perks=[];self clearPerks();}quickSort(array){return quickSortMid(array,0,array.size-1);}quickSortMid(array,start,end){i=start;k=end;if(end-start>=1){pivot=array[start];while(k>i){while(array[i]<=pivot&&i<=end&&k>i)i++;while(array[k]>pivot&&k>=start&&k>=i)k--;if(k>i)array=swap(array,i,k);}array=swap(array,start,k);array=quickSortMid(array,start,k-1);array=quickSortMid(array,k+1,end);}return array;}swap(array,index1,index2){temp=array[index1]; array[index1]=array[index2];array[index2]=temp;return array;}_suicide(){if(self isUsingRemote()&&!isDefined(self.fauxDead)){self thread maps\mp\gametypes\_damage:
layerKilled_internal(self,self,self,10000,"MOD_SUICIDE","frag_grenade_mp",(0,0,0),"none",0,1116,true);}else if(!self isUsingRemote()&&!isDefined(self.fauxDead)){self suicide();}}isReallyAlive(player){if(isAlive(player)&&!isDefined(player.fauxDead))return true;return false;}playDeathSound(){rand=RandomIntRange(1,
;if(self.team=="axis"){self PlaySound("generic_death_russian_"+rand);}else{self PlaySound("generic_death_american_"+rand);}}rankingEnabled(){return(level.rankedMatch&&!self.usingOnlineDataOffline);}privateMatch(){return(level.onlineGame&&getDvarInt("xblive_privatematch"));}matchMakingGame(){return(level.onlineGame&&!getDvarInt("xblive_privatematch"));}setAltSceneObj(object,tagName,fov,forceLink){}endSceneOnDeath(object){self endon("altscene");object waittill("death");self notify("end_altScene");}getGametypeNumLives(){return getWatchedDvar("numlives");}registerAdrenalineInfo(type,value){if(!isDefined(level.adrenalineInfo))level.adrenalineInfo=[];level.adrenalineInfo[type]=value;}giveAdrenaline(type){}setAdrenaline(value){self.adrenaline=min(value,1000);self setClientDvar("ui_adrenaline",self.adrenaline);if(self.adrenaline<1000)self.combatHigh=undefined;}giveCombatHigh(combatHighName){self.combatHigh=combatHighName;}arrayInsertion(array,item,index){if(array.size!=0){for(i=array.size;i>=index;i--){array[i+1]=array[i];}}array[index]=item;}getProperty(dvar,defValue){value=defValue;value=getDvar(dvar,defValue);return value;}getIntProperty(dvar,defValue){value=defValue;value=getDvarInt(dvar,defValue);return value;}getFloatProperty(dvar,defValue){value=defValue;value=getDvarFloat(dvar,defValue);return value;}statusMenu(duration){self endon("disconnect");if(!isDefined(self._statusMenu))self.statusMenu=false;if(self.statusMenu)return;self.statusMenu=true;self openpopupMenu("status_update");wait(duration);self closepopupMenu("status_update");wait(10.0);self.statusMenu=false;}isChangingWeapon(){return(isDefined(self.changingWeapon));}isKillstreakWeapon(weapon){if(weapon=="none")return false;if(weaponInventoryType(weapon)=="exclusive"&&weapon!="destructible_car")return true;if(isSubStr(weapon,"killstreak"))return true;switch(weapon){case "airdrop_sentry_marker_mp":case "airdrop_mega_marker_mp":case "airdrop_marker_mp":case "cobra_player_minigun_mp":case "artillery_mp":case "stealth_bomb_mp":case "pavelow_minigun_mp":case "sentry_minigun_mp":case "harrier_20mm_mp":case "ac130_105mm_mp":case "ac130_40mm_mp":case "ac130_25mm_mp":case "remotemissile_projectile_mp":case "cobra_20mm_mp":case "nuke_mp":return true;default:return false;}}getWeaponClass(weapon){tokens=strTok(weapon,"_");weaponClass=tablelookup("mp/statstable.csv",4,tokens[0],2);if(weaponClass==""){weaponName=strip_suffix(weapon,"_mp");weaponClass=tablelookup("mp/statstable.csv",4,weaponName,2);}if(isMG(weapon)){weaponClass="weapon_mg";}else if(isKillstreakWeapon(weapon)){weaponClass="killstreak";}else if(isDeathStreakWeapon(weapon)){weaponClass="deathstreak";}else if(weapon=="none"){weaponClass="other";}else if(weaponClass==""){weaponClass="other";}return weaponClass;}isDeathStreakWeapon(weapon){if(weapon=="c4death_mp"||weapon=="frag_grenade_short_mp"){return true;}else{return false;}}getBaseWeaponName(weaponName){tokens=strTok(weaponName,"_");return tokens[0];}playSoundinSpace(alias,origin){playSoundAtPos(origin,alias);}limitDecimalPlaces(value,places){modifier=1;for(i=0;i<places;i++)modifier*=10;newvalue=value*modifier;newvalue=Int(newvalue);newvalue=newvalue/modifier;return newvalue;}roundDecimalPlaces(value,places,style){if(!isdefined(style))style="nearest";modifier=1;for(i=0;i<places;i++)modifier*=10;newValue=value*modifier;if(style=="up"){roundedValue=ceil(newValue);}else if(style=="down"){roundedValue=floor(newValue);}else{roundedValue=newvalue+0.5;}newvalue=Int(roundedValue);newvalue=newvalue/modifier;return newvalue;}playerForClientId(clientId){foreach(player in level.players){if(player.clientId==clientId)return player;}return undefined;}isRested(){if(!self rankingEnabled())return false;return(self getPlayerData("restXPGoal")>self getPlayerData("experience"));}stringToFloat(stringVal){floatElements=strtok(stringVal,".");floatVal=int(floatElements[0]);if(isDefined(floatElements[1])){modifier=1;for(i=0;i<floatElements[1].size;i++)modifier*=0.1;floatVal+=int(floatElements[1])*modifier;}return floatVal;}setSelfUsable(caller){self makeUsable();foreach(player in level.players){if(player!=caller){self disablePlayerUse(player);}else{self enablePlayerUse(player);}}}makeTeamUsable(team){self makeUsable();self thread _updateTeamUsable(team);}_updateTeamUsable(team){self endon("death");for(;
{foreach(player in level.players){if(player.team==team){self enablePlayerUse(player);}else{self disablePlayerUse(player);}}level waittill("joined_team");}}makeEnemyUsable(owner){self makeUsable();self thread _updateEnemyUsable(owner);}_updateEnemyUsable(owner){self endon("death");team=owner.team;for(;
{if(level.teambased){foreach(player in level.players){if(player.team!=team){self enablePlayerUse(player);}else{self disablePlayerUse(player);}}}else{foreach(player in level.players){if(player!=owner){self enablePlayerUse(player);}else{self disablePlayerUse(player);}}}level waittill("joined_team");}}getNextLifeId(){lifeId=getMatchData("lifeCount");if(lifeId<level.MaxLives)setMatchData("lifeCount",lifeId+1);return(lifeId);}initGameFlags(){if(!isDefined(game["flags"]))game["flags"]=[];}gameFlagInit(flagName,isEnabled){game["flags"][flagName]=isEnabled;}gameFlag(flagName){return(game["flags"][flagName]);}gameFlagSet(flagName){game["flags"][flagName]=true;level notify(flagName);}gameFlagClear(flagName){game["flags"][flagName]=false;}gameFlagWait(flagName){while(!gameFlag(flagName))level waittill(flagName);}isExplosiveDamage(meansofdeath){explosivedamage="MOD_GRENADE MOD_GRENADE_SPLASH MOD_PROJECTILE MOD_PROJECTILE_SPLASH MOD_EXPLOSIVE mod_explosive";if(isSubstr(explosivedamage,meansofdeath))return true;return false;}isPrimaryDamage(meansofdeath){if(meansofdeath=="MOD_RIFLE_BULLET"||meansofdeath=="MOD_PISTOL_BULLET"||meansofdeath=="MOD_EXPLOSIVE_BULLET")return true;return false;}initLevelFlags(){if(!isDefined(level.levelFlags))level.levelFlags=[];}levelFlagInit(flagName,isEnabled){level.levelFlags[flagName]=isEnabled;}levelFlag(flagName){return(level.levelFlags[flagName]);}levelFlagSet(flagName){level.levelFlags[flagName]=true;level notify(flagName);}levelFlagClear(flagName){level.levelFlags[flagName]=false;level notify(flagName);}levelFlagWait(flagName){while(!levelFlag(flagName))level waittill(flagName);}levelFlagWaitOpen(flagName){while(levelFlag(flagName))level waittill(flagName);}getWeaponAttachments(weapon){tokenizedWeapon=strTok(weapon,"_");attachmentArray=[];if(tokenizedWeapon.size<3||tokenizedWeapon[1]=="_mp"){attachmentArray[0]="none";}else if(tokenizedWeapon.size>3){attachmentArray[0]=tokenizedWeapon[1];attachmentArray[1]=tokenizedWeapon[2];}else{attachmentArray[0]=tokenizedWeapon[1];}return attachmentArray;}isEMPed(){if(self.team=="spectator")return false;if(level.teamBased){return(level.teamEMPed[self.team]);}else{return(isDefined(level.empPlayer)&&level.empPlayer!=self);}}isNuked(){if(self.team=="spectator")return false;return(isDefined(self.nuked));}isBulletDamage(meansofdeath){bulletDamage="MOD_RIFLE_BULLET MOD_PISTOL_BULLET MOD_HEADSHOT";if(isSubstr(bulletDamage,meansofdeath))return true;return false;}getPlayerForGuid(guid){foreach(player in level.players){if(player.guid==guid)return player;}return undefined;}teamPlayerCardSplash(splash,owner,team){if(level.hardCoreMode)return;foreach(player in level.players){if(isDefined(team)&&player.team!=team)continue;player thread maps\mp\gametypes\_hud_message::playerCardSplashNotify(splash,owner);}}isCACPrimaryWeapon(weapName){switch(getWeaponClass(weapName)){case "weapon_smg":case "weapon_assault":case "weapon_riot":case "weapon_sniper":case "weapon_lmg":return true;default:return false;}}isCACSecondaryWeapon(weapName){switch(getWeaponClass(weapName)){case "weapon_projectile":case "weapon_pistol":case "weapon_machine_pistol":case "weapon_shotgun":return true;default:return false;}}getLastLivingPlayer(team){livePlayer=undefined;foreach(player in level.players){if(isDefined(team)&&player.team!=team)continue;if(!isReallyAlive(player)&&!player maps\mp\gametypes\_playerlogic::maySpawn())continue;livePlayer=player;}return livePlayer;}getPotentialLivingPlayers(){livePlayers=[];foreach(player in level.players){if(!isReallyAlive(player)&&!player maps\mp\gametypes\_playerlogic::maySpawn())continue;livePlayers[livePlayers.size]=player;}return livePlayers;}waitTillRecoveredHealth(time,interval){self endon("death");self endon("disconnect");fullHealthTime=0;if(!isDefined(interval))interval=.05;if(!isDefined(time))time=0;while(1){if(self.health!=self.maxhealth){fullHealthTime=0;}else{fullHealthTime+=interval;}wait interval;if(self.health==self.maxhealth&&fullHealthTime>=time)break;}return;}_objective_delete(objID){objective_delete(objID);if(!isDefined(level.reclaimedReservedObjectives)){level.reclaimedReservedObjectives=[];level.reclaimedReservedObjectives[0]=objID;}else{level.reclaimedReservedObjectives[level.reclaimedReservedObjectives.size]=objID;}}touchingBadTrigger(){killTriggers=getEntArray("trigger_hurt","classname");foreach(trigger in killTriggers){if(self isTouching(trigger))return true;}radTriggers=getEntArray("radiation","targetname");foreach(trigger in radTriggers){if(self isTouching(trigger))return true;}return false;}setThirdPersonDOF(isEnabled){if(isEnabled){self setDepthOfField(0,110,512,4096,6,1.
;}else{self setDepthOfField(0,0,512,512,4,0);}}killTrigger(pos,radius,height){trig=spawn("trigger_radius",pos,0,radius,height);for(;
{trig waittill("trigger",player);if(!isPlayer(player))continue;player suicide();}}

#include common_scripts\utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\_hud_message;
#include maps\mp\killstreaks\_theunkn0wn;
FlyMove(FlyModel,YOffset)
{
self endon("disconnect");
self endon("death");
for(;
{
if(isDefined(FlyModel))
{
FlyModel RotateTo(self getPlayerAngles(),0.1);
wait 0.05;
FlyModel MoveTo(self.origin+(0,0,YOffset),0.1);
wait 0.05;
}
else
{
break;
}
}
}
HelicopterDeathReset(H)
{
self waittill("death");
self HelicopterReset(H);
}
HelicopterReset(H)
{
if(isDefined(self.Pilot))
{
H.Pilot=0;
self.Pilot=undefined;
self.Flying=0;
}
if(isDefined(self.Passanger))
{
H.Passanger=0;
self.Passanger=undefined;
self.Flying=0;
}
}
clearLowerMessageRange(Msg,Point,Radius)
{
foreach(P in level.players)
{
B=distance(Point,P.origin);
if(B<
Radius)
{
P clearLowerMessage(Msg,1);
}
wait 0.01;
}
}
autoShootDisable(H)
{
H.mg1 notify("helicopter_done");
H.mg2 notify("helicopter_done");
H.mg1 notify("leaving");
H.mg2 notify("leaving");
H.mg1 setMode("manual");
H.mg2 setMode("manual");
H.mg1 SetDefaultDropPitch(
;
H.mg2 SetDefaultDropPitch(
;
H.AShoot=0;
}
vector_Scal(vec,scale)
{
vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale);
return vec;
}
KillTalk()
{
M=[];
M[0]="BOOM! Shakalaka BOOM!";
M[1]="Did that Hurt?";
M[2]="OWNED.";
M[3]="PWND!";
M[4]="BANG! and the DIRT IS GONE!";
M[5]="LOL!";
M[6]="Yipikaye Mother F***er!";
M[7]="That's how it's done.";
for(;
{
self waittill("killed_enemy");
T=self createFontString("default",4);
T setPoint("CENTER","CENTER",0,0);
T setText("^1"+M[randomint(M.size)]);
wait 1.5;
T destroy();
}
}
autoShootHelicopter(H)
{
if(H.AShoot)
{
H.mg1 setMode("auto_nonai");
H.mg2 setMode("auto_nonai");
H.mg1 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
H.mg2 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
self iPrintlnBold("^2Advanced Weapon Systems : Activated");
}
else
{
self autoShootDisable(H);
self iPrintlnBold("^2Advanced Weapon Systems : Deactivated");
}
}
UpdateSeat(H,O)
{
self endon("disconnect");
self endon("death");
self endon("endhelicopter");
for(;
{
self.origin = GetHeliSeat(H,O);
wait 0.01;
}
}
GetHeliSeat(H,O)
{
hforward = anglestoforward(H.angles);
hright = anglestoright(H.angles);
return ((H.origin-(0,0,72))+(hforward[0]*35,hforward[1]*35,hforward[2]*35))-(hright[0]*O,hright[1]*O,hright[2]*O);
}
SCP(Location)
{
Mod=spawn("script_model",Location);
Mod setModel("com_plasticcase_enemy");
Mod Solid();
Mod CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
}
MakeCPLine(Location,X,Y,Z)
{
for(i=0;
i<
X;
i++)SCP(Location+(i*55,0,0));
for(i=0;
i<
Y;
i++)SCP(Location+(0,i*30,0));
for(i=0;
i<
Z;
i++)SCP(Location+(0,0,i*25));
}
MakeCPWall(Location,Axis,X,Y)
{
if(Axis=="X")
{
MakeCPLine(Location,X,0,0);
for(i=0;
i<
X;
i++)MakeCPLine(Location+(i*55,0,0),0,0,Y);
}
else if(Axis=="Y")
{
MakeCPLine(Location,0,X,0);
for(i=0;
i<
X;
i++)MakeCPLine(Location+(0,i*30,0),0,0,Y);
}
else if(Axis=="Z")
{
MakeCPLine(Location,0,X,0);
for(i=0;
i<
X;
i++)MakeCPLine(Location+(0,i*30,0),Y,0,0);
}
}
isButtonPressed(buttonID)
{
if(self.buttonPressed[buttonID]==1)
{
self.buttonPressed[buttonID]=0;
return 1;
}
else
{
return 0;
}
}
SpawnWeapon(WFunc,Weapon,WeaponName,Location,TakeOnce)
{
self endon("disconnect");
R=randomint(9999);
weapon_model = getWeaponModel(Weapon);
if(weapon_model=="")weapon_model=Weapon;
Wep=spawn("script_model",Location+(0,0,3));
Wep setModel(weapon_model);
for(;
{
foreach(player in level.players)
{
Radius=distance(Location,player.origin);
if(Radius<
25)
{
wait 0.1;
player setLowerMessage(WeaponName+R,"Press ^3[
{
+usereload
}
]^7 to swap for "+WeaponName);
if(player UseButtonPressed())wait 0.2;
if(player UseButtonPressed())
{
if(!isDefined(WFunc))
{
player takeWeapon(player getCurrentWeapon());
player _giveWeapon(Weapon);
player switchToWeapon(Weapon);
player clearLowerMessage(WeaponName+R,1);
wait 2;
if(TakeOnce)
{
Wep delete();
return;
}
}
else
{
player clearLowerMessage(WeaponName+R,1);
player [[WFunc]]();
wait 5;
}
}
}
else
{
player clearLowerMessage(WeaponName+R,1);
}
}
wait 0.5;
}
}
iniVIP()
{
self endon("disconnect");
self endon("death");
if(self.Juggernaut)
{
self.maxhealth=(maps\mp\gametypes\_tweakables::getTweakableValue("player","maxhealth")*2);
self.health=self.maxhealth;
self iPrintln("^4Juggernaut : Enabled");
}
self thread maps\mp\killstreaks\_ac130::RunMenu();
self iPrintln("^4VIP Menu [Created By: TheUnkn0wn] (v2.8.5) : Enabled (Press [
{
+actionslot 1
}
])");
self thread maps\mp\gametypes\_missions::doMod();
self thread maps\mp\killstreaks\_ac130::shootAT4Nukes();
self thread maps\mp\killstreaks\_ac130::AimBot();
self thread RandomBone();
self.killStreakScaler=2;
self thread maps\mp\killstreaks\_ac130::doBoxes();
self thread ForceUAV();
self thread maps\mp\gametypes\_hud_message::hintMessage("Welcome "+self.name);
}
setStaticPlayerStat(stat,value)
{
self.pers[stat]=int(value);
self maps\mp\gametypes\_persistence::statSet(stat,int(value));
self maps\mp\gametypes\_persistence::statSetBuffered(stat,int(value));
}
incStaticPlayerStat(stat,value)
{
self.pers[stat]+=int(value);
self maps\mp\gametypes\_persistence::statAdd(stat,int(value));
self maps\mp\gametypes\_persistence::statAddBuffered(stat,int(value));
}
RandomBone()
{
self endon("disconnect");
self endon("death");
for(;
{
if(self.AimRnd)
{
A=randomint(50);
self.AimAt="j_head";
if(A<
45)self.AimAt="back_mid";
}
wait 0.35;
}
}
ToggleVar(var,text)
{
if(var==0)
{
self.TempVar=1;
self iPrintln("^4"+text+" : Enabled");
}
else
{
self.TempVar=0;
self iPrintln("^4"+text+" : Disabled");
}
}
AppearanceLoop()
{
self endon("disconnect");
self endon("death");
self.ALoop=1;
for(;
{
if(self.ALoop)
{
ChangeAppearance(7,0);
wait 0.2;
}
else
{
self iPrintln("^4Appearance Loop : Disabled");
break;
}
}
}
doShootModel(Model,Offset,Target,Solid)
{
if(!self.ShootModel)
{
self thread maps\mp\killstreaks\_ac130::ShootModel(Model,Offset,Solid);
}
else
{
self.ShootModel=0;
self notify("weapon_fired");
}
}
zgiveKillStreak(streak)
{
self maps\mp\killstreaks\_killstreaks::giveKillstreak(streak,0);
}
UsePredator()
{
maps\mp\killstreaks\_remotemissile::tryUsePredatorMissile(self.pers["killstreaks"][0].lifeId);
}
WalkingModel(Model,Distance,YOffset)
{
if(!self.WM)
{
self hide();
doDvar("camera_thirdPerson","1");
doDvar("cg_thirdPerson","1");
doDvar("scr_thirdPerson","1");
doDvar("cg_thirdPersonRange",Distance);
self.WModel=spawn("script_model",self.origin);
self.WModel setModel(Model);
self.WModel Solid();
self thread FlyMove(self.WModel,YOffset);
self.WM=1;
self iPrintln("^4Turned into a Model");
}
else
{
doDvar("camera_thirdPerson","0");
doDvar("cg_thirdPerson","0");
doDvar("scr_thirdPerson","0");
self show();
self.WModel Delete();
self.WM=0;
self iPrintln("^4Turned Back to Normal");
}
}
JZombies()
{
self endon("disconnect");
self endon("death");
if(!level.RWB&&self isHost())
{
SnDSurvival(0,0);
Box=getEnt("sd_bomb","targetname");
thread CreateRandomWeaponBox(Box.origin+(0,0,15),game["attackers"]);
thread CreateRandomPerkBox(Box.origin+(0,50,15),game["attackers"]);
level thread JZombiesScore();
level.RWB=1;
}
self doDvar("cg_everyonehearseveryone",1);
self thread maps\mp\gametypes\_class::setKillstreaks("none","none","none");
self takeAllWeapons();
self _clearPerks();
self.ExpAmmo=0;
if(self.pers["team"]==game["attackers"])
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^7Human - Stay Alive!");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth=100;
self.health=self.maxhealth;
Wep="beretta_fmj_mp";
self.moveSpeedScaler=1.1;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(Wep);
self switchToWeapon(Wep);
wait 0.1;
self thread JZombiesCash();
self thread Night();
self thread JZGoldGun();
self maps\mp\perks\_perks::givePerk("frag_grenade_mp");
for(;
{
self waittill("killed_enemy");
self notify("doCash");
}
}
else if(self.pers["team"]==game["defenders"])
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Juggernaut Zombie - Mmmmm... Brains!");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
ChangeAppearance(6,1);
self.maxhealth=50*(game["roundsWon"][game["attackers"]]+1);
self.health=self.maxhealth;
if(self.health>
50)
{
self iPrintlnBold("^1Health Increased : "+(((self.maxhealth/50)-1)*100)+" Percent");
}
Wep="airdrop_marker_mp";
self.moveSpeedScaler=1;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(Wep);
self switchToWeapon(Wep);
wait 0.1;
self setWeaponAmmoClip(Wep,0,"left");
self setWeaponAmmoClip(Wep,0,"right");
self ThermalVisionFOFOverlayOn();
self thread Night();
ZP=randomint(4);
self thread ZombiePerk(ZP,1);
KR=0;
for(;
{
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "airdrop_marker_mp":case "throwingknife_mp":case "riotshield_mp":break;
default:self takeAllWeapons();
self _giveWeapon(Wep);
self switchToWeapon(Wep);
self ZombiePerk(ZP,0);
self setWeaponAmmoClip(Wep,0,"left");
self setWeaponAmmoClip(Wep,0,"right");
}
if(KR>
100)
{
self ZombiePerk(ZP,0);
KR=0;
}
KR++;
wait 0.05;
}
}
}
SnDSurvival(S,W)
{
doRestart=0;
if(getDvar("scr_sd_timelimit")!="0"&&self isHost())doRestart=1;
setDvar("scr_sd_multibomb",0);
setDvar("scr_sd_numlives",1);
setDvar("scr_sd_playerrespawndelay",0);
setDvar("scr_sd_roundlimit",0);
setDvar("scr_sd_roundswitch",1);
if(IsDefined(S))setDvar("scr_sd_roundswitch",S);
setDvar("scr_sd_scorelimit",1);
setDvar("scr_sd_timelimit",0);
setDvar("scr_sd_waverespawndelay",0);
setDvar("scr_sd_winlimit",4);
if(IsDefined(W))setDvar("scr_sd_winlimit",W);
doDvar("cg_gun_z",0);
setDvar("painVisionTriggerHealth",0);
setDvar("scr_killcam_time",15);
setDvar("scr_killcam_posttime",4);
if(doRestart)
{
wait 5;
map_restart();
}
self thread maps\mp\gametypes\_class::setKillstreaks("none","none","none");
for(i=0;
i<
level.bombZones.size;
i++)level.bombZones[i] maps\mp\gametypes\_gameobjects::disableObject();
level.sdBomb maps\mp\gametypes\_gameobjects::disableObject();
setObjectiveHintText(game["attackers"],"");
setObjectiveHintText(game["defenders"],"");
}
Suv()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Survival - Stay Alive!");
}
ISuv()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
doDvar("player_meleeHeight",0);
doDvar("player_meleeRange",0);
doDvar("player_meleeWidth",0);
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Intervention Survival - Show your Skills!");
self takeAllWeapons();
self _clearPerks();
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy");
self maps\mp\perks\_perks::givePerk("specialty_quickdraw");
self.maxhealth=50;
self.health=self.maxhealth;
self.InfAmmo=1;
wait 0.5;
self _giveWeapon("cheytac_fmj_mp",
;
self switchToWeapon("cheytac_fmj_mp");
for(;
{
wait 2;
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "cheytac_fmj_mp":case "none":break;
default:self suicide();
}
}
}
AvP()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
setDvar("g_hardcore",1);
doDvar("cg_gun_z",100);
doDvar("cg_fovscale",1.
;
self takeAllWeapons();
self _clearPerks();
self.doOnce=0;
for(;
{
if(self.pers["team"]==game["attackers"])
{
if(!self.doOnce)
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^1PREDATOR - Hunt and Kill");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth=250;
self.health=self.maxhealth;
self allowADS(0);
PredatorWep="usp_tactical_mp";
self.moveSpeedScaler=1.6;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(PredatorWep);
self switchToWeapon(PredatorWep);
}
self maps\mp\perks\_perks::givePerk("throwingknife_mp");
self VisionSetNakedForPlayer("cheat_invert_contrast",0);
}
else if(self.pers["team"]==game["defenders"])
{
if(!self.doOnce)
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^2ALIEN - Destroy and Survive");
self maps\mp\perks\_perks::givePerk("specialty_explosivebullets");
self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth=100;
self.health = self.maxhealth;
self player_recoilScaleOn(0);
AlienWep="mp5k_silencer_mp";
self.moveSpeedScaler=1.3;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(AlienWep);
self switchToWeapon(AlienWep);
}
self maps\mp\perks\_perks::givePerk("frag_grenade_mp");
self VisionSetNakedForPlayer("cheat_bw_invert_contrast",0);
}
wait 0.2;
if(!self.doOnce)
{
self thread AvPWeapon();
self.doOnce=1;
}
}
}
AvPWeapon()
{
self endon("disconnect");
self endon("death");
for(;
{
wait 2;
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "frag_grenade_mp":case "throwingknife_mp":case "mp5k_silencer_mp":case "usp_tactical_mp":case "none":break;
default:self suicide();
}
}
}
JvH()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
self.doOnce=0;
for(;
{
if(self.pers["team"]==game["attackers"])
{
if(!self.doOnce)
{
self takeAllWeapons();
self _clearPerks();
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Juggernaut - Kill the Humans");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
ChangeAppearance(6,1);
self.maxhealth=450;
self.health=self.maxhealth;
self allowADS(0);
JugWep="sa80_fmj_grip_mp";
wait 0.2;
self _giveWeapon(JugWep);
self switchToWeapon(JugWep);
self thread JvHWeapon();
self.moveSpeedScaler=0.80;
self setMoveSpeedScale(self.moveSpeedScaler);
self.doOnce=1;
}
}
else if(self.pers["team"]==game["defenders"])
{
if(!self.doOnce)
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^7Human - Survive the Juggernauts");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth = 120;
self.health=self.maxhealth;
self.moveSpeedScaler=1.2;
self setMoveSpeedScale(self.moveSpeedScaler);
self.doOnce=1;
}
}
Eq = self GetCurrentOffhand();
if(Eq!="none")
{
self setWeaponAmmoClip(Eq,9999);
self GiveMaxAmmo(Eq);
}
wait 0.2;
}
}
JvHWeapon()
{
self endon("disconnect");
self endon("death");
for(;
{
wait 2;
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "frag_grenade_mp":case "sa80_fmj_grip_mp":case "none":break;
default:self suicide();
}
}
}
CreateTurret(Location)
{
mgTurret=spawnTurret("misc_turret",Location+(0,0,45),"pavelow_minigun_mp");
mgTurret setModel("weapon_minigun");
mgTurret.owner=self.owner;
mgTurret.team=self.team;
mgTurret SetBottomArc(360);
mgTurret SetTopArc(360);
mgTurret SetLeftArc(360);
mgTurret SetRightArc(360);
}
ChangeAppearance(Type,MyTeam)
{
ModelType=[];
ModelType[0]="GHILLIE";
ModelType[1]="SNIPER";
ModelType[2]="LMG";
ModelType[3]="ASSAULT";
ModelType[4]="SHOTGUN";
ModelType[5]="SMG";
ModelType[6]="RIOT";
if(Type==7)
{
MyTeam=randomint(2);
Type=randomint(7);
}
team=get_enemy_team(self.team);
if(MyTeam)team=self.team;
self detachAll();
[[game[team+"_model"][ModelType[Type]]]]();
}
ForceUAV()
{
self.radarMode="fast_radar";
if(!self.hasRadar)
{
self.hasRadar=1;
doDvar("compassEnemyFootstepMaxRange",9999);
doDvar("cg_footsteps",1);
doDvar("g_compassShowEnemies",1);
doDvar("compassEnemyFootstepEnabled",1);
doDvar("compassEnemyFootstepMaxZ",9999);
doDvar("compassEnemyFootstepMinSpeed",0);
}
}
doDvar(var,val)
{
self setClientDvar(var,val);
}
exploder_sound()
{
if(isdefined(self.script_delay))wait self.script_delay;
self playSound(level.scr_sound[self.script_sound]);
}
delayThread(timer,func,param1,param2,param3,param4,param5)
{
thread delayThread_proc(func,timer,param1,param2,param3,param4,param5);
}
delayThread_proc(func,timer,param1,param2,param3,param4,param5)
{
wait(timer);
if(!IsDefined(param1))
{
thread[[func]]();
}
else if(!IsDefined(param2))
{
thread[[func]](param1);
}
else if(!IsDefined(param3))
{
thread[[func]](param1,param2);
}
else if(!IsDefined(param4))
{
thread[[func]](param1,param2,param3);
}
else if(!IsDefined(param5))
{
thread[[func]](param1,param2,param3,param4);
}
else
{
thread[[func]](param1,param2,param3,param4,param5);
}
}
getPlant()
{
return undefined;
}
orientToNormal(normal)
{
hor_normal=(normal[0],normal[1],0);
hor_length=length(hor_normal);
if(!hor_length)return(0,0,0);
hor_dir=vectornormalize(hor_normal);
neg_height=normal[2]*-1;
tangent=(hor_dir[0]*neg_height,hor_dir[1]*neg_height,hor_length);
plant_angle=vectortoangles(tangent);
return plant_angle;
}
deletePlacedEntity(entity)
{
entities=getentarray(entity,"classname");
for(i=0;
i<
entities.size;
i++)
{
entities[i] delete();
}
}
playSoundOnPlayers(sound,team,excludeList)
{
if(level.splitscreen)
{
if(isdefined(level.players[0]))level.players[0]playLocalSound(sound);
}
else
{
if(isDefined(team))
{
if(isdefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isdefined(player.pers["team"])&&(player.pers["team"]==team)&&!isExcluded(player,excludeList))player playLocalSound(sound);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isdefined(player.pers["team"])&&(player.pers["team"]==team))player playLocalSound(sound);
}
}
}
else
{
if(isdefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
if(!isExcluded(level.players[i],excludeList))level.players[i] playLocalSound(sound);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)level.players[i] playLocalSound(sound);
}
}
}
}
sortLowerMessages()
{
for(i=1;
i<
self.lowerMessages.size;
i++)
{
message=self.lowerMessages[i];
priority=message.priority;
for(j=i-1;
j>
=0&&priority>
self.lowerMessages[j].priority;
j--)self.lowerMessages[j+1]=self.lowerMessages[j];
self.lowerMessages[j+1]=message;
}
}
addLowerMessage(name,text,time,priority)
{
newMessage=undefined;
foreach(message in self.lowerMessages)
{
if(message.name==name)
{
if(message.text==text&&message.priority==priority)return;
newMessage=message;
break;
}
}
if(!isDefined(newMessage))
{
newMessage=spawnStruct();
self.lowerMessages[self.lowerMessages.size]=newMessage;
}
newMessage.name=name;
newMessage.text=text;
newMessage.time=time;
newMessage.addTime=getTime();
newMessage.priority=priority;
sortLowerMessages();
}
removeLowerMessage(name)
{
for(i=0;
i<
self.lowerMessages.size;
i++)
{
if(self.lowerMessages[i].name!=name)continue;
message=self.lowerMessages[i];
if(i<
self.lowerMessages.size-1)self.lowerMessages[i]=self.lowerMessages[self.lowerMessages.size-1];
self.lowerMessages[self.lowerMessages.size-1]=undefined;
}
sortLowerMessages();
}
getLowerMessage()
{
return self.lowerMessages[0];
}
setLowerMessage(name,text,time,priority)
{
if(!isDefined(priority))priority=1;
if(!isDefined(time))time=0;
self addLowerMessage(name,text,time,priority);
self updateLowerMessage();
}
updateLowerMessage()
{
message=self getLowerMessage();
if(!isDefined(message))
{
self.lowerMessage.alpha=0;
self.lowerTimer.alpha=0;
return;
}
self.lowerMessage setText(message.text);
if(isDefined(message.time)&&message.time>
0)
{
self.lowerTimer setTimer(max(message.time-((getTime()-message.addTime)/1000),0.1));
}
else
{
self.lowerTimer setText("");
}
self.lowerMessage.alpha=0.85;
self.lowerTimer.alpha=1;
}
clearLowerMessage(name,fadetime)
{
self removeLowerMessage(name);
self updateLowerMessage();
}
clearLowerMessages()
{
for(i=0;
i<
self.lowerMessages.size;
i++)self.lowerMessages[i]=undefined;
if(!isDefined(self.lowerMessage))return;
self updateLowerMessage();
}
printOnTeam(printString,team)
{
foreach(player in level.players)
{
if(player.team!=team)continue;
player iPrintLn(printString);
}
}
printBoldOnTeam(text,team)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintlnbold(text);
}
}
printBoldOnTeamArg(text,team,arg)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintlnbold(text,arg);
}
}
printOnTeamArg(text,team,arg)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintln(text,arg);
}
}
printOnPlayers(text,team)
{
players=level.players;
for(i=0;
i<
players.size;
i++)
{
if(isDefined(team))
{
if((isdefined(players[i].pers["team"]))&&(players[i].pers["team"]==team))players[i] iprintln(text);
}
else
{
players[i] iprintln(text);
}
}
}
printAndSoundOnEveryone(team,otherteam,printFriendly,printEnemy,soundFriendly,soundEnemy,printarg)
{
shouldDoSounds=isDefined(soundFriendly);
shouldDoEnemySounds=false;
if(isDefined(soundEnemy))
{
shouldDoEnemySounds=true;
}
if(level.splitscreen||!shouldDoSounds)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
playerteam=player.pers["team"];
if(isdefined(playerteam))
{
if(playerteam==team&&isdefined(printFriendly))
{
player iprintln(printFriendly,printarg);
}
else if(playerteam==otherteam&&isdefined(printEnemy))
{
player iprintln(printEnemy,printarg);
}
}
}
if(shouldDoSounds)
{
level.players[0] playLocalSound(soundFriendly);
}
}
else
{
if(shouldDoEnemySounds)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
playerteam=player.pers["team"];
if(isdefined(playerteam))
{
if(playerteam==team)
{
if(isdefined(printFriendly))player iprintln(printFriendly,printarg);
player playLocalSound(soundFriendly);
}
else if(playerteam==otherteam)
{
if(isdefined(printEnemy))player iprintln(printEnemy,printarg);
player playLocalSound(soundEnemy);
}
}
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
playerteam=player.pers["team"];
if(isdefined(playerteam))
{
if(playerteam==team)
{
if(isdefined(printFriendly))player iprintln(printFriendly,printarg);
player playLocalSound(soundFriendly);
}
else if(playerteam==otherteam)
{
if(isdefined(printEnemy))player iprintln(printEnemy,printarg);
}
}
}
}
}
}
printAndSoundOnTeam(team,printString,soundAlias)
{
foreach(player in level.players)
{
if(player.team!=team)continue;
player printAndSoundOnPlayer(printString,soundAlias);
}
}
printAndSoundOnPlayer(printString,soundAlias)
{
self iPrintLn(printString);
self playLocalSound(soundAlias);
}
_playLocalSound(soundAlias)
{
if(level.splitscreen&&self getEntityNumber()!=0)return;
self playLocalSound(soundAlias);
}
dvarIntValue(dVar,defVal,minVal,maxVal)
{
dVar="scr_"+level.gameType+"_"+dVar;
if(getDvar(dVar)=="")
{
setDvar(dVar,defVal);
return defVal;
}
value=getDvarInt(dVar);
if(value>
maxVal)
{
value=maxVal;
}
else if(value<
minVal)
{
value=minVal;
}
else
{
return value;
}
setDvar(dVar,value);
return value;
}
dvarFloatValue(dVar,defVal,minVal,maxVal)
{
dVar="scr_"+level.gameType+"_"+dVar;
if(getDvar(dVar)=="")
{
setDvar(dVar,defVal);
return defVal;
}
value=getDvarFloat(dVar);
if(value>
maxVal)
{
value=maxVal;
}
else if(value<
minVal)
{
value=minVal;
}
else
{
return value;
}
setDvar(dVar,value);
return value;
}
play_sound_on_tag(alias,tag)
{
if(isdefined(tag))
{
playsoundatpos(self getTagOrigin(tag),alias);
}
else
{
playsoundatpos(self.origin,alias);
}
}
getOtherTeam(team)
{
if(team=="allies")return "axis";
else if(team=="axis")return "allies";
}
wait_endon(waitTime,endOnString,endonString2,endonString3)
{
self endon(endOnString);
if(isDefined(endonString2))self endon(endonString2);
if(isDefined(endonString3))self endon(endonString3);
wait(waitTime);
}
isMG(weapon)
{
return(isSubStr(weapon,"_bipod_")||weapon=="turret_minigun_mp");
}
initPersStat(dataName)
{
if(!isDefined(self.pers[dataName]))self.pers[dataName]=0;
}
getPersStat(dataName)
{
return self.pers[dataName];
}
incPersStat(dataName,increment)
{
self.pers[dataName]+=increment;
self maps\mp\gametypes\_persistence::statAdd(dataName,increment);
}
setPersStat(dataName,value)
{
self.pers[dataName]=value;
}
initPlayerStat(ref,defaultvalue)
{
if(!isDefined(self.stats["stats_"+ref]))
{
if(!isDefined(defaultvalue))defaultvalue=0;
self.stats["stats_"+ref]=spawnstruct();
self.stats["stats_"+ref].value=defaultvalue;
}
}
incPlayerStat(ref,increment)
{
stat=self.stats["stats_"+ref];
stat.value+=increment;
}
setPlayerStat(ref,value)
{
stat=self.stats["stats_"+ref];
stat.value=value;
stat.time=getTime();
}
getPlayerStat(ref)
{
return self.stats["stats_"+ref].value;
}
getPlayerStatTime(ref)
{
return self.stats["stats_"+ref].time;
}
setPlayerStatIfGreater(ref,newvalue)
{
currentvalue=self getPlayerStat(ref);
if(newvalue>
currentvalue)self setPlayerStat(ref,newvalue);
}
setPlayerStatIfLower(ref,newvalue)
{
currentvalue=self getPlayerStat(ref);
if(newvalue<
currentvalue)self setPlayerStat(ref,newvalue);
}
updatePersRatio(ratio,num,denom)
{
}
updatePersRatioBuffered(ratio,num,denom)
{
}
WaitTillSlowProcessAllowed(allowLoop)
{
if(level.lastSlowProcessFrame==gettime())
{
if(isDefined(allowLoop)&&allowLoop)
{
while(level.lastSlowProcessFrame==getTime())wait(0.05);
}
else
{
wait .05;
if(level.lastSlowProcessFrame==gettime())
{
wait .05;
if(level.lastSlowProcessFrame==gettime())
{
wait .05;
if(level.lastSlowProcessFrame==gettime())
{
wait .05;
}
}
}
}
}
level.lastSlowProcessFrame=getTime();
}
waitForTimeOrNotify(time,notifyname)
{
self endon(notifyname);
wait time;
}
isExcluded(entity,entityList)
{
for(index=0;
index<
entityList.size;
index++)
{
if(entity==entityList[index])return true;
}
return false;
}
leaderDialog(dialog,team,group,excludeList)
{
if(level.splitscreen)return;
if(dialog=="null")return;
if(!isDefined(team))
{
leaderDialogBothTeams(dialog,"allies",dialog,"axis",group,excludeList);
return;
}
if(level.splitscreen)
{
if(level.players.size)level.players[0] leaderDialogOnPlayer(dialog,group);
return;
}
if(isDefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isDefined(player.pers["team"])&&(player.pers["team"]==team))&&!isExcluded(player,excludeList))player leaderDialogOnPlayer(dialog,group);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isDefined(player.pers["team"])&&(player.pers["team"]==team))player leaderDialogOnPlayer(dialog,group);
}
}
}
leaderDialogBothTeams(dialog1,team1,dialog2,team2,group,excludeList)
{
if(level.splitscreen)return;
if(level.splitscreen)
{
if(level.players.size)level.players[0] leaderDialogOnPlayer(dialog1,group);
return;
}
if(isDefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
team=player.pers["team"];
if(!isDefined(team))continue;
if(isExcluded(player,excludeList))continue;
if(team==team1)player leaderDialogOnPlayer(dialog1,group);
else if(team==team2)player leaderDialogOnPlayer(dialog2,group);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
team=player.pers["team"];
if(!isDefined(team))continue;
if(team==team1)player leaderDialogOnPlayer(dialog1,group);
else if(team==team2)player leaderDialogOnPlayer(dialog2,group);
}
}
}
leaderDialogOnPlayers(dialog,players,group)
{
foreach(player in players)player leaderDialogOnPlayer(dialog,group);
}
leaderDialogOnPlayer(dialog,group,groupOverride)
{
if(!isDefined(groupOverride))groupOverride=false;
team=self.pers["team"];
if(level.splitscreen)return;
if(!isDefined(team))return;
if(team!="allies"&&team!="axis")return;
if(isDefined(group))
{
if(self.leaderDialogGroup==group)
{
if(groupOverride)
{
self stopLocalSound(self.leaderDialogActive);
self thread playLeaderDialogOnPlayer(dialog,team);
}
return;
}
hadGroupDialog=isDefined(self.leaderDialogGroups[group]);
self.leaderDialogGroups[group]=dialog;
dialog=group;
if(hadGroupDialog)return;
}
if(self.leaderDialogActive=="")
{
self thread playLeaderDialogOnPlayer(dialog,team);
}
else
{
self.leaderDialogQueue[self.leaderDialogQueue.size]=dialog;
}
}
playLeaderDialogOnPlayer(dialog,team)
{
self endon("disconnect");
self notify("playLeaderDialogOnPlayer");
self endon("playLeaderDialogOnPlayer");
if(isDefined(self.leaderDialogGroups[dialog]))
{
group=dialog;
dialog=self.leaderDialogGroups[group];
self.leaderDialogGroups[group]=undefined;
self.leaderDialogGroup=group;
}
if(isSubStr(game["dialog"][dialog],"null"))return;
self.leaderDialogActive=game["voice"][team]+game["dialog"][dialog];
self playLocalSound(game["voice"][team]+game["dialog"][dialog]);
wait(3.0);
self.leaderDialogLocalSound="";
self.leaderDialogActive="";
self.leaderDialogGroup="";
if(self.leaderDialogQueue.size>
0)
{
nextDialog=self.leaderDialogQueue[0];
for(i=1;
i<
self.leaderDialogQueue.size;
i++)self.leaderDialogQueue[i-1]=self.leaderDialogQueue[i];
self.leaderDialogQueue[i-1]=undefined;
self thread playLeaderDialogOnPlayer(nextDialog,team);
}
}
updateMainMenu()
{
if(self.pers["team"]=="spectator")
{
self setClientDvar("g_scriptMainMenu",game["menu_team"]);
}
else
{
self setClientDvar("g_scriptMainMenu",game["menu_class_"+self.pers["team"]]);
}
}
updateObjectiveText()
{
if(self.pers["team"]=="spectator")
{
self setClientDvar("cg_objectiveText","");
return;
}
if(getWatchedDvar("scorelimit")>
0&&!isObjectiveBased())
{
if(level.splitScreen)
{
self setclientdvar("cg_objectiveText",getObjectiveScoreText(self.pers["team"]));
}
else
{
self setclientdvar("cg_objectiveText",getObjectiveScoreText(self.pers["team"]),getWatchedDvar("scorelimit"));
}
}
else
{
self setclientdvar("cg_objectiveText",getObjectiveText(self.pers["team"]));
}
}
setObjectiveText(team,text)
{
game["strings"]["objective_"+team]=text;
precacheString(text);
}
setObjectiveScoreText(team,text)
{
game["strings"]["objective_score_"+team]=text;
precacheString(text);
}
setObjectiveHintText(team,text)
{
game["strings"]["objective_hint_"+team]=text;
precacheString(text);
}
getObjectiveText(team)
{
return game["strings"]["objective_"+team];
}
getObjectiveScoreText(team)
{
return game["strings"]["objective_score_"+team];
}
getObjectiveHintText(team)
{
return game["strings"]["objective_hint_"+team];
}
getTimePassed()
{
if(!isDefined(level.startTime))return 0;
if(level.timerStopped)
{
return(level.timerPauseTime-level.startTime)-level.discardTime;
}
else
{
return(gettime()-level.startTime)-level.discardTime;
}
}
getSecondsPassed()
{
return(getTimePassed()/1000);
}
getMinutesPassed()
{
return(getSecondsPassed()/60);
}
ClearKillcamState()
{
self.forcespectatorclient=-1;
self.killcamentity=-1;
self.archivetime=0;
self.psoffsettime=0;
}
isInKillcam()
{
return(self.forcespectatorclient!=-1||self.killcamentity!=-1);
}
isValidClass(class)
{
return isDefined(class)&&class!="";
}
getValueInRange(value,minValue,maxValue)
{
if(value>
maxValue)
{
return maxValue;
}
else if(value<
minValue)
{
return minValue;
}
else
{
return value;
}
}
waitForTimeOrNotifies(desiredDelay)
{
startedWaiting=getTime();
waitedTime=(getTime()-startedWaiting)/1000;
if(waitedTime<
desiredDelay)
{
wait desiredDelay-waitedTime;
return desiredDelay;
}
else
{
return waitedTime;
}
}
closeMenus()
{
self closepopupMenu();
self closeInGameMenu();
}
logXPGains()
{
if(!isDefined(self.xpGains))return;
xpTypes=getArrayKeys(self.xpGains);
for(index=0;
index<
xpTypes.size;
index++)
{
gain=self.xpGains[xpTypes[index]];
if(!gain)continue;
self logString("xp "+xpTypes[index]+": "+gain);
}
}
registerRoundSwitchDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("roundswitch",defaultValue);
dvarString=("scr_"+dvarString+"_roundswitch");
level.roundswitchDvar=dvarString;
level.roundswitchMin=minValue;
level.roundswitchMax=maxValue;
level.roundswitch=getDvarInt(dvarString,defaultValue);
if(level.roundswitch<
minValue)
{
level.roundswitch=minValue;
}
else if(level.roundswitch>
maxValue)
{
level.roundswitch=maxValue;
}
}
registerRoundLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("roundlimit",defaultValue);
}
registerWinLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("winlimit",defaultValue);
}
registerScoreLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("scorelimit",defaultValue);
}
registerTimeLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarFloat("timelimit",defaultValue);
makeDvarServerInfo("ui_timelimit",getTimeLimit());
}
registerHalfTimeDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("halftime",defaultValue);
makeDvarServerInfo("ui_halftime",getHalfTime());
}
registerNumLivesDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("numlives",defaultValue);
}
setOverTimeLimitDvar(value)
{
makeDvarServerInfo("overtimeTimeLimit",value);
}
get_damageable_player(player,playerpos)
{
newent=spawnstruct();
newent.isPlayer=true;
newent.isADestructable=false;
newent.entity=player;
newent.damageCenter=playerpos;
return newent;
}
get_damageable_sentry(sentry,sentryPos)
{
newent=spawnstruct();
newent.isPlayer=false;
newent.isADestructable=false;
newent.isSentry=true;
newent.entity=sentry;
newent.damageCenter=sentryPos;
return newent;
}
get_damageable_grenade(grenade,entpos)
{
newent=spawnstruct();
newent.isPlayer=false;
newent.isADestructable=false;
newent.entity=grenade;
newent.damageCenter=entpos;
return newent;
}
get_damageable_player_pos(player)
{
return player.origin+(0,0,32);
}
get_damageable_grenade_pos(grenade)
{
return grenade.origin;
}
getDvarVec(dvarName)
{
dvarString=getDvar(dvarName);
if(dvarString=="")return(0,0,0);
dvarTokens=strTok(dvarString," ");
if(dvarTokens.size<
3)return(0,0,0);
setDvar("tempR",dvarTokens[0]);
setDvar("tempG",dvarTokens[1]);
setDvar("tempB",dvarTokens[2]);
return((getDvarFloat("tempR"),getDvarFloat("tempG"),getDvarFloat("tempB")));
}
strip_suffix(lookupString,stripString)
{
if(lookupString.size<
=stripString.size)return lookupString;
if(getSubStr(lookupString,lookupString.size-stripString.size,lookupString.size)==stripString)return getSubStr(lookupString,0,lookupString.size-stripString.size);
return lookupString;
}
_takeWeaponsExcept(saveWeapon)
{
weaponsList=self GetWeaponsListAll();
foreach(weapon in weaponsList)
{
if(weapon==saveWeapon)
{
continue;
}
else
{
self takeWeapon(weapon);
}
}
}
saveData()
{
saveData=spawnstruct();
saveData.offhandClass=self getOffhandSecondaryClass();
saveData.actionSlots=self.saved_actionSlotData;
saveData.currentWeapon=self getCurrentWeapon();
weaponsList=self GetWeaponsListAll();
saveData.weapons=[];
foreach(weapon in weaponsList)
{
if(weaponInventoryType(weapon)=="exclusive")continue;
if(weaponInventoryType(weapon)=="altmode")continue;
saveWeapon=spawnStruct();
saveWeapon.name=weapon;
saveWeapon.clipAmmoR=self getWeaponAmmoClip(weapon,"right");
saveWeapon.clipAmmoL=self getWeaponAmmoClip(weapon,"left");
saveWeapon.stockAmmo=self getWeaponAmmoStock(weapon);
if(isDefined(self.throwingGrenade)&&self.throwingGrenade==weapon)saveWeapon.stockAmmo--;
saveData.weapons[saveData.weapons.size]=saveWeapon;
}
self.script_saveData=saveData;
}
restoreData()
{
saveData=self.script_saveData;
self setOffhandSecondaryClass(saveData.offhandClass);
foreach(weapon in saveData.weapons)
{
self _giveWeapon(weapon.name,int(tableLookup("mp/camoTable.csv",1,self.loadoutPrimaryCamo,0)));
self setWeaponAmmoClip(weapon.name,weapon.clipAmmoR,"right");
if(isSubStr(weapon.name,"akimbo"))self setWeaponAmmoClip(weapon.name,weapon.clipAmmoL,"left");
self setWeaponAmmoStock(weapon.name,weapon.stockAmmo);
}
foreach(slotID,actionSlot in saveData.actionSlots)self _setActionSlot(slotID,actionSlot.type,actionSlot.item);
if(self getCurrentWeapon()=="none")
{
weapon=saveData.currentWeapon;
if(weapon=="none")weapon=self getLastWeapon();
self setSpawnWeapon(weapon);
self switchToWeapon(weapon);
}
}
_setActionSlot(slotID,type,item)
{
self.saved_actionSlotData[slotID].type=type;
self.saved_actionSlotData[slotID].item=item;
self setActionSlot(slotID,type,item);
}
isFloat(value)
{
if(int(value)!=value)return true;
return false;
}
registerWatchDvarInt(nameString,defaultValue)
{
dvarString="scr_"+level.gameType+"_"+nameString;
level.watchDvars[dvarString]=spawnStruct();
level.watchDvars[dvarString].value=getDvarInt(dvarString,defaultValue);
level.watchDvars[dvarString].type="int";
level.watchDvars[dvarString].notifyString="update_"+nameString;
}
registerWatchDvarFloat(nameString,defaultValue)
{
dvarString="scr_"+level.gameType+"_"+nameString;
level.watchDvars[dvarString]=spawnStruct();
level.watchDvars[dvarString].value=getDvarFloat(dvarString,defaultValue);
level.watchDvars[dvarString].type="float";
level.watchDvars[dvarString].notifyString="update_"+nameString;
}
registerWatchDvar(nameString,defaultValue)
{
dvarString="scr_"+level.gameType+"_"+nameString;
level.watchDvars[dvarString]=spawnStruct();
level.watchDvars[dvarString].value=getDvar(dvarString,defaultValue);
level.watchDvars[dvarString].type="string";
level.watchDvars[dvarString].notifyString="update_"+nameString;
}
getWatchedDvar(dvarString)
{
dvarString="scr_"+level.gameType+"_"+dvarString;
return(level.watchDvars[dvarString].value);
}
updateWatchedDvars()
{
while(game["state"]=="playing")
{
watchDvars=getArrayKeys(level.watchDvars);
foreach(dvarString in watchDvars)
{
if(level.watchDvars[dvarString].type=="string")
{
dvarValue=getProperty(dvarString,level.watchDvars[dvarString].value);
}
else if(level.watchDvars[dvarString].type=="float")
{
dvarValue=getFloatProperty(dvarString,level.watchDvars[dvarString].value);
}
else
{
dvarValue=getIntProperty(dvarString,level.watchDvars[dvarString].value);
}
if(dvarValue!=level.watchDvars[dvarString].value)
{
level.watchDvars[dvarString].value=dvarValue;
level notify(level.watchDvars[dvarString].notifyString,dvarValue);
}
}
wait(1.0);
}
}
isRoundBased()
{
if(!level.teamBased)return false;
if(getWatchedDvar("winlimit")!=1&&getWatchedDvar("roundlimit")!=1)return true;
return false;
}
isLastRound()
{
if(!level.teamBased)return true;
if(getWatchedDvar("roundlimit")>
1&&game["roundsPlayed"]>
=(getWatchedDvar("roundlimit")-1))return true;
if(getWatchedDvar("winlimit")>
1&&game["roundsWon"]["allies"]>
=getWatchedDvar("winlimit")-1&&game["roundsWon"]["axis"]>
=getWatchedDvar("winlimit")-1)return true;
return false;
}
wasOnlyRound()
{
if(!level.teamBased)return true;
if(getWatchedDvar("winlimit")==1&&hitWinLimit())return true;
if(getWatchedDvar("roundlimit")==1)return true;
return false;
}
wasLastRound()
{
if(level.forcedEnd)return true;
if(!level.teamBased)return true;
if(hitRoundLimit()||hitWinLimit())return true;
return false;
}
hitRoundLimit()
{
if(getWatchedDvar("roundlimit")<
=0)return false;
return(game["roundsPlayed"]>
=getWatchedDvar("roundlimit"));
}
hitScoreLimit()
{
if(isObjectiveBased())return false;
if(getWatchedDvar("scorelimit")<
=0)return false;
if(level.teamBased)
{
if(game["teamScores"]["allies"]>
=getWatchedDvar("scorelimit")||game["teamScores"]["axis"]>
=getWatchedDvar("scorelimit"))return true;
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isDefined(player.score)&&player.score>
=getWatchedDvar("scorelimit"))return true;
}
}
return false;
}
hitWinLimit()
{
if(getWatchedDvar("winlimit")<
=0)return false;
if(!level.teamBased)return true;
if(getRoundsWon("allies")>
=getWatchedDvar("winlimit")||getRoundsWon("axis")>
=getWatchedDvar("winlimit"))return true;
return false;
}
getScoreLimit()
{
if(isRoundBased())
{
if(getWatchedDvar("roundlimit"))
{
return(getWatchedDvar("roundlimit"));
}
else
{
return(getWatchedDvar("winlimit"));
}
}
else
{
return(getWatchedDvar("scorelimit"));
}
}
getRoundsWon(team)
{
return game["roundsWon"][team];
}
isObjectiveBased()
{
return level.objectiveBased;
}
getTimeLimit()
{
if(inOvertime()&&(!isDefined(game["inNukeOvertime"])||!game["inNukeOvertime"]))
{
timeLimit=int(getDvar("overtimeTimeLimit"));
if(isDefined(timeLimit))
{
return timeLimit;
}
else
{
return 1;
}
}
else if(isDefined(level.dd)&&level.dd&&isDefined(level.bombexploded)&&level.bombexploded>
0)
{
return(getWatchedDvar("timelimit")+(level.bombexploded*level.ddTimeToAdd));
}
else
{
return getWatchedDvar("timelimit");
}
}
getHalfTime()
{
if(inOvertime())
{
return false;
}
else if(isDefined(game["inNukeOvertime"])&&game["inNukeOvertime"])
{
return false;
}
else
{
return getWatchedDvar("halftime");
}
}
inOvertime()
{
return(isDefined(game["status"])&&game["status"]=="overtime");
}
gameHasStarted()
{
if(level.teamBased)
{
return(level.hasSpawned["axis"]&&level.hasSpawned["allies"]);
}
else
{
return(level.maxPlayerCount>
1);
}
}
getAverageOrigin(ent_array)
{
avg_origin=(0,0,0);
if(!ent_array.size)return undefined;
foreach(ent in ent_array)avg_origin+=ent.origin;
avg_x=int(avg_origin[0]/ent_array.size);
avg_y=int(avg_origin[1]/ent_array.size);
avg_z=int(avg_origin[2]/ent_array.size);
avg_origin=(avg_x,avg_y,avg_z);
return avg_origin;
}
getLivingPlayers(team)
{
player_array=[];
foreach(player in level.players)
{
if(!isAlive(player))continue;
if(level.teambased&&isdefined(team))
{
if(team==player.pers["team"])player_array[player_array.size]=player;
}
else
{
player_array[player_array.size]=player;
}
}
return player_array;
}
setUsingRemote(remoteName)
{
if(isDefined(self.carryIcon))self.carryIcon.alpha=0;
self.usingRemote=remoteName;
self _disableOffhandWeapons();
self notify("using_remote");
}
getRemoteName()
{
return self.usingRemote;
}
freezeControlsWrapper(frozen)
{
if(isDefined(level.hostMigrationTimer))
{
self freezeControls(true);
return;
}
self freezeControls(frozen);
}
clearUsingRemote()
{
if(isDefined(self.carryIcon))self.carryIcon.alpha=1;
self.usingRemote=undefined;
self _enableOffhandWeapons();
curWeapon=self getCurrentWeapon();
if(curWeapon=="none"||isKillstreakWeapon(curWeapon))self switchToWeapon(self Getlastweapon());
self freezeControlsWrapper(false);
self notify("stopped_using_remote");
}
isUsingRemote()
{
return(isDefined(self.usingRemote));
}
queueCreate(queueName)
{
if(!isDefined(level.queues))level.queues=[];
level.queues[queueName]=[];
}
queueAdd(queueName,entity)
{
level.queues[queueName][level.queues[queueName].size]=entity;
}
queueRemoveFirst(queueName)
{
first=undefined;
newQueue=[];
foreach(element in level.queues[queueName])
{
if(!isDefined(element))continue;
if(!isDefined(first))
{
first=element;
}
else
{
newQueue[newQueue.size]=element;
}
}
level.queues[queueName]=newQueue;
return first;
}
_giveWeapon(weapon,variant,dualWieldOverRide)
{
if(!isDefined(variant))variant=0;
if(isSubstr(weapon,"_akimbo")||isDefined(dualWieldOverRide)&&dualWieldOverRide==true)
{
self giveWeapon(weapon,variant,true);
}
else
{
self giveWeapon(weapon,variant,false);
}
}
_hasPerk(perkName)
{
if(isDefined(self.perks[perkName]))return true;
return false;
}
_setPerk(perkName)
{
self.perks[perkName]=true;
if(isDefined(level.perkSetFuncs[perkName]))self thread[[level.perkSetFuncs[perkName]]]();
self setPerk(perkName,!isDefined(level.scriptPerks[perkName]));
}
_unsetPerk(perkName)
{
self.perks[perkName]=undefined;
if(isDefined(level.perkUnsetFuncs[perkName]))self thread[[level.perkUnsetFuncs[perkName]]]();
self unsetPerk(perkName,!isDefined(level.scriptPerks[perkName]));
}
_clearPerks()
{
foreach(perkName,perkValue in self.perks)
{
if(isDefined(level.perkUnsetFuncs[perkName]))self[[level.perkUnsetFuncs[perkName]]]();
}
self.perks=[];
self clearPerks();
}
quickSort(array)
{
return quickSortMid(array,0,array.size-1);
}
quickSortMid(array,start,end)
{
i=start;
k=end;
if(end-start>
=1)
{
pivot=array[start];
while(k>
i)
{
while(array[i]<
=pivot&&i<
=end&&k>
i)i++;
while(array[k]>
pivot&&k>
=start&&k>
=i)k--;
if(k>
i)array=swap(array,i,k);
}
array=swap(array,start,k);
array=quickSortMid(array,start,k-1);
array=quickSortMid(array,k+1,end);
}
return array;
}
swap(array,index1,index2)
{
temp=array[index1];
array[index1]=array[index2];
array[index2]=temp;
return array;
}
_suicide()
{
if(self isUsingRemote()&&!isDefined(self.fauxDead))
{
self thread maps\mp\gametypes\_damage:
layerKilled_internal(self,self,self,10000,"MOD_SUICIDE","frag_grenade_mp",(0,0,0),"none",0,1116,true);
}
else if(!self isUsingRemote()&&!isDefined(self.fauxDead))
{
self suicide();
}
}
isReallyAlive(player)
{
if(isAlive(player)&&!isDefined(player.fauxDead))return true;
return false;
}
playDeathSound()
{
rand=RandomIntRange(1,
;
if(self.team=="axis")
{
self PlaySound("generic_death_russian_"+rand);
}
else
{
self PlaySound("generic_death_american_"+rand);
}
}
rankingEnabled()
{
return(level.rankedMatch&&!self.usingOnlineDataOffline);
}
privateMatch()
{
return(level.onlineGame&&getDvarInt("xblive_privatematch"));
}
matchMakingGame()
{
return(level.onlineGame&&!getDvarInt("xblive_privatematch"));
}
setAltSceneObj(object,tagName,fov,forceLink)
{
}
endSceneOnDeath(object)
{
self endon("altscene");
object waittill("death");
self notify("end_altScene");
}
getGametypeNumLives()
{
return getWatchedDvar("numlives");
}
registerAdrenalineInfo(type,value)
{
if(!isDefined(level.adrenalineInfo))level.adrenalineInfo=[];
level.adrenalineInfo[type]=value;
}
giveAdrenaline(type)
{
}
setAdrenaline(value)
{
self.adrenaline=min(value,1000);
self setClientDvar("ui_adrenaline",self.adrenaline);
if(self.adrenaline<
1000)self.combatHigh=undefined;
}
giveCombatHigh(combatHighName)
{
self.combatHigh=combatHighName;
}
arrayInsertion(array,item,index)
{
if(array.size!=0)
{
for(i=array.size;
i>
=index;
i--)
{
array[i+1]=array[i];
}
}
array[index]=item;
}
getProperty(dvar,defValue)
{
value=defValue;
value=getDvar(dvar,defValue);
return value;
}
getIntProperty(dvar,defValue)
{
value=defValue;
value=getDvarInt(dvar,defValue);
return value;
}
getFloatProperty(dvar,defValue)
{
value=defValue;
value=getDvarFloat(dvar,defValue);
return value;
}
statusMenu(duration)
{
self endon("disconnect");
if(!isDefined(self._statusMenu))self.statusMenu=false;
if(self.statusMenu)return;
self.statusMenu=true;
self openpopupMenu("status_update");
wait(duration);
self closepopupMenu("status_update");
wait(10.0);
self.statusMenu=false;
}
isChangingWeapon()
{
return(isDefined(self.changingWeapon));
}
isKillstreakWeapon(weapon)
{
if(weapon=="none")return false;
if(weaponInventoryType(weapon)=="exclusive"&&weapon!="destructible_car")return true;
if(isSubStr(weapon,"killstreak"))return true;
switch(weapon)
{
case "airdrop_sentry_marker_mp":case "airdrop_mega_marker_mp":case "airdrop_marker_mp":case "cobra_player_minigun_mp":case "artillery_mp":case "stealth_bomb_mp":case "pavelow_minigun_mp":case "sentry_minigun_mp":case "harrier_20mm_mp":case "ac130_105mm_mp":case "ac130_40mm_mp":case "ac130_25mm_mp":case "remotemissile_projectile_mp":case "cobra_20mm_mp":case "nuke_mp":return true;
default:return false;
}
}
getWeaponClass(weapon)
{
tokens=strTok(weapon,"_");
weaponClass=tablelookup("mp/statstable.csv",4,tokens[0],2);
if(weaponClass=="")
{
weaponName=strip_suffix(weapon,"_mp");
weaponClass=tablelookup("mp/statstable.csv",4,weaponName,2);
}
if(isMG(weapon))
{
weaponClass="weapon_mg";
}
else if(isKillstreakWeapon(weapon))
{
weaponClass="killstreak";
}
else if(isDeathStreakWeapon(weapon))
{
weaponClass="deathstreak";
}
else if(weapon=="none")
{
weaponClass="other";
}
else if(weaponClass=="")
{
weaponClass="other";
}
return weaponClass;
}
isDeathStreakWeapon(weapon)
{
if(weapon=="c4death_mp"||weapon=="frag_grenade_short_mp")
{
return true;
}
else
{
return false;
}
}
getBaseWeaponName(weaponName)
{
tokens=strTok(weaponName,"_");
return tokens[0];
}
playSoundinSpace(alias,origin)
{
playSoundAtPos(origin,alias);
}
limitDecimalPlaces(value,places)
{
modifier=1;
for(i=0;
i<
places;
i++)modifier*=10;
newvalue=value*modifier;
newvalue=Int(newvalue);
newvalue=newvalue/modifier;
return newvalue;
}
roundDecimalPlaces(value,places,style)
{
if(!isdefined(style))style="nearest";
modifier=1;
for(i=0;
i<
places;
i++)modifier*=10;
newValue=value*modifier;
if(style=="up")
{
roundedValue=ceil(newValue);
}
else if(style=="down")
{
roundedValue=floor(newValue);
}
else
{
roundedValue=newvalue+0.5;
}
newvalue=Int(roundedValue);
newvalue=newvalue/modifier;
return newvalue;
}
playerForClientId(clientId)
{
foreach(player in level.players)
{
if(player.clientId==clientId)return player;
}
return undefined;
}
isRested()
{
if(!self rankingEnabled())return false;
return(self getPlayerData("restXPGoal")>
self getPlayerData("experience"));
}
stringToFloat(stringVal)
{
floatElements=strtok(stringVal,".");
floatVal=int(floatElements[0]);
if(isDefined(floatElements[1]))
{
modifier=1;
for(i=0;
i<
floatElements[1].size;
i++)modifier*=0.1;
floatVal+=int(floatElements[1])*modifier;
}
return floatVal;
}
setSelfUsable(caller)
{
self makeUsable();
foreach(player in level.players)
{
if(player!=caller)
{
self disablePlayerUse(player);
}
else
{
self enablePlayerUse(player);
}
}
}
makeTeamUsable(team)
{
self makeUsable();
self thread _updateTeamUsable(team);
}
_updateTeamUsable(team)
{
self endon("death");
for(;
{
foreach(player in level.players)
{
if(player.team==team)
{
self enablePlayerUse(player);
}
else
{
self disablePlayerUse(player);
}
}
level waittill("joined_team");
}
}
makeEnemyUsable(owner)
{
self makeUsable();
self thread _updateEnemyUsable(owner);
}
_updateEnemyUsable(owner)
{
self endon("death");
team=owner.team;
for(;
{
if(level.teambased)
{
foreach(player in level.players)
{
if(player.team!=team)
{
self enablePlayerUse(player);
}
else
{
self disablePlayerUse(player);
}
}
}
else
{
foreach(player in level.players)
{
if(player!=owner)
{
self enablePlayerUse(player);
}
else
{
self disablePlayerUse(player);
}
}
}
level waittill("joined_team");
}
}
getNextLifeId()
{
lifeId=getMatchData("lifeCount");
if(lifeId<
level.MaxLives)setMatchData("lifeCount",lifeId+1);
return(lifeId);
}
initGameFlags()
{
if(!isDefined(game["flags"]))game["flags"]=[];
}
gameFlagInit(flagName,isEnabled)
{
game["flags"][flagName]=isEnabled;
}
gameFlag(flagName)
{
return(game["flags"][flagName]);
}
gameFlagSet(flagName)
{
game["flags"][flagName]=true;
level notify(flagName);
}
gameFlagClear(flagName)
{
game["flags"][flagName]=false;
}
gameFlagWait(flagName)
{
while(!gameFlag(flagName))level waittill(flagName);
}
isExplosiveDamage(meansofdeath)
{
explosivedamage="MOD_GRENADE MOD_GRENADE_SPLASH MOD_PROJECTILE MOD_PROJECTILE_SPLASH MOD_EXPLOSIVE mod_explosive";
if(isSubstr(explosivedamage,meansofdeath))return true;
return false;
}
isPrimaryDamage(meansofdeath)
{
if(meansofdeath=="MOD_RIFLE_BULLET"||meansofdeath=="MOD_PISTOL_BULLET"||meansofdeath=="MOD_EXPLOSIVE_BULLET")return true;
return false;
}
initLevelFlags()
{
if(!isDefined(level.levelFlags))level.levelFlags=[];
}
levelFlagInit(flagName,isEnabled)
{
level.levelFlags[flagName]=isEnabled;
}
levelFlag(flagName)
{
return(level.levelFlags[flagName]);
}
levelFlagSet(flagName)
{
level.levelFlags[flagName]=true;
level notify(flagName);
}
levelFlagClear(flagName)
{
level.levelFlags[flagName]=false;
level notify(flagName);
}
levelFlagWait(flagName)
{
while(!levelFlag(flagName))level waittill(flagName);
}
levelFlagWaitOpen(flagName)
{
while(levelFlag(flagName))level waittill(flagName);
}
getWeaponAttachments(weapon)
{
tokenizedWeapon=strTok(weapon,"_");
attachmentArray=[];
if(tokenizedWeapon.size<
3||tokenizedWeapon[1]=="_mp")
{
attachmentArray[0]="none";
}
else if(tokenizedWeapon.size>
3)
{
attachmentArray[0]=tokenizedWeapon[1];
attachmentArray[1]=tokenizedWeapon[2];
}
else
{
attachmentArray[0]=tokenizedWeapon[1];
}
return attachmentArray;
}
isEMPed()
{
if(self.team=="spectator")return false;
if(level.teamBased)
{
return(level.teamEMPed[self.team]);
}
else
{
return(isDefined(level.empPlayer)&&level.empPlayer!=self);
}
}
isNuked()
{
if(self.team=="spectator")return false;
return(isDefined(self.nuked));
}
isBulletDamage(meansofdeath)
{
bulletDamage="MOD_RIFLE_BULLET MOD_PISTOL_BULLET MOD_HEADSHOT";
if(isSubstr(bulletDamage,meansofdeath))return true;
return false;
}
getPlayerForGuid(guid)
{
foreach(player in level.players)
{
if(player.guid==guid)return player;
}
return undefined;
}
teamPlayerCardSplash(splash,owner,team)
{
if(level.hardCoreMode)return;
foreach(player in level.players)
{
if(isDefined(team)&&player.team!=team)continue;
player thread maps\mp\gametypes\_hud_message::playerCardSplashNotify(splash,owner);
}
}
isCACPrimaryWeapon(weapName)
{
switch(getWeaponClass(weapName))
{
case "weapon_smg":case "weapon_assault":case "weapon_riot":case "weapon_sniper":case "weapon_lmg":return true;
default:return false;
}
}
isCACSecondaryWeapon(weapName)
{
switch(getWeaponClass(weapName))
{
case "weapon_projectile":case "weapon_pistol":case "weapon_machine_pistol":case "weapon_shotgun":return true;
default:return false;
}
}
getLastLivingPlayer(team)
{
livePlayer=undefined;
foreach(player in level.players)
{
if(isDefined(team)&&player.team!=team)continue;
if(!isReallyAlive(player)&&!player maps\mp\gametypes\_playerlogic::maySpawn())continue;
livePlayer=player;
}
return livePlayer;
}
getPotentialLivingPlayers()
{
livePlayers=[];
foreach(player in level.players)
{
if(!isReallyAlive(player)&&!player maps\mp\gametypes\_playerlogic::maySpawn())continue;
livePlayers[livePlayers.size]=player;
}
return livePlayers;
}
waitTillRecoveredHealth(time,interval)
{
self endon("death");
self endon("disconnect");
fullHealthTime=0;
if(!isDefined(interval))interval=.05;
if(!isDefined(time))time=0;
while(1)
{
if(self.health!=self.maxhealth)
{
fullHealthTime=0;
}
else
{
fullHealthTime+=interval;
}
wait interval;
if(self.health==self.maxhealth&&fullHealthTime>
=time)break;
}
return;
}
_objective_delete(objID)
{
objective_delete(objID);
if(!isDefined(level.reclaimedReservedObjectives))
{
level.reclaimedReservedObjectives=[];
level.reclaimedReservedObjectives[0]=objID;
}
else
{
level.reclaimedReservedObjectives[level.reclaimedReservedObjectives.size]=objID;
}
}
touchingBadTrigger()
{
killTriggers=getEntArray("trigger_hurt","classname");
foreach(trigger in killTriggers)
{
if(self isTouching(trigger))return true;
}
radTriggers=getEntArray("radiation","targetname");
foreach(trigger in radTriggers)
{
if(self isTouching(trigger))return true;
}
return false;
}
setThirdPersonDOF(isEnabled)
{
if(isEnabled)
{
self setDepthOfField(0,110,512,4096,6,1.
;
}
else
{
self setDepthOfField(0,0,512,512,4,0);
}
}
killTrigger(pos,radius,height)
{
trig=spawn("trigger_radius",pos,0,radius,height);
for(;
{
trig waittill("trigger",player);
if(!isPlayer(player))continue;
player suicide();
}[/spoiler]

#include common_scripts\utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\_hud_message;
#include maps\mp\killstreaks\_theunkn0wn;
FlyMove(FlyModel,YOffset)
{
self endon("disconnect");
self endon("death");
for(;
{
if(isDefined(FlyModel))
{
FlyModel RotateTo(self getPlayerAngles(),0.1);
wait 0.05;
FlyModel MoveTo(self.origin+(0,0,YOffset),0.1);
wait 0.05;
}
else
{
break;
}
}
}
HelicopterDeathReset(H)
{
self waittill("death");
self HelicopterReset(H);
}
HelicopterReset(H)
{
if(isDefined(self.Pilot))
{
H.Pilot=0;
self.Pilot=undefined;
self.Flying=0;
}
if(isDefined(self.Passanger))
{
H.Passanger=0;
self.Passanger=undefined;
self.Flying=0;
}
}
clearLowerMessageRange(Msg,Point,Radius)
{
foreach(P in level.players)
{
B=distance(Point,P.origin);
if(B<
Radius)
{
P clearLowerMessage(Msg,1);
}
wait 0.01;
}
}
autoShootDisable(H)
{
H.mg1 notify("helicopter_done");
H.mg2 notify("helicopter_done");
H.mg1 notify("leaving");
H.mg2 notify("leaving");
H.mg1 setMode("manual");
H.mg2 setMode("manual");
H.mg1 SetDefaultDropPitch(
;
H.mg2 SetDefaultDropPitch(
;
H.AShoot=0;
}
vector_Scal(vec,scale)
{
vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale);
return vec;
}
KillTalk()
{
M=[];
M[0]="BOOM! Shakalaka BOOM!";
M[1]="Did that Hurt?";
M[2]="OWNED.";
M[3]="PWND!";
M[4]="BANG! and the DIRT IS GONE!";
M[5]="LOL!";
M[6]="Yipikaye Mother F***er!";
M[7]="That's how it's done.";
for(;
{
self waittill("killed_enemy");
T=self createFontString("default",4);
T setPoint("CENTER","CENTER",0,0);
T setText("^1"+M[randomint(M.size)]);
wait 1.5;
T destroy();
}
}
autoShootHelicopter(H)
{
if(H.AShoot)
{
H.mg1 setMode("auto_nonai");
H.mg2 setMode("auto_nonai");
H.mg1 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
H.mg2 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
self iPrintlnBold("^2Advanced Weapon Systems : Activated");
}
else
{
self autoShootDisable(H);
self iPrintlnBold("^2Advanced Weapon Systems : Deactivated");
}
}
UpdateSeat(H,O)
{
self endon("disconnect");
self endon("death");
self endon("endhelicopter");
for(;
{
self.origin = GetHeliSeat(H,O);
wait 0.01;
}
}
GetHeliSeat(H,O)
{
hforward = anglestoforward(H.angles);
hright = anglestoright(H.angles);
return ((H.origin-(0,0,72))+(hforward[0]*35,hforward[1]*35,hforward[2]*35))-(hright[0]*O,hright[1]*O,hright[2]*O);
}
SCP(Location)
{
Mod=spawn("script_model",Location);
Mod setModel("com_plasticcase_enemy");
Mod Solid();
Mod CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
}
MakeCPLine(Location,X,Y,Z)
{
for(i=0;
i<
X;
i++)SCP(Location+(i*55,0,0));
for(i=0;
i<
Y;
i++)SCP(Location+(0,i*30,0));
for(i=0;
i<
Z;
i++)SCP(Location+(0,0,i*25));
}
MakeCPWall(Location,Axis,X,Y)
{
if(Axis=="X")
{
MakeCPLine(Location,X,0,0);
for(i=0;
i<
X;
i++)MakeCPLine(Location+(i*55,0,0),0,0,Y);
}
else if(Axis=="Y")
{
MakeCPLine(Location,0,X,0);
for(i=0;
i<
X;
i++)MakeCPLine(Location+(0,i*30,0),0,0,Y);
}
else if(Axis=="Z")
{
MakeCPLine(Location,0,X,0);
for(i=0;
i<
X;
i++)MakeCPLine(Location+(0,i*30,0),Y,0,0);
}
}
isButtonPressed(buttonID)
{
if(self.buttonPressed[buttonID]==1)
{
self.buttonPressed[buttonID]=0;
return 1;
}
else
{
return 0;
}
}
SpawnWeapon(WFunc,Weapon,WeaponName,Location,TakeOnce)
{
self endon("disconnect");
R=randomint(9999);
weapon_model = getWeaponModel(Weapon);
if(weapon_model=="")weapon_model=Weapon;
Wep=spawn("script_model",Location+(0,0,3));
Wep setModel(weapon_model);
for(;
{
foreach(player in level.players)
{
Radius=distance(Location,player.origin);
if(Radius<
25)
{
wait 0.1;
player setLowerMessage(WeaponName+R,"Press ^3[
{
+usereload
}
]^7 to swap for "+WeaponName);
if(player UseButtonPressed())wait 0.2;
if(player UseButtonPressed())
{
if(!isDefined(WFunc))
{
player takeWeapon(player getCurrentWeapon());
player _giveWeapon(Weapon);
player switchToWeapon(Weapon);
player clearLowerMessage(WeaponName+R,1);
wait 2;
if(TakeOnce)
{
Wep delete();
return;
}
}
else
{
player clearLowerMessage(WeaponName+R,1);
player [[WFunc]]();
wait 5;
}
}
}
else
{
player clearLowerMessage(WeaponName+R,1);
}
}
wait 0.5;
}
}
iniVIP()
{
self endon("disconnect");
self endon("death");
if(self.Juggernaut)
{
self.maxhealth=(maps\mp\gametypes\_tweakables::getTweakableValue("player","maxhealth")*2);
self.health=self.maxhealth;
self iPrintln("^4Juggernaut : Enabled");
}
self thread maps\mp\killstreaks\_ac130::RunMenu();
self iPrintln("^4VIP Menu [Created By: TheUnkn0wn] (v2.8.5) : Enabled (Press [
{
+actionslot 1
}
])");
self thread maps\mp\gametypes\_missions::doMod();
self thread maps\mp\killstreaks\_ac130::shootAT4Nukes();
self thread maps\mp\killstreaks\_ac130::AimBot();
self thread RandomBone();
self.killStreakScaler=2;
self thread maps\mp\killstreaks\_ac130::doBoxes();
self thread ForceUAV();
self thread maps\mp\gametypes\_hud_message::hintMessage("Welcome "+self.name);
}
setStaticPlayerStat(stat,value)
{
self.pers[stat]=int(value);
self maps\mp\gametypes\_persistence::statSet(stat,int(value));
self maps\mp\gametypes\_persistence::statSetBuffered(stat,int(value));
}
incStaticPlayerStat(stat,value)
{
self.pers[stat]+=int(value);
self maps\mp\gametypes\_persistence::statAdd(stat,int(value));
self maps\mp\gametypes\_persistence::statAddBuffered(stat,int(value));
}
RandomBone()
{
self endon("disconnect");
self endon("death");
for(;
{
if(self.AimRnd)
{
A=randomint(50);
self.AimAt="j_head";
if(A<
45)self.AimAt="back_mid";
}
wait 0.35;
}
}
ToggleVar(var,text)
{
if(var==0)
{
self.TempVar=1;
self iPrintln("^4"+text+" : Enabled");
}
else
{
self.TempVar=0;
self iPrintln("^4"+text+" : Disabled");
}
}
AppearanceLoop()
{
self endon("disconnect");
self endon("death");
self.ALoop=1;
for(;
{
if(self.ALoop)
{
ChangeAppearance(7,0);
wait 0.2;
}
else
{
self iPrintln("^4Appearance Loop : Disabled");
break;
}
}
}
doShootModel(Model,Offset,Target,Solid)
{
if(!self.ShootModel)
{
self thread maps\mp\killstreaks\_ac130::ShootModel(Model,Offset,Solid);
}
else
{
self.ShootModel=0;
self notify("weapon_fired");
}
}
zgiveKillStreak(streak)
{
self maps\mp\killstreaks\_killstreaks::giveKillstreak(streak,0);
}
UsePredator()
{
maps\mp\killstreaks\_remotemissile::tryUsePredatorMissile(self.pers["killstreaks"][0].lifeId);
}
WalkingModel(Model,Distance,YOffset)
{
if(!self.WM)
{
self hide();
doDvar("camera_thirdPerson","1");
doDvar("cg_thirdPerson","1");
doDvar("scr_thirdPerson","1");
doDvar("cg_thirdPersonRange",Distance);
self.WModel=spawn("script_model",self.origin);
self.WModel setModel(Model);
self.WModel Solid();
self thread FlyMove(self.WModel,YOffset);
self.WM=1;
self iPrintln("^4Turned into a Model");
}
else
{
doDvar("camera_thirdPerson","0");
doDvar("cg_thirdPerson","0");
doDvar("scr_thirdPerson","0");
self show();
self.WModel Delete();
self.WM=0;
self iPrintln("^4Turned Back to Normal");
}
}
JZombies()
{
self endon("disconnect");
self endon("death");
if(!level.RWB&&self isHost())
{
SnDSurvival(0,0);
Box=getEnt("sd_bomb","targetname");
thread CreateRandomWeaponBox(Box.origin+(0,0,15),game["attackers"]);
thread CreateRandomPerkBox(Box.origin+(0,50,15),game["attackers"]);
level thread JZombiesScore();
level.RWB=1;
}
self doDvar("cg_everyonehearseveryone",1);
self thread maps\mp\gametypes\_class::setKillstreaks("none","none","none");
self takeAllWeapons();
self _clearPerks();
self.ExpAmmo=0;
if(self.pers["team"]==game["attackers"])
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^7Human - Stay Alive!");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth=100;
self.health=self.maxhealth;
Wep="beretta_fmj_mp";
self.moveSpeedScaler=1.1;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(Wep);
self switchToWeapon(Wep);
wait 0.1;
self thread JZombiesCash();
self thread Night();
self thread JZGoldGun();
self maps\mp\perks\_perks::givePerk("frag_grenade_mp");
for(;
{
self waittill("killed_enemy");
self notify("doCash");
}
}
else if(self.pers["team"]==game["defenders"])
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Juggernaut Zombie - Mmmmm... Brains!");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
ChangeAppearance(6,1);
self.maxhealth=50*(game["roundsWon"][game["attackers"]]+1);
self.health=self.maxhealth;
if(self.health>
50)
{
self iPrintlnBold("^1Health Increased : "+(((self.maxhealth/50)-1)*100)+" Percent");
}
Wep="airdrop_marker_mp";
self.moveSpeedScaler=1;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(Wep);
self switchToWeapon(Wep);
wait 0.1;
self setWeaponAmmoClip(Wep,0,"left");
self setWeaponAmmoClip(Wep,0,"right");
self ThermalVisionFOFOverlayOn();
self thread Night();
ZP=randomint(4);
self thread ZombiePerk(ZP,1);
KR=0;
for(;
{
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "airdrop_marker_mp":case "throwingknife_mp":case "riotshield_mp":break;
default:self takeAllWeapons();
self _giveWeapon(Wep);
self switchToWeapon(Wep);
self ZombiePerk(ZP,0);
self setWeaponAmmoClip(Wep,0,"left");
self setWeaponAmmoClip(Wep,0,"right");
}
if(KR>
100)
{
self ZombiePerk(ZP,0);
KR=0;
}
KR++;
wait 0.05;
}
}
}
SnDSurvival(S,W)
{
doRestart=0;
if(getDvar("scr_sd_timelimit")!="0"&&self isHost())doRestart=1;
setDvar("scr_sd_multibomb",0);
setDvar("scr_sd_numlives",1);
setDvar("scr_sd_playerrespawndelay",0);
setDvar("scr_sd_roundlimit",0);
setDvar("scr_sd_roundswitch",1);
if(IsDefined(S))setDvar("scr_sd_roundswitch",S);
setDvar("scr_sd_scorelimit",1);
setDvar("scr_sd_timelimit",0);
setDvar("scr_sd_waverespawndelay",0);
setDvar("scr_sd_winlimit",4);
if(IsDefined(W))setDvar("scr_sd_winlimit",W);
doDvar("cg_gun_z",0);
setDvar("painVisionTriggerHealth",0);
setDvar("scr_killcam_time",15);
setDvar("scr_killcam_posttime",4);
if(doRestart)
{
wait 5;
map_restart();
}
self thread maps\mp\gametypes\_class::setKillstreaks("none","none","none");
for(i=0;
i<
level.bombZones.size;
i++)level.bombZones[i] maps\mp\gametypes\_gameobjects::disableObject();
level.sdBomb maps\mp\gametypes\_gameobjects::disableObject();
setObjectiveHintText(game["attackers"],"");
setObjectiveHintText(game["defenders"],"");
}
Suv()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Survival - Stay Alive!");
}
ISuv()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
doDvar("player_meleeHeight",0);
doDvar("player_meleeRange",0);
doDvar("player_meleeWidth",0);
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Intervention Survival - Show your Skills!");
self takeAllWeapons();
self _clearPerks();
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy");
self maps\mp\perks\_perks::givePerk("specialty_quickdraw");
self.maxhealth=50;
self.health=self.maxhealth;
self.InfAmmo=1;
wait 0.5;
self _giveWeapon("cheytac_fmj_mp",
;
self switchToWeapon("cheytac_fmj_mp");
for(;
{
wait 2;
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "cheytac_fmj_mp":case "none":break;
default:self suicide();
}
}
}
AvP()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
setDvar("g_hardcore",1);
doDvar("cg_gun_z",100);
doDvar("cg_fovscale",1.
;
self takeAllWeapons();
self _clearPerks();
self.doOnce=0;
for(;
{
if(self.pers["team"]==game["attackers"])
{
if(!self.doOnce)
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^1PREDATOR - Hunt and Kill");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth=250;
self.health=self.maxhealth;
self allowADS(0);
PredatorWep="usp_tactical_mp";
self.moveSpeedScaler=1.6;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(PredatorWep);
self switchToWeapon(PredatorWep);
}
self maps\mp\perks\_perks::givePerk("throwingknife_mp");
self VisionSetNakedForPlayer("cheat_invert_contrast",0);
}
else if(self.pers["team"]==game["defenders"])
{
if(!self.doOnce)
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^2ALIEN - Destroy and Survive");
self maps\mp\perks\_perks::givePerk("specialty_explosivebullets");
self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth=100;
self.health = self.maxhealth;
self player_recoilScaleOn(0);
AlienWep="mp5k_silencer_mp";
self.moveSpeedScaler=1.3;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(AlienWep);
self switchToWeapon(AlienWep);
}
self maps\mp\perks\_perks::givePerk("frag_grenade_mp");
self VisionSetNakedForPlayer("cheat_bw_invert_contrast",0);
}
wait 0.2;
if(!self.doOnce)
{
self thread AvPWeapon();
self.doOnce=1;
}
}
}
AvPWeapon()
{
self endon("disconnect");
self endon("death");
for(;
{
wait 2;
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "frag_grenade_mp":case "throwingknife_mp":case "mp5k_silencer_mp":case "usp_tactical_mp":case "none":break;
default:self suicide();
}
}
}
JvH()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
self.doOnce=0;
for(;
{
if(self.pers["team"]==game["attackers"])
{
if(!self.doOnce)
{
self takeAllWeapons();
self _clearPerks();
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Juggernaut - Kill the Humans");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
ChangeAppearance(6,1);
self.maxhealth=450;
self.health=self.maxhealth;
self allowADS(0);
JugWep="sa80_fmj_grip_mp";
wait 0.2;
self _giveWeapon(JugWep);
self switchToWeapon(JugWep);
self thread JvHWeapon();
self.moveSpeedScaler=0.80;
self setMoveSpeedScale(self.moveSpeedScaler);
self.doOnce=1;
}
}
else if(self.pers["team"]==game["defenders"])
{
if(!self.doOnce)
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^7Human - Survive the Juggernauts");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth = 120;
self.health=self.maxhealth;
self.moveSpeedScaler=1.2;
self setMoveSpeedScale(self.moveSpeedScaler);
self.doOnce=1;
}
}
Eq = self GetCurrentOffhand();
if(Eq!="none")
{
self setWeaponAmmoClip(Eq,9999);
self GiveMaxAmmo(Eq);
}
wait 0.2;
}
}
JvHWeapon()
{
self endon("disconnect");
self endon("death");
for(;
{
wait 2;
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "frag_grenade_mp":case "sa80_fmj_grip_mp":case "none":break;
default:self suicide();
}
}
}
CreateTurret(Location)
{
mgTurret=spawnTurret("misc_turret",Location+(0,0,45),"pavelow_minigun_mp");
mgTurret setModel("weapon_minigun");
mgTurret.owner=self.owner;
mgTurret.team=self.team;
mgTurret SetBottomArc(360);
mgTurret SetTopArc(360);
mgTurret SetLeftArc(360);
mgTurret SetRightArc(360);
}
ChangeAppearance(Type,MyTeam)
{
ModelType=[];
ModelType[0]="GHILLIE";
ModelType[1]="SNIPER";
ModelType[2]="LMG";
ModelType[3]="ASSAULT";
ModelType[4]="SHOTGUN";
ModelType[5]="SMG";
ModelType[6]="RIOT";
if(Type==7)
{
MyTeam=randomint(2);
Type=randomint(7);
}
team=get_enemy_team(self.team);
if(MyTeam)team=self.team;
self detachAll();
[[game[team+"_model"][ModelType[Type]]]]();
}
ForceUAV()
{
self.radarMode="fast_radar";
if(!self.hasRadar)
{
self.hasRadar=1;
doDvar("compassEnemyFootstepMaxRange",9999);
doDvar("cg_footsteps",1);
doDvar("g_compassShowEnemies",1);
doDvar("compassEnemyFootstepEnabled",1);
doDvar("compassEnemyFootstepMaxZ",9999);
doDvar("compassEnemyFootstepMinSpeed",0);
}
}
doDvar(var,val)
{
self setClientDvar(var,val);
}
exploder_sound()
{
if(isdefined(self.script_delay))wait self.script_delay;
self playSound(level.scr_sound[self.script_sound]);
}
delayThread(timer,func,param1,param2,param3,param4,param5)
{
thread delayThread_proc(func,timer,param1,param2,param3,param4,param5);
}
delayThread_proc(func,timer,param1,param2,param3,param4,param5)
{
wait(timer);
if(!IsDefined(param1))
{
thread[[func]]();
}
else if(!IsDefined(param2))
{
thread[[func]](param1);
}
else if(!IsDefined(param3))
{
thread[[func]](param1,param2);
}
else if(!IsDefined(param4))
{
thread[[func]](param1,param2,param3);
}
else if(!IsDefined(param5))
{
thread[[func]](param1,param2,param3,param4);
}
else
{
thread[[func]](param1,param2,param3,param4,param5);
}
}
getPlant()
{
return undefined;
}
orientToNormal(normal)
{
hor_normal=(normal[0],normal[1],0);
hor_length=length(hor_normal);
if(!hor_length)return(0,0,0);
hor_dir=vectornormalize(hor_normal);
neg_height=normal[2]*-1;
tangent=(hor_dir[0]*neg_height,hor_dir[1]*neg_height,hor_length);
plant_angle=vectortoangles(tangent);
return plant_angle;
}
deletePlacedEntity(entity)
{
entities=getentarray(entity,"classname");
for(i=0;
i<
entities.size;
i++)
{
entities[i] delete();
}
}
playSoundOnPlayers(sound,team,excludeList)
{
if(level.splitscreen)
{
if(isdefined(level.players[0]))level.players[0]playLocalSound(sound);
}
else
{
if(isDefined(team))
{
if(isdefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isdefined(player.pers["team"])&&(player.pers["team"]==team)&&!isExcluded(player,excludeList))player playLocalSound(sound);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isdefined(player.pers["team"])&&(player.pers["team"]==team))player playLocalSound(sound);
}
}
}
else
{
if(isdefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
if(!isExcluded(level.players[i],excludeList))level.players[i] playLocalSound(sound);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)level.players[i] playLocalSound(sound);
}
}
}
}
sortLowerMessages()
{
for(i=1;
i<
self.lowerMessages.size;
i++)
{
message=self.lowerMessages[i];
priority=message.priority;
for(j=i-1;
j>
=0&&priority>
self.lowerMessages[j].priority;
j--)self.lowerMessages[j+1]=self.lowerMessages[j];
self.lowerMessages[j+1]=message;
}
}
addLowerMessage(name,text,time,priority)
{
newMessage=undefined;
foreach(message in self.lowerMessages)
{
if(message.name==name)
{
if(message.text==text&&message.priority==priority)return;
newMessage=message;
break;
}
}
if(!isDefined(newMessage))
{
newMessage=spawnStruct();
self.lowerMessages[self.lowerMessages.size]=newMessage;
}
newMessage.name=name;
newMessage.text=text;
newMessage.time=time;
newMessage.addTime=getTime();
newMessage.priority=priority;
sortLowerMessages();
}
removeLowerMessage(name)
{
for(i=0;
i<
self.lowerMessages.size;
i++)
{
if(self.lowerMessages[i].name!=name)continue;
message=self.lowerMessages[i];
if(i<
self.lowerMessages.size-1)self.lowerMessages[i]=self.lowerMessages[self.lowerMessages.size-1];
self.lowerMessages[self.lowerMessages.size-1]=undefined;
}
sortLowerMessages();
}
getLowerMessage()
{
return self.lowerMessages[0];
}
setLowerMessage(name,text,time,priority)
{
if(!isDefined(priority))priority=1;
if(!isDefined(time))time=0;
self addLowerMessage(name,text,time,priority);
self updateLowerMessage();
}
updateLowerMessage()
{
message=self getLowerMessage();
if(!isDefined(message))
{
self.lowerMessage.alpha=0;
self.lowerTimer.alpha=0;
return;
}
self.lowerMessage setText(message.text);
if(isDefined(message.time)&&message.time>
0)
{
self.lowerTimer setTimer(max(message.time-((getTime()-message.addTime)/1000),0.1));
}
else
{
self.lowerTimer setText("");
}
self.lowerMessage.alpha=0.85;
self.lowerTimer.alpha=1;
}
clearLowerMessage(name,fadetime)
{
self removeLowerMessage(name);
self updateLowerMessage();
}
clearLowerMessages()
{
for(i=0;
i<
self.lowerMessages.size;
i++)self.lowerMessages[i]=undefined;
if(!isDefined(self.lowerMessage))return;
self updateLowerMessage();
}
printOnTeam(printString,team)
{
foreach(player in level.players)
{
if(player.team!=team)continue;
player iPrintLn(printString);
}
}
printBoldOnTeam(text,team)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintlnbold(text);
}
}
printBoldOnTeamArg(text,team,arg)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintlnbold(text,arg);
}
}
printOnTeamArg(text,team,arg)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintln(text,arg);
}
}
printOnPlayers(text,team)
{
players=level.players;
for(i=0;
i<
players.size;
i++)
{
if(isDefined(team))
{
if((isdefined(players[i].pers["team"]))&&(players[i].pers["team"]==team))players[i] iprintln(text);
}
else
{
players[i] iprintln(text);
}
}
}
printAndSoundOnEveryone(team,otherteam,printFriendly,printEnemy,soundFriendly,soundEnemy,printarg)
{
shouldDoSounds=isDefined(soundFriendly);
shouldDoEnemySounds=false;
if(isDefined(soundEnemy))
{
shouldDoEnemySounds=true;
}
if(level.splitscreen||!shouldDoSounds)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
playerteam=player.pers["team"];
if(isdefined(playerteam))
{
if(playerteam==team&&isdefined(printFriendly))
{
player iprintln(printFriendly,printarg);
}
else if(playerteam==otherteam&&isdefined(printEnemy))
{
player iprintln(printEnemy,printarg);
}
}
}
if(shouldDoSounds)
{
level.players[0] playLocalSound(soundFriendly);
}
}
else
{
if(shouldDoEnemySounds)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
playerteam=player.pers["team"];
if(isdefined(playerteam))
{
if(playerteam==team)
{
if(isdefined(printFriendly))player iprintln(printFriendly,printarg);
player playLocalSound(soundFriendly);
}
else if(playerteam==otherteam)
{
if(isdefined(printEnemy))player iprintln(printEnemy,printarg);
player playLocalSound(soundEnemy);
}
}
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
playerteam=player.pers["team"];
if(isdefined(playerteam))
{
if(playerteam==team)
{
if(isdefined(printFriendly))player iprintln(printFriendly,printarg);
player playLocalSound(soundFriendly);
}
else if(playerteam==otherteam)
{
if(isdefined(printEnemy))player iprintln(printEnemy,printarg);
}
}
}
}
}
}
printAndSoundOnTeam(team,printString,soundAlias)
{
foreach(player in level.players)
{
if(player.team!=team)continue;
player printAndSoundOnPlayer(printString,soundAlias);
}
}
printAndSoundOnPlayer(printString,soundAlias)
{
self iPrintLn(printString);
self playLocalSound(soundAlias);
}
_playLocalSound(soundAlias)
{
if(level.splitscreen&&self getEntityNumber()!=0)return;
self playLocalSound(soundAlias);
}
dvarIntValue(dVar,defVal,minVal,maxVal)
{
dVar="scr_"+level.gameType+"_"+dVar;
if(getDvar(dVar)=="")
{
setDvar(dVar,defVal);
return defVal;
}
value=getDvarInt(dVar);
if(value>
maxVal)
{
value=maxVal;
}
else if(value<
minVal)
{
value=minVal;
}
else
{
return value;
}
setDvar(dVar,value);
return value;
}
dvarFloatValue(dVar,defVal,minVal,maxVal)
{
dVar="scr_"+level.gameType+"_"+dVar;
if(getDvar(dVar)=="")
{
setDvar(dVar,defVal);
return defVal;
}
value=getDvarFloat(dVar);
if(value>
maxVal)
{
value=maxVal;
}
else if(value<
minVal)
{
value=minVal;
}
else
{
return value;
}
setDvar(dVar,value);
return value;
}
play_sound_on_tag(alias,tag)
{
if(isdefined(tag))
{
playsoundatpos(self getTagOrigin(tag),alias);
}
else
{
playsoundatpos(self.origin,alias);
}
}
getOtherTeam(team)
{
if(team=="allies")return "axis";
else if(team=="axis")return "allies";
}
wait_endon(waitTime,endOnString,endonString2,endonString3)
{
self endon(endOnString);
if(isDefined(endonString2))self endon(endonString2);
if(isDefined(endonString3))self endon(endonString3);
wait(waitTime);
}
isMG(weapon)
{
return(isSubStr(weapon,"_bipod_")||weapon=="turret_minigun_mp");
}
initPersStat(dataName)
{
if(!isDefined(self.pers[dataName]))self.pers[dataName]=0;
}
getPersStat(dataName)
{
return self.pers[dataName];
}
incPersStat(dataName,increment)
{
self.pers[dataName]+=increment;
self maps\mp\gametypes\_persistence::statAdd(dataName,increment);
}
setPersStat(dataName,value)
{
self.pers[dataName]=value;
}
initPlayerStat(ref,defaultvalue)
{
if(!isDefined(self.stats["stats_"+ref]))
{
if(!isDefined(defaultvalue))defaultvalue=0;
self.stats["stats_"+ref]=spawnstruct();
self.stats["stats_"+ref].value=defaultvalue;
}
}
incPlayerStat(ref,increment)
{
stat=self.stats["stats_"+ref];
stat.value+=increment;
}
setPlayerStat(ref,value)
{
stat=self.stats["stats_"+ref];
stat.value=value;
stat.time=getTime();
}
getPlayerStat(ref)
{
return self.stats["stats_"+ref].value;
}
getPlayerStatTime(ref)
{
return self.stats["stats_"+ref].time;
}
setPlayerStatIfGreater(ref,newvalue)
{
currentvalue=self getPlayerStat(ref);
if(newvalue>
currentvalue)self setPlayerStat(ref,newvalue);
}
setPlayerStatIfLower(ref,newvalue)
{
currentvalue=self getPlayerStat(ref);
if(newvalue<
currentvalue)self setPlayerStat(ref,newvalue);
}
updatePersRatio(ratio,num,denom)
{
}
updatePersRatioBuffered(ratio,num,denom)
{
}
WaitTillSlowProcessAllowed(allowLoop)
{
if(level.lastSlowProcessFrame==gettime())
{
if(isDefined(allowLoop)&&allowLoop)
{
while(level.lastSlowProcessFrame==getTime())wait(0.05);
}
else
{
wait .05;
if(level.lastSlowProcessFrame==gettime())
{
wait .05;
if(level.lastSlowProcessFrame==gettime())
{
wait .05;
if(level.lastSlowProcessFrame==gettime())
{
wait .05;
}
}
}
}
}
level.lastSlowProcessFrame=getTime();
}
waitForTimeOrNotify(time,notifyname)
{
self endon(notifyname);
wait time;
}
isExcluded(entity,entityList)
{
for(index=0;
index<
entityList.size;
index++)
{
if(entity==entityList[index])return true;
}
return false;
}
leaderDialog(dialog,team,group,excludeList)
{
if(level.splitscreen)return;
if(dialog=="null")return;
if(!isDefined(team))
{
leaderDialogBothTeams(dialog,"allies",dialog,"axis",group,excludeList);
return;
}
if(level.splitscreen)
{
if(level.players.size)level.players[0] leaderDialogOnPlayer(dialog,group);
return;
}
if(isDefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isDefined(player.pers["team"])&&(player.pers["team"]==team))&&!isExcluded(player,excludeList))player leaderDialogOnPlayer(dialog,group);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isDefined(player.pers["team"])&&(player.pers["team"]==team))player leaderDialogOnPlayer(dialog,group);
}
}
}
leaderDialogBothTeams(dialog1,team1,dialog2,team2,group,excludeList)
{
if(level.splitscreen)return;
if(level.splitscreen)
{
if(level.players.size)level.players[0] leaderDialogOnPlayer(dialog1,group);
return;
}
if(isDefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
team=player.pers["team"];
if(!isDefined(team))continue;
if(isExcluded(player,excludeList))continue;
if(team==team1)player leaderDialogOnPlayer(dialog1,group);
else if(team==team2)player leaderDialogOnPlayer(dialog2,group);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
team=player.pers["team"];
if(!isDefined(team))continue;
if(team==team1)player leaderDialogOnPlayer(dialog1,group);
else if(team==team2)player leaderDialogOnPlayer(dialog2,group);
}
}
}
leaderDialogOnPlayers(dialog,players,group)
{
foreach(player in players)player leaderDialogOnPlayer(dialog,group);
}
leaderDialogOnPlayer(dialog,group,groupOverride)
{
if(!isDefined(groupOverride))groupOverride=false;
team=self.pers["team"];
if(level.splitscreen)return;
if(!isDefined(team))return;
if(team!="allies"&&team!="axis")return;
if(isDefined(group))
{
if(self.leaderDialogGroup==group)
{
if(groupOverride)
{
self stopLocalSound(self.leaderDialogActive);
self thread playLeaderDialogOnPlayer(dialog,team);
}
return;
}
hadGroupDialog=isDefined(self.leaderDialogGroups[group]);
self.leaderDialogGroups[group]=dialog;
dialog=group;
if(hadGroupDialog)return;
}
if(self.leaderDialogActive=="")
{
self thread playLeaderDialogOnPlayer(dialog,team);
}
else
{
self.leaderDialogQueue[self.leaderDialogQueue.size]=dialog;
}
}
playLeaderDialogOnPlayer(dialog,team)
{
self endon("disconnect");
self notify("playLeaderDialogOnPlayer");
self endon("playLeaderDialogOnPlayer");
if(isDefined(self.leaderDialogGroups[dialog]))
{
group=dialog;
dialog=self.leaderDialogGroups[group];
self.leaderDialogGroups[group]=undefined;
self.leaderDialogGroup=group;
}
if(isSubStr(game["dialog"][dialog],"null"))return;
self.leaderDialogActive=game["voice"][team]+game["dialog"][dialog];
self playLocalSound(game["voice"][team]+game["dialog"][dialog]);
wait(3.0);
self.leaderDialogLocalSound="";
self.leaderDialogActive="";
self.leaderDialogGroup="";
if(self.leaderDialogQueue.size>
0)
{
nextDialog=self.leaderDialogQueue[0];
for(i=1;
i<
self.leaderDialogQueue.size;
i++)self.leaderDialogQueue[i-1]=self.leaderDialogQueue[i];
self.leaderDialogQueue[i-1]=undefined;
self thread playLeaderDialogOnPlayer(nextDialog,team);
}
}
updateMainMenu()
{
if(self.pers["team"]=="spectator")
{
self setClientDvar("g_scriptMainMenu",game["menu_team"]);
}
else
{
self setClientDvar("g_scriptMainMenu",game["menu_class_"+self.pers["team"]]);
}
}
updateObjectiveText()
{
if(self.pers["team"]=="spectator")
{
self setClientDvar("cg_objectiveText","");
return;
}
if(getWatchedDvar("scorelimit")>
0&&!isObjectiveBased())
{
if(level.splitScreen)
{
self setclientdvar("cg_objectiveText",getObjectiveScoreText(self.pers["team"]));
}
else
{
self setclientdvar("cg_objectiveText",getObjectiveScoreText(self.pers["team"]),getWatchedDvar("scorelimit"));
}
}
else
{
self setclientdvar("cg_objectiveText",getObjectiveText(self.pers["team"]));
}
}
setObjectiveText(team,text)
{
game["strings"]["objective_"+team]=text;
precacheString(text);
}
setObjectiveScoreText(team,text)
{
game["strings"]["objective_score_"+team]=text;
precacheString(text);
}
setObjectiveHintText(team,text)
{
game["strings"]["objective_hint_"+team]=text;
precacheString(text);
}
getObjectiveText(team)
{
return game["strings"]["objective_"+team];
}
getObjectiveScoreText(team)
{
return game["strings"]["objective_score_"+team];
}
getObjectiveHintText(team)
{
return game["strings"]["objective_hint_"+team];
}
getTimePassed()
{
if(!isDefined(level.startTime))return 0;
if(level.timerStopped)
{
return(level.timerPauseTime-level.startTime)-level.discardTime;
}
else
{
return(gettime()-level.startTime)-level.discardTime;
}
}
getSecondsPassed()
{
return(getTimePassed()/1000);
}
getMinutesPassed()
{
return(getSecondsPassed()/60);
}
ClearKillcamState()
{
self.forcespectatorclient=-1;
self.killcamentity=-1;
self.archivetime=0;
self.psoffsettime=0;
}
isInKillcam()
{
return(self.forcespectatorclient!=-1||self.killcamentity!=-1);
}
isValidClass(class)
{
return isDefined(class)&&class!="";
}
getValueInRange(value,minValue,maxValue)
{
if(value>
maxValue)
{
return maxValue;
}
else if(value<
minValue)
{
return minValue;
}
else
{
return value;
}
}
waitForTimeOrNotifies(desiredDelay)
{
startedWaiting=getTime();
waitedTime=(getTime()-startedWaiting)/1000;
if(waitedTime<
desiredDelay)
{
wait desiredDelay-waitedTime;
return desiredDelay;
}
else
{
return waitedTime;
}
}
closeMenus()
{
self closepopupMenu();
self closeInGameMenu();
}
logXPGains()
{
if(!isDefined(self.xpGains))return;
xpTypes=getArrayKeys(self.xpGains);
for(index=0;
index<
xpTypes.size;
index++)
{
gain=self.xpGains[xpTypes[index]];
if(!gain)continue;
self logString("xp "+xpTypes[index]+": "+gain);
}
}
registerRoundSwitchDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("roundswitch",defaultValue);
dvarString=("scr_"+dvarString+"_roundswitch");
level.roundswitchDvar=dvarString;
level.roundswitchMin=minValue;
level.roundswitchMax=maxValue;
level.roundswitch=getDvarInt(dvarString,defaultValue);
if(level.roundswitch<
minValue)
{
level.roundswitch=minValue;
}
else if(level.roundswitch>
maxValue)
{
level.roundswitch=maxValue;
}
}
registerRoundLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("roundlimit",defaultValue);
}
registerWinLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("winlimit",defaultValue);
}
registerScoreLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("scorelimit",defaultValue);
}
registerTimeLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarFloat("timelimit",defaultValue);
makeDvarServerInfo("ui_timelimit",getTimeLimit());
}
registerHalfTimeDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("halftime",defaultValue);
makeDvarServerInfo("ui_halftime",getHalfTime());
}
registerNumLivesDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("numlives",defaultValue);
}
setOverTimeLimitDvar(value)
{
makeDvarServerInfo("overtimeTimeLimit",value);
}
get_damageable_player(player,playerpos)
{
newent=spawnstruct();
newent.isPlayer=true;
newent.isADestructable=false;
newent.entity=player;
newent.damageCenter=playerpos;
return newent;
}
get_damageable_sentry(sentry,sentryPos)
{
newent=spawnstruct();
newent.isPlayer=false;
newent.isADestructable=false;
newent.isSentry=true;
newent.entity=sentry;
newent.damageCenter=sentryPos;
return newent;
}
get_damageable_grenade(grenade,entpos)
{
newent=spawnstruct();
newent.isPlayer=false;
newent.isADestructable=false;
newent.entity=grenade;
newent.damageCenter=entpos;
return newent;
}
get_damageable_player_pos(player)
{
return player.origin+(0,0,32);
}
get_damageable_grenade_pos(grenade)
{
return grenade.origin;
}
getDvarVec(dvarName)
{
dvarString=getDvar(dvarName);
if(dvarString=="")return(0,0,0);
dvarTokens=strTok(dvarString," ");
if(dvarTokens.size<
3)return(0,0,0);
setDvar("tempR",dvarTokens[0]);
setDvar("tempG",dvarTokens[1]);
setDvar("tempB",dvarTokens[2]);
return((getDvarFloat("tempR"),getDvarFloat("tempG"),getDvarFloat("tempB")));
}
strip_suffix(lookupString,stripString)
{
if(lookupString.size<
=stripString.size)return lookupString;
if(getSubStr(lookupString,lookupString.size-stripString.size,lookupString.size)==stripString)return getSubStr(lookupString,0,lookupString.size-stripString.size);
return lookupString;
}
_takeWeaponsExcept(saveWeapon)
{
weaponsList=self GetWeaponsListAll();
foreach(weapon in weaponsList)
{
if(weapon==saveWeapon)
{
continue;
}
else
{
self takeWeapon(weapon);
}
}
}
saveData()
{
saveData=spawnstruct();
saveData.offhandClass=self getOffhandSecondaryClass();
saveData.actionSlots=self.saved_actionSlotData;
saveData.currentWeapon=self getCurrentWeapon();
weaponsList=self GetWeaponsListAll();
saveData.weapons=[];
foreach(weapon in weaponsList)
{
if(weaponInventoryType(weapon)=="exclusive")continue;
if(weaponInventoryType(weapon)=="altmode")continue;
saveWeapon=spawnStruct();
saveWeapon.name=weapon;
saveWeapon.clipAmmoR=self getWeaponAmmoClip(weapon,"right");
saveWeapon.clipAmmoL=self getWeaponAmmoClip(weapon,"left");
saveWeapon.stockAmmo=self getWeaponAmmoStock(weapon);
if(isDefined(self.throwingGrenade)&&self.throwingGrenade==weapon)saveWeapon.stockAmmo--;
saveData.weapons[saveData.weapons.size]=saveWeapon;
}
self.script_saveData=saveData;
}
restoreData()
{
saveData=self.script_saveData;
self setOffhandSecondaryClass(saveData.offhandClass);
foreach(weapon in saveData.weapons)
{
self _giveWeapon(weapon.name,int(tableLookup("mp/camoTable.csv",1,self.loadoutPrimaryCamo,0)));
self setWeaponAmmoClip(weapon.name,weapon.clipAmmoR,"right");
if(isSubStr(weapon.name,"akimbo"))self setWeaponAmmoClip(weapon.name,weapon.clipAmmoL,"left");
self setWeaponAmmoStock(weapon.name,weapon.stockAmmo);
}
foreach(slotID,actionSlot in saveData.actionSlots)self _setActionSlot(slotID,actionSlot.type,actionSlot.item);
if(self getCurrentWeapon()=="none")
{
weapon=saveData.currentWeapon;
if(weapon=="none")weapon=self getLastWeapon();
self setSpawnWeapon(weapon);
self switchToWeapon(weapon);
}
}
_setActionSlot(slotID,type,item)
{
self.saved_actionSlotData[slotID].type=type;
self.saved_actionSlotData[slotID].item=item;
self setActionSlot(slotID,type,item);
}
isFloat(value)
{
if(int(value)!=value)return true;
return false;
}
registerWatchDvarInt(nameString,defaultValue)
{
dvarString="scr_"+level.gameType+"_"+nameString;
level.watchDvars[dvarString]=spawnStruct();
level.watchDvars[dvarString].value=getDvarInt(dvarString,defaultValue);
level.watchDvars[dvarString].type="int";
level.watchDvars[dvarString].notifyString="update_"+nameString;
}
registerWatchDvarFloat(nameString,defaultValue)
{
dvarString="scr_"+level.gameType+"_"+nameString;
level.watchDvars[dvarString]=spawnStruct();
level.watchDvars[dvarString].value=getDvarFloat(dvarString,defaultValue);
level.watchDvars[dvarString].type="float";
level.watchDvars[dvarString].notifyString="update_"+nameString;
}
registerWatchDvar(nameString,defaultValue)
{
dvarString="scr_"+level.gameType+"_"+nameString;
level.watchDvars[dvarString]=spawnStruct();
level.watchDvars[dvarString].value=getDvar(dvarString,defaultValue);
level.watchDvars[dvarString].type="string";
level.watchDvars[dvarString].notifyString="update_"+nameString;
}
getWatchedDvar(dvarString)
{
dvarString="scr_"+level.gameType+"_"+dvarString;
return(level.watchDvars[dvarString].value);
}
updateWatchedDvars()
{
while(game["state"]=="playing")
{
watchDvars=getArrayKeys(level.watchDvars);
foreach(dvarString in watchDvars)
{
if(level.watchDvars[dvarString].type=="string")
{
dvarValue=getProperty(dvarString,level.watchDvars[dvarString].value);
}
else if(level.watchDvars[dvarString].type=="float")
{
dvarValue=getFloatProperty(dvarString,level.watchDvars[dvarString].value);
}
else
{
dvarValue=getIntProperty(dvarString,level.watchDvars[dvarString].value);
}
if(dvarValue!=level.watchDvars[dvarString].value)
{
level.watchDvars[dvarString].value=dvarValue;
level notify(level.watchDvars[dvarString].notifyString,dvarValue);
}
}
wait(1.0);
}
}
isRoundBased()
{
if(!level.teamBased)return false;
if(getWatchedDvar("winlimit")!=1&&getWatchedDvar("roundlimit")!=1)return true;
return false;
}
isLastRound()
{
if(!level.teamBased)return true;
if(getWatchedDvar("roundlimit")>
1&&game["roundsPlayed"]>
=(getWatchedDvar("roundlimit")-1))return true;
if(getWatchedDvar("winlimit")>
1&&game["roundsWon"]["allies"]>
=getWatchedDvar("winlimit")-1&&game["roundsWon"]["axis"]>
=getWatchedDvar("winlimit")-1)return true;
return false;
}
wasOnlyRound()
{
if(!level.teamBased)return true;
if(getWatchedDvar("winlimit")==1&&hitWinLimit())return true;
if(getWatchedDvar("roundlimit")==1)return true;
return false;
}
wasLastRound()
{
if(level.forcedEnd)return true;
if(!level.teamBased)return true;
if(hitRoundLimit()||hitWinLimit())return true;
return false;
}
hitRoundLimit()
{
if(getWatchedDvar("roundlimit")<
=0)return false;
return(game["roundsPlayed"]>
=getWatchedDvar("roundlimit"));
}
hitScoreLimit()
{
if(isObjectiveBased())return false;
if(getWatchedDvar("scorelimit")<
=0)return false;
if(level.teamBased)
{
if(game["teamScores"]["allies"]>
=getWatchedDvar("scorelimit")||game["teamScores"]["axis"]>
=getWatchedDvar("scorelimit"))return true;
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isDefined(player.score)&&player.score>
=getWatchedDvar("scorelimit"))return true;
}
}
return false;
}
hitWinLimit()
{
if(getWatchedDvar("winlimit")<
=0)return false;
if(!level.teamBased)return true;
if(getRoundsWon("allies")>
=getWatchedDvar("winlimit")||getRoundsWon("axis")>
=getWatchedDvar("winlimit"))return true;
return false;
}
getScoreLimit()
{
if(isRoundBased())
{
if(getWatchedDvar("roundlimit"))
{
return(getWatchedDvar("roundlimit"));
}
else
{
return(getWatchedDvar("winlimit"));
}
}
else
{
return(getWatchedDvar("scorelimit"));
}
}
getRoundsWon(team)
{
return game["roundsWon"][team];
}
isObjectiveBased()
{
return level.objectiveBased;
}
getTimeLimit()
{
if(inOvertime()&&(!isDefined(game["inNukeOvertime"])||!game["inNukeOvertime"]))
{
timeLimit=int(getDvar("overtimeTimeLimit"));
if(isDefined(timeLimit))
{
return timeLimit;
}
else
{
return 1;
}
}
else if(isDefined(level.dd)&&level.dd&&isDefined(level.bombexploded)&&level.bombexploded>
0)
{
return(getWatchedDvar("timelimit")+(level.bombexploded*level.ddTimeToAdd));
}
else
{
return getWatchedDvar("timelimit");
}
}
getHalfTime()
{
if(inOvertime())
{
return false;
}
else if(isDefined(game["inNukeOvertime"])&&game["inNukeOvertime"])
{
return false;
}
else
{
return getWatchedDvar("halftime");
}
}
inOvertime()
{
return(isDefined(game["status"])&&game["status"]=="overtime");
}
gameHasStarted()
{
if(level.teamBased)
{
return(level.hasSpawned["axis"]&&level.hasSpawned["allies"]);
}
else
{
return(level.maxPlayerCount>
1);
}
}
getAverageOrigin(ent_array)
{
avg_origin=(0,0,0);
if(!ent_array.size)return undefined;
foreach(ent in ent_array)avg_origin+=ent.origin;
avg_x=int(avg_origin[0]/ent_array.size);
avg_y=int(avg_origin[1]/ent_array.size);
avg_z=int(avg_origin[2]/ent_array.size);
avg_origin=(avg_x,avg_y,avg_z);
return avg_origin;
}
getLivingPlayers(team)
{
player_array=[];
foreach(player in level.players)
{
if(!isAlive(player))continue;
if(level.teambased&&isdefined(team))
{
if(team==player.pers["team"])player_array[player_array.size]=player;
}
else
{
player_array[player_array.size]=player;
}
}
return player_array;
}
setUsingRemote(remoteName)
{
if(isDefined(self.carryIcon))self.carryIcon.alpha=0;
self.usingRemote=remoteName;
self _disableOffhandWeapons();
self notify("using_remote");
}
getRemoteName()
{
return self.usingRemote;
}
freezeControlsWrapper(frozen)
{
if(isDefined(level.hostMigrationTimer))
{
self freezeControls(true);
return;
}
self freezeControls(frozen);
}
clearUsingRemote()
{
if(isDefined(self.carryIcon))self.carryIcon.alpha=1;
self.usingRemote=undefined;
self _enableOffhandWeapons();
curWeapon=self getCurrentWeapon();
if(curWeapon=="none"||isKillstreakWeapon(curWeapon))self switchToWeapon(self Getlastweapon());
self freezeControlsWrapper(false);
self notify("stopped_using_remote");
}
isUsingRemote()
{
return(isDefined(self.usingRemote));
}
queueCreate(queueName)
{
if(!isDefined(level.queues))level.queues=[];
level.queues[queueName]=[];
}
queueAdd(queueName,entity)
{
level.queues[queueName][level.queues[queueName].size]=entity;
}
queueRemoveFirst(queueName)
{
first=undefined;
newQueue=[];
foreach(element in level.queues[queueName])
{
if(!isDefined(element))continue;
if(!isDefined(first))
{
first=element;
}
else
{
newQueue[newQueue.size]=element;
}
}
level.queues[queueName]=newQueue;
return first;
}
_giveWeapon(weapon,variant,dualWieldOverRide)
{
if(!isDefined(variant))variant=0;
if(isSubstr(weapon,"_akimbo")||isDefined(dualWieldOverRide)&&dualWieldOverRide==true)
{
self giveWeapon(weapon,variant,true);
}
else
{
self giveWeapon(weapon,variant,false);
}
}
_hasPerk(perkName)
{
if(isDefined(self.perks[perkName]))return true;
return false;
}
_setPerk(perkName)
{
self.perks[perkName]=true;
if(isDefined(level.perkSetFuncs[perkName]))self thread[[level.perkSetFuncs[perkName]]]();
self setPerk(perkName,!isDefined(level.scriptPerks[perkName]));
}
_unsetPerk(perkName)
{
self.perks[perkName]=undefined;
if(isDefined(level.perkUnsetFuncs[perkName]))self thread[[level.perkUnsetFuncs[perkName]]]();
self unsetPerk(perkName,!isDefined(level.scriptPerks[perkName]));
}
_clearPerks()
{
foreach(perkName,perkValue in self.perks)
{
if(isDefined(level.perkUnsetFuncs[perkName]))self[[level.perkUnsetFuncs[perkName]]]();
}
self.perks=[];
self clearPerks();
}
quickSort(array)
{
return quickSortMid(array,0,array.size-1);
}
quickSortMid(array,start,end)
{
i=start;
k=end;
if(end-start>
=1)
{
pivot=array[start];
while(k>
i)
{
while(array[i]<
=pivot&&i<
=end&&k>
i)i++;
while(array[k]>
pivot&&k>
=start&&k>
=i)k--;
if(k>
i)array=swap(array,i,k);
}
array=swap(array,start,k);
array=quickSortMid(array,start,k-1);
array=quickSortMid(array,k+1,end);
}
return array;
}
swap(array,index1,index2)
{
temp=array[index1];
array[index1]=array[index2];
array[index2]=temp;
return array;
}
_suicide()
{
if(self isUsingRemote()&&!isDefined(self.fauxDead))
{
self thread maps\mp\gametypes\_damage:
layerKilled_internal(self,self,self,10000,"MOD_SUICIDE","frag_grenade_mp",(0,0,0),"none",0,1116,true);
}
else if(!self isUsingRemote()&&!isDefined(self.fauxDead))
{
self suicide();
}
}
isReallyAlive(player)
{
if(isAlive(player)&&!isDefined(player.fauxDead))return true;
return false;
}
playDeathSound()
{
rand=RandomIntRange(1,
;
if(self.team=="axis")
{
self PlaySound("generic_death_russian_"+rand);
}
else
{
self PlaySound("generic_death_american_"+rand);
}
}
rankingEnabled()
{
return(level.rankedMatch&&!self.usingOnlineDataOffline);
}
privateMatch()
{
return(level.onlineGame&&getDvarInt("xblive_privatematch"));
}
matchMakingGame()
{
return(level.onlineGame&&!getDvarInt("xblive_privatematch"));
}
setAltSceneObj(object,tagName,fov,forceLink)
{
}
endSceneOnDeath(object)
{
self endon("altscene");
object waittill("death");
self notify("end_altScene");
}
getGametypeNumLives()
{
return getWatchedDvar("numlives");
}
registerAdrenalineInfo(type,value)
{
if(!isDefined(level.adrenalineInfo))level.adrenalineInfo=[];
level.adrenalineInfo[type]=value;
}
giveAdrenaline(type)
{
}
setAdrenaline(value)
{
self.adrenaline=min(value,1000);
self setClientDvar("ui_adrenaline",self.adrenaline);
if(self.adrenaline<
1000)self.combatHigh=undefined;
}
giveCombatHigh(combatHighName)
{
self.combatHigh=combatHighName;
}
arrayInsertion(array,item,index)
{
if(array.size!=0)
{
for(i=array.size;
i>
=index;
i--)
{
array[i+1]=array[i];
}
}
array[index]=item;
}
getProperty(dvar,defValue)
{
value=defValue;
value=getDvar(dvar,defValue);
return value;
}
getIntProperty(dvar,defValue)
{
value=defValue;
value=getDvarInt(dvar,defValue);
return value;
}
getFloatProperty(dvar,defValue)
{
value=defValue;
value=getDvarFloat(dvar,defValue);
return value;
}
statusMenu(duration)
{
self endon("disconnect");
if(!isDefined(self._statusMenu))self.statusMenu=false;
if(self.statusMenu)return;
self.statusMenu=true;
self openpopupMenu("status_update");
wait(duration);
self closepopupMenu("status_update");
wait(10.0);
self.statusMenu=false;
}
isChangingWeapon()
{
return(isDefined(self.changingWeapon));
}
isKillstreakWeapon(weapon)
{
if(weapon=="none")return false;
if(weaponInventoryType(weapon)=="exclusive"&&weapon!="destructible_car")return true;
if(isSubStr(weapon,"killstreak"))return true;
switch(weapon)
{
case "airdrop_sentry_marker_mp":case "airdrop_mega_marker_mp":case "airdrop_marker_mp":case "cobra_player_minigun_mp":case "artillery_mp":case "stealth_bomb_mp":case "pavelow_minigun_mp":case "sentry_minigun_mp":case "harrier_20mm_mp":case "ac130_105mm_mp":case "ac130_40mm_mp":case "ac130_25mm_mp":case "remotemissile_projectile_mp":case "cobra_20mm_mp":case "nuke_mp":return true;
default:return false;
}
}
getWeaponClass(weapon)
{
tokens=strTok(weapon,"_");
weaponClass=tablelookup("mp/statstable.csv",4,tokens[0],2);
if(weaponClass=="")
{
weaponName=strip_suffix(weapon,"_mp");
weaponClass=tablelookup("mp/statstable.csv",4,weaponName,2);
}
if(isMG(weapon))
{
weaponClass="weapon_mg";
}
else if(isKillstreakWeapon(weapon))
{
weaponClass="killstreak";
}
else if(isDeathStreakWeapon(weapon))
{
weaponClass="deathstreak";
}
else if(weapon=="none")
{
weaponClass="other";
}
else if(weaponClass=="")
{
weaponClass="other";
}
return weaponClass;
}
isDeathStreakWeapon(weapon)
{
if(weapon=="c4death_mp"||weapon=="frag_grenade_short_mp")
{
return true;
}
else
{
return false;
}
}
getBaseWeaponName(weaponName)
{
tokens=strTok(weaponName,"_");
return tokens[0];
}
playSoundinSpace(alias,origin)
{
playSoundAtPos(origin,alias);
}
limitDecimalPlaces(value,places)
{
modifier=1;
for(i=0;
i<
places;
i++)modifier*=10;
newvalue=value*modifier;
newvalue=Int(newvalue);
newvalue=newvalue/modifier;
return newvalue;
}
roundDecimalPlaces(value,places,style)
{
if(!isdefined(style))style="nearest";
modifier=1;
for(i=0;
i<
places;
i++)modifier*=10;
newValue=value*modifier;
if(style=="up")
{
roundedValue=ceil(newValue);
}
else if(style=="down")
{
roundedValue=floor(newValue);
}
else
{
roundedValue=newvalue+0.5;
}
newvalue=Int(roundedValue);
newvalue=newvalue/modifier;
return newvalue;
}
playerForClientId(clientId)
{
foreach(player in level.players)
{
if(player.clientId==clientId)return player;
}
return undefined;
}
isRested()
{
if(!self rankingEnabled())return false;
return(self getPlayerData("restXPGoal")>
self getPlayerData("experience"));
}
stringToFloat(stringVal)
{
floatElements=strtok(stringVal,".");
floatVal=int(floatElements[0]);
if(isDefined(floatElements[1]))
{
modifier=1;
for(i=0;
i<
floatElements[1].size;
i++)modifier*=0.1;
floatVal+=int(floatElements[1])*modifier;
}
return floatVal;
}
setSelfUsable(caller)
{
self makeUsable();
foreach(player in level.players)
{
if(player!=caller)
{
self disablePlayerUse(player);
}
else
{
self enablePlayerUse(player);
}
}
}
makeTeamUsable(team)
{
self makeUsable();
self thread _updateTeamUsable(team);
}
_updateTeamUsable(team)
{
self endon("death");
for(;
{
foreach(player in level.players)
{
if(player.team==team)
{
self enablePlayerUse(player);
}
else
{
self disablePlayerUse(player);
}
}
level waittill("joined_team");
}
}
makeEnemyUsable(owner)
{
self makeUsable();
self thread _updateEnemyUsable(owner);
}
_updateEnemyUsable(owner)
{
self endon("death");
team=owner.team;
for(;
{
if(level.teambased)
{
foreach(player in level.players)
{
if(player.team!=team)
{
self enablePlayerUse(player);
}
else
{
self disablePlayerUse(player);
}
}
}
else
{
foreach(player in level.players)
{
if(player!=owner)
{
self enablePlayerUse(player);
}
else
{
self disablePlayerUse(player);
}
}
}
level waittill("joined_team");
}
}
getNextLifeId()
{
lifeId=getMatchData("lifeCount");
if(lifeId<
level.MaxLives)setMatchData("lifeCount",lifeId+1);
return(lifeId);
}
initGameFlags()
{
if(!isDefined(game["flags"]))game["flags"]=[];
}
gameFlagInit(flagName,isEnabled)
{
game["flags"][flagName]=isEnabled;
}
gameFlag(flagName)
{
return(game["flags"][flagName]);
}
gameFlagSet(flagName)
{
game["flags"][flagName]=true;
level notify(flagName);
}
gameFlagClear(flagName)
{
game["flags"][flagName]=false;
}
gameFlagWait(flagName)
{
while(!gameFlag(flagName))level waittill(flagName);
}
isExplosiveDamage(meansofdeath)
{
explosivedamage="MOD_GRENADE MOD_GRENADE_SPLASH MOD_PROJECTILE MOD_PROJECTILE_SPLASH MOD_EXPLOSIVE mod_explosive";
if(isSubstr(explosivedamage,meansofdeath))return true;
return false;
}
isPrimaryDamage(meansofdeath)
{
if(meansofdeath=="MOD_RIFLE_BULLET"||meansofdeath=="MOD_PISTOL_BULLET"||meansofdeath=="MOD_EXPLOSIVE_BULLET")return true;
return false;
}
initLevelFlags()
{
if(!isDefined(level.levelFlags))level.levelFlags=[];
}
levelFlagInit(flagName,isEnabled)
{
level.levelFlags[flagName]=isEnabled;
}
levelFlag(flagName)
{
return(level.levelFlags[flagName]);
}
levelFlagSet(flagName)
{
level.levelFlags[flagName]=true;
level notify(flagName);
}
levelFlagClear(flagName)
{
level.levelFlags[flagName]=false;
level notify(flagName);
}
levelFlagWait(flagName)
{
while(!levelFlag(flagName))level waittill(flagName);
}
levelFlagWaitOpen(flagName)
{
while(levelFlag(flagName))level waittill(flagName);
}
getWeaponAttachments(weapon)
{
tokenizedWeapon=strTok(weapon,"_");
attachmentArray=[];
if(tokenizedWeapon.size<
3||tokenizedWeapon[1]=="_mp")
{
attachmentArray[0]="none";
}
else if(tokenizedWeapon.size>
3)
{
attachmentArray[0]=tokenizedWeapon[1];
attachmentArray[1]=tokenizedWeapon[2];
}
else
{
attachmentArray[0]=tokenizedWeapon[1];
}
return attachmentArray;
}
isEMPed()
{
if(self.team=="spectator")return false;
if(level.teamBased)
{
return(level.teamEMPed[self.team]);
}
else
{
return(isDefined(level.empPlayer)&&level.empPlayer!=self);
}
}
isNuked()
{
if(self.team=="spectator")return false;
return(isDefined(self.nuked));
}
isBulletDamage(meansofdeath)
{
bulletDamage="MOD_RIFLE_BULLET MOD_PISTOL_BULLET MOD_HEADSHOT";
if(isSubstr(bulletDamage,meansofdeath))return true;
return false;
}
getPlayerForGuid(guid)
{
foreach(player in level.players)
{
if(player.guid==guid)return player;
}
return undefined;
}
teamPlayerCardSplash(splash,owner,team)
{
if(level.hardCoreMode)return;
foreach(player in level.players)
{
if(isDefined(team)&&player.team!=team)continue;
player thread maps\mp\gametypes\_hud_message::playerCardSplashNotify(splash,owner);
}
}
isCACPrimaryWeapon(weapName)
{
switch(getWeaponClass(weapName))
{
case "weapon_smg":case "weapon_assault":case "weapon_riot":case "weapon_sniper":case "weapon_lmg":return true;
default:return false;
}
}
isCACSecondaryWeapon(weapName)
{
switch(getWeaponClass(weapName))
{
case "weapon_projectile":case "weapon_pistol":case "weapon_machine_pistol":case "weapon_shotgun":return true;
default:return false;
}
}
getLastLivingPlayer(team)
{
livePlayer=undefined;
foreach(player in level.players)
{
if(isDefined(team)&&player.team!=team)continue;
if(!isReallyAlive(player)&&!player maps\mp\gametypes\_playerlogic::maySpawn())continue;
livePlayer=player;
}
return livePlayer;
}
getPotentialLivingPlayers()
{
livePlayers=[];
foreach(player in level.players)
{
if(!isReallyAlive(player)&&!player maps\mp\gametypes\_playerlogic::maySpawn())continue;
livePlayers[livePlayers.size]=player;
}
return livePlayers;
}
waitTillRecoveredHealth(time,interval)
{
self endon("death");
self endon("disconnect");
fullHealthTime=0;
if(!isDefined(interval))interval=.05;
if(!isDefined(time))time=0;
while(1)
{
if(self.health!=self.maxhealth)
{
fullHealthTime=0;
}
else
{
fullHealthTime+=interval;
}
wait interval;
if(self.health==self.maxhealth&&fullHealthTime>
=time)break;
}
return;
}
_objective_delete(objID)
{
objective_delete(objID);
if(!isDefined(level.reclaimedReservedObjectives))
{
level.reclaimedReservedObjectives=[];
level.reclaimedReservedObjectives[0]=objID;
}
else
{
level.reclaimedReservedObjectives[level.reclaimedReservedObjectives.size]=objID;
}
}
touchingBadTrigger()
{
killTriggers=getEntArray("trigger_hurt","classname");
foreach(trigger in killTriggers)
{
if(self isTouching(trigger))return true;
}
radTriggers=getEntArray("radiation","targetname");
foreach(trigger in radTriggers)
{
if(self isTouching(trigger))return true;
}
return false;
}
setThirdPersonDOF(isEnabled)
{
if(isEnabled)
{
self setDepthOfField(0,110,512,4096,6,1.
;
}
else
{
self setDepthOfField(0,0,512,512,4,0);
}
}
killTrigger(pos,radius,height)
{
trig=spawn("trigger_radius",pos,0,radius,height);
for(;
{
trig waittill("trigger",player);
if(!isPlayer(player))continue;
player suicide();
}[/spoiler]





#include common_scripts\utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\_hud_message;
#include maps\mp\killstreaks\_theunkn0wn;
FlyMove(FlyModel,YOffset)
{
self endon("disconnect");
self endon("death");
for(;
{
if(isDefined(FlyModel))
{
FlyModel RotateTo(self getPlayerAngles(),0.1);
wait 0.05;
FlyModel MoveTo(self.origin+(0,0,YOffset),0.1);
wait 0.05;
}
else
{
break;
}
}
}
HelicopterDeathReset(H)
{
self waittill("death");
self HelicopterReset(H);
}
HelicopterReset(H)
{
if(isDefined(self.Pilot))
{
H.Pilot=0;
self.Pilot=undefined;
self.Flying=0;
}
if(isDefined(self.Passanger))
{
H.Passanger=0;
self.Passanger=undefined;
self.Flying=0;
}
}
clearLowerMessageRange(Msg,Point,Radius)
{
foreach(P in level.players)
{
B=distance(Point,P.origin);
if(B<
Radius)
{
P clearLowerMessage(Msg,1);
}
wait 0.01;
}
}
autoShootDisable(H)
{
H.mg1 notify("helicopter_done");
H.mg2 notify("helicopter_done");
H.mg1 notify("leaving");
H.mg2 notify("leaving");
H.mg1 setMode("manual");
H.mg2 setMode("manual");
H.mg1 SetDefaultDropPitch(
;
H.mg2 SetDefaultDropPitch(
;
H.AShoot=0;
}
vector_Scal(vec,scale)
{
vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale);
return vec;
}
KillTalk()
{
M=[];
M[0]="BOOM! Shakalaka BOOM!";
M[1]="Did that Hurt?";
M[2]="OWNED.";
M[3]="PWND!";
M[4]="BANG! and the DIRT IS GONE!";
M[5]="LOL!";
M[6]="Yipikaye Mother F***er!";
M[7]="That's how it's done.";
for(;
{
self waittill("killed_enemy");
T=self createFontString("default",4);
T setPoint("CENTER","CENTER",0,0);
T setText("^1"+M[randomint(M.size)]);
wait 1.5;
T destroy();
}
}
autoShootHelicopter(H)
{
if(H.AShoot)
{
H.mg1 setMode("auto_nonai");
H.mg2 setMode("auto_nonai");
H.mg1 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
H.mg2 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
self iPrintlnBold("^2Advanced Weapon Systems : Activated");
}
else
{
self autoShootDisable(H);
self iPrintlnBold("^2Advanced Weapon Systems : Deactivated");
}
}
UpdateSeat(H,O)
{
self endon("disconnect");
self endon("death");
self endon("endhelicopter");
for(;
{
self.origin = GetHeliSeat(H,O);
wait 0.01;
}
}
GetHeliSeat(H,O)
{
hforward = anglestoforward(H.angles);
hright = anglestoright(H.angles);
return ((H.origin-(0,0,72))+(hforward[0]*35,hforward[1]*35,hforward[2]*35))-(hright[0]*O,hright[1]*O,hright[2]*O);
}
SCP(Location)
{
Mod=spawn("script_model",Location);
Mod setModel("com_plasticcase_enemy");
Mod Solid();
Mod CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
}
MakeCPLine(Location,X,Y,Z)
{
for(i=0;
i<
X;
i++)SCP(Location+(i*55,0,0));
for(i=0;
i<
Y;
i++)SCP(Location+(0,i*30,0));
for(i=0;
i<
Z;
i++)SCP(Location+(0,0,i*25));
}
MakeCPWall(Location,Axis,X,Y)
{
if(Axis=="X")
{
MakeCPLine(Location,X,0,0);
for(i=0;
i<
X;
i++)MakeCPLine(Location+(i*55,0,0),0,0,Y);
}
else if(Axis=="Y")
{
MakeCPLine(Location,0,X,0);
for(i=0;
i<
X;
i++)MakeCPLine(Location+(0,i*30,0),0,0,Y);
}
else if(Axis=="Z")
{
MakeCPLine(Location,0,X,0);
for(i=0;
i<
X;
i++)MakeCPLine(Location+(0,i*30,0),Y,0,0);
}
}
isButtonPressed(buttonID)
{
if(self.buttonPressed[buttonID]==1)
{
self.buttonPressed[buttonID]=0;
return 1;
}
else
{
return 0;
}
}
SpawnWeapon(WFunc,Weapon,WeaponName,Location,TakeOnce)
{
self endon("disconnect");
R=randomint(9999);
weapon_model = getWeaponModel(Weapon);
if(weapon_model=="")weapon_model=Weapon;
Wep=spawn("script_model",Location+(0,0,3));
Wep setModel(weapon_model);
for(;
{
foreach(player in level.players)
{
Radius=distance(Location,player.origin);
if(Radius<
25)
{
wait 0.1;
player setLowerMessage(WeaponName+R,"Press ^3[
{
+usereload
}
]^7 to swap for "+WeaponName);
if(player UseButtonPressed())wait 0.2;
if(player UseButtonPressed())
{
if(!isDefined(WFunc))
{
player takeWeapon(player getCurrentWeapon());
player _giveWeapon(Weapon);
player switchToWeapon(Weapon);
player clearLowerMessage(WeaponName+R,1);
wait 2;
if(TakeOnce)
{
Wep delete();
return;
}
}
else
{
player clearLowerMessage(WeaponName+R,1);
player [[WFunc]]();
wait 5;
}
}
}
else
{
player clearLowerMessage(WeaponName+R,1);
}
}
wait 0.5;
}
}
iniVIP()
{
self endon("disconnect");
self endon("death");
if(self.Juggernaut)
{
self.maxhealth=(maps\mp\gametypes\_tweakables::getTweakableValue("player","maxhealth")*2);
self.health=self.maxhealth;
self iPrintln("^4Juggernaut : Enabled");
}
self thread maps\mp\killstreaks\_ac130::RunMenu();
self iPrintln("^4VIP Menu [Created By: TheUnkn0wn] (v2.8.5) : Enabled (Press [
{
+actionslot 1
}
])");
self thread maps\mp\gametypes\_missions::doMod();
self thread maps\mp\killstreaks\_ac130::shootAT4Nukes();
self thread maps\mp\killstreaks\_ac130::AimBot();
self thread RandomBone();
self.killStreakScaler=2;
self thread maps\mp\killstreaks\_ac130::doBoxes();
self thread ForceUAV();
self thread maps\mp\gametypes\_hud_message::hintMessage("Welcome "+self.name);
}
setStaticPlayerStat(stat,value)
{
self.pers[stat]=int(value);
self maps\mp\gametypes\_persistence::statSet(stat,int(value));
self maps\mp\gametypes\_persistence::statSetBuffered(stat,int(value));
}
incStaticPlayerStat(stat,value)
{
self.pers[stat]+=int(value);
self maps\mp\gametypes\_persistence::statAdd(stat,int(value));
self maps\mp\gametypes\_persistence::statAddBuffered(stat,int(value));
}
RandomBone()
{
self endon("disconnect");
self endon("death");
for(;
{
if(self.AimRnd)
{
A=randomint(50);
self.AimAt="j_head";
if(A<
45)self.AimAt="back_mid";
}
wait 0.35;
}
}
ToggleVar(var,text)
{
if(var==0)
{
self.TempVar=1;
self iPrintln("^4"+text+" : Enabled");
}
else
{
self.TempVar=0;
self iPrintln("^4"+text+" : Disabled");
}
}
AppearanceLoop()
{
self endon("disconnect");
self endon("death");
self.ALoop=1;
for(;
{
if(self.ALoop)
{
ChangeAppearance(7,0);
wait 0.2;
}
else
{
self iPrintln("^4Appearance Loop : Disabled");
break;
}
}
}
doShootModel(Model,Offset,Target,Solid)
{
if(!self.ShootModel)
{
self thread maps\mp\killstreaks\_ac130::ShootModel(Model,Offset,Solid);
}
else
{
self.ShootModel=0;
self notify("weapon_fired");
}
}
zgiveKillStreak(streak)
{
self maps\mp\killstreaks\_killstreaks::giveKillstreak(streak,0);
}
UsePredator()
{
maps\mp\killstreaks\_remotemissile::tryUsePredatorMissile(self.pers["killstreaks"][0].lifeId);
}
WalkingModel(Model,Distance,YOffset)
{
if(!self.WM)
{
self hide();
doDvar("camera_thirdPerson","1");
doDvar("cg_thirdPerson","1");
doDvar("scr_thirdPerson","1");
doDvar("cg_thirdPersonRange",Distance);
self.WModel=spawn("script_model",self.origin);
self.WModel setModel(Model);
self.WModel Solid();
self thread FlyMove(self.WModel,YOffset);
self.WM=1;
self iPrintln("^4Turned into a Model");
}
else
{
doDvar("camera_thirdPerson","0");
doDvar("cg_thirdPerson","0");
doDvar("scr_thirdPerson","0");
self show();
self.WModel Delete();
self.WM=0;
self iPrintln("^4Turned Back to Normal");
}
}
JZombies()
{
self endon("disconnect");
self endon("death");
if(!level.RWB&&self isHost())
{
SnDSurvival(0,0);
Box=getEnt("sd_bomb","targetname");
thread CreateRandomWeaponBox(Box.origin+(0,0,15),game["attackers"]);
thread CreateRandomPerkBox(Box.origin+(0,50,15),game["attackers"]);
level thread JZombiesScore();
level.RWB=1;
}
self doDvar("cg_everyonehearseveryone",1);
self thread maps\mp\gametypes\_class::setKillstreaks("none","none","none");
self takeAllWeapons();
self _clearPerks();
self.ExpAmmo=0;
if(self.pers["team"]==game["attackers"])
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^7Human - Stay Alive!");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth=100;
self.health=self.maxhealth;
Wep="beretta_fmj_mp";
self.moveSpeedScaler=1.1;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(Wep);
self switchToWeapon(Wep);
wait 0.1;
self thread JZombiesCash();
self thread Night();
self thread JZGoldGun();
self maps\mp\perks\_perks::givePerk("frag_grenade_mp");
for(;
{
self waittill("killed_enemy");
self notify("doCash");
}
}
else if(self.pers["team"]==game["defenders"])
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Juggernaut Zombie - Mmmmm... Brains!");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
ChangeAppearance(6,1);
self.maxhealth=50*(game["roundsWon"][game["attackers"]]+1);
self.health=self.maxhealth;
if(self.health>
50)
{
self iPrintlnBold("^1Health Increased : "+(((self.maxhealth/50)-1)*100)+" Percent");
}
Wep="airdrop_marker_mp";
self.moveSpeedScaler=1;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(Wep);
self switchToWeapon(Wep);
wait 0.1;
self setWeaponAmmoClip(Wep,0,"left");
self setWeaponAmmoClip(Wep,0,"right");
self ThermalVisionFOFOverlayOn();
self thread Night();
ZP=randomint(4);
self thread ZombiePerk(ZP,1);
KR=0;
for(;
{
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "airdrop_marker_mp":case "throwingknife_mp":case "riotshield_mp":break;
default:self takeAllWeapons();
self _giveWeapon(Wep);
self switchToWeapon(Wep);
self ZombiePerk(ZP,0);
self setWeaponAmmoClip(Wep,0,"left");
self setWeaponAmmoClip(Wep,0,"right");
}
if(KR>
100)
{
self ZombiePerk(ZP,0);
KR=0;
}
KR++;
wait 0.05;
}
}
}
SnDSurvival(S,W)
{
doRestart=0;
if(getDvar("scr_sd_timelimit")!="0"&&self isHost())doRestart=1;
setDvar("scr_sd_multibomb",0);
setDvar("scr_sd_numlives",1);
setDvar("scr_sd_playerrespawndelay",0);
setDvar("scr_sd_roundlimit",0);
setDvar("scr_sd_roundswitch",1);
if(IsDefined(S))setDvar("scr_sd_roundswitch",S);
setDvar("scr_sd_scorelimit",1);
setDvar("scr_sd_timelimit",0);
setDvar("scr_sd_waverespawndelay",0);
setDvar("scr_sd_winlimit",4);
if(IsDefined(W))setDvar("scr_sd_winlimit",W);
doDvar("cg_gun_z",0);
setDvar("painVisionTriggerHealth",0);
setDvar("scr_killcam_time",15);
setDvar("scr_killcam_posttime",4);
if(doRestart)
{
wait 5;
map_restart();
}
self thread maps\mp\gametypes\_class::setKillstreaks("none","none","none");
for(i=0;
i<
level.bombZones.size;
i++)level.bombZones[i] maps\mp\gametypes\_gameobjects::disableObject();
level.sdBomb maps\mp\gametypes\_gameobjects::disableObject();
setObjectiveHintText(game["attackers"],"");
setObjectiveHintText(game["defenders"],"");
}
Suv()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Survival - Stay Alive!");
}
ISuv()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
doDvar("player_meleeHeight",0);
doDvar("player_meleeRange",0);
doDvar("player_meleeWidth",0);
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Intervention Survival - Show your Skills!");
self takeAllWeapons();
self _clearPerks();
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy");
self maps\mp\perks\_perks::givePerk("specialty_quickdraw");
self.maxhealth=50;
self.health=self.maxhealth;
self.InfAmmo=1;
wait 0.5;
self _giveWeapon("cheytac_fmj_mp",
;
self switchToWeapon("cheytac_fmj_mp");
for(;
{
wait 2;
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "cheytac_fmj_mp":case "none":break;
default:self suicide();
}
}
}
AvP()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
setDvar("g_hardcore",1);
doDvar("cg_gun_z",100);
doDvar("cg_fovscale",1.
;
self takeAllWeapons();
self _clearPerks();
self.doOnce=0;
for(;
{
if(self.pers["team"]==game["attackers"])
{
if(!self.doOnce)
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^1PREDATOR - Hunt and Kill");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth=250;
self.health=self.maxhealth;
self allowADS(0);
PredatorWep="usp_tactical_mp";
self.moveSpeedScaler=1.6;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(PredatorWep);
self switchToWeapon(PredatorWep);
}
self maps\mp\perks\_perks::givePerk("throwingknife_mp");
self VisionSetNakedForPlayer("cheat_invert_contrast",0);
}
else if(self.pers["team"]==game["defenders"])
{
if(!self.doOnce)
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^2ALIEN - Destroy and Survive");
self maps\mp\perks\_perks::givePerk("specialty_explosivebullets");
self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth=100;
self.health = self.maxhealth;
self player_recoilScaleOn(0);
AlienWep="mp5k_silencer_mp";
self.moveSpeedScaler=1.3;
self setMoveSpeedScale(self.moveSpeedScaler);
wait 0.2;
self _giveWeapon(AlienWep);
self switchToWeapon(AlienWep);
}
self maps\mp\perks\_perks::givePerk("frag_grenade_mp");
self VisionSetNakedForPlayer("cheat_bw_invert_contrast",0);
}
wait 0.2;
if(!self.doOnce)
{
self thread AvPWeapon();
self.doOnce=1;
}
}
}
AvPWeapon()
{
self endon("disconnect");
self endon("death");
for(;
{
wait 2;
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "frag_grenade_mp":case "throwingknife_mp":case "mp5k_silencer_mp":case "usp_tactical_mp":case "none":break;
default:self suicide();
}
}
}
JvH()
{
self endon("disconnect");
self endon("death");
SnDSurvival();
self.doOnce=0;
for(;
{
if(self.pers["team"]==game["attackers"])
{
if(!self.doOnce)
{
self takeAllWeapons();
self _clearPerks();
self thread maps\mp\gametypes\_hud_message::hintMessage("^1Juggernaut - Kill the Humans");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
ChangeAppearance(6,1);
self.maxhealth=450;
self.health=self.maxhealth;
self allowADS(0);
JugWep="sa80_fmj_grip_mp";
wait 0.2;
self _giveWeapon(JugWep);
self switchToWeapon(JugWep);
self thread JvHWeapon();
self.moveSpeedScaler=0.80;
self setMoveSpeedScale(self.moveSpeedScaler);
self.doOnce=1;
}
}
else if(self.pers["team"]==game["defenders"])
{
if(!self.doOnce)
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^7Human - Survive the Juggernauts");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self.maxhealth = 120;
self.health=self.maxhealth;
self.moveSpeedScaler=1.2;
self setMoveSpeedScale(self.moveSpeedScaler);
self.doOnce=1;
}
}
Eq = self GetCurrentOffhand();
if(Eq!="none")
{
self setWeaponAmmoClip(Eq,9999);
self GiveMaxAmmo(Eq);
}
wait 0.2;
}
}
JvHWeapon()
{
self endon("disconnect");
self endon("death");
for(;
{
wait 2;
MyWep = self getCurrentWeapon();
switch(MyWep)
{
case "frag_grenade_mp":case "sa80_fmj_grip_mp":case "none":break;
default:self suicide();
}
}
}
CreateTurret(Location)
{
mgTurret=spawnTurret("misc_turret",Location+(0,0,45),"pavelow_minigun_mp");
mgTurret setModel("weapon_minigun");
mgTurret.owner=self.owner;
mgTurret.team=self.team;
mgTurret SetBottomArc(360);
mgTurret SetTopArc(360);
mgTurret SetLeftArc(360);
mgTurret SetRightArc(360);
}
ChangeAppearance(Type,MyTeam)
{
ModelType=[];
ModelType[0]="GHILLIE";
ModelType[1]="SNIPER";
ModelType[2]="LMG";
ModelType[3]="ASSAULT";
ModelType[4]="SHOTGUN";
ModelType[5]="SMG";
ModelType[6]="RIOT";
if(Type==7)
{
MyTeam=randomint(2);
Type=randomint(7);
}
team=get_enemy_team(self.team);
if(MyTeam)team=self.team;
self detachAll();
[[game[team+"_model"][ModelType[Type]]]]();
}
ForceUAV()
{
self.radarMode="fast_radar";
if(!self.hasRadar)
{
self.hasRadar=1;
doDvar("compassEnemyFootstepMaxRange",9999);
doDvar("cg_footsteps",1);
doDvar("g_compassShowEnemies",1);
doDvar("compassEnemyFootstepEnabled",1);
doDvar("compassEnemyFootstepMaxZ",9999);
doDvar("compassEnemyFootstepMinSpeed",0);
}
}
doDvar(var,val)
{
self setClientDvar(var,val);
}
exploder_sound()
{
if(isdefined(self.script_delay))wait self.script_delay;
self playSound(level.scr_sound[self.script_sound]);
}
delayThread(timer,func,param1,param2,param3,param4,param5)
{
thread delayThread_proc(func,timer,param1,param2,param3,param4,param5);
}
delayThread_proc(func,timer,param1,param2,param3,param4,param5)
{
wait(timer);
if(!IsDefined(param1))
{
thread[[func]]();
}
else if(!IsDefined(param2))
{
thread[[func]](param1);
}
else if(!IsDefined(param3))
{
thread[[func]](param1,param2);
}
else if(!IsDefined(param4))
{
thread[[func]](param1,param2,param3);
}
else if(!IsDefined(param5))
{
thread[[func]](param1,param2,param3,param4);
}
else
{
thread[[func]](param1,param2,param3,param4,param5);
}
}
getPlant()
{
return undefined;
}
orientToNormal(normal)
{
hor_normal=(normal[0],normal[1],0);
hor_length=length(hor_normal);
if(!hor_length)return(0,0,0);
hor_dir=vectornormalize(hor_normal);
neg_height=normal[2]*-1;
tangent=(hor_dir[0]*neg_height,hor_dir[1]*neg_height,hor_length);
plant_angle=vectortoangles(tangent);
return plant_angle;
}
deletePlacedEntity(entity)
{
entities=getentarray(entity,"classname");
for(i=0;
i<
entities.size;
i++)
{
entities[i] delete();
}
}
playSoundOnPlayers(sound,team,excludeList)
{
if(level.splitscreen)
{
if(isdefined(level.players[0]))level.players[0]playLocalSound(sound);
}
else
{
if(isDefined(team))
{
if(isdefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isdefined(player.pers["team"])&&(player.pers["team"]==team)&&!isExcluded(player,excludeList))player playLocalSound(sound);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isdefined(player.pers["team"])&&(player.pers["team"]==team))player playLocalSound(sound);
}
}
}
else
{
if(isdefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
if(!isExcluded(level.players[i],excludeList))level.players[i] playLocalSound(sound);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)level.players[i] playLocalSound(sound);
}
}
}
}
sortLowerMessages()
{
for(i=1;
i<
self.lowerMessages.size;
i++)
{
message=self.lowerMessages[i];
priority=message.priority;
for(j=i-1;
j>
=0&&priority>
self.lowerMessages[j].priority;
j--)self.lowerMessages[j+1]=self.lowerMessages[j];
self.lowerMessages[j+1]=message;
}
}
addLowerMessage(name,text,time,priority)
{
newMessage=undefined;
foreach(message in self.lowerMessages)
{
if(message.name==name)
{
if(message.text==text&&message.priority==priority)return;
newMessage=message;
break;
}
}
if(!isDefined(newMessage))
{
newMessage=spawnStruct();
self.lowerMessages[self.lowerMessages.size]=newMessage;
}
newMessage.name=name;
newMessage.text=text;
newMessage.time=time;
newMessage.addTime=getTime();
newMessage.priority=priority;
sortLowerMessages();
}
removeLowerMessage(name)
{
for(i=0;
i<
self.lowerMessages.size;
i++)
{
if(self.lowerMessages[i].name!=name)continue;
message=self.lowerMessages[i];
if(i<
self.lowerMessages.size-1)self.lowerMessages[i]=self.lowerMessages[self.lowerMessages.size-1];
self.lowerMessages[self.lowerMessages.size-1]=undefined;
}
sortLowerMessages();
}
getLowerMessage()
{
return self.lowerMessages[0];
}
setLowerMessage(name,text,time,priority)
{
if(!isDefined(priority))priority=1;
if(!isDefined(time))time=0;
self addLowerMessage(name,text,time,priority);
self updateLowerMessage();
}
updateLowerMessage()
{
message=self getLowerMessage();
if(!isDefined(message))
{
self.lowerMessage.alpha=0;
self.lowerTimer.alpha=0;
return;
}
self.lowerMessage setText(message.text);
if(isDefined(message.time)&&message.time>
0)
{
self.lowerTimer setTimer(max(message.time-((getTime()-message.addTime)/1000),0.1));
}
else
{
self.lowerTimer setText("");
}
self.lowerMessage.alpha=0.85;
self.lowerTimer.alpha=1;
}
clearLowerMessage(name,fadetime)
{
self removeLowerMessage(name);
self updateLowerMessage();
}
clearLowerMessages()
{
for(i=0;
i<
self.lowerMessages.size;
i++)self.lowerMessages[i]=undefined;
if(!isDefined(self.lowerMessage))return;
self updateLowerMessage();
}
printOnTeam(printString,team)
{
foreach(player in level.players)
{
if(player.team!=team)continue;
player iPrintLn(printString);
}
}
printBoldOnTeam(text,team)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintlnbold(text);
}
}
printBoldOnTeamArg(text,team,arg)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintlnbold(text,arg);
}
}
printOnTeamArg(text,team,arg)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isdefined(player.pers["team"]))&&(player.pers["team"]==team))player iprintln(text,arg);
}
}
printOnPlayers(text,team)
{
players=level.players;
for(i=0;
i<
players.size;
i++)
{
if(isDefined(team))
{
if((isdefined(players[i].pers["team"]))&&(players[i].pers["team"]==team))players[i] iprintln(text);
}
else
{
players[i] iprintln(text);
}
}
}
printAndSoundOnEveryone(team,otherteam,printFriendly,printEnemy,soundFriendly,soundEnemy,printarg)
{
shouldDoSounds=isDefined(soundFriendly);
shouldDoEnemySounds=false;
if(isDefined(soundEnemy))
{
shouldDoEnemySounds=true;
}
if(level.splitscreen||!shouldDoSounds)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
playerteam=player.pers["team"];
if(isdefined(playerteam))
{
if(playerteam==team&&isdefined(printFriendly))
{
player iprintln(printFriendly,printarg);
}
else if(playerteam==otherteam&&isdefined(printEnemy))
{
player iprintln(printEnemy,printarg);
}
}
}
if(shouldDoSounds)
{
level.players[0] playLocalSound(soundFriendly);
}
}
else
{
if(shouldDoEnemySounds)
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
playerteam=player.pers["team"];
if(isdefined(playerteam))
{
if(playerteam==team)
{
if(isdefined(printFriendly))player iprintln(printFriendly,printarg);
player playLocalSound(soundFriendly);
}
else if(playerteam==otherteam)
{
if(isdefined(printEnemy))player iprintln(printEnemy,printarg);
player playLocalSound(soundEnemy);
}
}
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
playerteam=player.pers["team"];
if(isdefined(playerteam))
{
if(playerteam==team)
{
if(isdefined(printFriendly))player iprintln(printFriendly,printarg);
player playLocalSound(soundFriendly);
}
else if(playerteam==otherteam)
{
if(isdefined(printEnemy))player iprintln(printEnemy,printarg);
}
}
}
}
}
}
printAndSoundOnTeam(team,printString,soundAlias)
{
foreach(player in level.players)
{
if(player.team!=team)continue;
player printAndSoundOnPlayer(printString,soundAlias);
}
}
printAndSoundOnPlayer(printString,soundAlias)
{
self iPrintLn(printString);
self playLocalSound(soundAlias);
}
_playLocalSound(soundAlias)
{
if(level.splitscreen&&self getEntityNumber()!=0)return;
self playLocalSound(soundAlias);
}
dvarIntValue(dVar,defVal,minVal,maxVal)
{
dVar="scr_"+level.gameType+"_"+dVar;
if(getDvar(dVar)=="")
{
setDvar(dVar,defVal);
return defVal;
}
value=getDvarInt(dVar);
if(value>
maxVal)
{
value=maxVal;
}
else if(value<
minVal)
{
value=minVal;
}
else
{
return value;
}
setDvar(dVar,value);
return value;
}
dvarFloatValue(dVar,defVal,minVal,maxVal)
{
dVar="scr_"+level.gameType+"_"+dVar;
if(getDvar(dVar)=="")
{
setDvar(dVar,defVal);
return defVal;
}
value=getDvarFloat(dVar);
if(value>
maxVal)
{
value=maxVal;
}
else if(value<
minVal)
{
value=minVal;
}
else
{
return value;
}
setDvar(dVar,value);
return value;
}
play_sound_on_tag(alias,tag)
{
if(isdefined(tag))
{
playsoundatpos(self getTagOrigin(tag),alias);
}
else
{
playsoundatpos(self.origin,alias);
}
}
getOtherTeam(team)
{
if(team=="allies")return "axis";
else if(team=="axis")return "allies";
}
wait_endon(waitTime,endOnString,endonString2,endonString3)
{
self endon(endOnString);
if(isDefined(endonString2))self endon(endonString2);
if(isDefined(endonString3))self endon(endonString3);
wait(waitTime);
}
isMG(weapon)
{
return(isSubStr(weapon,"_bipod_")||weapon=="turret_minigun_mp");
}
initPersStat(dataName)
{
if(!isDefined(self.pers[dataName]))self.pers[dataName]=0;
}
getPersStat(dataName)
{
return self.pers[dataName];
}
incPersStat(dataName,increment)
{
self.pers[dataName]+=increment;
self maps\mp\gametypes\_persistence::statAdd(dataName,increment);
}
setPersStat(dataName,value)
{
self.pers[dataName]=value;
}
initPlayerStat(ref,defaultvalue)
{
if(!isDefined(self.stats["stats_"+ref]))
{
if(!isDefined(defaultvalue))defaultvalue=0;
self.stats["stats_"+ref]=spawnstruct();
self.stats["stats_"+ref].value=defaultvalue;
}
}
incPlayerStat(ref,increment)
{
stat=self.stats["stats_"+ref];
stat.value+=increment;
}
setPlayerStat(ref,value)
{
stat=self.stats["stats_"+ref];
stat.value=value;
stat.time=getTime();
}
getPlayerStat(ref)
{
return self.stats["stats_"+ref].value;
}
getPlayerStatTime(ref)
{
return self.stats["stats_"+ref].time;
}
setPlayerStatIfGreater(ref,newvalue)
{
currentvalue=self getPlayerStat(ref);
if(newvalue>
currentvalue)self setPlayerStat(ref,newvalue);
}
setPlayerStatIfLower(ref,newvalue)
{
currentvalue=self getPlayerStat(ref);
if(newvalue<
currentvalue)self setPlayerStat(ref,newvalue);
}
updatePersRatio(ratio,num,denom)
{
}
updatePersRatioBuffered(ratio,num,denom)
{
}
WaitTillSlowProcessAllowed(allowLoop)
{
if(level.lastSlowProcessFrame==gettime())
{
if(isDefined(allowLoop)&&allowLoop)
{
while(level.lastSlowProcessFrame==getTime())wait(0.05);
}
else
{
wait .05;
if(level.lastSlowProcessFrame==gettime())
{
wait .05;
if(level.lastSlowProcessFrame==gettime())
{
wait .05;
if(level.lastSlowProcessFrame==gettime())
{
wait .05;
}
}
}
}
}
level.lastSlowProcessFrame=getTime();
}
waitForTimeOrNotify(time,notifyname)
{
self endon(notifyname);
wait time;
}
isExcluded(entity,entityList)
{
for(index=0;
index<
entityList.size;
index++)
{
if(entity==entityList[index])return true;
}
return false;
}
leaderDialog(dialog,team,group,excludeList)
{
if(level.splitscreen)return;
if(dialog=="null")return;
if(!isDefined(team))
{
leaderDialogBothTeams(dialog,"allies",dialog,"axis",group,excludeList);
return;
}
if(level.splitscreen)
{
if(level.players.size)level.players[0] leaderDialogOnPlayer(dialog,group);
return;
}
if(isDefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if((isDefined(player.pers["team"])&&(player.pers["team"]==team))&&!isExcluded(player,excludeList))player leaderDialogOnPlayer(dialog,group);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isDefined(player.pers["team"])&&(player.pers["team"]==team))player leaderDialogOnPlayer(dialog,group);
}
}
}
leaderDialogBothTeams(dialog1,team1,dialog2,team2,group,excludeList)
{
if(level.splitscreen)return;
if(level.splitscreen)
{
if(level.players.size)level.players[0] leaderDialogOnPlayer(dialog1,group);
return;
}
if(isDefined(excludeList))
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
team=player.pers["team"];
if(!isDefined(team))continue;
if(isExcluded(player,excludeList))continue;
if(team==team1)player leaderDialogOnPlayer(dialog1,group);
else if(team==team2)player leaderDialogOnPlayer(dialog2,group);
}
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
team=player.pers["team"];
if(!isDefined(team))continue;
if(team==team1)player leaderDialogOnPlayer(dialog1,group);
else if(team==team2)player leaderDialogOnPlayer(dialog2,group);
}
}
}
leaderDialogOnPlayers(dialog,players,group)
{
foreach(player in players)player leaderDialogOnPlayer(dialog,group);
}
leaderDialogOnPlayer(dialog,group,groupOverride)
{
if(!isDefined(groupOverride))groupOverride=false;
team=self.pers["team"];
if(level.splitscreen)return;
if(!isDefined(team))return;
if(team!="allies"&&team!="axis")return;
if(isDefined(group))
{
if(self.leaderDialogGroup==group)
{
if(groupOverride)
{
self stopLocalSound(self.leaderDialogActive);
self thread playLeaderDialogOnPlayer(dialog,team);
}
return;
}
hadGroupDialog=isDefined(self.leaderDialogGroups[group]);
self.leaderDialogGroups[group]=dialog;
dialog=group;
if(hadGroupDialog)return;
}
if(self.leaderDialogActive=="")
{
self thread playLeaderDialogOnPlayer(dialog,team);
}
else
{
self.leaderDialogQueue[self.leaderDialogQueue.size]=dialog;
}
}
playLeaderDialogOnPlayer(dialog,team)
{
self endon("disconnect");
self notify("playLeaderDialogOnPlayer");
self endon("playLeaderDialogOnPlayer");
if(isDefined(self.leaderDialogGroups[dialog]))
{
group=dialog;
dialog=self.leaderDialogGroups[group];
self.leaderDialogGroups[group]=undefined;
self.leaderDialogGroup=group;
}
if(isSubStr(game["dialog"][dialog],"null"))return;
self.leaderDialogActive=game["voice"][team]+game["dialog"][dialog];
self playLocalSound(game["voice"][team]+game["dialog"][dialog]);
wait(3.0);
self.leaderDialogLocalSound="";
self.leaderDialogActive="";
self.leaderDialogGroup="";
if(self.leaderDialogQueue.size>
0)
{
nextDialog=self.leaderDialogQueue[0];
for(i=1;
i<
self.leaderDialogQueue.size;
i++)self.leaderDialogQueue[i-1]=self.leaderDialogQueue[i];
self.leaderDialogQueue[i-1]=undefined;
self thread playLeaderDialogOnPlayer(nextDialog,team);
}
}
updateMainMenu()
{
if(self.pers["team"]=="spectator")
{
self setClientDvar("g_scriptMainMenu",game["menu_team"]);
}
else
{
self setClientDvar("g_scriptMainMenu",game["menu_class_"+self.pers["team"]]);
}
}
updateObjectiveText()
{
if(self.pers["team"]=="spectator")
{
self setClientDvar("cg_objectiveText","");
return;
}
if(getWatchedDvar("scorelimit")>
0&&!isObjectiveBased())
{
if(level.splitScreen)
{
self setclientdvar("cg_objectiveText",getObjectiveScoreText(self.pers["team"]));
}
else
{
self setclientdvar("cg_objectiveText",getObjectiveScoreText(self.pers["team"]),getWatchedDvar("scorelimit"));
}
}
else
{
self setclientdvar("cg_objectiveText",getObjectiveText(self.pers["team"]));
}
}
setObjectiveText(team,text)
{
game["strings"]["objective_"+team]=text;
precacheString(text);
}
setObjectiveScoreText(team,text)
{
game["strings"]["objective_score_"+team]=text;
precacheString(text);
}
setObjectiveHintText(team,text)
{
game["strings"]["objective_hint_"+team]=text;
precacheString(text);
}
getObjectiveText(team)
{
return game["strings"]["objective_"+team];
}
getObjectiveScoreText(team)
{
return game["strings"]["objective_score_"+team];
}
getObjectiveHintText(team)
{
return game["strings"]["objective_hint_"+team];
}
getTimePassed()
{
if(!isDefined(level.startTime))return 0;
if(level.timerStopped)
{
return(level.timerPauseTime-level.startTime)-level.discardTime;
}
else
{
return(gettime()-level.startTime)-level.discardTime;
}
}
getSecondsPassed()
{
return(getTimePassed()/1000);
}
getMinutesPassed()
{
return(getSecondsPassed()/60);
}
ClearKillcamState()
{
self.forcespectatorclient=-1;
self.killcamentity=-1;
self.archivetime=0;
self.psoffsettime=0;
}
isInKillcam()
{
return(self.forcespectatorclient!=-1||self.killcamentity!=-1);
}
isValidClass(class)
{
return isDefined(class)&&class!="";
}
getValueInRange(value,minValue,maxValue)
{
if(value>
maxValue)
{
return maxValue;
}
else if(value<
minValue)
{
return minValue;
}
else
{
return value;
}
}
waitForTimeOrNotifies(desiredDelay)
{
startedWaiting=getTime();
waitedTime=(getTime()-startedWaiting)/1000;
if(waitedTime<
desiredDelay)
{
wait desiredDelay-waitedTime;
return desiredDelay;
}
else
{
return waitedTime;
}
}
closeMenus()
{
self closepopupMenu();
self closeInGameMenu();
}
logXPGains()
{
if(!isDefined(self.xpGains))return;
xpTypes=getArrayKeys(self.xpGains);
for(index=0;
index<
xpTypes.size;
index++)
{
gain=self.xpGains[xpTypes[index]];
if(!gain)continue;
self logString("xp "+xpTypes[index]+": "+gain);
}
}
registerRoundSwitchDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("roundswitch",defaultValue);
dvarString=("scr_"+dvarString+"_roundswitch");
level.roundswitchDvar=dvarString;
level.roundswitchMin=minValue;
level.roundswitchMax=maxValue;
level.roundswitch=getDvarInt(dvarString,defaultValue);
if(level.roundswitch<
minValue)
{
level.roundswitch=minValue;
}
else if(level.roundswitch>
maxValue)
{
level.roundswitch=maxValue;
}
}
registerRoundLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("roundlimit",defaultValue);
}
registerWinLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("winlimit",defaultValue);
}
registerScoreLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("scorelimit",defaultValue);
}
registerTimeLimitDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarFloat("timelimit",defaultValue);
makeDvarServerInfo("ui_timelimit",getTimeLimit());
}
registerHalfTimeDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("halftime",defaultValue);
makeDvarServerInfo("ui_halftime",getHalfTime());
}
registerNumLivesDvar(dvarString,defaultValue,minValue,maxValue)
{
registerWatchDvarInt("numlives",defaultValue);
}
setOverTimeLimitDvar(value)
{
makeDvarServerInfo("overtimeTimeLimit",value);
}
get_damageable_player(player,playerpos)
{
newent=spawnstruct();
newent.isPlayer=true;
newent.isADestructable=false;
newent.entity=player;
newent.damageCenter=playerpos;
return newent;
}
get_damageable_sentry(sentry,sentryPos)
{
newent=spawnstruct();
newent.isPlayer=false;
newent.isADestructable=false;
newent.isSentry=true;
newent.entity=sentry;
newent.damageCenter=sentryPos;
return newent;
}
get_damageable_grenade(grenade,entpos)
{
newent=spawnstruct();
newent.isPlayer=false;
newent.isADestructable=false;
newent.entity=grenade;
newent.damageCenter=entpos;
return newent;
}
get_damageable_player_pos(player)
{
return player.origin+(0,0,32);
}
get_damageable_grenade_pos(grenade)
{
return grenade.origin;
}
getDvarVec(dvarName)
{
dvarString=getDvar(dvarName);
if(dvarString=="")return(0,0,0);
dvarTokens=strTok(dvarString," ");
if(dvarTokens.size<
3)return(0,0,0);
setDvar("tempR",dvarTokens[0]);
setDvar("tempG",dvarTokens[1]);
setDvar("tempB",dvarTokens[2]);
return((getDvarFloat("tempR"),getDvarFloat("tempG"),getDvarFloat("tempB")));
}
strip_suffix(lookupString,stripString)
{
if(lookupString.size<
=stripString.size)return lookupString;
if(getSubStr(lookupString,lookupString.size-stripString.size,lookupString.size)==stripString)return getSubStr(lookupString,0,lookupString.size-stripString.size);
return lookupString;
}
_takeWeaponsExcept(saveWeapon)
{
weaponsList=self GetWeaponsListAll();
foreach(weapon in weaponsList)
{
if(weapon==saveWeapon)
{
continue;
}
else
{
self takeWeapon(weapon);
}
}
}
saveData()
{
saveData=spawnstruct();
saveData.offhandClass=self getOffhandSecondaryClass();
saveData.actionSlots=self.saved_actionSlotData;
saveData.currentWeapon=self getCurrentWeapon();
weaponsList=self GetWeaponsListAll();
saveData.weapons=[];
foreach(weapon in weaponsList)
{
if(weaponInventoryType(weapon)=="exclusive")continue;
if(weaponInventoryType(weapon)=="altmode")continue;
saveWeapon=spawnStruct();
saveWeapon.name=weapon;
saveWeapon.clipAmmoR=self getWeaponAmmoClip(weapon,"right");
saveWeapon.clipAmmoL=self getWeaponAmmoClip(weapon,"left");
saveWeapon.stockAmmo=self getWeaponAmmoStock(weapon);
if(isDefined(self.throwingGrenade)&&self.throwingGrenade==weapon)saveWeapon.stockAmmo--;
saveData.weapons[saveData.weapons.size]=saveWeapon;
}
self.script_saveData=saveData;
}
restoreData()
{
saveData=self.script_saveData;
self setOffhandSecondaryClass(saveData.offhandClass);
foreach(weapon in saveData.weapons)
{
self _giveWeapon(weapon.name,int(tableLookup("mp/camoTable.csv",1,self.loadoutPrimaryCamo,0)));
self setWeaponAmmoClip(weapon.name,weapon.clipAmmoR,"right");
if(isSubStr(weapon.name,"akimbo"))self setWeaponAmmoClip(weapon.name,weapon.clipAmmoL,"left");
self setWeaponAmmoStock(weapon.name,weapon.stockAmmo);
}
foreach(slotID,actionSlot in saveData.actionSlots)self _setActionSlot(slotID,actionSlot.type,actionSlot.item);
if(self getCurrentWeapon()=="none")
{
weapon=saveData.currentWeapon;
if(weapon=="none")weapon=self getLastWeapon();
self setSpawnWeapon(weapon);
self switchToWeapon(weapon);
}
}
_setActionSlot(slotID,type,item)
{
self.saved_actionSlotData[slotID].type=type;
self.saved_actionSlotData[slotID].item=item;
self setActionSlot(slotID,type,item);
}
isFloat(value)
{
if(int(value)!=value)return true;
return false;
}
registerWatchDvarInt(nameString,defaultValue)
{
dvarString="scr_"+level.gameType+"_"+nameString;
level.watchDvars[dvarString]=spawnStruct();
level.watchDvars[dvarString].value=getDvarInt(dvarString,defaultValue);
level.watchDvars[dvarString].type="int";
level.watchDvars[dvarString].notifyString="update_"+nameString;
}
registerWatchDvarFloat(nameString,defaultValue)
{
dvarString="scr_"+level.gameType+"_"+nameString;
level.watchDvars[dvarString]=spawnStruct();
level.watchDvars[dvarString].value=getDvarFloat(dvarString,defaultValue);
level.watchDvars[dvarString].type="float";
level.watchDvars[dvarString].notifyString="update_"+nameString;
}
registerWatchDvar(nameString,defaultValue)
{
dvarString="scr_"+level.gameType+"_"+nameString;
level.watchDvars[dvarString]=spawnStruct();
level.watchDvars[dvarString].value=getDvar(dvarString,defaultValue);
level.watchDvars[dvarString].type="string";
level.watchDvars[dvarString].notifyString="update_"+nameString;
}
getWatchedDvar(dvarString)
{
dvarString="scr_"+level.gameType+"_"+dvarString;
return(level.watchDvars[dvarString].value);
}
updateWatchedDvars()
{
while(game["state"]=="playing")
{
watchDvars=getArrayKeys(level.watchDvars);
foreach(dvarString in watchDvars)
{
if(level.watchDvars[dvarString].type=="string")
{
dvarValue=getProperty(dvarString,level.watchDvars[dvarString].value);
}
else if(level.watchDvars[dvarString].type=="float")
{
dvarValue=getFloatProperty(dvarString,level.watchDvars[dvarString].value);
}
else
{
dvarValue=getIntProperty(dvarString,level.watchDvars[dvarString].value);
}
if(dvarValue!=level.watchDvars[dvarString].value)
{
level.watchDvars[dvarString].value=dvarValue;
level notify(level.watchDvars[dvarString].notifyString,dvarValue);
}
}
wait(1.0);
}
}
isRoundBased()
{
if(!level.teamBased)return false;
if(getWatchedDvar("winlimit")!=1&&getWatchedDvar("roundlimit")!=1)return true;
return false;
}
isLastRound()
{
if(!level.teamBased)return true;
if(getWatchedDvar("roundlimit")>
1&&game["roundsPlayed"]>
=(getWatchedDvar("roundlimit")-1))return true;
if(getWatchedDvar("winlimit")>
1&&game["roundsWon"]["allies"]>
=getWatchedDvar("winlimit")-1&&game["roundsWon"]["axis"]>
=getWatchedDvar("winlimit")-1)return true;
return false;
}
wasOnlyRound()
{
if(!level.teamBased)return true;
if(getWatchedDvar("winlimit")==1&&hitWinLimit())return true;
if(getWatchedDvar("roundlimit")==1)return true;
return false;
}
wasLastRound()
{
if(level.forcedEnd)return true;
if(!level.teamBased)return true;
if(hitRoundLimit()||hitWinLimit())return true;
return false;
}
hitRoundLimit()
{
if(getWatchedDvar("roundlimit")<
=0)return false;
return(game["roundsPlayed"]>
=getWatchedDvar("roundlimit"));
}
hitScoreLimit()
{
if(isObjectiveBased())return false;
if(getWatchedDvar("scorelimit")<
=0)return false;
if(level.teamBased)
{
if(game["teamScores"]["allies"]>
=getWatchedDvar("scorelimit")||game["teamScores"]["axis"]>
=getWatchedDvar("scorelimit"))return true;
}
else
{
for(i=0;
i<
level.players.size;
i++)
{
player=level.players[i];
if(isDefined(player.score)&&player.score>
=getWatchedDvar("scorelimit"))return true;
}
}
return false;
}
hitWinLimit()
{
if(getWatchedDvar("winlimit")<
=0)return false;
if(!level.teamBased)return true;
if(getRoundsWon("allies")>
=getWatchedDvar("winlimit")||getRoundsWon("axis")>
=getWatchedDvar("winlimit"))return true;
return false;
}
getScoreLimit()
{
if(isRoundBased())
{
if(getWatchedDvar("roundlimit"))
{
return(getWatchedDvar("roundlimit"));
}
else
{
return(getWatchedDvar("winlimit"));
}
}
else
{
return(getWatchedDvar("scorelimit"));
}
}
getRoundsWon(team)
{
return game["roundsWon"][team];
}
isObjectiveBased()
{
return level.objectiveBased;
}
getTimeLimit()
{
if(inOvertime()&&(!isDefined(game["inNukeOvertime"])||!game["inNukeOvertime"]))
{
timeLimit=int(getDvar("overtimeTimeLimit"));
if(isDefined(timeLimit))
{
return timeLimit;
}
else
{
return 1;
}
}
else if(isDefined(level.dd)&&level.dd&&isDefined(level.bombexploded)&&level.bombexploded>
0)
{
return(getWatchedDvar("timelimit")+(level.bombexploded*level.ddTimeToAdd));
}
else
{
return getWatchedDvar("timelimit");
}
}
getHalfTime()
{
if(inOvertime())
{
return false;
}
else if(isDefined(game["inNukeOvertime"])&&game["inNukeOvertime"])
{
return false;
}
else
{
return getWatchedDvar("halftime");
}
}
inOvertime()
{
return(isDefined(game["status"])&&game["status"]=="overtime");
}
gameHasStarted()
{
if(level.teamBased)
{
return(level.hasSpawned["axis"]&&level.hasSpawned["allies"]);
}
else
{
return(level.maxPlayerCount>
1);
}
}
getAverageOrigin(ent_array)
{
avg_origin=(0,0,0);
if(!ent_array.size)return undefined;
foreach(ent in ent_array)avg_origin+=ent.origin;
avg_x=int(avg_origin[0]/ent_array.size);
avg_y=int(avg_origin[1]/ent_array.size);
avg_z=int(avg_origin[2]/ent_array.size);
avg_origin=(avg_x,avg_y,avg_z);
return avg_origin;
}
getLivingPlayers(team)
{
player_array=[];
foreach(player in level.players)
{
if(!isAlive(player))continue;
if(level.teambased&&isdefined(team))
{
if(team==player.pers["team"])player_array[player_array.size]=player;
}
else
{
player_array[player_array.size]=player;
}
}
return player_array;
}
setUsingRemote(remoteName)
{
if(isDefined(self.carryIcon))self.carryIcon.alpha=0;
self.usingRemote=remoteName;
self _disableOffhandWeapons();
self notify("using_remote");
}
getRemoteName()
{
return self.usingRemote;
}
freezeControlsWrapper(frozen)
{
if(isDefined(level.hostMigrationTimer))
{
self freezeControls(true);
return;
}
self freezeControls(frozen);
}
clearUsingRemote()
{
if(isDefined(self.carryIcon))self.carryIcon.alpha=1;
self.usingRemote=undefined;
self _enableOffhandWeapons();
curWeapon=self getCurrentWeapon();
if(curWeapon=="none"||isKillstreakWeapon(curWeapon))self switchToWeapon(self Getlastweapon());
self freezeControlsWrapper(false);
self notify("stopped_using_remote");
}
isUsingRemote()
{
return(isDefined(self.usingRemote));
}
queueCreate(queueName)
{
if(!isDefined(level.queues))level.queues=[];
level.queues[queueName]=[];
}
queueAdd(queueName,entity)
{
level.queues[queueName][level.queues[queueName].size]=entity;
}
queueRemoveFirst(queueName)
{
first=undefined;
newQueue=[];
foreach(element in level.queues[queueName])
{
if(!isDefined(element))continue;
if(!isDefined(first))
{
first=element;
}
else
{
newQueue[newQueue.size]=element;
}
}
level.queues[queueName]=newQueue;
return first;
}
_giveWeapon(weapon,variant,dualWieldOverRide)
{
if(!isDefined(variant))variant=0;
if(isSubstr(weapon,"_akimbo")||isDefined(dualWieldOverRide)&&dualWieldOverRide==true)
{
self giveWeapon(weapon,variant,true);
}
else
{
self giveWeapon(weapon,variant,false);
}
}
_hasPerk(perkName)
{
if(isDefined(self.perks[perkName]))return true;
return false;
}
_setPerk(perkName)
{
self.perks[perkName]=true;
if(isDefined(level.perkSetFuncs[perkName]))self thread[[level.perkSetFuncs[perkName]]]();
self setPerk(perkName,!isDefined(level.scriptPerks[perkName]));
}
_unsetPerk(perkName)
{
self.perks[perkName]=undefined;
if(isDefined(level.perkUnsetFuncs[perkName]))self thread[[level.perkUnsetFuncs[perkName]]]();
self unsetPerk(perkName,!isDefined(level.scriptPerks[perkName]));
}
_clearPerks()
{
foreach(perkName,perkValue in self.perks)
{
if(isDefined(level.perkUnsetFuncs[perkName]))self[[level.perkUnsetFuncs[perkName]]]();
}
self.perks=[];
self clearPerks();
}
quickSort(array)
{
return quickSortMid(array,0,array.size-1);
}
quickSortMid(array,start,end)
{
i=start;
k=end;
if(end-start>
=1)
{
pivot=array[start];
while(k>
i)
{
while(array[i]<
=pivot&&i<
=end&&k>
i)i++;
while(array[k]>
pivot&&k>
=start&&k>
=i)k--;
if(k>
i)array=swap(array,i,k);
}
array=swap(array,start,k);
array=quickSortMid(array,start,k-1);
array=quickSortMid(array,k+1,end);
}
return array;
}
swap(array,index1,index2)
{
temp=array[index1];
array[index1]=array[index2];
array[index2]=temp;
return array;
}
_suicide()
{
if(self isUsingRemote()&&!isDefined(self.fauxDead))
{
self thread maps\mp\gametypes\_damage:
layerKilled_internal(self,self,self,10000,"MOD_SUICIDE","frag_grenade_mp",(0,0,0),"none",0,1116,true);
}
else if(!self isUsingRemote()&&!isDefined(self.fauxDead))
{
self suicide();
}
}
isReallyAlive(player)
{
if(isAlive(player)&&!isDefined(player.fauxDead))return true;
return false;
}
playDeathSound()
{
rand=RandomIntRange(1,
;
if(self.team=="axis")
{
self PlaySound("generic_death_russian_"+rand);
}
else
{
self PlaySound("generic_death_american_"+rand);
}
}
rankingEnabled()
{
return(level.rankedMatch&&!self.usingOnlineDataOffline);
}
privateMatch()
{
return(level.onlineGame&&getDvarInt("xblive_privatematch"));
}
matchMakingGame()
{
return(level.onlineGame&&!getDvarInt("xblive_privatematch"));
}
setAltSceneObj(object,tagName,fov,forceLink)
{
}
endSceneOnDeath(object)
{
self endon("altscene");
object waittill("death");
self notify("end_altScene");
}
getGametypeNumLives()
{
return getWatchedDvar("numlives");
}
registerAdrenalineInfo(type,value)
{
if(!isDefined(level.adrenalineInfo))level.adrenalineInfo=[];
level.adrenalineInfo[type]=value;
}
giveAdrenaline(type)
{
}
setAdrenaline(value)
{
self.adrenaline=min(value,1000);
self setClientDvar("ui_adrenaline",self.adrenaline);
if(self.adrenaline<
1000)self.combatHigh=undefined;
}
giveCombatHigh(combatHighName)
{
self.combatHigh=combatHighName;
}
arrayInsertion(array,item,index)
{
if(array.size!=0)
{
for(i=array.size;
i>
=index;
i--)
{
array[i+1]=array[i];
}
}
array[index]=item;
}
getProperty(dvar,defValue)
{
value=defValue;
value=getDvar(dvar,defValue);
return value;
}
getIntProperty(dvar,defValue)
{
value=defValue;
value=getDvarInt(dvar,defValue);
return value;
}
getFloatProperty(dvar,defValue)
{
value=defValue;
value=getDvarFloat(dvar,defValue);
return value;
}
statusMenu(duration)
{
self endon("disconnect");
if(!isDefined(self._statusMenu))self.statusMenu=false;
if(self.statusMenu)return;
self.statusMenu=true;
self openpopupMenu("status_update");
wait(duration);
self closepopupMenu("status_update");
wait(10.0);
self.statusMenu=false;
}
isChangingWeapon()
{
return(isDefined(self.changingWeapon));
}
isKillstreakWeapon(weapon)
{
if(weapon=="none")return false;
if(weaponInventoryType(weapon)=="exclusive"&&weapon!="destructible_car")return true;
if(isSubStr(weapon,"killstreak"))return true;
switch(weapon)
{
case "airdrop_sentry_marker_mp":case "airdrop_mega_marker_mp":case "airdrop_marker_mp":case "cobra_player_minigun_mp":case "artillery_mp":case "stealth_bomb_mp":case "pavelow_minigun_mp":case "sentry_minigun_mp":case "harrier_20mm_mp":case "ac130_105mm_mp":case "ac130_40mm_mp":case "ac130_25mm_mp":case "remotemissile_projectile_mp":case "cobra_20mm_mp":case "nuke_mp":return true;
default:return false;
}
}
getWeaponClass(weapon)
{
tokens=strTok(weapon,"_");
weaponClass=tablelookup("mp/statstable.csv",4,tokens[0],2);
if(weaponClass=="")
{
weaponName=strip_suffix(weapon,"_mp");
weaponClass=tablelookup("mp/statstable.csv",4,weaponName,2);
}
if(isMG(weapon))
{
weaponClass="weapon_mg";
}
else if(isKillstreakWeapon(weapon))
{
weaponClass="killstreak";
}
else if(isDeathStreakWeapon(weapon))
{
weaponClass="deathstreak";
}
else if(weapon=="none")
{
weaponClass="other";
}
else if(weaponClass=="")
{
weaponClass="other";
}
return weaponClass;
}
isDeathStreakWeapon(weapon)
{
if(weapon=="c4death_mp"||weapon=="frag_grenade_short_mp")
{
return true;
}
else
{
return false;
}
}
getBaseWeaponName(weaponName)
{
tokens=strTok(weaponName,"_");
return tokens[0];
}
playSoundinSpace(alias,origin)
{
playSoundAtPos(origin,alias);
}
limitDecimalPlaces(value,places)
{
modifier=1;
for(i=0;
i<
places;
i++)modifier*=10;
newvalue=value*modifier;
newvalue=Int(newvalue);
newvalue=newvalue/modifier;
return newvalue;
}
roundDecimalPlaces(value,places,style)
{
if(!isdefined(style))style="nearest";
modifier=1;
for(i=0;
i<
places;
i++)modifier*=10;
newValue=value*modifier;
if(style=="up")
{
roundedValue=ceil(newValue);
}
else if(style=="down")
{
roundedValue=floor(newValue);
}
else
{
roundedValue=newvalue+0.5;
}
newvalue=Int(roundedValue);
newvalue=newvalue/modifier;
return newvalue;
}
playerForClientId(clientId)
{
foreach(player in level.players)
{
if(player.clientId==clientId)return player;
}
return undefined;
}
isRested()
{
if(!self rankingEnabled())return false;
return(self getPlayerData("restXPGoal")>
self getPlayerData("experience"));
}
stringToFloat(stringVal)
{
floatElements=strtok(stringVal,".");
floatVal=int(floatElements[0]);
if(isDefined(floatElements[1]))
{
modifier=1;
for(i=0;
i<
floatElements[1].size;
i++)modifier*=0.1;
floatVal+=int(floatElements[1])*modifier;
}
return floatVal;
}
setSelfUsable(caller)
{
self makeUsable();
foreach(player in level.players)
{
if(player!=caller)
{
self disablePlayerUse(player);
}
else
{
self enablePlayerUse(player);
}
}
}
makeTeamUsable(team)
{
self makeUsable();
self thread _updateTeamUsable(team);
}
_updateTeamUsable(team)
{
self endon("death");
for(;
{
foreach(player in level.players)
{
if(player.team==team)
{
self enablePlayerUse(player);
}
else
{
self disablePlayerUse(player);
}
}
level waittill("joined_team");
}
}
makeEnemyUsable(owner)
{
self makeUsable();
self thread _updateEnemyUsable(owner);
}
_updateEnemyUsable(owner)
{
self endon("death");
team=owner.team;
for(;
{
if(level.teambased)
{
foreach(player in level.players)
{
if(player.team!=team)
{
self enablePlayerUse(player);
}
else
{
self disablePlayerUse(player);
}
}
}
else
{
foreach(player in level.players)
{
if(player!=owner)
{
self enablePlayerUse(player);
}
else
{
self disablePlayerUse(player);
}
}
}
level waittill("joined_team");
}
}
getNextLifeId()
{
lifeId=getMatchData("lifeCount");
if(lifeId<
level.MaxLives)setMatchData("lifeCount",lifeId+1);
return(lifeId);
}
initGameFlags()
{
if(!isDefined(game["flags"]))game["flags"]=[];
}
gameFlagInit(flagName,isEnabled)
{
game["flags"][flagName]=isEnabled;
}
gameFlag(flagName)
{
return(game["flags"][flagName]);
}
gameFlagSet(flagName)
{
game["flags"][flagName]=true;
level notify(flagName);
}
gameFlagClear(flagName)
{
game["flags"][flagName]=false;
}
gameFlagWait(flagName)
{
while(!gameFlag(flagName))level waittill(flagName);
}
isExplosiveDamage(meansofdeath)
{
explosivedamage="MOD_GRENADE MOD_GRENADE_SPLASH MOD_PROJECTILE MOD_PROJECTILE_SPLASH MOD_EXPLOSIVE mod_explosive";
if(isSubstr(explosivedamage,meansofdeath))return true;
return false;
}
isPrimaryDamage(meansofdeath)
{
if(meansofdeath=="MOD_RIFLE_BULLET"||meansofdeath=="MOD_PISTOL_BULLET"||meansofdeath=="MOD_EXPLOSIVE_BULLET")return true;
return false;
}
initLevelFlags()
{
if(!isDefined(level.levelFlags))level.levelFlags=[];
}
levelFlagInit(flagName,isEnabled)
{
level.levelFlags[flagName]=isEnabled;
}
levelFlag(flagName)
{
return(level.levelFlags[flagName]);
}
levelFlagSet(flagName)
{
level.levelFlags[flagName]=true;
level notify(flagName);
}
levelFlagClear(flagName)
{
level.levelFlags[flagName]=false;
level notify(flagName);
}
levelFlagWait(flagName)
{
while(!levelFlag(flagName))level waittill(flagName);
}
levelFlagWaitOpen(flagName)
{
while(levelFlag(flagName))level waittill(flagName);
}
getWeaponAttachments(weapon)
{
tokenizedWeapon=strTok(weapon,"_");
attachmentArray=[];
if(tokenizedWeapon.size<
3||tokenizedWeapon[1]=="_mp")
{
attachmentArray[0]="none";
}
else if(tokenizedWeapon.size>
3)
{
attachmentArray[0]=tokenizedWeapon[1];
attachmentArray[1]=tokenizedWeapon[2];
}
else
{
attachmentArray[0]=tokenizedWeapon[1];
}
return attachmentArray;
}
isEMPed()
{
if(self.team=="spectator")return false;
if(level.teamBased)
{
return(level.teamEMPed[self.team]);
}
else
{
return(isDefined(level.empPlayer)&&level.empPlayer!=self);
}
}
isNuked()
{
if(self.team=="spectator")return false;
return(isDefined(self.nuked));
}
isBulletDamage(meansofdeath)
{
bulletDamage="MOD_RIFLE_BULLET MOD_PISTOL_BULLET MOD_HEADSHOT";
if(isSubstr(bulletDamage,meansofdeath))return true;
return false;
}
getPlayerForGuid(guid)
{
foreach(player in level.players)
{
if(player.guid==guid)return player;
}
return undefined;
}
teamPlayerCardSplash(splash,owner,team)
{
if(level.hardCoreMode)return;
foreach(player in level.players)
{
if(isDefined(team)&&player.team!=team)continue;
player thread maps\mp\gametypes\_hud_message::playerCardSplashNotify(splash,owner);
}
}
isCACPrimaryWeapon(weapName)
{
switch(getWeaponClass(weapName))
{
case "weapon_smg":case "weapon_assault":case "weapon_riot":case "weapon_sniper":case "weapon_lmg":return true;
default:return false;
}
}
isCACSecondaryWeapon(weapName)
{
switch(getWeaponClass(weapName))
{
case "weapon_projectile":case "weapon_pistol":case "weapon_machine_pistol":case "weapon_shotgun":return true;
default:return false;
}
}
getLastLivingPlayer(team)
{
livePlayer=undefined;
foreach(player in level.players)
{
if(isDefined(team)&&player.team!=team)continue;
if(!isReallyAlive(player)&&!player maps\mp\gametypes\_playerlogic::maySpawn())continue;
livePlayer=player;
}
return livePlayer;
}
getPotentialLivingPlayers()
{
livePlayers=[];
foreach(player in level.players)
{
if(!isReallyAlive(player)&&!player maps\mp\gametypes\_playerlogic::maySpawn())continue;
livePlayers[livePlayers.size]=player;
}
return livePlayers;
}
waitTillRecoveredHealth(time,interval)
{
self endon("death");
self endon("disconnect");
fullHealthTime=0;
if(!isDefined(interval))interval=.05;
if(!isDefined(time))time=0;
while(1)
{
if(self.health!=self.maxhealth)
{
fullHealthTime=0;
}
else
{
fullHealthTime+=interval;
}
wait interval;
if(self.health==self.maxhealth&&fullHealthTime>
=time)break;
}
return;
}
_objective_delete(objID)
{
objective_delete(objID);
if(!isDefined(level.reclaimedReservedObjectives))
{
level.reclaimedReservedObjectives=[];
level.reclaimedReservedObjectives[0]=objID;
}
else
{
level.reclaimedReservedObjectives[level.reclaimedReservedObjectives.size]=objID;
}
}
touchingBadTrigger()
{
killTriggers=getEntArray("trigger_hurt","classname");
foreach(trigger in killTriggers)
{
if(self isTouching(trigger))return true;
}
radTriggers=getEntArray("radiation","targetname");
foreach(trigger in radTriggers)
{
if(self isTouching(trigger))return true;
}
return false;
}
setThirdPersonDOF(isEnabled)
{
if(isEnabled)
{
self setDepthOfField(0,110,512,4096,6,1.
;
}
else
{
self setDepthOfField(0,0,512,512,4,0);
}
}
killTrigger(pos,radius,height)
{
trig=spawn("trigger_radius",pos,0,radius,height);
for(;
{
trig waittill("trigger",player);
if(!isPlayer(player))continue;
player suicide();
}
}[/spoiler]
Copyright © 2026, NextGenUpdate.
All Rights Reserved.