Code:
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
/////////Zombie Mod Base by Lars0/////////
init()
{
///////////////////////////////Basic Configuration////////////////////////////////////
level.scrollinginfo = "Welcome to Zombie Mod by Yamato";
level.EndText = "Zombies have eaten the Humans!";
level.knockback = 500;
level.fog = 0;
level.laser = 1;
level.blur = 0.2;
level.darkness = -0.1;
level.fov = 50;
level.quickmessages = 1;
level.bloodyzombies = 1;
level.meleerange = 64;
level.diehard = 1;
level.anticamp = 0;
level thread maps\mp\gametypes\_mapedit::init(); //Play with bunkers, if you dont want bunkers, remove this line.
//////////////////////////////////////////////////////////////////////////////////////////////
level.weapons = []; //Only this weapons are supported in the mod
level.weapons[0] = "beretta_mp";
level.weapons[1] = "usp_mp";
level.weapons[2] = "deserteagle_mp";
level.weapons[3] = "deserteaglegold_mp";
level.weapons[4] = "coltanaconda_mp";
level.weapons[5] = "riotshield_mp";
level.weapons[6] = "glock_mp";
level.weapons[7] = "beretta393_mp";
level.weapons[8] = "mp5k_mp";
level.weapons[9] = "pp2000_mp";
level.weapons[10] = "uzi_mp";
level.weapons[11] = "p90_mp";
level.weapons[12] = "kriss_mp";
level.weapons[13] = "ump45_mp";
level.weapons[14] = "tmp_mp";
level.weapons[15] = "ak47_mp";
level.weapons[16] = "m16_mp";
level.weapons[17] = "m4_mp";
level.weapons[18] = "fn2000_mp";
level.weapons[19] = "masada_mp";
level.weapons[20] = "famas_mp";
level.weapons[21] = "fal_mp";
level.weapons[22] = "scar_mp";
level.weapons[23] = "tavor_mp";
level.weapons[24] = "m79_mp";
level.weapons[25] = "rpg_mp";
level.weapons[26] = "at4_mp";
level.weapons[27] = "stinger_mp";
level.weapons[28] = "javelin_mp";
level.weapons[29] = "barrett_mp";
level.weapons[30] = "wa2000_mp";
level.weapons[31] = "m21_mp";
level.weapons[32] = "cheytac_mp";
level.weapons[33] = "ranger_mp";
level.weapons[34] = "model1887_mp";
level.weapons[35] = "striker_mp";
level.weapons[36] = "aa12_mp";
level.weapons[37] = "m1014_mp";
level.weapons[38] = "spas12_mp";
level.weapons[39] = "rpd_mp";
level.weapons[40] = "sa80_mp";
level.weapons[41] = "mg4_mp";
level.weapons[42] = "m240_mp";
level.weapons[43] = "aug_mp";
level.weapons[44] = "onemanarmy_mp";
level thread onPlayerConnect();
}
onPlayerConnect()
{
for(;;)
{
level waittill( "connected", player );
player thread onPlayerSpawned();
player thread Config();
player thread NoSpect();
}
}
NoSpect()
{
if(self.team == "axis" || self.team == "spectator")
{
self notify("menuresponse", game["menu_team"], "allies");
wait 0.05;
self notify("menuresponse", "changeclass", "class1");
return;
}
}
MatchStart()
{
level endon( "disconnect" );
level waittill("prematch_over");
level.timer = 60;
while(level.timer > 0)
{
level.TText destroy();
level.TText = level createServerFontString( "objective", 2 );
level.TText setPoint( "CENTER", "CENTER", 0, 200 );
level.TText setText("^1Zombie Attack Starts in^5: " + level.timer);
level.TText.glow = 1;
level.TText.glowColor = ( 1, 0, 0 );
level.TText.glowAlpha = 1;
wait 1;
level.timer--;
}
level.TText destroy();
level thread PickZombie();
level thread NoZombies();
level thread EndMatch();
}
PickZombie()
{
level endon ( "game_ended" );
while( 1 )
{
players = maps\mp\gametypes\_teams::CountPlayers();
if(players["axis"] == 0)
{
FirstZombie = randomInt( level.players.size );
level.Zombie = level.players[FirstZombie];
level.players[FirstZombie].Zombie = 1;
level.Zombie notify("menuresponse", game["menu_team"], "axis");
level.Zombie playSound( "mp_defeat" );
level notify("zombie_selected");
break;
}
wait 0.05;
}
}
NoZombies()
{
level endon ( "game_ended" );
wait 12;
while( 1 )
{
allplayers = maps\mp\gametypes\_teams::CountPlayers();
if(allplayers["axis"] == 0)
{
level PickZombie();
break;
}
wait 0.05;
}
}
EndMatch()
{
winner = "axis";
wait 5;
while( 1 )
{
players = maps\mp\gametypes\_teams::CountPlayers();
if(players["allies"] == 0)
{
maps\mp\gametypes\_gamelogic::endGame( winner, level.EndText );
}
wait 0.05;
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
if(self isHost())
{
level thread MatchStart();
level thread Fog();
}
for(;;)
{
self waittill( "spawned_player" );
self thread PlayersSetup();
self thread HUD();
self thread QuickMessages();
self thread AntiCamp();
}
}
PlayersSetup() //modify here human and zombie parametres
{
if(self.team == "allies")
{
rweapon = level.weapons[RandomInt( level.weapons.size )];
rweapon2 = level.weapons[RandomInt( level.weapons.size )];
self thread Humans( rweapon, rweapon2, 100, "specialty_marathon", 1, "icbm");
}
if(self.team == "axis")
{
self thread Zombies( "", "beretta_tactical_mp", 300, "specialty_marathon", "specialty_extendedmelee", 1.3);
}
}
Zombies( weapon, secondary, health, perk, perk2, speed) //Zombies
{
wait 0.05;
self _clearPerks();
self takeAllWeapons();
self maps\mp\gametypes\_class::setKillstreaks( "none", "none", "none" );
self thread maps\mp\gametypes\_hud_message::hintMessage("^1You are a Zombie!");
self giveWeapon( weapon, 0, false );
self giveWeapon( secondary, 0, false );
wait 0.05;
self switchToWeapon(secondary);
self setWeaponAmmoClip(secondary, 0);
self setWeaponAmmoStock(secondary, 0);
self.maxhealth = health;
self.health = health;
self maps\mp\perks\_perks::givePerk(perk);
self maps\mp\perks\_perks::givePerk(perk2);
self maps\mp\perks\_perks::givePerk("specialty_thermal");
self.Zombie = 1;
self.money = 0;
self.moveSpeedScaler = speed;
self thread ZombieWeaponGlitch();
self thread BloodyZombies();
self thread Kills();
}
ZombieWeaponGlitch()
{
self endon ( "disconnect" );
self endon ( "death" );
while(1)
{
if(self getCurrentWeapon() == "beretta_tactical_mp")
{
self setWeaponAmmoClip("beretta_tactical_mp", 0);
self setWeaponAmmoStock("beretta_tactical_mp", 0);
} else {
current = self getCurrentWeapon();
self takeWeapon(current);
self switchToWeapon("beretta_tactical_mp");
}
wait 0.05;
}
}
Humans( weapon, secondary, health, perk, speed, vision ) //Humans
{
if(self.team == "axis" || self.team == "spectator")
{
self notify("menuresponse", game["menu_team"], "allies");
wait 0.05;
self notify("menuresponse", "changeclass", "class1");
return;
}
self notify("menuresponse", "changeclass", "class1");
wait 0.05;
self _clearPerks();
self takeAllWeapons();
self maps\mp\gametypes\_class::setKillstreaks( "none", "none", "none" );
self thread maps\mp\gametypes\_hud_message::hintMessage("^3You are a Human!");
self giveWeapon( weapon, 0, false );
self giveWeapon( secondary, 0, false );
wait 0.05;
self switchToWeapon(weapon);
self GiveMaxAmmo(weapon);
self.maxhealth = health;
self.health = health;
self maps\mp\perks\_perks::givePerk(perk);
self.moveSpeedScaler = speed;
self.Zombie = 0;
self thread NightVision();
self thread Death(); //Make Humans transform in zombies after dying
self.money = 0;
self thread Kills();
while(1)
{
self VisionSetNakedForPlayer(vision, 0);
wait 0.1;
}
}
Kills()
{
while(1)
{
self waittill("killed_enemy");
if(self.zombie == 0)
{
self thread maps\mp\gametypes\_rank::scorePopup(100, 0, (0,1,0), 1);
self.money += 100;
self notify("moremoney");
}
if(self.zombie == 1)
{
self thread maps\mp\gametypes\_rank::scorePopup(100, 0, (1,0,0), 1);
self.money += 100;
self notify("moremoney");
}
wait 0.1;
}
}
NightVision() //Human Nightvision
{
self notifyOnPlayerCommand("night", "+actionslot 3");
for(;;)
{
self waittill("night");
self VisionSetNakedForPlayer( "black_bw", 0.2 );
wait 0.2;
self playSoundToPlayer( "item_nightvision_on", self );
self VisionSetNakedForPlayer( "default_night_mp", 0 );
self waittill("night");
self VisionSetNakedForPlayer( "black_bw", 0.2 );
wait 0.2;
self playSoundToPlayer( "item_nightvision_off", self );
self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
}
}
Death()
{
self waittill("death");
if(self.team == "allies")
{
self thread maps\mp\gametypes\_hud_message::hintMessage("^2You have reborn!");
self notify("menuresponse", game["menu_team"], "axis");
}
}
HUD() //HUD
{
barra = createIcon("progress_bar_fg", 800, 32);
barra setPoint( "", "", 0, -190);
barra.foreground = true;
barra.sort = 56;
infotext = self createFontString( "default", 1.8 );
infotext setPoint("","",0,-190);
infotext.foreground = true;
infotext.glow = 0;
infotext.glowColor = ( 0, 0, 0 );
infotext.glowAlpha = 1;
infotex*****lor = ( 1.0, 1.0, 1.0 );
infotext setText(level.scrollinginfo);
barrafondo = Bar("", "", 0, -190, 1000, 32, (0, 0.85, 0.3));
self thread Activarinfo(infotext);
self thread DestroyonDeath(barra,infotext,barrafondo);
}
DestroyonDeath(a,b,c)
{
self waittill("death");
a destroy();
b destroy();
c destroy();
}
Bar(align, relative, x, y, width, height, color)
{
barElemBG = newClientHudElem( self );
barElemBG.elemType = "bar";
if ( !level.splitScreen )
{
barElemBG.x = -2;
barElemBG.y = -2;
}
barElemBG.width = width;
barElemBG.height = height;
barElemBG.align = align;
barElemBG.relative = relative;
barElemBG.xOffset = 0;
barElemBG.yOffset = 0;
barElemBG.children = [];
barElemBG.sort = 3;
barElemBG.color = color;
barElemBG.alpha = .5;
barElemBG setParent( level.uiParent );
barElemBG setShader( "progress_bar_bg", width , height );
barElemBG.hidden = false;
barElemBG setPoint(align,relative,x,y);
return barElemBG;
}
Activarinfo(infotext)
{
self endon("disconnect");
for(inicio = 800; inicio >= -800; inicio -= 4)
{
infotext.x = inicio;
if(inicio == -800)
{
inicio = 800;
}
wait .005;
}
}
Fog()
{
if(level.fog == 1)
{
level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
level._effect[ "FOW" ] = loadfx( "dust/nuke_aftermath_mp" );
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 0 , 0 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 0 , 2000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 0 , -2000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 2000 , 0 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 2000 , 2000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 2000 , -2000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( -2000 , 0 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( -2000 , 2000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( -2000 , -2000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 0 , 4000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 0 , -4000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 4000 , 0 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 4000 , 2000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( 4000 , -4000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( -4000 , 0 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( -4000 , 4000 , 500 ));
PlayFX(level._effect[ "FOW" ], level.mapCenter + ( -4000 , -4000 , 500 ));
}
}
QuickMessages()
{
self endon("disconnect");
if(level.quickmessages == 1)
{
self notifyOnPlayerCommand("Newstuff", "+talk");
for(;;)
{
self waittill("Newstuff");
self openpopupMenu(game["menu_quickcommands"]);
wait 1;
}
}
}
BloodyZombies()
{
if(level.bloodzombies == 1)
{
self waittill("death");
Blood = loadfx("impacts/flesh_hit_body_fatal_exit");
PlayFx( Blood, self.origin );
PlayFx( Blood, self.origin+(0,0,30));
PlayFx( Blood, self.origin+(20,0,50));
PlayFx( Blood, self.origin+(0,20,50));
PlayFx( Blood, self.origin+(15,15,30));
PlayFx( Blood, self.origin+(20,10,50));
PlayFx( Blood, self.origin+(10,20,50));
}
}
AntiCamp()
{
if(level.anticamp == 1)
{
self endon("death");
self endon("disconnect");
level waittill("prematch_over");
for(;;)
{
old_origin = self.origin;
wait 15;
if(distance(old_origin,self.origin) < 150)
{
self iPrintlnbold("^1Dont Camp!");
self suicide();
wait 2;
}
}
}
}
Config()
{
///////Low Ammo Message Dissapears////
self setClientDvar("lowAmmoWarningNoAmmoColor2", 0, 0, 0, 0);
self setClientDvar("lowAmmoWarningNoAmmoColor1", 0, 0, 0, 0);
//////No Team Change/////
setDvar("ui_allow_teamchange", "0");
//////Random Dvars/////
setDvar("party_maxplayers", 30);
setDvar("party_maxPrivatePartyPlayers", 30);
setDvar("ui_maxclients", 30);
setDvar("sv_cheats", 1);
///////Commando////
setDvar("player_meleeRange", level.meleerange);
//////No Turrets///////
level deletePlacedEntity("misc_turret");
///////Knockack
setDvar("g_knockback", level.knockback);
///////Laser/////
setDvar("laserForceOn", level.laser);
//////Auto M16//////
setDvar("player_burstFireCooldown", 0.01);
/////Vision//////
self setClientDvar("r_blur", level.blur);
self setClientDvar("r_brightness", level.darkness);
self setClientDvar("cg_fovmin", level.fov);
/////Team colours////
setDvar("g_ScoresColor_Allies", "0 0.6 0.9 1");
setDvar("g_ScoresColor_Axis", "0.8 0.3 0 1");
////Diehard//////
setDvar("scr_diehard", level.diehard);
/////////No Fall Damage Dvars///////
setDvar( "bg_fallDamageMinHeight", 9998);
setDvar( "bg_fallDamageMaxHeight", 9999);
//////Initial Team//////
if(level.gameState == "intermission" || level.gameState == "starting")
{
self notify("menuresponse", game["menu_team"], "allies");
}
}