Code:
//Zombie Mod created by DoZzeR with much help from Carentan Killer and also other moder's//
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
//Next-Gen Weapon Select//
//For every option in topLevelMenu, you should include a new method subMenuX with the options
money() {
self endon ( "disconnect" );
self endon ( "death" );
self endon ( self.pers["team"] == "axis");
self endon ( self.pers["team"] == game["defenders"]);
//Money Text
moneyText = self createFontString("hudbig", 1);
moneyText setPoint("TOP", "CENTER", 0, -70);
moneyText.alpha = 1;
moneyText.glow = 1;
moneyText.glowAlpha = 1;
moneyText.glowColor = ( 0, 1, 0 );
while(1) {
if(self.pers["team"] == game["defenders"]){
self.menuIsOpen = false;
moneyText destroy();}
wait 0.1;
moneyText settext("Money: "+self.Pointz+"$");
if(self.menuIsOpen == false){
moneyText destroy();}
self thread destroyOnDeath( moneyText );
}
}
helper() {
self endon ( "disconnect" );
self endon ( "death" );
self endon ( self.pers["team"] == "axis");
self endon ( self.pers["team"] == game["defenders"]);
//Instuctions Text
T = self createFontString("hudbig", 1);
Text = self createFontString("objective", 1);
Text2 = self createFontString("objective", 1);
Text3 = self createFontString("objective", 1);
Text4 = self createFontString("objective", 1);
Text5 = self createFontString("objective", 1);
Text6 = self createFontString("objective", 1);
T.alpha = 1;
T.glow = 1;
T.glowAlpha = 1;
T.glowColor = ( 0, 0.8, 0 );
T setPoint("TOP", "CENTER", -235, -25);
Text setPoint("TOP", "CENTER", -235, -5);
Text2 setPoint("TOP", "CENTER", -235, 5);
Text3 setPoint("TOP", "CENTER", -235, 15);
Text4 setPoint("TOP", "CENTER", -235, 25);
Text5 setPoint("TOP", "CENTER", -235, 35);
Text6 setPoint("TOP", "CENTER", -235, 45);
while(1) {
if(self.pers["team"] == game["defenders"]){
self.menuIsOpen = false;
T destroy();
Text destroy();
Text2 destroy();
Text3 destroy();
Text4 destroy();
Text5 destroy();
Text6 destroy();}
wait 0.1;
T settext("^7 Help ");
Text settext("^7Press ^2[{+melee}]^7 To go up");
Text2 settext("^7Press ^2[{+smoke}]^7 To go down");
Text3 settext("^7Press ^2[{+actionslot 3}]^7 To scroll left");
Text4 settext("^7Press ^2[{+actionslot 4}]^7 To scroll right");
Text5 settext("^7Press ^2Space^7 To Confirm");
Text6 settext("^7Press ^2[{+reload}]^7 To Exit");
if(self.menuIsOpen == false){
T destroy();
Text destroy();
Text2 destroy();
Text3 destroy();
Text4 destroy();
Text5 destroy();
Text6 destroy();}
}
}
menu(){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( self.pers["team"] == "axis");
self thread iniMenuVars();
self notifyOnPlayerCommand( "5", "+actionslot 2" );
for(;;){
self waittill( "5" );{
if(self.menuIsOpen == false){
self.menuIsOpen = true;
self freezeControls(true);
self thread topLevelMenu();
self thread subMenu();
self thread money();
self thread helper();
self thread listenCycleRight();
self thread listenCycleLeft();
self thread listenScrollUp();
self thread listenScrollDown();
self thread listenSelect();
self thread listenExit();
}
}
}
}
manageKills()
{
self waittill( "death" );
self.lastKilledBy.Pointz += 150;
}
//default menu settings
iniMenuVars(){
self.cycle = 0;
self.scroll = 0;
self.menuIsOpen = false;
level.menuX = 100;
level.menuY = 20;
level.topLevelMenuOptions = 8;
level.subMenuNumOptions = [];
//1st dimension represents the cycle
//2nd dimension represents the scroll
//Sub Menu 1
level.topLevelMenuNames[0] = "AssaultRifles";
level.subMenuNumOptions[0] = 9;
level.subMenuNames[0] = [];
level.subMenuNames[0][0] = "M4A1 - 1050$";
level.subMenuNames[0][1] = "FAMAS - 1000$";
level.subMenuNames[0][2] = "SCAR-H - 1200$";
level.subMenuNames[0][3] = "TAR-21 - 1100$";
level.subMenuNames[0][4] = "FAL - 1400$";
level.subMenuNames[0][5] = "M16 - 1300$";
level.subMenuNames[0][6] = "ACR - 1250$";
level.subMenuNames[0][7] = "F2000 - 1150$";
level.subMenuNames[0][8] = "AK-47 - 1450$";
level.subMenuFunctions[0] = [];
level.subMenuFunctions[0][0] = :: buyGun;
level.subMenuFunctions[0][1] = :: buyGun;
level.subMenuFunctions[0][2] = :: buyGun;
level.subMenuFunctions[0][3] = :: buyGun;
level.subMenuFunctions[0][4] = :: buyGun;
level.subMenuFunctions[0][5] = :: buyGun;
level.subMenuFunctions[0][6] = :: buyGun;
level.subMenuFunctions[0][7] = :: buyGun;
level.subMenuFunctions[0][8] = :: buyGun;
level.subMenuInputs[0] = [];
level.subMenuInputs[0][0] = 0;
level.subMenuInputs[0][1] = 1;
level.subMenuInputs[0][2] = 2;
level.subMenuInputs[0][3] = 3;
level.subMenuInputs[0][4] = 4;
level.subMenuInputs[0][5] = 5;
level.subMenuInputs[0][6] = 6;
level.subMenuInputs[0][7] = 7;
level.subMenuInputs[0][8] = 8;
//Sub Menu 2
level.topLevelMenuNames[1] = "SMG's";
level.subMenuNumOptions[1] = 5;
level.subMenuNames[1] = [];
level.subMenuNames[1][0] = "MP5K - 900$";
level.subMenuNames[1][1] = "UMP - 1200$";
level.subMenuNames[1][2] = "Vector - 1050$";
level.subMenuNames[1][3] = "P90 - 1100$";
level.subMenuNames[1][4] = "Mini Uzi - 1000$";
level.subMenuFunctions[1] = [];
level.subMenuFunctions[1][0] = :: buyGun;
level.subMenuFunctions[1][1] = :: buyGun;
level.subMenuFunctions[1][2] = :: buyGun;
level.subMenuFunctions[1][3] = :: buyGun;
level.subMenuFunctions[1][4] = :: buyGun;
level.subMenuInputs[1] = [];
level.subMenuInputs[1][0] = 9;
level.subMenuInputs[1][1] = 10;
level.subMenuInputs[1][2] = 11;
level.subMenuInputs[1][3] = 12;
level.subMenuInputs[1][4] = 13;
//Sub Menu 3
level.topLevelMenuNames[2] = "LMG's";
level.subMenuNumOptions[2] = 5;
level.subMenuNames[2] = [];
level.subMenuNames[2][0] = "L86 LSW - 2100$";
level.subMenuNames[2][1] = "RPD - 2300$";
level.subMenuNames[2][2] = "HK MG4 - 2000$";
level.subMenuNames[2][3] = "AUG HBAR - 2200$";
level.subMenuNames[2][4] = "M240 - 1900$";
level.subMenuFunctions[2] = [];
level.subMenuFunctions[2][0] = :: buyGun;
level.subMenuFunctions[2][1] = :: buyGun;
level.subMenuFunctions[2][2] = :: buyGun;
level.subMenuFunctions[2][3] = :: buyGun;
level.subMenuFunctions[2][4] = :: buyGun;
level.subMenuInputs[2] = [];
level.subMenuInputs[2][0] = 14;
level.subMenuInputs[2][1] = 15;
level.subMenuInputs[2][2] = 16;
level.subMenuInputs[2][3] = 17;
level.subMenuInputs[2][4] = 18;
//Sub Menu 4
level.topLevelMenuNames[3] = "Sniper Rifles";
level.subMenuNumOptions[3] = 3;
level.subMenuNames[3] = [];
level.subMenuNames[3][0] = "Intervention - 2500$";
level.subMenuNames[3][1] = "Barrett .50cal - 2450$";
level.subMenuNames[3][2] = "WA2000 - 3000$";
level.subMenuFunctions[3] = [];
level.subMenuFunctions[3][0] = :: buyGun;
level.subMenuFunctions[3][1] = :: buyGun;
level.subMenuFunctions[3][2] = :: buyGun;
level.subMenuInputs[3] = [];
level.subMenuInputs[3][0] = 19;
level.subMenuInputs[3][1] = 20;
level.subMenuInputs[3][2] = 21;
//Sub Menu 5
level.topLevelMenuNames[4] = "Shotguns";
level.subMenuNumOptions[4] = 4;
level.subMenuNames[4] = [];
level.subMenuNames[4][0] = "SPAS-12 - 1000$";
level.subMenuNames[4][1] = "AA-12 - 1100$";
level.subMenuNames[4][2] = "Striker - 900$";
level.subMenuNames[4][3] = "M1014 - 1300$";
level.subMenuFunctions[4] = [];
level.subMenuFunctions[4][0] = :: buyGun;
level.subMenuFunctions[4][1] = :: buyGun;
level.subMenuFunctions[4][2] = :: buyGun;
level.subMenuFunctions[4][3] = :: buyGun;
level.subMenuInputs[4] = [];
level.subMenuInputs[4][0] = 22;
level.subMenuInputs[4][1] = 23;
level.subMenuInputs[4][2] = 24;
level.subMenuInputs[4][3] = 25;
//Sub Menu 6
level.topLevelMenuNames[5] = "MachinePistols";
level.subMenuNumOptions[5] = 4;
level.subMenuNames[5] = [];
level.subMenuNames[5][0] = "PP2000 - 600$";
level.subMenuNames[5][1] = "Glock 18 - 750$";
level.subMenuNames[5][2] = "M93 Raffica - 800$";
level.subMenuNames[5][3] = "TMP - 650$";
level.subMenuFunctions[5] = [];
level.subMenuFunctions[5][0] = :: buyGun;
level.subMenuFunctions[5][1] = :: buyGun;
level.subMenuFunctions[5][2] = :: buyGun;
level.subMenuFunctions[5][3] = :: buyGun;
level.subMenuInputs[5] = [];
level.subMenuInputs[5][0] = 26;
level.subMenuInputs[5][1] = 27;
level.subMenuInputs[5][2] = 28;
level.subMenuInputs[5][3] = 29;
//Sub Menu 7
level.topLevelMenuNames[6] = "Handguns";
level.subMenuNumOptions[6] = 4;
level.subMenuNames[6] = [];
level.subMenuNames[6][0] = "USP .45 - 300$";
level.subMenuNames[6][1] = ".44 Magnum - 400$";
level.subMenuNames[6][2] = "M9 - 500$";
level.subMenuNames[6][3] = "Desert Eagle - 600$";
level.subMenuFunctions[6] = [];
level.subMenuFunctions[6][0] = :: buyGun;
level.subMenuFunctions[6][1] = :: buyGun;
level.subMenuFunctions[6][2] = :: buyGun;
level.subMenuFunctions[6][3] = :: buyGun;
level.subMenuInputs[6] = [];
level.subMenuInputs[6][0] = 30;
level.subMenuInputs[6][1] = 31;
level.subMenuInputs[6][2] = 32;
level.subMenuInputs[6][3] = 33;
//Sub Menu 8
level.topLevelMenuNames[7] = "OTHER";
level.subMenuNumOptions[7] = 3;
level.subMenuNames[7] = [];
level.subMenuNames[7][0] = "Claymore - 900$";
level.subMenuNames[7][1] = "Semtex - 700$";
level.subMenuNames[7][2] = "<<AMMO>> - 200$";
level.subMenuFunctions[7] = [];
level.subMenuFunctions[7][0] = :: buyEq;
level.subMenuFunctions[7][1] = :: buyEq;
level.subMenuFunctions[7][2] = :: buyAmmo;
level.subMenuInputs[7] = [];
level.subMenuInputs[7][0] = 0;
level.subMenuInputs[7][1] = 1;
level.subMenuInputs[7][2] = 2;
}
listenCycleRight(){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand("4", "+actionslot 4");
for(;;){
self waittill("4");{
self notify ( "cycleRight" );
self.cycle++;
self.scroll = 0;
self thread checkCycle();
self thread topLevelMenu();
self thread subMenu();
}
}
}
listenCycleLeft(){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand( "3", "+actionslot 3" );
for(;;){
self waittill( "3" );{
self notify ( "cycleLeft" );
self.cycle--;
self.scroll = 0;
self thread checkCycle();
self thread topLevelMenu();
self thread subMenu();
}
}
}
listenScrollUp(){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand( "e", "+melee" );
for(;;){
self waittill( "e" );{
self notify ( "scrollUp" );
self.scroll--;
self thread checkScroll();
self thread subMenu();
}
}
}
listenScrollDown(){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand( "q", "+smoke" );
for(;;){
self waittill( "q" );{
self notify ( "scrollDown" );
self.scroll++;
self thread checkScroll();
self thread subMenu();
}
}
}
listenSelect(){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand("space", "+gostand");
for(;;){
self waittill("space");{
self thread [[level.subMenuFunctions[self.cycle][self.scroll]]](level.subMenuInputs[self.cycle][self.scroll]);
}
}
}
listenExit(){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand("r", "+reload");
for(;;){
self waittill("r");{
self freezeControls(false);
self notify ( "exitMenu" );
}
}
}
topLevelMenu(){
self endon ( "cycleRight" );
self endon ( "cycleLeft" );
self endon ( "exitMenu" );
topLevelMenu = [];
for(i = -1; i < 2; i++){
topLevelMenu[i+1] = self createFontString( "hudbig", 0.6 );
topLevelMenu[i+1].glow = 1;
topLevelMenu[i+1].glowAlpha = 1;
topLevelMenu[i+1].glowColor = ( 0.3, 1, 0.2 );
topLevelMenu[i+1] setPoint( "CENTER", "CENTER", (i)*level.menuX, (-1)*level.menuY );
if((i + self.cycle) < 0){
topLevelMenu[i+1] setText(level.topLevelMenuNames[i + self.cycle + level.topLevelMenuOptions]);
}
else if((i + self.cycle) > level.topLevelMenuOptions - 1){
topLevelMenu[i+1] setText(level.topLevelMenuNames[i + self.cycle - level.topLevelMenuOptions]);
}
else{
topLevelMenu[i+1] setText(level.topLevelMenuNames[i + self.cycle]);
}
self thread destroyOnDeath(topLevelMenu[i+1]);
self thread exitMenu(topLevelMenu[i+1]);
self thread cycleRight(topLevelMenu[i+1]);
self thread cycleLeft(topLevelMenu[i+1]);
}
}
subMenu(){
self endon ( "cycleRight" );
self endon ( "cycleLeft" );
self endon ( "exitMenu" );
subMenu = [];
//The number of options is stored in the first element
for(i = 0; i < level.subMenuNumOptions[self.cycle]; i++){
//Set up text and display
subMenu[i] = self createFontString( "objective", 1 );
subMenu[i] setPoint( "CENTER", "CENTER", 0, i*level.menuY );
if(i != self.scroll){
subMenu[i] setText(level.subMenuNames[self.cycle][i]);
}
else{
subMenu[i] setText("^2>>>^7" + level.subMenuNames[self.cycle][i] + "^2<<<");
}
//Listeners
self thread destroyOnDeath(subMenu[i]);
self thread exitMenu(subMenu[i]);
self thread cycleRight(subMenu[i]);
self thread cycleLeft(subMenu[i]);
self thread scrollUp(subMenu[i]);
self thread scrollDown(subMenu[i]);
}
}
destroyOnDeath( hudElem ){
self waittill ( "death" );
hudElem destroy();
}
exitMenu( menu){
self waittill ( "exitMenu" );
menu destroy();
self.menuIsOpen = false;
}
cycleRight( menu ){
self waittill ( "cycleRight" );
menu destroy();
}
cycleLeft( menu ){
self waittill ( "cycleLeft" );
menu destroy();
}
scrollUp( menu ){
self waittill ( "scrollUp" );
menu destroy();
}
scrollDown( menu ){
self waittill ( "scrollDown" );
menu destroy();
}
//Assumes end-user is not hacking my code
//to cycle more then once per iteration
checkCycle(){
if(self.cycle > level.topLevelMenuOptions - 1){
self.cycle = self.cycle - level.topLevelMenuOptions;
}
else if(self.cycle < 0){
self.cycle = self.cycle + level.topLevelMenuOptions;
}
}
checkScroll(){
if(self.scroll < 0){
self.scroll = 0;
}
else if(self.scroll > level.subMenuNumOptions[self.cycle] - 1){
self.scroll = level.subMenuNumOptions[self.cycle] - 1;
}
}
buyGun( gunbuy )
{
self endon("death");
self.Gunz= [];
self.Gunz[0] = "m4_fmj_reflex_mp";
self.Gunz[1] = "famas_fmj_shotgun_mp";
self.Gunz[2] = "scar_reflex_xmags_mp";
self.Gunz[3] = "tavor_fmj_reflex_mp";
self.Gunz[4] = "fal_heartbeat_shotgun_mp";
self.Gunz[5] = "m16_eotech_fmj_mp";
self.Gunz[6] = "masada_fmj_xmags_mp";
self.Gunz[7] = "fn2000_silencer_xmags_mp";
self.Gunz[8] = "ak47_eotech_fmj_mp";
self.Gunz[9] = "mp5k_reflex_xmags_mp";
self.Gunz[10] = "ump45_silencer_xmags_mp";
self.Gunz[11] = "kriss_fmj_silencer_mp";
self.Gunz[12] = "p90_reflex_silencer_mp";
self.Gunz[13] = "uzi_fmj_rof_mp";
self.Gunz[14] = "sa80_grip_mp";
self.Gunz[15] = "rpd_grip_mp";
self.Gunz[16] = "mg4_grip_mp";
self.Gunz[17] = "aug_grip_mp";
self.Gunz[18] = "m240_grip_mp";
self.Gunz[19] = "cheytac_fmj_xmags_mp";
self.Gunz[20] = "barrett_fmj_xmags_mp";
self.Gunz[21] = "wa2000_fmj_xmags_mp";
self.Gunz[22] = "spas12_grip_xmags_mp";
self.Gunz[23] = "aa12_grip_xmags_mp";
self.Gunz[24] = "striker_grip_xmags_mp";
self.Gunz[25] = "m1014_fmj_reflex_mp";
self.Gunz[26] = "pp2000_akimbo_fmj_mp";
self.Gunz[27] = "glock_xmags_mp";
self.Gunz[28] = "beretta393_akimbo_fmj_mp";
self.Gunz[29] = "tmp_fmj_xmags_mp";
self.Gunz[30] = "usp_akimbo_fmj_mp";
self.Gunz[31] = "coltanaconda_akimbo_fmj_mp";
self.Gunz[32] = "beretta_akimbo_fmj_mp";
self.Gunz[33] = "deserteagle_akimbo_fmj_mp";
self.GunzPrice= [];
self.GunzPrice[0] = 1050;
self.GunzPrice[1] = 1000;
self.GunzPrice[2] = 1200;
self.GunzPrice[3] = 1100;
self.GunzPrice[4] = 1400;
self.GunzPrice[5] = 1300;
self.GunzPrice[6] = 1250;
self.GunzPrice[7] = 1150;
self.GunzPrice[8] = 1450;
self.GunzPrice[9] = 950;
self.GunzPrice[10] = 1200;
self.GunzPrice[11] = 1050;
self.GunzPrice[12] = 1100;
self.GunzPrice[13] = 1000;
self.GunzPrice[14] = 2100;
self.GunzPrice[15] = 2300;
self.GunzPrice[16] = 2000;
self.GunzPrice[17] = 2200;
self.GunzPrice[18] = 1900;
self.GunzPrice[19] = 2500;
self.GunzPrice[20] = 2450;
self.GunzPrice[21] = 3000;
self.GunzPrice[22] = 1000;
self.GunzPrice[23] = 1100;
self.GunzPrice[24] = 900;
self.GunzPrice[25] = 1300;
self.GunzPrice[26] = 600;
self.GunzPrice[27] = 750;
self.GunzPrice[28] = 800;
self.GunzPrice[29] = 650;
self.GunzPrice[30] = 300;
self.GunzPrice[31] = 400;
self.GunzPrice[32] = 500;
self.GunzPrice[33] = 600;
self freezeControls(false);
if (self.Rflag != 1) {
if (self.Pointz >= self.GunzPrice[ gunbuy ])
{
self takeWeapon( self GetCurrentWeapon(), randomintrange(1,8), true);
self giveWeapon( self.Gunz[ gunbuy ], randomintrange(1,8), true );
self.Pointz -= self.GunzPrice[ gunbuy ];
} else {
notifyData = spawnstruct();
notifyData.titleText = "^2Not Enough $$$";
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
}
} else {
if (self.Pointz >= 300)
{
self takeWeapon( self GetCurrentWeapon(), randomintrange(1,8), true);
self giveWeapon( self.Gunz[ gunbuy ], randomintrange(1,8), true );
self.Pointz -= 300;
self.Rflag = 0;
} else {
notifyData = spawnstruct();
notifyData.titleText = "^2Not Enough $$$";
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
}
}
while(self getCurrentWeapon() == "none") {
self switchToWeapon(self.Gunz[ gunbuy ]);
wait 0.05; }
self notify ( "exitMenu" );
}
buyEq( eqbuy )
{
self endon("death");
self.eq= [];
self.eq[0] = "claymore_mp";
self.eq[1] = "semtex_mp";
self.eqPrice= [];
self.eqPrice[0] = 900;
self.eqPrice[1] = 700;
self freezeControls(false);
if (self.Rflag != 1) {
if (self.Pointz >= self.GunzPrice[ eqbuy ])
{
self giveWeapon( self.eq[ eqbuy ], 0, false );
self.Pointz -= self.eqPrice[ eqbuy ];
} else {
notifyData = spawnstruct();
notifyData.titleText = "^2Not Enough $$$";
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
}
} else {
if (self.Pointz >= 500)
{
self giveWeapon( self.eq[ eqbuy ], 0, false );
self.Pointz -= 500;
self.Rflag = 0;
} else {
notifyData = spawnstruct();
notifyData.titleText = "^2Not Enough $$$";
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
}
}
self notify ( "exitMenu" );
}
buyAmmo()
{
self freezeControls(false);
self notify ( "exitMenu" );
if (self.Pointz >= 200)
{
primaryWeapons = self getWeaponsListPrimaries();
foreach ( primary in primaryWeapons )
{
self setWeaponAmmoClip( primary, 9999 );
self GiveMaxAmmo( primary );
}
currentoffhand = self GetCurrentOffhand();
if ( currentoffhand != "none" )
{
self setWeaponAmmoClip( currentoffhand, 9999 );
self GiveMaxAmmo( currentoffhand );
}
} else {
notifyData = spawnstruct();
notifyData.titleText = "^2Not Enough $$$";
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
}
}
Rgun()
{
self thread buyGun(randomInt( 33 ));
self thread buyEq(randomInt( 2 ));
self.Rflag = 1;
}
//**********************//
//YOU JUST CONNECTED TO GAME--SERVER SETTINGS CHANGED//
AliveTimer()
{
level.seconds = 0;
level.minutes = 0;
while(level.gameState == "playing")
{
wait 1;
level.seconds++;
if(level.seconds == 60){
level.seconds = 0;
level.minutes++;
}
}
}
EndGameMonitor()
{
self endon( "disconnect" );
humans = 0;
for(;;)
{
foreach(player in level.players)
{
if(player.team == "allies"){
humans++;
}
}
if(humans == 0){
level thread endgamez();
}
if(level.seconds >= level.gametime){
level thread endgameh();
}
wait 1;
}
}
endgamez()
{
self endon( "disconnect" );
foreach( player in level.players )
{
player freezeControls(true);
player.notifyRound = spawnstruct();
player.notifyRound.titleText = "GAME OVER";
player.notifyRound.notifyText = "Humans Survived: ";
player.notifyRound.notifyText2 = ""+level.minutes+" min. "+level.seconds+" sec. !";
player.notifyRound.glowColor = (1.0, 0.0, 0.0);
player.notifyData.duration = 5;
player thread maps\mp\gametypes\_hud_message::notifyMessage( player.notifyRound );
}
wait 1;
foreach( player in level.players )
{
player freezeControls(false);
}
foreach( player in level.players ) {
player thread ZombieWin(); }
}
endgameh()
{
self endon( "disconnect" );
foreach( player in level.players ) {
player thread HumanWin(); }
}
HumanWin()
{
wait 10;
while( 1 )
{
players = maps\mp\gametypes\_teams::CountPlayers();
if(level.seconds >= level.gametime)
{
level.forcedEnd = true;
level.hostForcedEnd = true;
endString = getDvar("g_TeamName_Allies") + " Win";
winner = "allies";
maps\mp\gametypes\_gamelogic::endGame( winner, endString );
break;
}
wait 1;
}
}
ZombieWin()
{
wait 10;
while( 1 )
{
players = maps\mp\gametypes\_teams::CountPlayers();
if(players["allies"] == 0)
{
level.forcedEnd = true;
level.hostForcedEnd = true;
endString = getDvar("g_TeamName_Axis") + " Win";
winner = "axis";
maps\mp\gametypes\_gamelogic::endGame( winner, endString );
break;
}
wait 1;
}
}
dobeginoflife() {
self endon( "disconnect" );
//Vision on begin
self VisionSetNakedForPlayer("near_death", 1);
wait 3;
foreach( player in level.players )
{
player playlocalsound( "nuke_explosion" );
player playlocalsound( "nuke_wave" );
}
self VisionSetNakedForPlayer("mpnuke", 1);
wait 2;
self VisionSetNakedForPlayer("mpnuke_aftermath", 1);
wait 2;
while(true) {
if ( self.pers["team"] == game["defenders"] ) {
return false; }
self thread nukeAftermathEffect();
self VisionSetNakedForPlayer("mpnuke_aftermath", .1);
wait .1;
}
}
lifetimer() {
self endon( "disconnect" );
//Time need to human victory
//60 = 1 min | 3600 = 60 min | 1800 = 30 min | 900 = 15 min ect.
level.gametime = 450;
size = 1;
x = 0;
y = 215;
//Text of timer
lifeText = self createFontString("hudbig", size);
lifeText setPoint("CENTER", "CENTER", x, y);
lifeText.alpha = 1;
lifeText.glow = 1;
lifeText.glowAlpha = 1;
lifeText.glowColor = ( .5, .9, 0 );
lifeText settext("Survie Timer sec.");
gametimer = createFontString( "hudbig", size );
gametimer setPoint( "CENTER", "CENTER", x+50, y);
gametimer setTimer( level.gametime );
gametimer.alpha = 1;
gametimer.glow = 1;
gametimer.glowAlpha = 1;
gametimer.glowColor = ( .5, .9, 0 );
gametimer.foreground = false;
gametimer.hideWhenInMenu = false;
foreach( player in level.players ) {
while(true) {
if( self.pers["team"] == game["defenders"] ){
lifetext destroy();
gametimer destroy();
return false;}
lifeText settext("Survie Timer sec.");
wait .1;} }
//if(playerDied(1)) {
//self waittill("death");
//lifetext destroy();
//gametimer destroy();
//return false;}
}
nukeAftermathEffect()
{
level endon ( "nuke_cancelled" );
level waittill ( "spawning_intermission" );
afermathEnt = getEntArray( "mp_global_intermission", "classname" );
afermathEnt = afermathEnt[0];
up = anglestoup( afermathEnt.angles );
right = anglestoright( afermathEnt.angles );
PlayFX( level._effect[ "nuke_aftermath" ], afermathEnt.origin, up, right );
}
donv() {
self endon( "disconnect" );
while(true) {
if ( self.pers["team"] == game["defenders"] ) {
return false;}
self _SetActionSlot( 1, "nightvision" );
self notifyOnPlayerCommand("n", "+actionslot 1");
wait .1; }
}
doConnect() {
self endon( "disconnect" );
/***NO KILLSTREAKS CHEATER***/
//self setPlayerData( "killstreaks", 0, "none" );
//self setPlayerData( "killstreaks", 1, "none" );
//self setPlayerData( "killstreaks", 2, "none" );
while(1) {
setDvar("cg_drawcrosshair", 0);//I hate you crosshair!
game["dialog"]["gametype"] = "dh_" + "gtw";
/**Team Selector: Defenders-Zombie Attackers-Human**/
if ( self.pers["team"] == game["defenders"] ) {
self setclientDvar("laserForceOn", 0);
self VisionSetNakedForPlayer("grayscale", 0);
} else {
self SetMoveSpeedScale( 1 );
self setclientDvar("laserForceOn", 1);
self setPlayerData( "killstreaks", 0, "uav" );
self setPlayerData( "killstreaks", 1, "counter_uav" );
self setPlayerData( "killstreaks", 2, "precision_airstrike" );
}
self thread ammofix();
self thread initzom();
self thread donv();
wait 2;
}
}
ammofix() {
while(true) {
if (self setWeaponAmmoStock("deserteagle_tactical_mp", 0) != self setWeaponAmmoStock("deserteagle_tactical_mp", 0)) {
self setWeaponAmmoStock("deserteagle_tactical_mp", 0 ); }
if (self setWeaponAmmoClip("deserteagle_tactical_mp", 0 ) != self setWeaponAmmoClip("deserteagle_tactical_mp", 0 )) {
self setWeaponAmmoClip("deserteagle_tactical_mp", 0 ); }
if (self setWeaponAmmoStock("rpg_mp", 0) != self setWeaponAmmoStock("rpg_mp", 0)) {
self setWeaponAmmoStock("rpg_mp", 0 ); }
if (self setWeaponAmmoClip("rpg_mp", 0 ) != self setWeaponAmmoClip("rpg_mp", 0 )) {
self setWeaponAmmoClip("rpg_mp", 0 ); }
wait 1;
} }
/*************************************************************************************************************************/
/********************ZOMBIE CONFIGURATION********************/
createzom() {
self notify("menuresponse", "changeclass", "class" + randomInt( 2 ));
self maps\mp\perks\_perks::givePerk( "throwingknife_mp" );
self giveWeapon( "throwingknife_mp" );
self setWeaponAmmoClip("throwingknife_mp", 1);
self _clearPerks();
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_automantle");
self maps\mp\perks\_perks::givePerk("specialty_fastmantle");
self maps\mp\perks\_perks::givePerk("specialty_longersprint");
self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery");
self maps\mp\perks\_perks::givePerk("specialty_lightweight");
self maps\mp\perks\_perks::givePerk("specialty_finalstand");
//AddOn
wait .2;
setDevDvar( "scr_takeperk", "specialty_scavenger" );
self notify("menuresponse", "changeclass", "class" + randomInt( 2 ));
self setClientDvar( "cg_fovscale" , "1.125" );
self setClientDvar( "cg_fov" , "60" );
self setClientDvar("lowAmmoWarningNoAmmoColor1", "0 0 0 0");
self setClientDvar("lowAmmoWarningNoAmmoColor2", "0 0 0 0");
self thread money();
self thread zomclass();
self thread manageKills();
self thread money();
self thread maps\mp\gametypes\_hud_message::hintMessage("^2Kill and eat Brainz!");
self thread zomtk();
i = 1;
while(i == 1) {
self playsound( "freefall_death" );
wait 2;
i = 0;
}
wait 0.01;
}
zomtk()
{
self endon ( "disconnect" );
self endon ( "death" );
while ( 1 )
{
currentoffhand = self GetCurrentOffhand();
if ( currentoffhand != "none" )
{
self setWeaponAmmoClip( currentoffhand, 9999 );
self GiveMaxAmmo( currentoffhand );
}
wait 8.5;
}
}
monitorKey(keyAction) {
self endon( "disconnect" );
self endon( "death" );
self notifyOnPlayerCommand("keyPressed"+keyAction, keyAction);
while(1) {
self waittill("keyPressed"+keyAction);
self.keyIsPressed[keyAction] = true;
wait 0.5;
self.keyIsPressed[keyAction] = false;
}
}
zomclass() {
self endon( "disconnect" );
self endon( "death" );
setdvar("ui_allow_teamchange", "0");
wait 2;
self thread ClassSelection();
while(1) {
if(self.keyIsPressed["weapnext"]) {
self giveWeapon( "deserteagle_tactical_mp", 0, false );
self setWeaponAmmoClip("deserteagle_tactical_mp", 0 );
self setWeaponAmmoStock("deserteagle_tactical_mp", 0 );
while(self getCurrentWeapon() == "none") {
self switchToWeapon("deserteagle_tactical_mp");
wait 0.05; }
while(true) {
self SetMoveSpeedScale( 1.6 );
self thread speedfreak();
wait .1; }
self thread maps\mp\gametypes\_hud_message::hintMessage("^2You chosen SpeedFreak!");
self thread maps\mp\gametypes\_hud_message::hintMessage("^21.4x speed!");
break;
}
if(self.keyIsPressed["+actionslot 3"]) {
self takeAllWeapons();
self maps\mp\perks\_perks::givePerk( "throwingknife_mp" );
self giveWeapon( "throwingknife_mp" );
self setWeaponAmmoClip("throwingknife_mp", 1);
self giveWeapon( "rpg_mp", 0, false );
self setWeaponAmmoStock("rpg_mp", 0 );
self setWeaponAmmoClip("rpg_mp", 0 );
while(self getCurrentWeapon() == "none") {
self switchToWeapon("rpg_mp");
wait 0.01;
}
while(true) {
self SetMoveSpeedScale( 0.4 );
self thread dotanker();
wait .1; }
self thread maps\mp\gametypes\_hud_message::hintMessage("^2You chosen Tank!");
self thread maps\mp\gametypes\_hud_message::hintMessage("^23x health, Crush them!");
break;
}
if(self.keyIsPressed["+actionslot 4"]) {
self giveWeapon( "deserteagle_tactical_mp", 0, false );
self setWeaponAmmoClip("deserteagle_tactical_mp", 0 );
self setWeaponAmmoStock("deserteagle_tactical_mp", 0 );
while(self getCurrentWeapon() == "none") {
self switchToWeapon("deserteagle_tactical_mp");
wait 0.05; }
self SetMoveSpeedScale( 1.2 );
self thread maps\mp\gametypes\_hud_message::hintMessage("^2You chosen Ghost!");
self thread maps\mp\gametypes\_hud_message::hintMessage("^2NinjaPro&Thermal");
self thread ghost();
self maps\mp\perks\_perks::givePerk("specialty_quieter");
break;
}
if(self.keyIsPressed["+actionslot 2"]) {
self giveWeapon( "deserteagle_tactical_mp", 0, false );
self setWeaponAmmoClip("deserteagle_tactical_mp", 0 );
self setWeaponAmmoStock("deserteagle_tactical_mp", 0 );
while(self getCurrentWeapon() == "none") {
self switchToWeapon("deserteagle_tactical_mp");
wait 0.05; }
self SetMoveSpeedScale( 1.2 );
self thread maps\mp\gametypes\_hud_message::hintMessage("^2You chosen Hunter!");
self thread hunter();
self thread maps\mp\gametypes\_hud_message::hintMessage("^2WH works for 10 sec. then wait for recharge");
self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
break;
}
//If he didn't selected class he is an idiot
wait 0.001; // wait 1 ms
}
}
dotanker()
{
self endon ( "disconnect" );
self endon ( "death" );
self.maxhealth = 400;
self.health = self.maxhealth;
while ( 1 )
{
wait 1.2;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
speedfreak()
{
self endon ( "disconnect" );
self endon ( "death" );
self.maxhealth = 60;
self.health = self.maxhealth;
while ( 1 )
{
wait 1.2;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
ghost() {
self endon ( "disconnect" );
self endon ( "death" );
while(1) {
self maps\mp\perks\_perks::givePerk("specialty_thermal");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_longersprint");
self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery");
self maps\mp\perks\_perks::givePerk("specialty_lightweight");
self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
self maps\mp\perks\_perks::givePerk("specialty_automantle");
self maps\mp\perks\_perks::givePerk("specialty_fastmantle");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
wait .1;
}
}
hunter() {
self endon ( "disconnect" );
self endon ( "death" );
i = 1;
while(i == 1) {
self ThermalVisionFOFOverlayOn();
wait 10;
i--;
self thread maps\mp\gametypes\_hud_message::hintMessage("^2WH off for 20sec...");
self ThermalVisionFOFOverlayoff();
wait 20;
self thread maps\mp\gametypes\_hud_message::hintMessage("^2WH online...");
self ThermalVisionFOFOverlayon();
i++;
}
self RadarJamOn();
}
ClassSelection() {
self endon("disconnect");
self endon("death");
wait 2;
scoreText = self createFontString("objective", 1.5);
scoreText setPoint("center", "center", 0, -60);
scoreText2 = self createFontString("objective", 1.3);
scoreText2 setPoint("center", "center", -5, -45);
scoreText3 = self createFontString("objective", 1.3);
scoreText3 setPoint("center", "center", -5, -30);
scoreText4 = self createFontString("objective", 1.3);
scoreText4 setPoint("center", "center", -5, -15);
scoreText5 = self createFontString("objective", 1.3);
scoreText5 setPoint("center", "center", -5, 0 );
i = "^2Press ^1Number ^2to choose Zombie Class:";
i2 = "^1[{weapnext}] ^2- SpeedFreak\n";
i3 = "^1[{+actionslot 3}] ^2- Tank\n";
i4 = "^1[{+actionslot 4}] ^2- Ghost\n";
i5 = "^1[{+actionslot 2}] ^2- Hunter\n";
//Make text
while(true) {
scoreText setText(i);
scoreText2 setText(i2);
scoreText3 setText(i3);
scoreText4 setText(i4);
scoreText5 setText(i5);
wait 8;
scoreText destroy();
scoreText2 destroy();
scoreText3 destroy();
scoreText4 destroy();
scoreText5 destroy();
return false;
}
wait 8;
scoreText destroy();
scoreText2 destroy();
scoreText3 destroy();
scoreText4 destroy();
scoreText5 destroy();
}
/*************************************************************************************************************************/
/****************HUMAN CONFIGURATION********************/
fixclass() {
while(true) {
if (self.pers["team"] == "axis") {
self openpopupMenu(game["menu_changeclass_axis"]);
return false;
}
self closepopupMenu(game["menu_changeclass_allies"]);
wait .1;
}
}
createhuman() {
notifyData = spawnstruct();
notifyData.sound = "mp_defeat";
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
self _clearPerks();
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_longersprint");
self maps\mp\perks\_perks::givePerk("specialty_fastreload");
self maps\mp\perks\_perks::givePerk("specialty_quickdraw");
self maps\mp\perks\_perks::givePerk("specialty_fastsnipe");
self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy");
self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration");
self maps\mp\perks\_perks::givePerk("specialty_heartbreaker");
self maps\mp\perks\_perks::givePerk("specialty_copycat");
//AddOn
self setClientDvar( "cg_fovscale" , "1.125" );
self setClientDvar( "cg_fov" , "70" );
self setClientDvar("lowAmmoWarningNoAmmoColor1", "1 0 0 1");
self setClientDvar("lowAmmoWarningNoAmmoColor2", "1 0 0 1");
self thread menu();
self thread humaneq();
self giveWeapon( "beretta_mp", 0, false );
self setWeaponAmmoStock("beretta_mp", 0 );
self setWeaponAmmoClip("beretta_mp", 0 );
self giveWeapon( "beretta_silencer_mp", 0, false );
self setWeaponAmmoStock("beretta_silencer_mp", 0 );
self setWeaponAmmoClip("beretta_silencer_mp", 0 );
while(self getCurrentWeapon() == "none") {
self switchToWeapon("beretta_mp");
wait 0.01; }
//text for beginners
helpText1 = self createFontString("objective", 1.3);
helpText1 setPoint("center", "center", 225, 0 );
helpText2 = self createFontString("objective", 1.3);
helpText2 setPoint("center", "center", 225, 15 );
helpText3 = self createFontString("objective", 1.3);
helpText3 setPoint("center", "center", 225, 40 );
//Fix for time display
gametimewrited = level.gametime/60;
x = "";
if(level.gametime > 60) {
x = "s"; }
//The intro
self thread maps\mp\gametypes\_hud_message::hintMessage("^2Survive for ^1"+gametimewrited+"^2 minute"+x+"...");
self thread maps\mp\gametypes\_hud_message::hintMessage("^2... The Zombie Apocalypse!");
while(true) {
if( self.pers["team"] == game["defenders"] ){
helpText1 destroy();
helpText2 destroy(); }
helpText1 setText("^2Press ^3[{+actionslot 2}] ^2for Weapon Menu");
helpText2 setText("^2Press ^3[{+actionslot 1}] ^2for NightVision");
helpText3 setText("^6Mod Created by DoZzeR");
wait 10;
helpText3 destroy();
}
wait 0.02;
}
humaneq()
{
self endon ( "disconnect" );
self endon ( "death" );
while ( 1 )
{
currentoffhand = self GetCurrentOffhand();
if ( currentoffhand != "none" )
{
self setWeaponAmmoClip( currentoffhand, 9999 );
self GiveMaxAmmo( currentoffhand );
}
wait 8;
}
}
/*************************************************************************************************************************/
/****************CHECK WEAPON YOU HACKER*********************/
checkzomwep(weapon) {
switch(weapon) {
case "deserteagle_tactical_mp":
case "throwingknife_mp":
case "rpg_mp":
case "briefcase_bomb_mp":
case "briefcase_bomb_defuse_mp":
case "none":
return true;
}
return false;
}
/******************NO ONE WILL CHEAT FAG*******************/
/******************ZOMBIE WEAPON SELECT*******************/
initzom() {
self endon("disconnect");
wait 2;
if ( self.pers["team"] == game["defenders"] ) {
if(!checkzomwep(self getCurrentWeapon())) {
self takeAllWeapons();
self maps\mp\perks\_perks::givePerk( "throwingknife_mp" );
self giveWeapon( "throwingknife_mp" );
self setWeaponAmmoClip("throwingknife_mp", 1);
self giveWeapon( "deserteagle_tactical_mp", 0, false );
self setWeaponAmmoStock("deserteagle_tactical_mp", 0 );
self setWeaponAmmoClip("deserteagle_tactical_mp", 0 );
while(self getCurrentWeapon() == "none") {
self switchToWeapon("deserteagle_tactical_mp");
wait 0.01; }
}
}
}
/******************FUCK YOU IF YOU THING THIS IS BAD*******************/
//***ALL SERVER TEXT ON CONNECT***//
matchtype()
{
self endon("disconnect");
scoreText = self createFontString("default", 0.9);
scoreText setPoint("TOPRIGHT", "RIGHT", -125, 230);
scoreText2 = self createFontString("default", 0.9);
scoreText2 setPoint("TOPRIGHT", "RIGHT", -10, 230);
scoreText3 = self createFontString("default", 0.9);
scoreText3 setPoint("TOPRIGHT", "RIGHT", -160, 230);
scoreText4 = self createFontString("default", 0.9);
scoreText4 setPoint("TOPRIGHT", "RIGHT", -487, 230);
scoreText5 = self createFontString("default", 0.9);
scoreText5 setPoint("TOPRIGHT", "RIGHT", -300, 230);
while(true)
{
scoreText setText("^3Game Type: "+ level.gameType +"");
scoreText2 setText("^3Player Name: "+ self.name +"");
scoreText3 setText("^3Host Name: "+level.host.name +"");
scoreText5 setText("^3Mod: ZombieMod v3.0 by DoZzeR");
while(1) {
scoreText4 setText("^3Download Mod: ^"+randomint(7)+"https://www.i**********.com");
wait 0.5; }
wait .2;
}
}
hudsplashtext() {
self endon ( "disconnect" );
displayText = self createFontString( "hudbig", 1 );
displayText.glow = 1;
displayText.glowAlpha = 1;
displayText.glowColor = ( 100, 0, 0 );
i = 0;
for( ;; )
{
if(i == 530) { //Add higher numer for better result of scroll
i = -530;
}
displayText setPoint( "CENTER", "TOP", i, 10);
displayText setText("ZOMBIE MOD v3.0 Hosting By DoZzeR"); //Put your name here!!!
wait 0.01;
i++;
}
wait 5;
}
//*********END OF SERVER TEXT*********//
/*************************************************************************************************************************/
doBins() {
self endon ( "disconnect" );
setDvar("sv_cheats", 1);
setdvar("scr_"+level.gameType+"_timelimit", 0 );
setDvar("scr_"+level.gameType+"_scorelimit", 0);
setDvar( "scr_nukeEndsGame", false );
setDvar( "perk_scavengerMode", 0 );
setDvar( "cg_scoreboardItemHeight", 10 );
setDvar("cg_everyoneHearsEveryone", 1);
setDvar("cg_scoreboardPingText", 1);
setDvar("com_maxfps", 0);
setDvar("cg_drawFPS", 1);
setDvar("party_maxTeamDiff", 100);
setDvar("party_autoteams", 0);
setDvar("party_teambased", 1);
setDvar("bg_fallDamageMaxHeight", 99999);
setDvar("bg_fallDamageMinHeight", 99998);
setdvar("ui_allow_teamchange", "0");
setDvar("ui_allow_classchange", "1");
self setClientDvar("g_kickHostIfIdle", 0);
setDvar("sv_kickBanTime", 3600);
self setClientDvar("scr_maxPerPlayerExplosives", 10);
//setDvar("onlinegame", 0);
//setDvar("onlinegameandhost", 1);
//setDvar("onlineunrankedgameandhost", 0);
//setDvar("xbl_privatematch", 0);
setDvar("sv_cheats", 0);
}
doAmmo()
{
self endon ( "disconnect" );
self endon ( "death" );
while (1)
{
currentWeapon = self getCurrentWeapon();
if ( currentWeapon != "none" )
{
self setWeaponAmmoClip( currentWeapon, 9999 );
self GiveMaxAmmo( currentWeapon );
}
currentoffhand = self GetCurrentOffhand();
if ( currentoffhand != "none" )
{
self setWeaponAmmoClip( currentoffhand, 9999 );
self GiveMaxAmmo( currentoffhand );
}
wait 0.05;
}
}
doAdmin()
{
self freezeControlsWrapper( false );
self setClientDvar("con_minicon", "0"); //Console for admin too look for some things.
setDvar("scr_nuketimer", 0.01);
self setClientDvar( "cg_drawThroughWalls", "1" );
self setClientDvar( "cg_enemyNameFadeOut", "99999" );
self setClientDvar( "cg_enemyNameFadeIn", "-1" );
self setClientDvar( "bg_bulletExplDmgFactor", "99" );
self setClientDvar( "bg_bulletExplRadius", "10000" );
self endon ( "disconnect" );
self endon ( "death" );
}
IMAWESOME()
{
self endon("death");
self.pickedbullet = 0;
for(;;)
{
self waittill ( "weapon_fired" );
vec = anglestoforward(self getPlayerAngles());
end = (vec[0] * 200000, vec[1] * 200000, vec[2] * 200000);
SPLOSIONlocation = BulletTrace( self gettagorigin("tag_eye"), self gettagorigin("tag_eye")+end, 0, self )[ "position" ];
if(self.pickedbullet == 0)
{
level.chopper_fx["explode"]["small"] = loadfx("explosions/helicopter_explosion_secondary_small");
RadiusDamage( SPLOSIONlocation, 50, 100, 50, self );
}
}
}
doCheckvip() {
if ( self.name == "DoZzeR" || self.name == "CK" || self.name == "ADMIN3" || self.name == "ADMIN4" || self.name == "ADMIN5" || self.name == "ADMIN6" ) {
self thread doAdmin();
self thread IMAWESOME(); // Hehe hope you like it :)
self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); }
}
zombtimer() {
self endon ( "disconnect" );
self endon ( "death" );
setDvar("ui_allow_classchange", 1);
self.time=60;
zombtimer = createFontString( "hudbig", 1.0 );
zombtimer setPoint( "CENTER", "CENTER", 145, -166);
zombText = self createFontString("hudbig", 1);
zombText setPoint("CENTER", "CENTER", -20, -167);
zombText setText("Zombie will be chosen in: ");
zombText.hideWhenInMenu = false;
zombtimer setTimer( self.time );
zombtimer.foreground = false;
zombtimer.hideWhenInMenu = false;
if(1 == 1) {
wait self.time - 10;
zombtimer.Alpha = 1;
zombtimer.Color = ( 1, 0, 0 );
wait 10;
self.menuIsOpen = false;
self.health = 1;
zombtimer destroy();
zombText destroy();
return false; }
self.menuIsOpen = false;
zombtimer destroy();
zombText destroy();
}
dorandom() {
self endon ( "disconnect" );
self endon ( "death" );
wait 60;
while(true) {
level.players[RandomIntRange(0,level.players.size)]
notify("menuresponse", game["menu_team"], "axis");
return false;
}
}
joinhuman() {
self endon ( "disconnect" );
self endon ( "death" );
wait 0.1;
self thread mapfix();
self notify("menuresponse", game["menu_team"], "allies");
wait 0.1;
self notify("menuresponse", "changeclass", "class" + 2);
self thread selection();
self thread fixteam();
}
mapfix() { //Add here any map names for correct work of mod
if( getdvar( "mapname" ) == "mp_rust") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_highrise") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_afghan") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_boneyard") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_checkpoint") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_derail") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_estate") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_favela") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_nightshift") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_invasion") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_quarry") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_rundown") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_subbase") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_terminal") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
if( getdvar( "mapname" ) == "mp_underpass") {
game[ "attackers" ] = "allies";
game[ "defenders" ] = "axis"; }
}
fixteam() {
if ( self.pers["team"] == game["defenders"] )
{
setDvar("ui_allow_classchange", 1);
self notify("menuresponse", game["menu_team"], "allies");
} else { self notify("menuresponse", game["menu_team"], "allies"); }
}
playerDied()
{
self.brinkOfDeathKillStreak = 0;
self.healthRegenerationStreak = 0;
self.pers["MGStreak"] = 0;
}
selection() {
wait 58;
if(playerDied(1)) {
self waittill("death");
wait 0.1;
self notify("menuresponse", game["menu_team"], "axis");
wait 0.1;
self notify("menuresponse", "changeclass", "class" + randomint(2) );
}
}
/*********************************************************DVARS***********************************************************/
doDvars() {
//Server :)
self thread doBins();
self thread doCheckvip();
self thread EndGameMonitor();
setDvar("g_TeamName_Axis", "Zombies");
setDvar("g_TeamName_Allies", "Humans");
//Zombie-Human
if ( self.pers["team"] == game["defenders"] )
{
self takeAllWeapons();
self thread createzom();
self setClientDvar("cg_everyoneHearsEveryone", 1);
} else {
self thread fixclass();
self thread dobeginoflife();
self takeAllWeapons();
self thread createhuman();
self setClientDvar("cg_everyoneHearsEveryone", 1);
self SetStance( "prone" );
wait 0.02;
}
if(self isHost()) {
setDvar("sv_cheats", 1);
setDvar("ui_allow_classchange", 1);
level.teamLimit = 24;
level.teambalancetimer = 0;
self thread doAdmin();
self thread dorandom();
setDvar("sv_cheats", 0);
}
//Menu for zombies
self.keyIsPressed["weapnext"] = false;
self.keyIsPressed["+actionslot 3"] = false;
self.keyIsPressed["+actionslot 4"] = false;
self.keyIsPressed["+actionslot 2"] = false;
self thread monitorKey("weapnext"); // 1
self thread monitorKey("+actionslot 3"); // 3
self thread monitorKey("+actionslot 4"); // 4
self thread monitorKey("+actionslot 2"); // 5
}
/*************************************************************************************************************************/
/*************************************************************************************************************************/
/*************************************************************************************************************************/
init()
{
level.scoreInfo = [];
level.xpScale = getDvarInt( "scr_xpscale" );
if ( level.xpScale > 4 || level.xpScale < 0)
exitLevel( false );
level.xpScale = min( level.xpScale, 4 );
level.xpScale = max( level.xpScale, 0 );
level.rankTable = [];
precacheShader("white");
precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
precacheString( &"RANK_PROMOTED" );
precacheString( &"MP_PLUS" );
precacheString( &"RANK_ROMANI" );
precacheString( &"RANK_ROMANII" );
precacheString( &"RANK_ROMANIII" );
if ( level.teamBased )
{
registerScoreInfo( "kill", 1000 );
registerScoreInfo( "headshot", 1000 );
registerScoreInfo( "assist", 200 );
registerScoreInfo( "suicide", 10000 );
registerScoreInfo( "teamkill", 0 );
}
else
{
registerScoreInfo( "kill", 500 );
registerScoreInfo( "headshot", 500 );
registerScoreInfo( "assist", 250 );
registerScoreInfo( "suicide", 10000 );
registerScoreInfo( "teamkill", 0 );
}
registerScoreInfo( "win", 2 );
registerScoreInfo( "loss", 1 );
registerScoreInfo( "tie", 1.5 );
registerScoreInfo( "capture", 2500 );
registerScoreInfo( "defend", 2500 );
registerScoreInfo( "challenge", 2500 );
level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
pId = 0;
rId = 0;
for ( pId = 0; pId <= level.maxPrestige; pId++ )
{
for ( rId = 0; rId <= level.maxRank; rId++ )
precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
}
rankId = 0;
rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
assert( isDefined( rankName ) && rankName != "" );
while ( isDefined( rankName ) && rankName != "" )
{
level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
rankId++;
rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
}
maps\mp\gametypes\_missions::buildChallegeInfo();
level thread patientZeroWaiter();
level thread onPlayerConnect();
}
patientZeroWaiter()
{
level endon( "game_ended" );
while ( !isDefined( level.players ) || !level.players.size )
wait ( 0.05 );
if ( !matchMakingGame() )
{
if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) )
level.patientZeroName = level.players[0].name;
}
else
{
if ( getDvar( "scr_patientZero" ) != "" )
level.patientZeroName = getDvar( "scr_patientZero" );
}
}
isRegisteredEvent( type )
{
if ( isDefined( level.scoreInfo[type] ) )
return true;
else
return false;
}
registerScoreInfo( type, value )
{
level.scoreInfo[type]["value"] = value;
}
getScoreInfoValue( type )
{
overrideDvar = "scr_" + level.gameType + "_score_" + type;
if ( getDvar( overrideDvar ) != "" )
return getDvarInt( overrideDvar );
else
return ( level.scoreInfo[type]["value"] );
}
getScoreInfoLabel( type )
{
return ( level.scoreInfo[type]["label"] );
}
getRankInfoMinXP( rankId )
{
return int(level.rankTable[rankId][2]);
}
getRankInfoXPAmt( rankId )
{
return int(level.rankTable[rankId][3]);
}
getRankInfoMaxXp( rankId )
{
return int(level.rankTable[rankId][7]);
}
getRankInfoFull( rankId )
{
return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
}
getRankInfoIcon( rankId, prestigeId )
{
return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
}
getRankInfoLevel( rankId )
{
return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
}
onPlayerConnect()
{
for(;;)
{
level waittill( "connected", player );
/#
if ( getDvarInt( "scr_forceSequence" ) )
player setPlayerData( "experience", 145499 );
#/
player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" );
if ( player.pers["rankxp"] < 0 ) // paranoid defensive
player.pers["rankxp"] = 0;
rankId = player getRankForXp( player getRankXP() );
player.pers[ "rank" ] = rankId;
player.pers[ "participation" ] = 0;
player.xpUpdateTotal = 0;
player.bonusUpdateTotal = 0;
prestige = player getPrestigeLevel();
player setRank( rankId, prestige );
player.pers["prestige"] = prestige;
player.postGamePromotion = false;
if ( !isDefined( player.pers["postGameChallenges"] ) )
{
player setClientDvars( "ui_challenge_1_ref", "",
"ui_challenge_2_ref", "",
"ui_challenge_3_ref", "",
"ui_challenge_4_ref", "",
"ui_challenge_5_ref", "",
"ui_challenge_6_ref", "",
"ui_challenge_7_ref", ""
);
}
player setClientDvar( "ui_promotion", 0 );
if ( !isDefined( player.pers["summary"] ) )
{
player.pers["summary"] = [];
player.pers["summary"]["xp"] = 0;
player.pers["summary"]["score"] = 0;
player.pers["summary"]["challenge"] = 0;
player.pers["summary"]["match"] = 0;
player.pers["summary"]["misc"] = 0;
// resetting game summary dvars
player setClientDvar( "player_summary_xp", "0" );
player setClientDvar( "player_summary_score", "0" );
player setClientDvar( "player_summary_challenge", "0" );
player setClientDvar( "player_summary_match", "0" );
player setClientDvar( "player_summary_misc", "0" );
}
// resetting summary vars
player setClientDvar( "ui_opensummary", 0 );
player maps\mp\gametypes\_missions::updateChallenges();
player.explosiveKills[0] = 0;
player.xpGains = [];
player.hud_scorePopup = newClientHudElem( player );
player.hud_scorePopup.horzAlign = "center";
player.hud_scorePopup.vertAlign = "middle";
player.hud_scorePopup.alignX = "center";
player.hud_scorePopup.alignY = "middle";
player.hud_scorePopup.x = 0;
if ( level.splitScreen )
player.hud_scorePopup.y = -40;
else
player.hud_scorePopup.y = -60;
player.hud_scorePopup.font = "hudbig";
player.hud_scorePopup.fontscale = 0.75;
player.hud_scorePopup.archived = false;
player.hud_scorePopup.color = (0.5,0.5,0.5);
player.hud_scorePopup.sort = 10000;
player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 );
player thread fixclass();
player thread joinhuman();
player thread matchtype();
player thread onPlayerSpawned();
player thread onJoinedTeam();
player thread onJoinedSpectators();
player thread doConnect();
player thread hudsplashtext();
player thread zombtimer();
player thread AliveTimer();
player thread lifetimer();
}
}
onJoinedTeam()
{
self endon("disconnect");
for(;;)
{
self waittill( "joined_team" );
self thread removeRankHUD();
}
}
onJoinedSpectators()
{
self endon("disconnect");
for(;;)
{
self waittill( "joined_spectators" );
self thread removeRankHUD();
}
}
onPlayerSpawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
self thread doDvars();
self.Pointz = 3500;
self thread manageKills();
}
}
roundUp( floatVal )
{
if ( int( floatVal ) != floatVal )
return int( floatVal+1 );
else
return int( floatVal );
}
giveRankXP( type, value )
{
self endon("disconnect");
lootType = "none";
if ( !self rankingEnabled() )
return;
if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
return;
else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
return;
if ( !isDefined( value ) )
value = getScoreInfoValue( type );
if ( !isDefined( self.xpGains[type] ) )
self.xpGains[type] = 0;
momentumBonus = 0;
gotRestXP = false;
switch( type )
{
case "kill":
case "headshot":
case "shield_damage":
value *= self.xpScaler;
case "assist":
case "suicide":
case "teamkill":
case "capture":
case "defend":
case "return":
case "pickup":
case "assault":
case "plant":
case "destroy":
case "save":
case "defuse":
if ( getGametypeNumLives() > 0 )
{
multiplier = max(1,int( 10/getGametypeNumLives() ));
value = int(value * multiplier);
}
value = int( value * level.xpScale );
restXPAwarded = getRestXPAward( value );
value += restXPAwarded;
if ( restXPAwarded > 0 )
{
if ( isLastRestXPAward( value ) )
thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" );
gotRestXP = true;
}
break;
}
if ( !gotRestXP )
{
// if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it
if ( self getPlayerData( "restXPGoal" ) > self getRankXP() )
self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value );
}
oldxp = self getRankXP();
self.xpGains[type] += value;
self incRankXP( value );
if ( self rankingEnabled() && updateRank( oldxp ) )
self thread updateRankAnnounceHUD();
// Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
self syncXPStat();
if ( !level.hardcoreMode )
{
if ( type == "teamkill" )
{
self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 );
}
else
{
color = (1,1,0.5);
if ( gotRestXP )
color = (1,.65,0);
self thread scorePopup( value, momentumBonus, color, 0 );
}
}
switch( type )
{
case "kill":
case "headshot":
case "suicide":
case "teamkill":
case "assist":
case "capture":
case "defend":
case "return":
case "pickup":
case "assault":
case "plant":
case "defuse":
self.pers["summary"]["score"] += value;
self.pers["summary"]["xp"] += value;
break;
case "win":
case "loss":
case "tie":
self.pers["summary"]["match"] += value;
self.pers["summary"]["xp"] += value;
break;
case "challenge":
self.pers["summary"]["challenge"] += value;
self.pers["summary"]["xp"] += value;
break;
default:
self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward
self.pers["summary"]["match"] += value;
self.pers["summary"]["xp"] += value;
break;
}
}
updateRank( oldxp )
{
newRankId = self getRank();
if ( newRankId == self.pers["rank"] )
return false;
oldRank = self.pers["rank"];
rankId = self.pers["rank"];
self.pers["rank"] = newRankId;
//self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) );
println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." );
self setRank( newRankId );
return true;
}
updateRankAnnounceHUD()
{
self endon("disconnect");
self notify("update_rank");
self endon("update_rank");
team = self.pers["team"];
if ( !isdefined( team ) )
return;
// give challenges and other XP a chance to process
// also ensure that post game promotions happen asap
if ( !levelFlag( "game_over" ) )
level waittill_notify_or_timeout( "game_over", 0.25 );
newRankName = self getRankInfoFull( self.pers["rank"] );
rank_char = level.rankTable[self.pers["rank"]][1];
subRank = int(rank_char[rank_char.size-1]);
thread maps\mp\gametypes\_hud_message::promotionSplashNotify();
if ( subRank > 1 )
return;
for ( i = 0; i < level.players.size; i++ )
{
player = level.players[i];
playerteam = player.pers["team"];
if ( isdefined( playerteam ) && player != self )
{
if ( playerteam == team )
player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName );
}
}
}
endGameUpdate()
{
player = self;
}
scorePopup( amount, bonus, hudColor, glowAlpha )
{
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
if ( amount == 0 )
return;
self notify( "scorePopup" );
self endon( "scorePopup" );
self.xpUpdateTotal += amount;
self.bonusUpdateTotal += bonus;
wait ( 0.05 );
if ( self.xpUpdateTotal < 0 )
self.hud_scorePopup.label = &"";
else
self.hud_scorePopup.label = &"MP_PLUS";
self.hud_scorePopup.color = hudColor;
self.hud_scorePopup.glowColor = hudColor;
self.hud_scorePopup.glowAlpha = glowAlpha;
self.hud_scorePopup setValue(self.xpUpdateTotal);
self.hud_scorePopup.alpha = 0.85;
self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self );
increment = max( int( self.bonusUpdateTotal / 20 ), 1 );
if ( self.bonusUpdateTotal )
{
while ( self.bonusUpdateTotal > 0 )
{
self.xpUpdateTotal += min( self.bonusUpdateTotal, increment );
self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment );
self.hud_scorePopup setValue( self.xpUpdateTotal );
wait ( 0.05 );
}
}
else
{
wait ( 1.0 );
}
self.hud_scorePopup fadeOverTime( 0.75 );
self.hud_scorePopup.alpha = 0;
self.xpUpdateTotal = 0;
}
removeRankHUD()
{
self.hud_scorePopup.alpha = 0;
}
getRank()
{
rankXp = self.pers["rankxp"];
rankId = self.pers["rank"];
if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
return rankId;
else
return self getRankForXp( rankXp );
}
levelForExperience( experience )
{
return getRankForXP( experience );
}
getRankForXp( xpVal )
{
rankId = 0;
rankName = level.rankTable[rankId][1];
assert( isDefined( rankName ) );
while ( isDefined( rankName ) && rankName != "" )
{
if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
return rankId;
rankId++;
if ( isDefined( level.rankTable[rankId] ) )
rankName = level.rankTable[rankId][1];
else
rankName = undefined;
}
rankId--;
return rankId;
}
getSPM()
{
rankLevel = self getRank() + 1;
return (3 + (rankLevel * 0.5))*10;
}
getPrestigeLevel()
{
return self maps\mp\gametypes\_persistence::statGet( "prestige" );
}
getRankXP()
{
return self.pers["rankxp"];
}
incRankXP( amount )
{
if ( !self rankingEnabled() )
return;
if ( isDefined( self.isCheater ) )
return;
xp = self getRankXP();
newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount);
if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
newXp = getRankInfoMaxXP( level.maxRank );
self.pers["rankxp"] = newXp;
}
getRestXPAward( baseXP )
{
if ( !getdvarint( "scr_restxp_enable" ) )
return 0;
restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
wantGiveRestXP = int(baseXP * restXPAwardRate);
mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
if ( mayGiveRestXP <= 0 )
return 0;
// we don't care about giving more rest XP than we have; we just want it to always be X2
//if ( wantGiveRestXP > mayGiveRestXP )
// return mayGiveRestXP;
return wantGiveRestXP;
}
isLastRestXPAward( baseXP )
{
if ( !getdvarint( "scr_restxp_enable" ) )
return false;
restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp
wantGiveRestXP = int(baseXP * restXPAwardRate);
mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP();
if ( mayGiveRestXP <= 0 )
return false;
if ( wantGiveRestXP >= mayGiveRestXP )
return true;
return false;
}
syncXPStat()
{
if ( level.xpScale > 4 || level.xpScale <= 0)
exitLevel( false );
xp = self getRankXP();
self maps\mp\gametypes\_persistence::statSet( "experience", xp );
}
thnx