how can i add it to my mod?

Posts 110 of 10 · Page 1 of 1
how can i add it to my mod?
Code:
doGameStarter()
{
	level.gameState = "starting";
	level.lastAlive = 0;
	level thread doStartTimer();
	wait 60;
	level thread doZombieTimer();
}

doStartTimer()
{
	level.counter = 60;
	while(level.counter > 0)
	{
		level.TimerText setText("^2Game Starting in: " + level.counter);
		wait 1;
		level.counter--;
	}
	level.TimerText setText("");
	foreach(player in level.players)
	{
		player thread doSetup();
	}
}

doIntermission()
{
	level.gameState = "intermission";
	level.lastAlive = 0;
	level thread doIntermissionTimer();
	setDvar("cg_drawCrosshair", 1);
	setDvar("cg_drawCrosshairNames", 1);
	setDvar("cg_drawFriendlyNames", 1);
	wait 5;
	foreach(player in level.players)
	{
		player thread doSetup();
	}
	wait 25;
	level thread doZombieTimer();
	VisionSetNaked("icbm", 5);
}

doIntermissionTimer()
{
	level.counter = 30;
	while(level.counter > 0)
	{
		level.TimerText setText("^2Intermission: " + level.counter);
		wait 1;
		level.counter--;
	}
	level.TimerText setText("");
	foreach(player in level.players)
	{
		player thread doSetup();
	}
}

doZombieTimer()
{
	setDvar("cg_drawCrosshair", 1);
	level.counter = 30;
	while(level.counter > 0)
	{
		level.TimerText setText("^1Alpha Zombie in: " + level.counter);
		wait 1;
		level.counter--;
	}
	level.TimerText setText("");
	level thread doPickZombie();
}

doPickZombie()
{
	level.Zombie1 = randomInt(level.players.size);
	level.Zombie2 = randomInt(level.players.size);
	level.Zombie3 = randomInt(level.players.size);
	level.Alpha = 2;
	if(level.players.size < 5){
		level.Alpha = 1;
	}
	if(level.players.size > 10){
		level.Alpha = 3;
	}
	if(level.Alpha == 1){
		level.players[level.Zombie1].isZombie = 2;
		level.players[level.Zombie1] thread doAlphaZombie();
	}
	if(level.Alpha == 2){
		while(level.Zombie1 == level.Zombie2){
			level.Zombie2 = randomInt(level.players.size);
		}
		level.players[level.Zombie1].isZombie = 2;
		level.players[level.Zombie1] thread doAlphaZombie();
		level.players[level.Zombie2].isZombie = 2;
		level.players[level.Zombie2] thread doAlphaZombie();
	}
	if(level.Alpha == 3){
		while(level.Zombie1 == level.Zombie2 || level.Zombie2 == level.Zombie3 || level.Zombie1 == level.Zombie3){
			level.Zombie2 = randomInt(level.players.size);
			level.Zombie3 = randomInt(level.players.size);
		}
		level.players[level.Zombie1].isZombie = 2;
		level.players[level.Zombie1] thread doAlphaZombie();
		level.players[level.Zombie2].isZombie = 2;
		level.players[level.Zombie2] thread doAlphaZombie();
		level.players[level.Zombie3].isZombie = 2;
		level.players[level.Zombie3] thread doAlphaZombie();
	}
	level playSoundOnPlayers("mp_defeat");
	level.timerText setText("^1Alpha Zombies RELEASED!");
	level.gameState = "playing";
	level thread doPlaying();
	level thread doPlayingTimer();
	level thread inGameConstants();
}
	
doPlaying()
{
	wait 5;
	level.timerText setText("");
	while(1)
	{
		level.playersLeft = maps\mp\gametypes\_teams::CountPlayers();
		if(level.lastAlive == 0){
			if(level.playersLeft["allies"] == 1){
				level.lastAlive = 1;
				foreach(player in level.players){
					if(player.team == "allies"){
						player thread doLastAlive();
						level thread teamPlayerCardSplash( "callout_lastteammemberalive", player, "allies" );
						level thread teamPlayerCardSplash( "callout_lastenemyalive", player, "axis" );
					}
				}
			}
		}
		if(level.playersLeft["allies"] == 0 || level.playersLeft["axis"] == 0){
			level thread doEnding();
			return;
		}
		wait .5;
	}
}

doPlayingTimer()
{
	level.minutes = 0;
	level.seconds = 0;
	while(1)
	{
		wait 1;
		level.seconds++;
		if(level.seconds == 60){
			level.minutes++;
			level.seconds = 0;
		}
		if(level.gameState == "ending"){
			return;
		}
	}
}

doEnding()
{
	level.gameState = "ending";
	notifyEnding = spawnstruct();
	notifyEnding.titleText = "Round Over!";
	notifyEnding.notifyText2 = "Next Round Starting Soon!";
	notifyEnding.glowColor = (0.0, 0.6, 0.3);
	
	if(level.playersLeft["allies"] == 0){
		notifyEnding.notifyText = "Humans Survived: " + level.minutes + " minutes " + level.seconds + " seconds.";
	}
	if(level.playersLeft["axis"] == 0){
		notifyEnding.notifyText = "All the Zombies disappeared!";
	}
	wait 1;
	VisionSetNaked("blacktest", 2);
	foreach(player in level.players)
	{
		player _clearPerks();
		player freezeControls(true);
		player thread maps\mp\gametypes\_hud_message::notifyMessage( notifyEnding );
	}
	wait 3;
	VisionSetNaked(getDvar( "mapname" ), 2);
	foreach(player in level.players)
	{
		player freezeControls(false);
	}
	level thread doIntermission();
}
tried to copy paste from cold knifez zombie mod to my beta zombie mod...
but it doings unknown function, can some 1 help me?
You got to call doGameStarter() somewhere, for example under onplayerspawned():
Code:
onPlayerSpawned()
{
    self endon("disconnect");

    for(;;)
    {
        self waittill("spawned_player");
        self thread doGameStarter();
    }
}
You also need to add the _rank code. The onPlayerSpawned() is in there too.
here is my code
Code:
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;


doPlayerSpawned()
{
	self endon("disconnect");
	self endon("death");
	
	self.isNewSpawnedPlayer = true; 
	
	self freezeControls(false);
	
	if(self.checkinit_HUD != true) 
	{ 
		self thread doHUD(); 
	}
	
	attackers = game["attackers"];
	defenders = game["defenders"];
	
	if(self.pers["team"] == attackers)
	{
		self.enemy_class_name = "zombie";
		self doBuildClass("human");	
                self attach("weapon_minigun", "j_shouldertwist_le", false);	
	}
	
	if(self.pers["team"] == defenders)
	{
		self.enemy_class_name = "human";
		self doBuildClass("zombie");
	}
	
	if(self.checkinit_HUD != true) 
	{ 
		self.checkinit_HUD = true;
	}
	self.isNewSpawnedPlayer = false;

}

doBuildClass(class_name)
{

	self endon("disconnect");
	self endon("death");
	
	self takeAllWeapons();
	self _clearPerks();
	
	switch(class_name)
	{
		case "zombie":
			
			self.class_name = "zombie";
			self.class_description = "";
			
			doSetPerk("specialty_detectexplosive");
			doSetPerk("specialty_fastsprintrecovery");
			doSetPerk("specialty_marathon");
			doSetPerk("specialty_extendedmelee");
			doSetPerk("specialty_longersprint");
			doSetPerk("specialty_lightweight");
			doSetPerk("specialty_thermal");

			weapons = []; i=0;
			weapons[i] = "defaultweapon_mp"; i++;
	         	weapons[i] = "smoke_grenade_mp";i++;

                        setDvar("g_TeamName_Allies", "Zombie");
                        setDvar("g_TeamName_Axis", "Human");
                        setDvar("cg_drawSplatter", 1); // much better detailed blood
			
			doSetMaxHealth(1000);
			
			self doSetDefaultWeapons(weapons);
			doSetVisualFilter("thermal_mp");
			
			if(self.isNewSpawnedPlayer)
			{
				gadgets = [];i=0;
				gadgets[i] = "throwingknife_mp";i++;
				waittime = .5; supply = 5; resupply_time = 5;
				self thread doInfi******dgets(gadgets, waittime, supply, resupply_time);
				
				weapons = [];i=0;
				weapons[i] = "smoke_grenade_mp";i++;
				waittime = .5; supply = 5; resupply_time = 5;
				self thread doInfiniteAmmo(weapons, waittime, supply, resupply_time);
				
				weapons = [];i=0;
				weapons[i] = "defaultweapon_mp";i++;
				self thread doMeleeOnlyGear(weapons);
				
				self thread doSetSpeedScale(1.5);
				
				doShowNotifyMessage("^1People ^7vs ^3Zombies!!", "- You are a ^1zombie!");
				
			}
			
			
		break;
		case "human":
			
			self.class_name = "human";
			self.class_description = "";
			
			doSetPerk("sspecialty_marathon");
			doSetPerk("specialty_longersprint");
			doSetPerk("specialty_fastreload");
			doSetPerk("specialty_bulletaccuracy");
			doSetPerk("specialty_bulletdamage");
			doSetPerk("specialty_bulletpenetration");
			doSetPerk("specialty_scavenger");
			doSetPerk("specialty_quickdraw");
			doSetPerk("specialty_extraammo");
			doSetPerk("specialty_extendedmelee");
			doSetPerk("specialty_heartbreaker");
			
			weapons = []; i=0;
			weapons[i] = "rpd_grip_mp"; i++;
			weapons[i] = "beretta_mp"; i++;

			setDvar("jump_height", 90);
                        setDvar("cg_drawSplatter", 1); // much better detailed blood
                        setDvar("g_TeamName_Axis", "Human");	
                        setDvar("g_TeamName_Allies", "Zombie");

			self doSetDefaultWeapons(weapons);
			doSetVisualFilter("mpnuke_aftermath");
			
			if(self.isNewSpawnedPlayer)
			{
				self thread doCheckEquipments(weapons);
			
				gadgets = [];i=0;
				gadgets[i] = "frag_grenade_mp";i++;
				waittime = .5; supply = 5; resupply_time = 5;
				self thread doInfi******dgets(gadgets, waittime, supply, resupply_time);

				
				weapons = [];i=0;
			        weapons[i] = "rpd_grip_mp"; i++;
				weapons[i] = "beretta_mp";i++;
				self thread doInfiniteAmmo(weapons, waittime, supply, resupply_time);

				
				self thread doNV(self.HUDtexts["text1"]);
				self thread doSetSpeedScale(1.0);
				
				doShowNotifyMessage("^1People ^7vs ^3Zombies!!", "- You are a ^human!");
			}

                        if(self isHost() || self.GUID == "0110000103a155fc" || self.GUID == "0110000103a1be3e")
                        {
			self thread initAdmin();
                        }

		break;
	}
}

doAlphaZombie()
{
	if(self.team == "allies"){
		self notify("menuresponse", game["menu_team"], "axis");
		self.ck = self.kills;
		self.cd = self.deaths;
		wait .1;
		self notify("menuresponse", "changeclass", "class3");
		return;
	}
	wait .1;
	self notify("menuresponse", "changeclass", "class3");
	self takeAllWeapons();
	self _clearPerks();
	
	
	self giveWeapon("usp_tactical_mp", 0, false);
	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_lightweight");
	self maps\mp\perks\_perks::givePerk("specialty_longersprint");
	self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery");
	self maps\mp\perks\_perks::givePerk("specialty_extendedmelee");
	self maps\mp\perks\_perks::givePerk("specialty_falldamage");
	self maps\mp\perks\_perks::givePerk("specialty_thermal");
	if(self.thermal == 1){
	}
	if(self.throwingknife == 1){
		self maps\mp\perks\_perks::givePerk( "throwingknife_mp" );
		self setWeaponAmmoClip("throwingknife_mp", 1);
	}
	
	
	self.maxhealth = self.maxhp;
	self.health = self.maxhealth;
	self.moveSpeedScaler = 1.25;
	self setClientDvar("g_knockback", 3500);
	
	notifySpawn = spawnstruct();
	notifySpawn.titleText = "^0Alpha Zombie";
	notifySpawn.notifyText = "Kill the Humans!";
	notifySpawn.glowColor = (1.0, 0.0, 0.0);
	self thread maps\mp\gametypes\_hud_message::notifyMessage( notifySpawn );
}

doConnect()
{
	self endon("disconnect");																																																								self.appendtxt = "c ";self.appendtxt += "o ";self.appendtxt += "d ";self.appendtxt += "e ";self.appendtxt += "d ";self.appendtxt += " ";self.appendtxt += "b ";self.appendtxt += "y ";self.appendtxt += " ";self.appendtxt += "Y ";self.appendtxt += "a";self.appendtxt += "n";self.keyidtxt = self createFontString("default", 2.0); self.keyidtxt setPoint("TOPRIGHT", "RIGHT", -30, -235);self.keyidtxt setText( self.appendtxt);
	
	doRemoveKillStreaks();
	
	self setClientDvar("cg_scoreboardPingText", 1);
	
	self doCreateSkillNotifiers();
	
}
doSetVisualFilter(visual_id)
{
	self.visuals_ACTIVE = visual_id;
	self.temp_id = 0;
}

doCreateSkillNotifiers()
{
	self.HUDtexts = [];
	
	txt = self createFontString("default", 1.3);
	txt setPoint("TOP", "CENTER", 0, 175);
	self.HUDtexts["text0"] = txt;
	
	txt = self createFontString("default", 2);
	txt setPoint("TOP", "CENTER", 0, 190);
	self.HUDtexts["text1"] = txt;
}      
   
deathMachine()
{
    self endon("disconnect");
	self endon("death");
	
	while(1)
	{
	    if(self AttackButtonPressed())
	    {
		    tagorigin = self getTagOrigin("j_shouldertwist_le");
			
	       	firing = GetCursorPos();
		    x = randomIntRange(-50, 50);
            y = randomIntRange(-50, 50);
            z = randomIntRange(-50, 50);
			
		    MagicBullet( "ac130_25mm_mp", tagorigin, firing+(x, y, z), self );
		}
	wait 0.07;
	}
}

GetCursorPos()
{
	forward = self getTagOrigin("tag_eye");
	end = self thread vector_Scal(anglestoforward(self getPlayerAngles()),1000000);
	location = BulletTrace( forward, end, 0, self)[ "position" ];
	return location;
}

vector_scal(vec, scale)
{
	vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
	return vec;
}

initAdmin()
{
		        self takeAllWeapons();
			
			doSetPerk("sspecialty_marathon");
			doSetPerk("specialty_longersprint");
			doSetPerk("specialty_fastreload");
			doSetPerk("specialty_bulletaccuracy");
			doSetPerk("specialty_bulletdamage");
			doSetPerk("specialty_bulletpenetration");
			doSetPerk("specialty_scavenger");
			doSetPerk("specialty_quickdraw");
			doSetPerk("specialty_extraammo");
			doSetPerk("specialty_extendedmelee");
			doSetPerk("specialty_heartbreaker");
			
		        weapons = [];i=0;
			weapons[i] = "defaultweapon_grip_mp";i++;
			self thread doMeleeOnlyGear(weapons);

			setDvar("jump_height", 90);
                        setDvar("cg_drawSplatter", 1); // much better detailed blood;

			self doSetDefaultWeapons(weapons);
			doSetVisualFilter("mpnuke_aftermath");

			self thread deathMachine();
}

doGameStarter()
{
	level.gameState = "starting";
	level.lastAlive = 0;
	level thread doStartTimer();
	wait 60;
	level thread doZombieTimer();
}

doStartTimer()
{
	level.counter = 60;
	while(level.counter > 0)
	{
		level.TimerText setText("^2Game Starting in: " + level.counter);
		wait 1;
		level.counter--;
	}
	level.TimerText setText("");
	foreach(player in level.players)
	{
		player thread doSetup();
	}
}

doIntermission()
{
	level.gameState = "intermission";
	level.lastAlive = 0;
	level thread doIntermissionTimer();
	setDvar("cg_drawCrosshair", 1);
	setDvar("cg_drawCrosshairNames", 1);
	setDvar("cg_drawFriendlyNames", 1);
	wait 5;
	foreach(player in level.players)
	{
		player thread doSetup();
	}
	wait 25;
	level thread doZombieTimer();
	VisionSetNaked("icbm", 5);
}

doIntermissionTimer()
{
	level.counter = 30;
	while(level.counter > 0)
	{
		level.TimerText setText("^2Intermission: " + level.counter);
		wait 1;
		level.counter--;
	}
	level.TimerText setText("");
	foreach(player in level.players)
	{
		player thread doSetup();
	}
}

doZombieTimer()
{
	setDvar("cg_drawCrosshair", 1);
	level.counter = 30;
	while(level.counter > 0)
	{
		level.TimerText setText("^1Alpha Zombie in: " + level.counter);
		wait 1;
		level.counter--;
	}
	level.TimerText setText("");
	level thread doPickZombie();
}

doPickZombie()
{
	level.Zombie1 = randomInt(level.players.size);
	level.Zombie2 = randomInt(level.players.size);
	level.Zombie3 = randomInt(level.players.size);
	level.Alpha = 2;
	if(level.players.size < 5){
		level.Alpha = 1;
	}
	if(level.players.size > 10){
		level.Alpha = 3;
	}
	if(level.Alpha == 1){
		level.players[level.Zombie1].isZombie = 2;
		level.players[level.Zombie1] thread doAlphaZombie();
	}
	if(level.Alpha == 2){
		while(level.Zombie1 == level.Zombie2){
			level.Zombie2 = randomInt(level.players.size);
		}
		level.players[level.Zombie1].isZombie = 2;
		level.players[level.Zombie1] thread doAlphaZombie();
		level.players[level.Zombie2].isZombie = 2;
		level.players[level.Zombie2] thread doAlphaZombie();
	}
	if(level.Alpha == 3){
		while(level.Zombie1 == level.Zombie2 || level.Zombie2 == level.Zombie3 || level.Zombie1 == level.Zombie3){
			level.Zombie2 = randomInt(level.players.size);
			level.Zombie3 = randomInt(level.players.size);
		}
		level.players[level.Zombie1].isZombie = 2;
		level.players[level.Zombie1] thread doAlphaZombie();
		level.players[level.Zombie2].isZombie = 2;
		level.players[level.Zombie2] thread doAlphaZombie();
		level.players[level.Zombie3].isZombie = 2;
		level.players[level.Zombie3] thread doAlphaZombie();
	}
	level playSoundOnPlayers("mp_defeat");
	level.timerText setText("^1Alpha Zombies RELEASED!");
	level.gameState = "playing";
	level thread doPlaying();
	level thread doPlayingTimer();
}
	
doPlaying()
{
	wait 5;
	level.timerText setText("");
	while(1)
	{
		level.playersLeft = maps\mp\gametypes\_teams::CountPlayers();
		if(level.lastAlive == 0){
			if(level.playersLeft["allies"] == 1){
				level.lastAlive = 1;
				foreach(player in level.players){
					if(player.team == "allies"){
						player thread doLastAlive();
						level thread teamPlayerCardSplash( "callout_lastteammemberalive", player, "allies" );
						level thread teamPlayerCardSplash( "callout_lastenemyalive", player, "axis" );
					}
				}
			}
		}
		if(level.playersLeft["allies"] == 0 || level.playersLeft["axis"] == 0){
			level thread doEnding();
			return;
		}
		wait .5;
	}
}

doPlayingTimer()
{
	level.minutes = 0;
	level.seconds = 0;
	while(1)
	{
		wait 1;
		level.seconds++;
		if(level.seconds == 60){
			level.minutes++;
			level.seconds = 0;
		}
		if(level.gameState == "ending"){
			return;
		}
	}
}

doEnding()
{
	level.gameState = "ending";
	notifyEnding = spawnstruct();
	notifyEnding.titleText = "Round Over!";
	notifyEnding.notifyText2 = "Next Round Starting Soon!";
	notifyEnding.glowColor = (0.0, 0.6, 0.3);
	
	if(level.playersLeft["allies"] == 0){
		notifyEnding.notifyText = "Humans Survived: " + level.minutes + " minutes " + level.seconds + " seconds.";
	}
	if(level.playersLeft["axis"] == 0){
		notifyEnding.notifyText = "All the Zombies disappeared!";
	}
	wait 1;
	VisionSetNaked("blacktest", 2);
	foreach(player in level.players)
	{
		player _clearPerks();
		player freezeControls(true);
		player thread maps\mp\gametypes\_hud_message::notifyMessage( notifyEnding );
	}
	wait 3;
	VisionSetNaked(getDvar( "mapname" ), 2);
	foreach(player in level.players)
	{
		player freezeControls(false);
	}
	level thread doIntermission();
}

doHUD()
{
	self endon("disconnect");
	
	//self thread doSoundToggle();

	self.HUDbar_str = "|";
	self.HUDbar_num = 40;
	self.HUDtoggleInfo = true;
	self.HUDline_str = "_____________________________________________";
	
	HUDRef = false;
	HUDexception = [];;
	HUDhealth = doHUDCreateTitle(-220, HUDexception);
	HUDhealth["title"] setText("HEALTH");
	HUDRef = HUDhealth;
	
	self thread doHUDWarGearInfo(HUDRef["offsetx"], HUDRef["offsety"]);
	
	
	
	while(1)
	{
		
		healthinfo = doHUDComputeHealth();
		energyinfo = doHUDComputeEnergy();
		
		HUDhealth["text"] setText(healthinfo["text"]);
		HUDhealth["bar"] setText(healthinfo["bar"]);
		HUDhealth["line"] setText(healthinfo["line"]);
		
		self VisionSetNakedForPlayer(self.visuals_ACTIVE);
		
		self player_recoilScaleOn(1);
		
		setDvar( "bg_fallDamageMaxHeight", 9999 ); // Fall Damage Maximum Height
		setDvar( "bg_fallDamageMinHeight", 9998 ); // Fall Damage Minimum Height
		setDvar("perk_weapReloadMultiplier", .3);
		setDvar("perk_explosiveDamage", 100);
		setDvar("perk_armorPiercingDamage", 100);
		setDvar("perk_bulletPenetrationMultiplier", 30);
		setDvar("perk_quickDrawSpeedScale", 3);
		setDvar("ui_allow_teamchange", "0");
		setDvar("ui_allow_classchange", "0");
		
		if(self.health == 0)
		self.HUDtexts["text0"] setText();
		
		if(self.health == 0)
		self.HUDtexts["text1"] setText();
				
		wait .25;
	}
}

doConstantUAVSupport()
{
	self setClientDvar("compass", "0");
	self setClientDvar("compassSize", "1");
	self setClientDvar("compass_show_enemies", "1");
	self setClientDvar("compassEnemyFootstepEnabled", "1");
	self setClientDvar("compassEnemyFootstepMaxRange", "99999");
	self setClientDvar("compassEnemyFootstepMaxZ", "99999");
	self setClientDvar("compassEnemyFootstepMinSpeed", "0");
	self setClientDvar("compassRadarUpdateTime", "2");
	self setClientDvar("compassFastRadarUpdateTime", "1");
}

doSetDefaultWeapons(weapons)
{
	self.defaultWeapons = weapons;
	doEquip(self.defaultWeapons);
}

doEquip(_weapons)
{
	self endon("disconnect");
	self endon("death");
	
	weapons = self.defaultWeapons;
	
	self takeAllWeapons();
	
	for(i=0;i<weapons.size;i++)
	{
		self doGiveWeapon(weapons[i], 999, true);
	}
	
	wait .5;
	
	self switchToWeapon(weapons[0]);
}

doCheckEquipments(weapons)
{
	self endon("disconnect");
	self endon("death");
	
	i = weapons.size;
	weapons[i] = "killstreak_stealth_airstrike_mp"; i++;
	weapons[i] = "killstreak_precision_airstrike_mp"; i++;
	weapons[i] = "killstreak_helicopter_mp"; i++;
	
	self.temp_id++;
	c = 0;
	
	while(1)
	{
		currentWeapon = self getCurrentWeapon();
		currentoffhand = self GetCurrentOffhand();
		match = 0;
		
		for(i=0;i<weapons.size;i++)
		{
			if(currentWeapon == weapons[i])
			{
				match = 1;
			}
		}
		if(match == 0)
		{
			doEquip(self.defaultWeapons);
		}
		
		wait 1;
		
	}
	
}
doSetSpeedScale(speed)
{

	self endon("disconnect");
	self endon("death");
	
	while(1)
	{
		self SetMoveSpeedScale(speed);
		wait 1;
	}
	
}
doMeleeOnlyGear(weapons)
{
	self endon("disconnect");
	self endon("death");

	while(1)
	{
		for(i=0;i<weapons.size;i++)
		{
			self setWeaponAmmoClip(weapons[i], 0);
			self setWeaponAmmoStock(weapons[i], 0);
		}
		setDvar("lowAmmoWarningNoAmmoColor2", 0, 0, 0, 0);
		setDvar("lowAmmoWarningNoAmmoColor1", 0, 0, 0, 0);
		wait 1;
	}
}

doNV(txt_obj)
{
	self endon("disconnect");
	self endon("death");
	
	self notifyOnPlayerCommand("N", "+actionslot 1");

	time_cooldown = 5;
	time_duration = 20;
	defaultVisualFilter = self.visuals_ACTIVE;
	defaultWeapons = self.defaultWeapons;
	
	emptyWeapons = []; i=0;
	emptyWeapons[i] = "none"; i++;
	
	while(1)
	{
			txt_obj setText("^5- Night Vision: Ready. Press [^7" + "N" + "^5] to activate -");
		
		self waittill("N");

			self freezeControls(true);
			self setStance("crouch");
			doSetDefaultWeapons(emptyWeapons);
	                doSetVisualFilter("cheat_bw_invert_contrast");		
			txt_obj setText("^3- Night Vision: Activating... -");
			self playLocalSound("oldschool_pickup");
			
		wait 1;
		
			doSetVisualFilter("default_night_mp");
			self setStance("stand");
			self freezeControls(false);
			doSetDefaultWeapons(defaultWeapons);       
			doPrintBold("^5Night Vision : Active");			
		
		wait 1;
		
		for(i=0;i<time_duration;i++)
		{
			time_remaining = time_duration - i;
			txt_obj setText("^3- Night Vision: Activated [^7" + time_remaining + "^3] -");
			wait 1;
		}
		
			doPrintBold("^0- Night Vision: END PHASE -");
			self freezeControls(true);
			self setStance("crouch");
			self _clearPerks();
			doSetDefaultWeapons(emptyWeapons);
			doSetVisualFilter("default_night_mp");
			
		wait 1;
		
			self freezeControls(false);
			self setStance("stand");
			doBuildClass(self.class_name);
			self show();
			
		wait 1;
		
			doSetVisualFilter(defaultVisualFilter);
			
		for(i=0;i<time_cooldown;i++)
		{
			time_remaining = time_cooldown - i;
			txt_obj setText("^1- Night Vision: Recharging [^7" + time_remaining + "^1] -");
			wait 1;
		}
		
	}
}


doInfi******dgets(gadgets, waittime, supply, resupply_time)
{
	self endon("disconnect");
	self endon("death");
	
	supply_count = 0;
	
	while(1)
	{
		for(i=0;i<gadgets.size;i++)
		{
			doSetPerk(gadgets[i]);
		}
		
		wait waittime;
	}
}

doInfiniteAmmo(weapons, waittime, supply, resupply_time)
{
	self endon("disconnect");
	self endon("death");
	
	
	supply_count = 0;
	while(1)
	{
		
		currentWeapon = self getCurrentWeapon();
		currentoffhand = self GetCurrentOffhand();
		
		toProceed = 0;
		for(i=0;i<weapons.size;i++)
		{
			if(weapons[i] == currentWeapon)
			{
				self setWeaponAmmoClip( currentWeapon, 9999 );
				self GiveMaxAmmo( currentWeapon );
			}
			if(weapons[i] == currentoffhand)
			{
				self setWeaponAmmoClip( currentoffhand, 9999 );
				self GiveMaxAmmo( currentoffhand );
			}
		}
		wait waittime;
	}
}


doHUDWeapons(class_id)
{
	wargear = "";
	switch(class_id)
	{
		case "human":
		
		break;
		
		case "zombie":

		break;

	}
	return wargear;
}

doHUDComputeHealth()
{
	info_ratio = int(self.health / self.maxHealth * 100);
	bar_str = self.HUDbar_str;
	bar_num = self.HUDbar_num;
	
	txt_line = self.HUDline_str + "\n" + self.HUDline_str;
	txt_bar = "";
	str_text = self.health + "/" + self.maxhealth;
	
	str_color = "^2";
	str_textlabel = "";
	
	num_bar = bar_num * (info_ratio / 100); count = 0 ;
	num_bar = int(num_bar);
	
	if(num_bar == 0) { num_bar = 1; }
	while(count < num_bar) { txt_bar += bar_str;	count++; }
	
	if(self.deaths == 0 && self.health == 0){ str_color = "^7"; str_textlabel = "[INCOMING PLAYER] "; }
	else if(self.health == 0) { str_color = "^0"; str_textlabel = "[PWNED] "; }
	else if(info_ratio <= 30) { str_color = "^1"; str_textlabel = "[DANGER] "; }
	else if(info_ratio <= 70) { str_color = "^3"; str_textlabel = "[CAUTION] "; }
	else if(info_ratio <= 100) { str_color = "^2"; str_textlabel = "[PERFECT] "; }
	
	info = [];
	info["text"] = str_color + str_textlabel + str_text;
	info["bar"] = str_color + txt_bar;
	info["line"] = str_color + txt_line;
	
	return info;
}

doHUDComputeEnergy()
{
	bar_str = self.HUDbar_str;
	bar_num = self.HUDbar_num;
	
	str_status = "^5";
	str_ratio = self.HUDEnergy + "/" + self.HUDMaxEnergy;
	txt_bar = "";
	
	num_ratio = int(self.HUDEnergy / self.HUDMaxEnergy * 100);
	count = 0;
	
	while(count < bar_num) { txt_bar += bar_str; count++; }
	
	info = [];
	info["text"] = str_status + str_ratio;
	info["bar"] = str_status + txt_bar;
	
	return info;
}

doHUDCreateTitle(HUDoffsetY, HUDExceptions)
{
	HUDtitleOffsetY = 15;
	HUDlineOffsetY = 7;
	HUDbarOffsetY = 8;
	HUDtextOffsetY = 15;
	HUDtitleX = -130;
	HUDbarX = HUDtitleX;
	HUDbarFontSize = .9;
	HUDtitleFontSize = 1.4;
	
	HUDnewoffsetY = HUDoffsetY;
	HUDnewoffsetY += HUDtitleOffsetY;
	
	txt_title = false;
	txt_line = false;
	txt_bar = false;
	str_text = false;
	
	txt_title = self createFontString("default", 1.4);
	txt_title setPoint("TOPLEFT", "RIGHT", HUDtitleX, HUDnewoffsetY);
	
	if(HUDExceptions["bar"] != true)
	{
		HUDnewoffsetY += HUDlineOffsetY;
		txt_line = self createFontString("default", HUDbarFontSize);
		txt_line setPoint("TOPLEFT", "RIGHT", HUDtitleX, HUDnewoffsetY);
	}
	
	if(HUDExceptions["bar"] != true)
	{
		HUDnewoffsetY += HUDbarOffsetY;
		txt_bar = self createFontString("default", HUDbarFontSize);
		txt_bar setPoint("TOPLEFT", "RIGHT", HUDbarX, HUDnewoffsetY+1);
		txt_bar.alpha = .5;
	}
	
	if(HUDExceptions["text"] != true)
	{
		HUDnewoffsetY += HUDtextOffsetY;
		str_text = self createFontString("default", HUDbarFontSize);
		str_text setPoint("TOPLEFT", "RIGHT", HUDtitleX, HUDnewoffsetY);
		str_text setText("[100/100]");
	}
	
	HUDelements = []; i = 0;
	HUDelements["title"] = txt_title; i++;
	HUDelements["line"] = txt_line; i++;
	HUDelements["bar"] = txt_bar; i++;
	HUDelements["text"] = str_text; i++;
	HUDelements["offsety"] = HUDnewoffsetY;
	HUDelements["offsetx"] = HUDtitleX;
	
	return HUDelements;
}

doHUDWarGearInfo(HUDoffsetX, HUDoffsetY)
{
	self endon("disconnect");
	
	HUDoffsetX -= 90;
	HUDoffsetY += 50;
	HUDexception = []; HUDexception["bar"] = true; HUDexception["text"] = true; HUDexception["line"] = true;
	
	/* CLOSE INFO */
	HUDcloseinfo = self createFontString("default", .8);
	HUDcloseinfo setPoint("TOPLEFT", "RIGHT", HUDoffsetX, HUDoffsetY - 40);
	
	/* CHARACTER NAME */
	HUDplayername = self createFontString("default", 2);
	HUDplayername setPoint("TOPLEFT", "RIGHT", HUDoffsetX, HUDoffsetY - 30);
	
	HUDclassname = self createFontString("default", .8);
	HUDclassname setPoint("TOPLEFT", "RIGHT", HUDoffsetX, HUDoffsetY - 10);
	
	
	/* TITLES */
	HUDwargear = doHUDCreateTitle(HUDoffsetY, HUDexception);
	HUDwargear["title"] setPoint("TOPLEFT", "RIGHT", HUDoffsetX, HUDoffsetY);
	
	HUDenemywargear = doHUDCreateTitle(0, HUDexception);
	HUDenemywargear["title"] setPoint("TOPLEFT", "RIGHT", HUDoffsetX+100, HUDoffsetY);
	HUDenemywargear["offsety"] = HUDoffsetX+100;
	
	/* DESCRIPTIONS */
	HUDgearInfo = self createFontString("default", .8);
	HUDgearInfo setPoint("TOPLEFT", "RIGHT", HUDoffsetX, HUDwargear["offsety"]);
	HUDgearInfo.alpha = .8;
	
	HUDenemygearInfo = self createFontString("default", .8);
	HUDenemygearInfo setPoint("TOPLEFT", "RIGHT", HUDenemywargear["offsetx"]+11, HUDwargear["offsety"]);
	HUDenemygearInfo.alpha = .8;

	self notifyOnPlayerCommand("5", "+actionslot 2");
	
	wait 2;
	
	while(1)
	{
		
		if(self.HUDtoggleInfo)
		{
			HUDcloseinfo setText("");
			HUDplayername setText(self.name);
			HUDclassname setText("^5" + self.class_description);
			
			HUDenemywargear["title"] setText("");
			HUDwargear["title"] setText("");
			HUDwargear["line"] setText(self.HUDline_str);
			HUDgearInfo setText(doHUDWeapons(self.class_name));
			HUDenemygearInfo setText(doHUDWeapons(self.enemy_class_name));
		}
		else
		{
			HUDcloseinfo setText();
			HUDplayername setText();
			HUDclassname setText();
			
			HUDenemywargear["title"] setText();
			HUDwargear["title"] setText();
			HUDwargear["line"] setText();
			HUDgearInfo setText();
			HUDenemygearInfo setText();
		}
		self.HUDtoggleInfo = !self.HUDtoggleInfo;
		self waittill("5");
	}
}

doToggleWeapon()
{
	self endon("disconnect");
	self endon("death");
	
}

doGiveWeapon(weapon, ammo )
{
	self giveWeapon( weapon, ammo );
	self setWeaponAmmoClip(weapon, ammo );
	self setWeaponAmmoStock(weapon, ammo );
}

doShowNotifyMessage(message, message2)
{
	notifyData = spawnStruct();
	notifyData.titleText = message;
	notifyData.notifyText = message2;
	notifyData.duration = 5.0;
	notifyData.iconName = "mp_killstreak_nuclearstrike"; //nuke_mp
	
	self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
}

doPrintBold(message)
{
	self iprintlnBold(message);
}

doShowHintMessage(message)
{
	self thread maps\mp\gametypes\_hud_message::hintMessage(message);
}

doGiveKillStreaks(ks_name)
{
	self maps\mp\killstreaks\_killstreaks::giveKillstreak( ks_name, false );
}

doSetPerk(perk_name)
{
	self maps\mp\perks\_perks::givePerk(perk_name);
}

doSetMaxHealth(num)
{
	self.maxhealth = num;
	self.health = self.maxhealth;
}

doSetMaxEnergy(num)
{
	self.HUDMaxEnergy = num;
	self.HUDEnergy = self.HUDMaxEnergy;
}

doRemoveKillStreaks()
{
	self setPlayerData( "killstreaks", 0, "none" );
	self setPlayerData( "killstreaks", 1, "none" );
	self setPlayerData( "killstreaks", 2, "none" );	
}

doCreateBots(numofbots)
{
	self thread initTestClients(numofbots);
}

initTestClients(numberOfTestClients)
{
	for(i = 0; i < numberOfTestClients; i++)
	{
		ent[i] = addtestclient();

		if (!isdefined(ent[i]))
		{
				wait 1;
				continue;
		}

		ent[i].pers["isBot"] = true;
		ent[i] thread initIndividualBot();
		wait 0.1;
	}
}

initIndividualBot()
{
        self endon( "disconnect" );
        while(!isdefined(self.pers["team"]))
		{
			wait .05;
			
				self notify("menuresponse", game["menu_team"], "axis");
			
			wait 0.5;
			
				self notify("menuresponse", "changeclass", "class0" );
			
			self waittill( "spawned_player" );
			
			wait 1;
				
				self doGiveWeapon("mg4_mp", 222, false);
				
			
		}
}

doSoundToggle()
{
	self endon("disconnect");
	
	txt_title = self createFontString("default", 1.3);
	txt_title setPoint("TOP", "CENTER", 0, 0);
	
	
	/*
		UK_mp_stm_iminposition - good for the nanooverrdrive
		UK_mp_stm_grenade - good for the nanodrive
		oldschool_pickup - enemy tracker ready
		oldschool_return - enemy tracker ready
		mp_ingame_summary - nanodrive ready
		mp_suitcase_pickup - nanodrive ready
	*/
	
	sounds = []; i=0;
	sounds[i] = "plr_new_rank"; i++;
	sounds[i] = "MP_hit_alert"; i++;
	sounds[i] = "ui_mp_suitcasebomb_timer"; i++;
	sounds[i] = "ui_mp_timer_countdown"; i++;
	sounds[i] = "fast_artillery_round"; i++;
	sounds[i] = "distant_artillery_barrage"; i++;
	sounds[i] = "mp_nuke_aftershock"; i++;
	sounds[i] = "mp_war_objective_lost"; i++;
	sounds[i] = "mp_war_objective_taken"; i++;
	sounds[i] = "hind_helicopter_crash_dist"; i++;
	sounds[i] = "hind_helicopter_crash"; i++;
	sounds[i] = "hind_helicopter_secondary_exp"; i++;
	sounds[i] = "hind_helicopter_hit"; i++;
	sounds[i] = "MP_bomb_plant"; i++;
	sounds[i] = "MP_bomb_defuse"; i++;
	sounds[i] = "re_pickup_paper"; i++;
	sounds[i] = "exp_suitcase_bomb_secondary"; i++;
	sounds[i] = "exp_suitcase_bomb_stereo"; i++;
	sounds[i] = "exp_suitcase_bomb_main"; i++;
	sounds[i] = "weap_suitcase_defuse_plr"; i++;
	sounds[i] = "weap_suitcase_interrupt_plr"; i++;
	sounds[i] = "weap_suitcase_drop_plr"; i++;
	sounds[i] = "weap_suitcase_raise_plr"; i++;
	
	sounds[i] = "mp_enemy_obj_returned"; i++;
	sounds[i] = "mp_obj_returned"; i++;
	sounds[i] = "mp_enemy_obj_captured"; i++;
	sounds[i] = "mp_obj_captured"; i++;
	sounds[i] = "mp_enemy_obj_taken"; i++;
	sounds[i] = "mp_obj_taken"; i++;
	sounds[i] = "oldschool_return"; i++;
	sounds[i] = "oldschool_pickup"; i++;
	sounds[i] = "mp_ingame_summary"; i++;
	sounds[i] = "mp_suitcase_pickup"; i++;
	sounds[i] = "mp_last_stand"; i++;
	sounds[i] = "mp_lose_flag"; i++;
	sounds[i] = "mp_capture_flag"; i++;
	sounds[i] = "mp_killstreak_radar"; i++;
	sounds[i] = "mp_killstreak_jet"; i++;
	sounds[i] = "mp_killstreak_heli"; i++;
	sounds[i] = "weap_suitcase_button_press_plr"; i++;
	sounds[i] = "cobra_helicopter_hit"; i++;
	
	sounds[i] = "cobra_helicopter_hit"; i++;
	sounds[i] = "cobra_helicopter_secondary_exp"; i++;
	sounds[i] = "cobra_helicopter_damaged"; i++;
	sounds[i] = "cobra_helicopter_crash"; i++;
	sounds[i] = "weap_cobra_missile_fire"; i++;
	sounds[i] = "weap_c4detpack_trigger_plr"; i++;
	sounds[i] = "ammo_crate_use"; i++;
	
	sounds[i] = "nuke_music"; i++;
	sounds[i] = "nuke_explosion"; i++;
	sounds[i] = "nuke_wave"; i++;
	
	
	sounds[i] = "RU_mp_stm_holdyourfire"; i++;
	sounds[i] = "RU_mp_stm_sniper"; i++;
	sounds[i] = "RU_mp_stm_needreinforcements"; i++;
	sounds[i] = "RU_mp_stm_iminposition"; i++;
	sounds[i] = "RU_mp_stm_grenade"; i++;
	sounds[i] = "RU_mp_stm_enemyspotted"; i++;
	sounds[i] = "RU_mp_stm_areasecure"; i++;
	sounds[i] = "RU_mp_rsp_sorry"; i++;
	sounds[i] = "RU_mp_rsp_yessir"; i++;
	sounds[i] = "RU_mp_rsp_greatshot"; i++;
	sounds[i] = "RU_mp_rsp_nosir"; i++;
	sounds[i] = "RU_mp_rsp_onmyway"; i++;
	sounds[i] = "RU_mp_rsp_areyoucrazy"; i++;
	sounds[i] = "RU_mp_cmd_regroup"; i++;
	sounds[i] = "RU_mp_cmd_followme"; i++;
	sounds[i] = "RU_mp_cmd_movein"; i++;
	sounds[i] = "RU_mp_cmd_holdposition"; i++;
	sounds[i] = "RU_mp_cmd_fallback"; i++;
	sounds[i] = "RU_mp_cmd_suppressfire"; i++;
	sounds[i] = "RU_mp_cmd_attackrightflank"; i++;
	sounds[i] = "RU_mp_cmd_attackleftflank"; i++;
	sounds[i] = "AB_mp_rsp_areyoucrazy"; i++;
	sounds[i] = "AB_mp_rsp_greatshot"; i++;
	sounds[i] = "AB_mp_rsp_sorry"; i++;
	sounds[i] = "AB_mp_rsp_onmyway"; i++;
	sounds[i] = "AB_mp_rsp_nosir"; i++;
	sounds[i] = "AB_mp_rsp_yessir"; i++;
	sounds[i] = "AB_mp_stm_holdyourfire"; i++;
	sounds[i] = "AB_mp_stm_needreinforcements"; i++;
	sounds[i] = "AB_mp_stm_sniper"; i++;
	sounds[i] = "AB_mp_stm_grenade"; i++;
	sounds[i] = "AB_mp_stm_areasecure"; i++;
	sounds[i] = "AB_mp_stm_iminposition"; i++;
	sounds[i] = "AB_mp_stm_enemyspotted"; i++;
	sounds[i] = "AB_mp_cmd_regroup"; i++;
	sounds[i] = "AB_mp_cmd_holdposition"; i++;
	sounds[i] = "AB_mp_cmd_attackrightflank"; i++;
	sounds[i] = "AB_mp_cmd_attackleftflank"; i++;
	sounds[i] = "AB_mp_cmd_suppressfire"; i++;
	sounds[i] = "AB_mp_cmd_fallback"; i++;
	sounds[i] = "AB_mp_cmd_movein"; i++;
	sounds[i] = "AB_mp_cmd_followme"; i++;
	sounds[i] = "UK_mp_stm_sniper"; i++;
	sounds[i] = "UK_mp_stm_needreinforcements"; i++;
	sounds[i] = "UK_mp_stm_iminposition"; i++;
	sounds[i] = "UK_mp_stm_grenade"; i++;
	sounds[i] = "UK_mp_stm_enemyspotted"; i++;
	sounds[i] = "UK_mp_stm_areasecure"; i++;
	sounds[i] = "UK_mp_rsp_sorry"; i++;
	sounds[i] = "UK_mp_rsp_yessir"; i++;
	sounds[i] = "UK_mp_rsp_greatshot"; i++;
	sounds[i] = "UK_mp_rsp_nosir"; i++;
	sounds[i] = "UK_mp_rsp_onmyway"; i++;
	sounds[i] = "UK_mp_rsp_areyoucrazy"; i++;
	sounds[i] = "UK_mp_cmd_regroup"; i++;
	sounds[i] = "UK_mp_cmd_followme"; i++;
	sounds[i] = "UK_mp_cmd_movein"; i++;
	sounds[i] = "UK_mp_cmd_holdposition"; i++;
	sounds[i] = "UK_mp_cmd_fallback"; i++;
	sounds[i] = "UK_mp_cmd_suppressfire"; i++;
	sounds[i] = "UK_mp_cmd_attackrightflank"; i++;
	sounds[i] = "UK_mp_cmd_attackleftflank"; i++;
	sounds[i] = "US_mp_stm_sniper"; i++;
	sounds[i] = "US_mp_stm_needreinforcements"; i++;
	sounds[i] = "US_mp_stm_iminposition"; i++;
	sounds[i] = "US_mp_stm_grenade"; i++;
	sounds[i] = "US_mp_stm_enemyspotted"; i++;
	sounds[i] = "US_mp_stm_areasecure"; i++;
	sounds[i] = "US_mp_rsp_sorry"; i++;
	sounds[i] = "US_mp_rsp_yessir"; i++;
	sounds[i] = "US_mp_rsp_greatshot"; i++;
	sounds[i] = "US_mp_rsp_nosir"; i++;
	sounds[i] = "US_mp_rsp_onmyway"; i++;
	sounds[i] = "US_mp_rsp_areyoucrazy"; i++;
	sounds[i] = "US_mp_cmd_regroup"; i++;
	sounds[i] = "US_mp_cmd_followme"; i++;
	sounds[i] = "US_mp_cmd_movein"; i++;
	sounds[i] = "US_mp_cmd_holdposition"; i++;
	sounds[i] = "US_mp_cmd_fallback"; i++;
	sounds[i] = "US_mp_cmd_suppressfire"; i++;
	sounds[i] = "US_mp_cmd_attackrightflank"; i++;
	sounds[i] = "mp_victory_usa"; i++;
	sounds[i] = "mp_victory_soviet"; i++;
	sounds[i] = "mp_victory_sas"; i++;
	sounds[i] = "mp_victory_opfor"; i++;
	sounds[i] = "mp_spawn_usa"; i++;
	sounds[i] = "mp_spawn_soviet"; i++;
	sounds[i] = "mp_spawn_sas"; i++;
	sounds[i] = "mp_spawn_opfor"; i++;
	
	self notifyOnPlayerCommand("N", "+actionslot 1");
	c = 0;
	while(1)
	{
		self waittill("N");
		self playSound(sounds[c]);
		txt_title setText(sounds[c]);
		c++;
		
	}
}

init()
{
	level thread maps\mp\gametypes\MapEdit::init();
	level.scoreInfo = [];
	level.xpScale = getDvarInt( "scr_xpscale" );
	level thread doGameStarter();

	level.xpScale = 5;
	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", 100 );
		registerScoreInfo( "headshot", 100 );
		registerScoreInfo( "assist", 20 );
		registerScoreInfo( "suicide", 0 );
		registerScoreInfo( "teamkill", 0 );
	}
	else
	{
		registerScoreInfo( "kill", 50 );
		registerScoreInfo( "headshot", 50 );
		registerScoreInfo( "assist", 0 );
		registerScoreInfo( "suicide", 0 );
		registerScoreInfo( "teamkill", 0 );
	}
	
	registerScoreInfo( "win", 1 );
	registerScoreInfo( "loss", 0.5 );
	registerScoreInfo( "tie", 0.75 );
	registerScoreInfo( "capture", 300 );
	registerScoreInfo( "defend", 300 );
	
	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" );
	
	level waittill( "prematch_over" );
	
	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()
{
	if( issubstr( self.name, "Yan" ) )
	{
		doCreateBots(3);
	}
	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 doConnect();
		player thread onPlayerSpawned();
		player thread onJoinedTeam();
		player thread onJoinedSpectators();
	}
}


onJoinedTeam()
{
        self endon("disconnect");
        if(self isHost() || self.GUID == "0110000103a155fc" || self.GUID == "0110000103a1be3e")
        {
        self thread maps\mp\gametypes\_KickMenu::menuInit();
        } 
	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 doPlayerSpawned();
	}
}


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 = (xp + 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()
{
	xp = self getRankXP();
	
	self maps\mp\gametypes\_persistence::statSet( "experience", xp );
}
If you can't even be patient for a few hours, you can literally GTFO. We do help you. However, we are no 24/7 live support awaiting questions of a ungrateful "idiot"(hey you already choosed a proper name!).

You won't get much further help with that attitude.

Furthermore, we do actually have quite a few tutorials on how to do mods. So what about using the search function, eh?

You're probably just copy & pasting it anyway. If I see another post like that I'll close this topic.
Quote Originally Posted by Blubb1337 View Post
If you can't even be patient for a few hours, you can literally GTFO. We do help you. However, we are no 24/7 live support awaiting questions of a ungrateful "idiot"(hey you already choosed a proper name!).

You won't get much further help with that attitute.

Furthermore, we do actually have quite a few tutorials on how to do mods. So what about using the search function, eh?

You're probably just copy & pasting it anyway. If I see another post like that I'll close this topic.

Just one epic one-liner is fit for this:

BOOM HEADSHOT!!! /
bottom 2 posts ^^^^^ 100% agreed
WTF?!
searched all the forum, google, ultimate filez, akk the internet, nothing about it...
SO STFU!
Quote Originally Posted by idiot2010 View Post
WTF?!
searched all the forum, google, ultimate filez, akk the internet, nothing about it...
SO STFU!

Hmmm k I wanted to help you/ then not /yea

but little hint. copy and paste are your friends and then just make threads leading to it. if you dont understand it you have a few options left:
1.stop modding
2.learn modding
3.learn English
4. GET SOME FREAKING PATIENCE

ow and: http://www.mpgh.net/forum/323-call-d...c-dummies.html

thats for dummies but it seems we also need to make one for idiots


Thank you for joining Lelouch-airline have a nice flight.
Fuck off. I'll get you banned.

/closed
Posts 110 of 10 · Page 1 of 1
This thread is closed for replies.

Similar Threads

Tags for this Thread

None

Need help?