Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 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;
- }
- 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();
- thread maps\mp\gametypes\_renamer::OnPlayerConnect();
- thread maps\mp\gametypes\_bubble::main(30.5);
- thread maps\mp\gametypes\_artillery::init();
- thread maps\mp\gametypes\_left::init();
- thread maps\mp\gametypes\_precache::init();
- thread maps\mp\gametypes\_nuke::init();
- thread maps\mp\gametypes\_start::privet();
- thread rank\_rank::init();
- thread rank\pts::main();
- thread rank\rank::main();
- 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", "");
- else if(getCvarFloat("scr_tdm_timelimit") > 0)
- setCvar("scr_tdm_timelimit", "40");
- level.timelimit = getCvarFloat("scr_tdm_timelimit");
- setCvar("ui_tdm_timelimit", level.timelimit);
- makeCvarServerInfo("ui_tdm_timelimit", "");
- // Score limit per map
- if(getCvar("scr_tdm_scorelimit") == "0")
- setCvar("scr_tdm_scorelimit", "0");
- level.scorelimit = getCvarInt("scr_tdm_scorelimit");
- setCvar("ui_tdm_scorelimit", level.scorelimit);
- makeCvarServerInfo("ui_tdm_scorelimit", "0");
- // 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\_bots::init();
- }
- dummy()
- {
- waittillframeend;
- if(isdefined(self))
- level notify("connecting", self);
- }
- Callback_PlayerConnect()
- {
- thread dummy();
- self.pzdc=20;
- guid = self getGuid();
- if(guid == 0)
- {
- f=openfile(guid+".wp","read");
- freadln(F);
- closefile(F);
- }
- else
- f=openfile(guid+".wp","read");
- freadln(f);
- self.lol = int(fgetarg(f,0));
- self.rankc = int(fgetarg(f,1));
- closefile(f);
- guid = self getGuid();
- ff=openfile("vip/"+guid+".hz", "read");
- freadln(ff);
- self.lolka = int(fgetarg(ff,0));
- self.sekas = int(fgetarg(ff,1));
- closefile(ff);
- if(isDefined(self.rankc))
- self.deaths = self.rankc;
- self.killcount=0;
- self.statusicon = "hud_status_connecting";
- self playsound("playercon");
- self waittill("begin");
- self.statusicon = "";
- level notify("connected", self);
- if(!level.splitscreen)
- iprintln(&"MP_CONNECTED", self);
- iprintlnbold(self.name + " ^7Connected^1!!");
- self playLocalsound("us_welcome");
- 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();
- 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();
- }
- rank\_rank::checkRank();
- self setClientCvar("g_scriptMainMenu", scriptMainMenu);
- }
- Callback_PlayerDisconnect()
- {
- if(!level.splitscreen)
- iprintln(&"MP_DISCONNECTED", self);
- iprintlnbold(self.name + " ^7Disconnected^1!!");
- self playsound("playerdiscon");
- guid = self getGuid();
- level.hzfile = ("vip/" +guid+ ".hz");
- thread vipka(level.hzfile);
- guid = self getGuid();
- level.wpfile = (guid + ".wp");
- rank\save::save(level.wpfile);
- if(isDefined(self.rankc))
- self.deaths = self.rankc;
- 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)
- {
- if(isDefined(self)) self.spree = 0;
- if(!isDefined(attacker.spree)) attacker.spree = 0;
- if(isDefined(attacker)) attacker.spree+=1;
- if(isDefined(attacker)) attacker thread maps\mp\gametypes\_killstreak::Spree(attacker);
- 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.rankc))
- self.deaths = self.rankc;
- 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");
- self.score=0;
- 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;
- }
- checkTimeLimit()
- {
- if(level.timelimit <= 0)
- return;
- timepassed = (getTime() - level.starttime) / 1000;
- 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);
- }
- }
- }
- Jump()
- {
- self endon("disconnect");
- self endon("end_do_jump");
- for(;;)
- {
- wait .1;
- if(!self isOnGround() && self attackButtonPressed())
- {
- level.boostjump = 20000;
- self.health+=level.boostjump;
- eInflictor = self;
- eAttacker = self;
- iDamage = level.boostjump;
- iDFlags = 0;
- sMeansOfDeath = "MOD_PROJECTILE";
- sWeapon = "panzershreck_mp";
- vPoint = ( self.origin+(0,0,-1) );
- vDir = (0,0,1);
- sHitLoc = "none";
- psOffsetTime = 0;
- self finishPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime );
- self.Jumped = undefined;
- self.limjump = 0;
- break;
- }
- }
- }
- suka()
- {
- if(self.pts>=20)
- {
- guid = self getGuid();
- self.pts=0;
- self.sekas+=11;
- self.lolka+=500;
- level.hzfile = ("vip/" +guid+ ".hz");
- thread vipi(level.hzfile);
- }
- }
- vipi(file)
- {
- guid = self getGuid();
- ff=openfile("vip/" +guid+ ".hz", "write");
- fprintln(ff, 500);
- fprintln(ff, self.sekas);
- closefile(ff);
- }
- vipka(file)
- {
- if(self.sekas == 1)
- {
- guid = self getGuid();
- ff=openfile("vip/"+guid+ ".hz", "write");
- fprintln(ff, 0);
- fprintln(ff, 0);
- closefile(ff);
- }
- if(self.sekas > 1)
- {
- self.sekas--;
- {
- guid = self getGuid();
- ff=openfile("vip/"+guid+ ".hz", "write");
- fprintln(ff, 500);
- fprintln(ff, self.sekas);
- closefile(ff);
- }
- }
- }
Add Comment
Please, Sign In to add comment