Results 1 to 10 of 26

Thread: the score is not renewed

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Private
    Join Date
    Mar 2015
    Posts
    32
    Thanks
    0
    Thanked 1 Time in 1 Post
    No i run olnly zzz_messages.iwd.

  2. #2
    Assadministrator IzNoGoD's Avatar
    Join Date
    Aug 2012
    Posts
    1,718
    Thanks
    17
    Thanked 1,068 Times in 674 Posts
    Quote Originally Posted by punisher2202 View Post
    No i run olnly zzz_messages.iwd.
    Post it, so we can see that either _teams.gsc or tdm.gsc is in there
    "Does not work" is an error report for a bug between keyboard and chair.

    All hail Artie Effem

  3. #3
    Private
    Join Date
    Mar 2015
    Posts
    32
    Thanks
    0
    Thanked 1 Time in 1 Post
    Quote Originally Posted by IzNoGoD View Post
    Post it, so we can see that either _teams.gsc or tdm.gsc is in there
    Ok i find this "tdm.gsc" in the file "zzz_messages.iwd" (maps/mp/gametypes/tdm.gsc)

    Code:
    /*
    	Team Deathmatch
    	Objective: 	Score points for your team by eliminating players on the opposing team
    	Map ends:	When one team reaches the score limit, or time limit is reached
    	Respawning:	No wait / Near teammates
    
    	Level requirements
    	------------------
    		Spawnpoints:
    			classname		mp_tdm_spawn
    			All players spawn from these. The spawnpoint chosen is dependent on the current locations of teammates and enemies
    			at the time of spawn. Players generally spawn behind their teammates relative to the direction of enemies.
    
    		Spectator Spawnpoints:
    			classname		mp_global_intermission
    			Spectators spawn from these and intermission is viewed from these positions.
    			Atleast one is required, any more and they are randomly chosen between.
    
    	Level script requirements
    	-------------------------
    		Team Definitions:
    			game["allies"] = "american";
    			game["axis"] = "german";
    			This sets the nationalities of the teams. Allies can be american, british, or russian. Axis can be german.
    
    		If using minefields or exploders:
    			maps\mp\_load::main();
    
    	Optional level script settings
    	------------------------------
    		Soldier Type and Variation:
    			game["american_soldiertype"] = "normandy";
    			game["german_soldiertype"] = "normandy";
    			This sets what character models are used for each nationality on a particular map.
    
    			Valid settings:
    				american_soldiertype	normandy
    				british_soldiertype		normandy, africa
    				russian_soldiertype		coats, padded
    				german_soldiertype		normandy, africa, winterlight, winterdark
    */
    
    /*QUAKED mp_tdm_spawn (0.0 0.0 1.0) (-16 -16 0) (16 16 72)
    Players spawn away from enemies and near their team at one of these positions.*/
    
    main()
    {
    	level.callbackStartGameType = ::Callback_StartGameType;
    	level.callbackPlayerConnect = ::Callback_PlayerConnect;
    	level.callbackPlayerDisconnect = ::Callback_PlayerDisconnect;
    	level.callbackPlayerDamage = ::Callback_PlayerDamage;
    	level.callbackPlayerKilled = ::Callback_PlayerKilled;
    	maps\mp\gametypes\_callbacksetup::SetupCallbacks();
    
    	level.autoassign = ::menuAutoAssign;
    	level.allies = ::menuAllies;
    	level.axis = ::menuAxis;
    	level.spectator = ::menuSpectator;
    	level.weapon = ::menuWeapon;
    	level.endgameconfirmed = ::endMap;
    
    	self thread maps\mp\gametypes\_messages::main();
    }
    
    Callback_StartGameType()
    {
    	level.splitscreen = isSplitScreen();
    
    	// defaults if not defined in level script
    	if(!isDefined(game["allies"]))
    		game["allies"] = "american";
    	if(!isDefined(game["axis"]))
    		game["axis"] = "german";
    
    	// server cvar overrides
    	if(getCvar("scr_allies") != "")
    		game["allies"] = getCvar("scr_allies");
    	if(getCvar("scr_axis") != "")
    		game["axis"] = getCvar("scr_axis");
    
    	precacheStatusIcon("hud_status_dead");
    	precacheStatusIcon("hud_status_connecting");
    	precacheRumble("damage_heavy");
    	precacheString(&"PLATFORM_PRESS_TO_SPAWN");
    
    	thread maps\mp\gametypes\_menus::init();
    	thread maps\mp\gametypes\_serversettings::init();
    	thread maps\mp\gametypes\_clientids::init();
    	thread maps\mp\gametypes\_teams::init();
    	thread maps\mp\gametypes\_weapons::init();
    	thread maps\mp\gametypes\_scoreboard::init();
    	thread maps\mp\gametypes\_killcam::init();
    	thread maps\mp\gametypes\_shellshock::init();
    	thread maps\mp\gametypes\_hud_teamscore::init();
    	thread maps\mp\gametypes\_deathicons::init();
    	thread maps\mp\gametypes\_damagefeedback::init();
    	thread maps\mp\gametypes\_healthoverlay::init();
    	thread maps\mp\gametypes\_friendicons::init();
    	thread maps\mp\gametypes\_spectating::init();
    	thread maps\mp\gametypes\_grenadeindicators::init();
    
    	level.xenon = (getcvar("xenonGame") == "true");
    	if(level.xenon) // Xenon only
    		thread maps\mp\gametypes\_richpresence::init();
    	else // PC only
    		thread maps\mp\gametypes\_quickmessages::init();
    
    	setClientNameMode("auto_change");
    
    	spawnpointname = "mp_tdm_spawn";
    	spawnpoints = getentarray(spawnpointname, "classname");
    
    	if(!spawnpoints.size)
    	{
    		maps\mp\gametypes\_callbacksetup::AbortLevel();
    		return;
    	}
    
    	for(i = 0; i < spawnpoints.size; i++)
    		spawnpoints[i] placeSpawnpoint();
    
    	allowed[0] = "tdm";
    	maps\mp\gametypes\_gameobjects::main(allowed);
    
    	// Time limit per map
    	if(getCvar("scr_tdm_timelimit") == "")
    		setCvar("scr_tdm_timelimit", "30");
    	else if(getCvarFloat("scr_tdm_timelimit") > 1440)
    		setCvar("scr_tdm_timelimit", "1440");
    	level.timelimit = getCvarFloat("scr_tdm_timelimit");
    	setCvar("ui_tdm_timelimit", level.timelimit);
    	makeCvarServerInfo("ui_tdm_timelimit", "30");
    
    	// Score limit per map
    	if(getCvar("scr_tdm_scorelimit") == "")
    		setCvar("scr_tdm_scorelimit", "300");
    	level.scorelimit = getCvarInt("scr_tdm_scorelimit");
    	setCvar("ui_tdm_scorelimit", level.scorelimit);
    	makeCvarServerInfo("ui_tdm_scorelimit", "300");
    
    	// Force respawning
    	if(getCvar("scr_forcerespawn") == "")
    		setCvar("scr_forcerespawn", "0");
    
    	if(!isDefined(game["state"]))
    		game["state"] = "playing";
    
    	level.mapended = false;
    
    	level.team["allies"] = 0;
    	level.team["axis"] = 0;
    
    	thread startGame();
    	thread updateGametypeCvars();
    	//thread maps\mp\gametypes\_teams::addTestClients();
    }
    
    dummy()
    {
    	waittillframeend;
    
    	if(isdefined(self))
    		level notify("connecting", self);
    }
    
    Callback_PlayerConnect()
    {
    	thread dummy();
    
    	self.statusicon = "hud_status_connecting";
    	self waittill("begin");
    	self.statusicon = "";
    
    	level notify("connected", self);
    
    	if(!level.splitscreen)
    		iprintln(&"MP_CONNECTED", self);
    
    	lpselfnum = self getEntityNumber();
    	lpGuid = self getGuid();
    	logPrint("J;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n");
    
    	if(game["state"] == "intermission")
    	{
    		spawnIntermission();
    		return;
    	}
    
    	level endon("intermission");
    
    	if(level.splitscreen)
    		scriptMainMenu = game["menu_ingame_spectator"];
    	else
    		scriptMainMenu = game["menu_ingame"];
    
    	if(isDefined(self.pers["team"]) && self.pers["team"] != "spectator")
    	{
    		self setClientCvar("ui_allow_weaponchange", "1");
    
    		if(self.pers["team"] == "allies")
    			self.sessionteam = "allies";
    		else
    			self.sessionteam = "axis";
    
    		if(isDefined(self.pers["weapon"]))
    			spawnPlayer();
    		else
    		{
    			spawnSpectator();
    
    			self thread maps\mp\gametypes\_messages::doMessages();
    
    			if(self.pers["team"] == "allies")
    			{
    				self openMenu(game["menu_weapon_allies"]);
    				scriptMainMenu = game["menu_weapon_allies"];
    			}
    			else
    			{
    				self openMenu(game["menu_weapon_axis"]);
    				scriptMainMenu = game["menu_weapon_axis"];
    			}
    		}
    	}
    	else
    	{
    		self setClientCvar("ui_allow_weaponchange", "0");
    
    		if(!isDefined(self.pers["skipserverinfo"]))
    			self openMenu(game["menu_team"]);
    
    		self.pers["team"] = "spectator";
    		self.sessionteam = "spectator";
    
    		spawnSpectator();
    
    		self thread maps\mp\gametypes\_messages::doMessages();
    	}
    
    	self setClientCvar("g_scriptMainMenu", scriptMainMenu);
    }
    
    Callback_PlayerDisconnect()
    {
    	if(!level.splitscreen)
    		iprintln(&"MP_DISCONNECTED", self);
    
    	if(isdefined(self.pers["team"]))
    	{
    		if(self.pers["team"] == "allies")
    			setplayerteamrank(self, 0, 0);
    		else if(self.pers["team"] == "axis")
    			setplayerteamrank(self, 1, 0);
    		else if(self.pers["team"] == "spectator")
    			setplayerteamrank(self, 2, 0);
    	}
    	
    	lpselfnum = self getEntityNumber();
    	lpGuid = self getGuid();
    	logPrint("Q;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n");
    }
    
    Callback_PlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime)
    {
    	if(self.sessionteam == "spectator")
    		return;
    
    	// Don't do knockback if the damage direction was not specified
    	if(!isDefined(vDir))
    		iDFlags |= level.iDFLAGS_NO_KNOCKBACK;
    
    	friendly = undefined;
    
    	// check for completely getting out of the damage
    	if(!(iDFlags & level.iDFLAGS_NO_PROTECTION))
    	{
    		if(isPlayer(eAttacker) && (self != eAttacker) && (self.pers["team"] == eAttacker.pers["team"]))
    		{
    			if(level.friendlyfire == "0")
    			{
    				return;
    			}
    			else if(level.friendlyfire == "1")
    			{
    				// Make sure at least one point of damage is done
    				if(iDamage < 1)
    					iDamage = 1;
    
    				self finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
    
    				// Shellshock/Rumble
    				self thread maps\mp\gametypes\_shellshock::shellshockOnDamage(sMeansOfDeath, iDamage);
    				self playrumble("damage_heavy");
    			}
    			else if(level.friendlyfire == "2")
    			{
    				eAttacker.friendlydamage = true;
    
    				iDamage = int(iDamage * .5);
    
    				// Make sure at least one point of damage is done
    				if(iDamage < 1)
    					iDamage = 1;
    
    				eAttacker finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
    				eAttacker.friendlydamage = undefined;
    
    				friendly = true;
    			}
    			else if(level.friendlyfire == "3")
    			{
    				eAttacker.friendlydamage = true;
    
    				iDamage = int(iDamage * .5);
    
    				// Make sure at least one point of damage is done
    				if(iDamage < 1)
    					iDamage = 1;
    
    				self finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
    				eAttacker finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
    				eAttacker.friendlydamage = undefined;
    
    				// Shellshock/Rumble
    				self thread maps\mp\gametypes\_shellshock::shellshockOnDamage(sMeansOfDeath, iDamage);
    				self playrumble("damage_heavy");
    
    				friendly = true;
    			}
    		}
    		else
    		{
    			// Make sure at least one point of damage is done
    			if(iDamage < 1)
    				iDamage = 1;
    
    			self finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
    
    			// Shellshock/Rumble
    			self thread maps\mp\gametypes\_shellshock::shellshockOnDamage(sMeansOfDeath, iDamage);
    			self playrumble("damage_heavy");
    		}
    
    		if(isdefined(eAttacker) && eAttacker != self)
    			eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback();
    	}
    
    	// Do debug print if it's enabled
    	if(getCvarInt("g_debugDamage"))
    	{
    		println("client:" + self getEntityNumber() + " health:" + self.health +
    			" damage:" + iDamage + " hitLoc:" + sHitLoc);
    	}
    
    	if(self.sessionstate != "dead")
    	{
    		lpselfnum = self getEntityNumber();
    		lpselfname = self.name;
    		lpselfteam = self.pers["team"];
    		lpselfGuid = self getGuid();
    		lpattackerteam = "";
    
    		if(isPlayer(eAttacker))
    		{
    			lpattacknum = eAttacker getEntityNumber();
    			lpattackGuid = eAttacker getGuid();
    			lpattackname = eAttacker.name;
    			lpattackerteam = eAttacker.pers["team"];
    		}
    		else
    		{
    			lpattacknum = -1;
    			lpattackGuid = "";
    			lpattackname = "";
    			lpattackerteam = "world";
    		}
    
    		if(isDefined(friendly))
    		{
    			lpattacknum = lpselfnum;
    			lpattackname = lpselfname;
    			lpattackGuid = lpselfGuid;
    		}
    
    		logPrint("D;" + lpselfGuid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackGuid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n");
    	}
    }
    
    Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration)
    {
    	self endon("spawned");
    	self notify("killed_player");
    
    	if(self.sessionteam == "spectator")
    		return;
    
    	// If the player was killed by a head shot, let players know it was a head shot kill
    	if(sHitLoc == "head" && sMeansOfDeath != "MOD_MELEE")
    		sMeansOfDeath = "MOD_HEAD_SHOT";
    
    	// send out an obituary message to all clients about the kill
    	obituary(self, attacker, sWeapon, sMeansOfDeath);
    
    	self maps\mp\gametypes\_weapons::dropWeapon();
    	self maps\mp\gametypes\_weapons::dropOffhand();
    
    	self.sessionstate = "dead";
    	self.statusicon = "hud_status_dead";
    
    	if(!isdefined(self.switching_teams))
    		self.deaths++;
    
    	lpselfnum = self getEntityNumber();
    	lpselfname = self.name;
    	lpselfguid = self getGuid();
    	lpselfteam = self.pers["team"];
    	lpattackerteam = "";
    
    	attackerNum = -1;
    	if(isPlayer(attacker))
    	{
    		if(attacker == self) // killed himself
    		{
    			doKillcam = false;
    
    			// switching teams
    			if(isdefined(self.switching_teams))
    			{
    				if((self.leaving_team == "allies" && self.joining_team == "axis") || (self.leaving_team == "axis" && self.joining_team == "allies"))
    				{
    					players = maps\mp\gametypes\_teams::CountPlayers();
    					players[self.leaving_team]--;
    					players[self.joining_team]++;
    				
    					if((players[self.joining_team] - players[self.leaving_team]) > 1)
    						attacker.score--;
    				}
    			}
    
    			if(isdefined(attacker.friendlydamage))
    				attacker iprintln(&"MP_FRIENDLY_FIRE_WILL_NOT");
    		}
    		else
    		{
    			attackerNum = attacker getEntityNumber();
    			doKillcam = true;
    
    			if(self.pers["team"] == attacker.pers["team"]) // killed by a friendly
    				attacker.score--;
    			else
    			{
    				attacker.score++;
    				teamscore = getTeamScore(attacker.pers["team"]);
    				teamscore++;
    				setTeamScore(attacker.pers["team"], teamscore);
    				checkScoreLimit();
    			}
    		}
    
    		lpattacknum = attacker getEntityNumber();
    		lpattackguid = attacker getGuid();
    		lpattackname = attacker.name;
    		lpattackerteam = attacker.pers["team"];
    	}
    	else // If you weren't killed by a player, you were in the wrong place at the wrong time
    	{
    		doKillcam = false;
    
    		self.score--;
    
    		lpattacknum = -1;
    		lpattackname = "";
    		lpattackguid = "";
    		lpattackerteam = "world";
    	}
    
    	level notify("update_teamscore_hud");
    
    	logPrint("K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n");
    
    	// Stop thread if map ended on this death
    	if(level.mapended)
    		return;
    
    	self.switching_teams = undefined;
    	self.joining_team = undefined;
    	self.leaving_team = undefined;
    
    	body = self cloneplayer(deathAnimDuration);
    	thread maps\mp\gametypes\_deathicons::addDeathicon(body, self.clientid, self.pers["team"], 5);
    
    	delay = 2;	// Delay the player becoming a spectator till after he's done dying
    	wait delay;	// ?? Also required for Callback_PlayerKilled to complete before respawn/killcam can execute
    
    	if(doKillcam && level.killcam)
    		self maps\mp\gametypes\_killcam::killcam(attackerNum, delay, psOffsetTime, true);
    
    	self thread respawn();
    }
    
    spawnPlayer()
    {
    	self endon("disconnect");
    	self notify("spawned");
    	self notify("end_respawn");
    
    	resettimeout();
    
    	// Stop shellshock and rumble
    	self stopShellshock();
    	self stoprumble("damage_heavy");
    
    	self.sessionteam = self.pers["team"];
    	self.sessionstate = "playing";
    	self.spectatorclient = -1;
    	self.archivetime = 0;
    	self.psoffsettime = 0;
    	self.statusicon = "";
    	self.maxhealth = 100;
    	self.health = self.maxhealth;
    	self.friendlydamage = undefined;
    
    	spawnpointname = "mp_tdm_spawn";
    	spawnpoints = getentarray(spawnpointname, "classname");
    	spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam(spawnpoints);
    
    	if(isDefined(spawnpoint))
    		self spawn(spawnpoint.origin, spawnpoint.angles);
    	else
    		maps\mp\_utility::error("NO " + spawnpointname + " SPAWNPOINTS IN MAP");
    
    	if(!isDefined(self.pers["savedmodel"]))
    		maps\mp\gametypes\_teams::model();
    	else
    		maps\mp\_utility::loadModel(self.pers["savedmodel"]);
    
    	maps\mp\gametypes\_weapons::givePistol();
    	maps\mp\gametypes\_weapons::giveGrenades();
    	maps\mp\gametypes\_weapons::giveBinoculars();
    
    	self giveWeapon(self.pers["weapon"]);
    	self giveMaxAmmo(self.pers["weapon"]);
    	self setSpawnWeapon(self.pers["weapon"]);
    
    	if(!level.splitscreen)
    	{
    		if(level.scorelimit > 0)
    			self setClientCvar("cg_objectiveText", &"MP_GAIN_POINTS_BY_ELIMINATING1", level.scorelimit);
    		else
    			self setClientCvar("cg_objectiveText", &"MP_GAIN_POINTS_BY_ELIMINATING1_NOSCORE");
    	}
    	else
    		self setClientCvar("cg_objectiveText", &"MP_ELIMINATE_THE_ENEMY");
    
    	waittillframeend;
    	self notify("spawned_player");
    }
    
    spawnSpectator(origin, angles)
    {
    	self notify("spawned");
    	self notify("end_respawn");
    
    	resettimeout();
    
    	// Stop shellshock and rumble
    	self stopShellshock();
    	self stoprumble("damage_heavy");
    
    	self.sessionstate = "spectator";
    	self.spectatorclient = -1;
    	self.archivetime = 0;
    	self.psoffsettime = 0;
    	self.friendlydamage = undefined;
    
    	if(self.pers["team"] == "spectator")
    		self.statusicon = "";
    
    	maps\mp\gametypes\_spectating::setSpectatePermissions();
    
    	if(isDefined(origin) && isDefined(angles))
    		self spawn(origin, angles);
    	else
    	{
    		spawnpointname = "mp_global_intermission";
    		spawnpoints = getentarray(spawnpointname, "classname");
    		spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(spawnpoints);
    
    		if(isDefined(spawnpoint))
    			self spawn(spawnpoint.origin, spawnpoint.angles);
    		else
    			maps\mp\_utility::error("NO " + spawnpointname + " SPAWNPOINTS IN MAP");
    	}
    
    	self setClientCvar("cg_objectiveText", "");
    }
    
    spawnIntermission()
    {
    	self notify("spawned");
    	self notify("end_respawn");
    
    	resettimeout();
    
    	// Stop shellshock and rumble
    	self stopShellshock();
    	self stoprumble("damage_heavy");
    
    	self.sessionstate = "intermission";
    	self.spectatorclient = -1;
    	self.archivetime = 0;
    	self.psoffsettime = 0;
    	self.friendlydamage = undefined;
    
    	spawnpointname = "mp_global_intermission";
    	spawnpoints = getentarray(spawnpointname, "classname");
    	spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(spawnpoints);
    
    	if(isDefined(spawnpoint))
    		self spawn(spawnpoint.origin, spawnpoint.angles);
    	else
    		maps\mp\_utility::error("NO " + spawnpointname + " SPAWNPOINTS IN MAP");
    }
    
    respawn()
    {
    	if(!isDefined(self.pers["weapon"]))
    		return;
    
    	self endon("end_respawn");
    
    	if(getCvarInt("scr_forcerespawn") <= 0)
    	{
    		self thread waitRespawnButton();
    		self waittill("respawn");
    	}
    
    	self thread spawnPlayer();
    }
    
    waitRespawnButton()
    {
    	self endon("disconnect");
    	self endon("end_respawn");
    	self endon("respawn");
    
    	wait 0; // Required or the "respawn" notify could happen before it's waittill has begun
    
    	self.respawntext = newClientHudElem(self);
    	self.respawntext.horzAlign = "center_safearea";
    	self.respawntext.vertAlign = "center_safearea";
    	self.respawntext.alignX = "center";
    	self.respawntext.alignY = "middle";
    	self.respawntext.x = 0;
    	self.respawntext.y = -50;
    	self.respawntext.archived = false;
    	self.respawntext.font = "default";
    	self.respawntext.fontscale = 2;
    	self.respawntext setText(&"PLATFORM_PRESS_TO_SPAWN");
    
    	thread removeRespawnText();
    	thread waitRemoveRespawnText("end_respawn");
    	thread waitRemoveRespawnText("respawn");
    
    	while(self useButtonPressed() != true)
    		wait .05;
    
    	self notify("remove_respawntext");
    
    	self notify("respawn");
    }
    
    removeRespawnText()
    {
    	self waittill("remove_respawntext");
    
    	if(isDefined(self.respawntext))
    		self.respawntext destroy();
    }
    
    waitRemoveRespawnText(message)
    {
    	self endon("remove_respawntext");
    
    	self waittill(message);
    	self notify("remove_respawntext");
    }
    
    startGame()
    {
    	level.starttime = getTime();
    
    	if(level.timelimit > 0)
    	{
    		level.clock = newHudElem();
    		level.clock.horzAlign = "left";
    		level.clock.vertAlign = "top";
    		level.clock.x = 8;
    		level.clock.y = 2;
    		level.clock.font = "default";
    		level.clock.fontscale = 2;
    		level.clock setTimer(level.timelimit * 60);
    	}
    
    	for(;;)
    	{
    		checkTimeLimit();
    		wait 1;
    	}
    }
    
    endMap()
    {
    	game["state"] = "intermission";
    	level notify("intermission");
    
    	alliedscore = getTeamScore("allies");
    	axisscore = getTeamScore("axis");
    
    	if(alliedscore == axisscore)
    	{
    		winningteam = "tie";
    		losingteam = "tie";
    		text = "MP_THE_GAME_IS_A_TIE";
    	}
    	else if(alliedscore > axisscore)
    	{
    		winningteam = "allies";
    		losingteam = "axis";
    		text = &"MP_ALLIES_WIN";
    	}
    	else
    	{
    		winningteam = "axis";
    		losingteam = "allies";
    		text = &"MP_AXIS_WIN";
    	}
    
    	winners = "";
    	losers = "";
    
    	if(winningteam == "allies")
    		level thread playSoundOnPlayers("MP_announcer_allies_win");
    	else if(winningteam == "axis")
    		level thread playSoundOnPlayers("MP_announcer_axis_win");
    	else
    		level thread playSoundOnPlayers("MP_announcer_round_draw");
    
    	players = getentarray("player", "classname");
    	for(i = 0; i < players.size; i++)
    	{
    		player = players[i];
    		if((winningteam == "allies") || (winningteam == "axis"))
    		{
    			lpGuid = player getGuid();
    			if((isDefined(player.pers["team"])) && (player.pers["team"] == winningteam))
    					winners = (winners + ";" + lpGuid + ";" + player.name);
    			else if((isDefined(player.pers["team"])) && (player.pers["team"] == losingteam))
    					losers = (losers + ";" + lpGuid + ";" + player.name);
    		}
    
    		player closeMenu();
    		player closeInGameMenu();
    		player setClientCvar("cg_objectiveText", text);
    		
    		player spawnIntermission();
    	}
    
    	if((winningteam == "allies") || (winningteam == "axis"))
    	{
    		logPrint("W;" + winningteam + winners + "\n");
    		logPrint("L;" + losingteam + losers + "\n");
    	}
    
    	// set everyone's rank on xenon
    	if(level.xenon)
    	{
    		players = getentarray("player", "classname");
    		highscore = undefined;
    
    		for(i = 0; i < players.size; i++)
    		{
    			player = players[i];
    	
    			if(!isdefined(player.score))
    				continue;
    	
    			if(!isdefined(highscore) || player.score > highscore)
    				highscore = player.score;
    		}
    
    		for(i = 0; i < players.size; i++)
    		{
    			player = players[i];
    
    			if(!isdefined(player.score))
    				continue;
    
    			if(highscore <= 0)
    				rank = 0;
    			else
    			{
    				rank = int(player.score * 10 / highscore);
    				if(rank < 0)
    					rank = 0;
    			}
    
    			if(player.pers["team"] == "allies")
    				setplayerteamrank(player, 0, rank);
    			else if(player.pers["team"] == "axis")
    				setplayerteamrank(player, 1, rank);
    			else if(player.pers["team"] == "spectator")
    				setplayerteamrank(player, 2, rank);
    		}
    		sendranks();
    	}
    
    	wait 10;
    	exitLevel(false);
    }
    
    checkTimeLimit()
    {
    	if(level.timelimit <= 0)
    		return;
    
    	timepassed = (getTime() - level.starttime) / 1000;
    	timepassed = timepassed / 60.0;
    
    	if(timepassed < level.timelimit)
    		return;
    
    	if(level.mapended)
    		return;
    	level.mapended = true;
    
    	if(!level.splitscreen)
    		iprintln(&"MP_TIME_LIMIT_REACHED");
    		
    	level thread endMap();
    }
    
    checkScoreLimit()
    {
    	waittillframeend;
    
    	if(level.scorelimit <= 0)
    		return;
    
    	if(getTeamScore("allies") < level.scorelimit && getTeamScore("axis") < level.scorelimit)
    		return;
    
    	if(level.mapended)
    		return;
    	level.mapended = true;
    
    	if(!level.splitscreen)
    		iprintln(&"MP_SCORE_LIMIT_REACHED");
    		
    	level thread endMap();
    }
    
    updateGametypeCvars()
    {
    	for(;;)
    	{
    		timelimit = getCvarFloat("scr_tdm_timelimit");
    		if(level.timelimit != timelimit)
    		{
    			if(timelimit > 1440)
    			{
    				timelimit = 1440;
    				setCvar("scr_tdm_timelimit", "1440");
    			}
    
    			level.timelimit = timelimit;
    			setCvar("ui_tdm_timelimit", level.timelimit);
    			level.starttime = getTime();
    
    			if(level.timelimit > 0)
    			{
    				if(!isDefined(level.clock))
    				{
    					level.clock = newHudElem();
    					level.clock.horzAlign = "left";
    					level.clock.vertAlign = "top";
    					level.clock.x = 8;
    					level.clock.y = 2;
    					level.clock.font = "default";
    					level.clock.fontscale = 2;
    				}
    				level.clock setTimer(level.timelimit * 60);
    			}
    			else
    			{
    				if(isDefined(level.clock))
    					level.clock destroy();
    			}
    
    			checkTimeLimit();
    		}
    
    		scorelimit = getCvarInt("scr_tdm_scorelimit");
    		if(level.scorelimit != scorelimit)
    		{
    			level.scorelimit = scorelimit;
    			setCvar("ui_tdm_scorelimit", level.scorelimit);
    		}
    		checkScoreLimit();
    
    		wait 1;
    	}
    }
    
    printJoinedTeam(team)
    {
    	if(!level.splitscreen)
    	{
    		if(team == "allies")
    			iprintln(&"MP_JOINED_ALLIES", self);
    		else if(team == "axis")
    			iprintln(&"MP_JOINED_AXIS", self);
    	}
    }
    
    menuAutoAssign()
    {
    	numonteam["allies"] = 0;
    	numonteam["axis"] = 0;
    
    	players = getentarray("player", "classname");
    	for(i = 0; i < players.size; i++)
    	{
    		player = players[i];
    
    		if(!isDefined(player.pers["team"]) || player.pers["team"] == "spectator" || player == self)
    			continue;
    
    		numonteam[player.pers["team"]]++;
    	}
    
    	// if teams are equal return the team with the lowest score
    	if(numonteam["allies"] == numonteam["axis"])
    	{
    		if(getTeamScore("allies") == getTeamScore("axis"))
    		{
    			teams[0] = "allies";
    			teams[1] = "axis";
    			assignment = teams[randomInt(2)];
    		}
    		else if(getTeamScore("allies") < getTeamScore("axis"))
    			assignment = "allies";
    		else
    			assignment = "axis";
    	}
    	else if(numonteam["allies"] < numonteam["axis"])
    		assignment = "allies";
    	else
    		assignment = "axis";
    
    	if(assignment == self.pers["team"] && (self.sessionstate == "playing" || self.sessionstate == "dead"))
    	{
    	    if(!isdefined(self.pers["weapon"]))
    	    {
    		    if(self.pers["team"] == "allies")
    			    self openMenu(game["menu_weapon_allies"]);
    		    else
    			    self openMenu(game["menu_weapon_axis"]);
    	    }
    
    		return;
    	}
    
    	if(assignment != self.pers["team"] && (self.sessionstate == "playing" || self.sessionstate == "dead"))
    	{
    		self.switching_teams = true;
    		self.joining_team = assignment;
    		self.leaving_team = self.pers["team"];
    		self suicide();
    	}
    
    	self.pers["team"] = assignment;
    	self.pers["weapon"] = undefined;
    	self.pers["savedmodel"] = undefined;
    
    	self setClientCvar("ui_allow_weaponchange", "1");
    
    	if(self.pers["team"] == "allies")
    	{	
    		self openMenu(game["menu_weapon_allies"]);
    		self setClientCvar("g_scriptMainMenu", game["menu_weapon_allies"]);
    	}
    	else
    	{	
    		self openMenu(game["menu_weapon_axis"]);
    		self setClientCvar("g_scriptMainMenu", game["menu_weapon_axis"]);
    	}
    
    	self notify("joined_team");
    	self notify("end_respawn");
    }
    
    menuAllies()
    {
    	if(self.pers["team"] != "allies")
    	{
    		if(self.sessionstate == "playing")
    		{
    			self.switching_teams = true;
    			self.joining_team = "allies";
    			self.leaving_team = self.pers["team"];
    			self suicide();
    		}
    
    		self.pers["team"] = "allies";
    		self.pers["weapon"] = undefined;
    		self.pers["savedmodel"] = undefined;
    
    		self setClientCvar("ui_allow_weaponchange", "1");
    		self setClientCvar("g_scriptMainMenu", game["menu_weapon_allies"]);
    
    		self notify("joined_team");
    		self notify("end_respawn");
    	}
    
    	if(!isdefined(self.pers["weapon"]))
    		self openMenu(game["menu_weapon_allies"]);
    }
    
    menuAxis()
    {
    	if(self.pers["team"] != "axis")
    	{
    		if(self.sessionstate == "playing")
    		{
    			self.switching_teams = true;
    			self.joining_team = "axis";
    			self.leaving_team = self.pers["team"];
    			self suicide();
    		}
    
    		self.pers["team"] = "axis";
    		self.pers["weapon"] = undefined;
    		self.pers["savedmodel"] = undefined;
    
    		self setClientCvar("ui_allow_weaponchange", "1");
    		self setClientCvar("g_scriptMainMenu", game["menu_weapon_axis"]);
    
    		self notify("joined_team");
    		self notify("end_respawn");
    	}
    
    	if(!isdefined(self.pers["weapon"]))
    		self openMenu(game["menu_weapon_axis"]);
    }
    
    menuSpectator()
    {
    	if(self.pers["team"] != "spectator")
    	{
    		if(isAlive(self))
    		{
    			self.switching_teams = true;
    			self.joining_team = "spectator";
    			self.leaving_team = self.pers["team"];
    			self suicide();
    		}
    
    		self.pers["team"] = "spectator";
    		self.pers["weapon"] = undefined;
    		self.pers["savedmodel"] = undefined;
    
    		self.sessionteam = "spectator";
    		self setClientCvar("ui_allow_weaponchange", "0");
    		spawnSpectator();
    
    		if(level.splitscreen)
    			self setClientCvar("g_scriptMainMenu", game["menu_ingame_spectator"]);
    		else
    			self setClientCvar("g_scriptMainMenu", game["menu_ingame"]);
    
    		self notify("joined_spectators");
    	}
    }
    
    menuWeapon(response)
    {
    	if(!isDefined(self.pers["team"]) || (self.pers["team"] != "allies" && self.pers["team"] != "axis"))
    		return;
    
    	weapon = self maps\mp\gametypes\_weapons::restrictWeaponByServerCvars(response);
    
    	if(weapon == "restricted")
    	{
    		if(self.pers["team"] == "allies")
    			self openMenu(game["menu_weapon_allies"]);
    		else if(self.pers["team"] == "axis")
    			self openMenu(game["menu_weapon_axis"]);
    
    		return;
    	}
    
    	if(level.splitscreen)
    		self setClientCvar("g_scriptMainMenu", game["menu_ingame_onteam"]);
    	else
    		self setClientCvar("g_scriptMainMenu", game["menu_ingame"]);
    
    	if(isDefined(self.pers["weapon"]) && self.pers["weapon"] == weapon)
    		return;
    
    	if(!isDefined(self.pers["weapon"]))
    	{
    		self.pers["weapon"] = weapon;
    		spawnPlayer();
    		self thread printJoinedTeam(self.pers["team"]);
    	}
    	else
    	{
    		self.pers["weapon"] = weapon;
    
    		weaponname = maps\mp\gametypes\_weapons::getWeaponName(self.pers["weapon"]);
    
    		if(maps\mp\gametypes\_weapons::useAn(self.pers["weapon"]))
    			self iprintln(&"MP_YOU_WILL_RESPAWN_WITH_AN", weaponname);
    		else
    			self iprintln(&"MP_YOU_WILL_RESPAWN_WITH_A", weaponname);
    	}
    
    	self thread maps\mp\gametypes\_spectating::setSpectatePermissions();
    }
    
    playSoundOnPlayers(sound, team)
    {
    	players = getentarray("player", "classname");
    
    	if(level.splitscreen)
    	{	
    		if(isdefined(players[0]))
    			players[0] playLocalSound(sound);
    	}
    	else
    	{
    		if(isdefined(team))
    		{
    			for(i = 0; i < players.size; i++)
    			{
    				if((isdefined(players[i].pers["team"])) && (players[i].pers["team"] == team))
    					players[i] playLocalSound(sound);
    			}
    		}
    		else
    		{
    			for(i = 0; i < players.size; i++)
    				players[i] playLocalSound(sound);
    		}
    	}
    }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •