I ran into some problems. They are as follows:
1. I can't figure out how to force players into spectate mode when they login. So, people that have been eliminated just reconnect and can have infinite lives that way.
2. When a player is AFK or a player is a spectator, the match will not end.
3. Its also very buggy.
Here is the code for the mod:
[spoiler="Code"]
- Code: Select all
//=============================================================================
// team elimination
//=============================================================================
class mtlTeamElim expands MTLTeam;
var int TeamScore[2];
var localized String EnemiesString, AlliesString, VictoryConString1, VictoryConString2, TimeLimitString1, TimeLimitString2;
var localized String TeamScoreString;
var ScoreElement teamSE[32];
var localized String StrKilled, StrSpree, StrRampage, StrDominating, StrUnstoppable, StrGodlike, StrEndSpree;
var int Lives;
var localized String LivesString;
var class<playerpawn> UnatcoClass;
var class<playerpawn> NsfClass;
var name UnatcoClassName;
var name NsfClassName;
var int NumUNATCO;
var int NumNSF;
var int TotalKills;
event InitGame( string Options, out string Error )
{
local Weapon Other;
local string InOpt;
Super.InitGame(Options, Error);
if ( ScoreToWin == 0 )
Lives = 10;
else
Lives = ScoreToWin;
VictoryCondition = "Frags";
foreach AllActors(class'Weapon', Other)
{
if ( Other.IsA('DeusExWeapon') )
{
Other.Destroy();
}
}
}
event PlayerPawn Login(string Portal, string Options, out string Error, class<playerpawn> SpawnClass)
{
local DeusExPlayer player;
local NavigationPoint StartSpot;
local byte InTeam;
local DumpLocation dump;
local int TeamOption;
TeamOption = TEAM_UNATCO;
if (HasOption(Options,"Team"))
{
TeamOption = int(ParseOption(Options,"Team"));
}
// if more than 15% of the game is over, must join as spectator.
if ( TotalKills > 0.15 * (NumPlayers) * Lives )
SpawnClass = class'Spectator'; //Does this do anything? NO! Darn you!
if ( (NumSpectators >= MaxSpectators) && ((Level.NetMode != NM_ListenServer) || (NumPlayers > 0)) )
{
MaxSpectators++;
}
if (TeamOption == TEAM_AUTO)
{
TeamOption = GetAutoTeam();
}
if (TeamOption == TEAM_UNATCO)
{
SpawnClass = UnatcoClass;
//ClientMessage("A Terorrist Has Joined - $player$ - ");
}
else if (TeamOption == TEAM_NSF)
{
SpawnClass = NsfClass;
//ClientMessage("A SEAL Has Joined - $player$ - ");
}
ChangeOption(Options, "Team", string(TeamOption));
// Can't call Super.Login here since that forces a particular class, so
// we cut and paste the code (horribly breaks compatibility, but we
// really have no choice)
///////////////////////////////////////////////////////////////////////////
// Login from DeusExMPGame
player = DeusExPlayer(Super(GameInfo).Login(Portal, Options, Error, SpawnClass));
// If we're traveling across a map on the same mission,
// nuke the player's crap and
if ((player != None) && (!HasOption(Options, "Loadgame")))
{
player.ResetPlayerToDefaults();
dump = player.CreateDumpLocationObject();
if ((dump != None) && (dump.HasLocationBeenSaved()))
{
dump.LoadLocation();
player.Pause();
player.SetLocation(dump.currentDumpLocation.Location);
player.SetRotation(dump.currentDumpLocation.ViewRotation);
player.ViewRotation = dump.currentDumpLocation.ViewRotation;
player.ClientSetRotation(dump.currentDumpLocation.ViewRotation);
CriticalDelete(dump);
}
else
{
// Multiplayer now, defaults to Team_Unatco=0
InTeam = GetIntOption( Options, "Team", 0 );
if (Level.NetMode == NM_Standalone)
StartSpot = FindPlayerStart( None, InTeam, Portal );
else
StartSpot = FindPlayerStart( Player, InTeam, Portal );
player.SetLocation(StartSpot.Location);
player.SetRotation(StartSpot.Rotation);
player.ViewRotation = StartSpot.Rotation;
player.ClientSetRotation(player.Rotation);
player.GotoState('PlayerSpectating');
}
}
if((player != None) && !player.IsA('Spectator'))
{
player.PlayerReplicationInfo.Score = Lives;
}
player.bAutoActivate = true;
return player;
}
event PostLogin(playerpawn NewPlayer)
{
local DeusExPlayer DXPlayer;
DXPlayer = DeusExPlayer(NewPlayer);
DXPlayer.ClientMessage("WELCOME TO THE COUNTERSTRIKE MOD");
DXPlayer.ClientMessage("Visit our Website");
DXPlayer.ClientMessage("http://dxmp.freeforums.org");
SetTeam( DXPlayer );
Super.PostLogin(NewPlayer);
}
function CheckEndGame()
{
local Pawn PawnLink;
local int teamUNATCO;
local int teamNSF;
teamUNATCO = 0;
teamNSF = 0;
for ( PawnLink=Level.PawnList; PawnLink!=None; PawnLink=PawnLink.nextPawn )
{
if (!Pawnlink.IsA('Spectator'))
{
if(PawnLink.PlayerReplicationInfo.Team == TEAM_UNATCO)
{
teamUNATCO++;
}
if(PawnLink.PlayerReplicationInfo.Team == TEAM_NSF)
{
teamNSF++;
}
}
}
if (teamUNATCO < 1)
{
GameOver();
}
if (teamNSF <1> 0)
Other.PlayerReplicationInfo.Score -= 1;
TotalKills++;
NotifyDeath = True;
}
if ((Killer.bIsPlayer) && (Other.bIsPlayer))
{
BroadcastDeathMessage(Killer, Other, damageType);
if ( CheckVictoryConditions(Killer, Other, "") )
{
bFreezeScores = True;
NotifyDeath = False;
}
if ( NotifyDeath )
HandleDeathNotification( Killer, Other );
}
else
{
if ( NotifyDeath )
HandleDeathNotification( Killer, Other );
}
}
function BroadcastDeathMessage (Pawn Killer, Pawn Other, Name damageType)
{
/*if ( (damageType == 'PoisonGas') || (damageType == 'Poison') || (damageType == 'PoisonEffect') )
BroadcastMessage(Killer.PlayerReplicationInfo.PlayerName$" killed "$Other.PlayerReplicationInfo.PlayerName$" with deadly Poison", false, 'DeathMessage');
else if ( damageType == 'Flamed' )
BroadcastMessage(Killer.PlayerReplicationInfo.PlayerName$" killed "$Other.PlayerReplicationInfo.PlayerName$" with excessive burning", false, 'DeathMessage');
else if ( (damageType == 'Shot') && (Killer.Weapon != None) )
BroadcastMessage(Killer.PlayerReplicationInfo.PlayerName$" killed "$Other.PlayerReplicationInfo.PlayerName$" with the "$Killer.Weapon.ItemName, false, 'DeathMessage');
else if ( damageType == 'Burned' )
BroadcastMessage(Other.PlayerReplicationInfo.PlayerName$" ate "$Killer.PlayerReplicationInfo.PlayerName$"'s burning plasma death", false, 'DeathMessage');
else if ( damageType == 'Exploded' )
BroadcastMessage(Other.PlayerReplicationInfo.PlayerName$" was smacked down by "$Killer.PlayerReplicationInfo.PlayerName$"'s explosive round", false, 'DeathMessage');
else if ( damageType == 'SniperDeath' )
BroadcastMessage(Killer.PlayerReplicationInfo.PlayerName$" inflicted mortal damage upon "$Other.PlayerReplicationInfo.PlayerName$" with the Enhanced Plasma Rifle", false, 'DeathMessage');
else if ( damageType == 'Sabot' )
BroadcastMessage(Other.PlayerReplicationInfo.PlayerName$" was ripped to shreds by "$Killer.PlayerReplicationInfo.PlayerName$"'s Sabot Cannon", false, 'DeathMessage');
else if ( damageType == 'GrenadeDeath' )
BroadcastMessage(Other.PlayerReplicationInfo.PlayerName$" was smacked down by "$Killer.PlayerReplicationInfo.PlayerName$"'s 20mm Assault Grenade", false, 'DeathMessage');
//else if ( damageType == 'Decapitated' )
//{
// BroadcastMessage(Killer.PlayerReplicationInfo.PlayerName$" put a bullet through "$Other.PlayerReplicationInfo.PlayerName$"'s head", false, 'DeathMessage');
// if ( Killer.IsA('DeusExPlayer') )
// DeusExPlayer(Killer).MultiplayerNotifyMsg( DeusExPlayer(Killer).MPMSG_HeadShot, , HeadShotString );
}
else*/
BroadcastMessage(Killer.PlayerReplicationInfo.PlayerName$StrKilled$Other.PlayerReplicationInfo.PlayerName, false, 'DeathMessage');
}
function HandleDeathNotification( Pawn killer, Pawn killee )
{
local bool killedSelf, valid;
killedSelf = (killer == killee);
if (( killee != None ) && killee.IsA('DeusExPlayer'))
{
valid = DeusExPlayer(killee).killProfile.bValid;
if ( killedSelf )
valid = False;
DeusExPlayer(killee).MultiplayerDeathMsg( killer, killedSelf, valid, DeusExPlayer(killee).killProfile.name, DeusExPlayer(killee).killProfile.methodStr );
}
}
function bool ApproveTeam(int CheckTeam)
{
if (CheckTeam == TEAM_UNATCO)
return true;
if (CheckTeam == TEAM_NSF)
return true;
if (CheckTeam == TEAM_AUTO)
return true;
return false;
}
function int GetAutoTeam()
{
local int NumUNATCO;
local int NumNSF;
local int CurTeam;
local Pawn CurPawn;
NumUNATCO = 0;
NumNSF = 0;
for (CurPawn = Level.Pawnlist; CurPawn != None; CurPawn = CurPawn.NextPawn)
{
if ((CurPawn != None) && (CurPawn.PlayerReplicationInfo != None))
{
CurTeam = CurPawn.PlayerReplicationInfo.Team;
if (CurTeam == TEAM_UNATCO)
{
NumUNATCO++;
}
else if (CurTeam == TEAM_NSF)
{
NumNSF++;
}
}
}
if (NumUNATCO <NumNSF> NumNSF)
return TEAM_NSF;
else
return TEAM_UNATCO;
}
function ChangeOption(out string Options, string OptionKey, string NewValue)
{
local string NewOptions;//new option string
local string CurOption;
local string CurKey;
local string CurValue;
NewOptions = "";
while (GrabOption(Options,CurOption))
{
GetKeyValue(CurOption, CurKey, CurValue);
if (CurKey ~= OptionKey)
CurValue = NewValue;
NewOptions = NewOptions $ "?" $ CurKey $ "=" $ CurValue;
}
Options = NewOptions;
}
simulated function bool ArePlayersAllied(DeusExPlayer FirstPlayer, DeusExPlayer SecondPlayer)
{
if ((FirstPlayer == None) || (SecondPlayer == None))
return false;
return (FirstPlayer.PlayerReplicationInfo.team == SecondPlayer.PlayerReplicationInfo.team);
}
simulated function TeamWinScreen( DeusExPlayer thisPlayer, GC gc, float screenWidth, float screenHeight, int winningTeam,
String killerStr, String killeeStr, String methodStr )
{
local String str;
local float x, y, w, h;
// Show who won the match
if ( thisPlayer.PlayerReplicationInfo.team == winningTeam )
gc.SetTextColor( GreenColor );
else
gc.SetTextColor( RedColor );
gc.SetFont(Font'FontMenuExtraLarge');
switch( winningTeam )
{
case TEAM_NSF:
str = TeamNsfString $ WonMatchString;
break;
case TEAM_UNATCO:
str = TeamUnatcoString $ WonMatchString;
break;
case TEAM_DRAW:
str = TeamDrawString;
break;
}
gc.GetTextExtent( 0, w, h, str );
x = (screenWidth * 0.5) - (w * 0.5);
y = screenHeight * WinY;
gc.DrawText( x, y, w, h, str );
y += h;
// Show who won it and who got killed
if ( VictoryCondition ~= "Frags" )
{
gc.SetFont(Font'FontMenuTitle');
if (( killerStr ~= "" ) || (killeeStr ~= ""))
log( "Warning:Bad kill string in final death message." );
else
{
str = MatchEnd1String $ killerStr $ MatchEnd2String $ killeeStr $ methodStr;
gc.GetTextExtent( 0, w, h, str );
if ( w >= screenWidth )
{
y -= (h * 0.5);
str = MatchEnd1String $ killerStr $ MatchEnd2String $ killeeStr;
gc.GetTextExtent( 0, w, h, str );
x = (screenWidth * 0.5) - (w * 0.5);
gc.DrawText( x, y, w, h, str );
y += h;
str = methodStr;
gc.GetTextExtent( 0, w, h, str );
x = (screenWidth * 0.5) - (w * 0.5);
gc.DrawText( x, y, w, h, str );
}
else
{
x = (screenWidth * 0.5) - (w * 0.5);
gc.DrawText( x, y, w, h, str );
}
}
}
// Show the scoreboard for all to see
ShowTeamDMScoreboard( thisPlayer, gc, screenWidth, screenHeight );
// Press fire to continue message
ContinueMsg( gc, screenWidth, screenHeight );
}
function SetTeam( DeusExPlayer player )
{
if ( player.IsA(UnatcoClassName))
{
player.PlayerReplicationInfo.Team = TEAM_UNATCO;
player.MultiplayerNotifyMsg( player.MPMSG_TeamUnatco );
}
else if ( player.IsA(NsfClassName))
{
player.PlayerReplicationInfo.Team = TEAM_NSF;
player.MultiplayerNotifyMsg( player.MPMSG_TeamNsf );
}
else
log( "Warning: Player:"$player$" has chosen an invalid team!" );
}
simulated function int GetTeamList( DeusExPlayer player, bool Allies )
{
local int i, numTeamList;
if ( player == None )
return( 0 );
numTeamList = 0;
for ( i = 0; i <scorePlayers>= 10 ))
NotifyGameStatus( ScoreToWin/5, TeamUnatcoString, False, False );
if (( TeamScore[TEAM_UNATCO] == ScoreToWin - 1 ) && (ScoreTowin >= 2 ))
NotifyGameStatus( 1, TeamUnatcoString, False, True );
if (( TeamScore[TEAM_NSF] == ScoreToWin-(ScoreToWin/5)) && ( ScoreToWin >= 10 ))
NotifyGameStatus( ScoreToWin/5, TeamNsfString, False, False );
if (( TeamScore[TEAM_NSF] == ScoreToWin-1 ) && (ScoreTowin >= 2 ))
NotifyGameStatus( 1, TeamNsfString, False, True );
if (numnsfplayers==numnsfgone)
{
TeamHasWon( TEAM_UNATCO, Killer, Killee, Method );
return true;
}
if (numunatcoplayers==numunatcogone)
{
TeamHasWon( TEAM_NSF, Killer, Killee, Method );
return true;
}
}
else if ( VictoryCondition ~= "Time" )
{
timeLimit = float(ScoreToWin)*60.0;
if (( Level.Timeseconds >= (timeLimit-NotifyMinutes*60.0) ) && ( timeLimit >= NotifyMinutes*60.0*2.0 ))
{
if ( TeamScore[TEAM_UNATCO] > TeamScore[TEAM_NSF] )
NotifyGameStatus( int(NotifyMinutes), TeamUnatcoString, True, True );
else if ( TeamScore[TEAM_UNATCO] == TeamScore[TEAM_NSF] )
NotifyGameStatus( int(NotifyMinutes), "Tied", True, True );
else
NotifyGameStatus( int(NotifyMinutes), TeamNsfString, True, True );
}
if ( Level.Timeseconds >= timeLimit )
{
if ( TeamScore[TEAM_UNATCO] > TeamScore[TEAM_NSF] )
{
TeamHasWon( TEAM_UNATCO, Killer, Killee, Method );
return true;
}
else if ( TeamScore[TEAM_UNATCO] < TeamScore[TEAM_NSF] )
{
TeamHasWon( TEAM_NSF, Killer, Killee, Method );
return true;
}
else
{
TeamHasWon( TEAM_DRAW, Killer, Killee, Method );
return true;
}
}
}
else
log( "Warning: Unknown victory type:"$VictoryCondition$" " );
return false;
}
simulated function ShowVictoryConditions( GC gc, float screenWidth, float yoffset, DeusExPlayer thisPlayer )
{
local String str, secStr;
local float x, y, w, h;
local int minutesLeft, secondsLeft, timeLeft;
local float ftimeLeft;
if ( VictoryCondition ~= "Frags" )
str = VictoryConString1 $ ScoreToWin $ VictoryConString2;
else if ( VictoryCondition ~= "Time" )
{
timeLeft = ScoreToWin * 60 - Level.Timeseconds - thisPlayer.ServerTimeDiff;
if ( timeLeft < 0 )
timeleft = 0;
minutesLeft = timeLeft/60;
ftimeLeft = float(timeLeft);
secondsLeft = int(ftimeLeft%60);
if ( secondsLeft < 10 )
secStr = "0" $ secondsLeft;
else
secStr = "" $ secondsLeft;
str = TimeLimitString1 $ minutesLeft $ ":" $ secStr $ TimeLimitString2;
}
else
log( "Warning: Unknown victory type:"$VictoryCondition$" " );
gc.GetTextExtent( 0, w, h, str );
x = (screenWidth * 0.5) - (w * 0.5);
gc.DrawText( x, yoffset, w, h, str );
}
simulated function SortTeamScores( int PlayerCount )
{
local ScoreElement tmpSE;
local int i, j, max;
for ( i = 0; i < PlayerCount-1; i++ )
{
max = i;
for ( j = i+1; j <PlayerCount> teamSE[max].Score )
max = j;
else if (( teamSE[j].Score == teamSE[max].Score) && (teamSE[j].Deaths < teamSE[max].Deaths))
max = j;
}
tmpSE = teamSE[max];
teamSE[max] = teamSE[i];
teamSE[i] = tmpSE;
}
}
simulated function LocalGetTeamTotals( int teamSECnt, out float score, out float deaths, out float streak )
{
local int i;
score = 0; deaths = 0; streak = 0;
for ( i = 0; i < teamSECnt; i++ )
{
score += teamSE[i].Score;
deaths += teamSE[i].Deaths;
streak += teamSE[i].Streak;
}
}
simulated function ShowTeamDMScoreboard( DeusExPlayer thisPlayer, GC gc, float screenWidth, float screenHeight )
{
local float yoffset, ystart, xlen, ylen, w, h, w2;
local bool bLocalPlayer;
local int i, allyCnt, enemyCnt, barLen;
local ScoreElement fakeSE;
local String str, teamStr;
if ( !thisPlayer.PlayerIsClient() && (Level.NetMode != NM_Standalone))
return;
// Always use this font
gc.SetFont(Font'FontMenuSmall');
str = "TEST";
gc.GetTextExtent( 0, xlen, ylen, str );
// Refresh out local array
RefreshScoreArray( thisPlayer );
// Just allies
allyCnt = GetTeamList( thisPlayer, True );
SortTeamScores( allyCnt );
ystart = screenHeight * PlayerY;
yoffset = ystart;
// Headers
gc.SetTextColor( WhiteColor );
ShowVictoryConditions( gc, screenWidth, ystart, thisPlayer );
yoffset += (ylen * 2.0);
DrawHeaders( gc, screenWidth, yoffset );
yoffset += (ylen * 1.5);
if ( thisPlayer.PlayerReplicationInfo.team == TEAM_UNATCO )
teamStr = TeamUnatcoString;
else
teamStr = TeamNsfString;
// Allies
gc.SetTextColor( GreenColor );
fakeSE.PlayerName = AlliesString $ " (" $ teamStr $ ")";
LocalGetTeamTotals( allyCnt, fakeSE.score, fakeSE.deaths, fakeSE.streak );
DrawNameAndScore( gc, fakeSE, screenWidth, yoffset );
gc.GetTextExtent( 0, w, h, StreakString );
barLen = (screenWidth * StreakX + w)-(PlayerX*screenWidth);
gc.SetTileColorRGB(0,255,0);
gc.DrawBox( PlayerX * screenWidth, yoffset+h, barLen, 1, 0, 0, 1, Texture'Solid');
yoffset += ( h * 0.25 );
for ( i = 0; i < allyCnt; i++ )
{
bLocalPlayer = (teamSE[i].PlayerID == thisPlayer.PlayerReplicationInfo.PlayerID);
if ( bLocalPlayer )
gc.SetTextColor( GoldColor );
else
gc.SetTextColor( GreenColor );
yoffset += ylen;
DrawNameAndScore( gc, teamSE[i], screenWidth, yoffset );
}
yoffset += (ylen*2);
if ( thisPlayer.PlayerReplicationInfo.Team == TEAM_UNATCO )
teamStr = TeamNsfString;
else
teamStr = TeamUnatcoString;
// Enemies
enemyCnt = GetTeamList( thisPlayer, False );
SortTeamScores( enemyCnt );
gc.SetTextColor( RedColor );
gc.GetTextExtent( 0, w, h, EnemiesString );
gc.DrawText( PlayerX * screenWidth, yoffset, w, h, EnemiesString );
fakeSE.PlayerName = EnemiesString $ " (" $ teamStr $ ")";
LocalGetTeamTotals( enemyCnt, fakeSE.score, fakeSE.deaths, fakeSE.streak );
DrawNameAndScore( gc, fakeSE, screenWidth, yoffset );
gc.SetTileColorRGB(255,0,0);
gc.DrawBox( PlayerX * screenWidth, yoffset+h, barLen, 1, 0, 0, 1, Texture'Solid');
yoffset += ( h * 0.25 );
for ( i = 0; i < enemyCnt; i++ )
{
yoffset += ylen;
DrawNameAndScore( gc, teamSE[i], screenWidth, yoffset );
}
}
function bool ChangeTeam(Pawn PawnToChange, int NewTeam)
{
local DeusExPlayer player;
player.ClientMessage(player.PlayerReplicationInfo.PlayerName$ ", To Change Teams You Must Exit The Game, Change, Then Come Back");
return true;
}
function ScoreKill(pawn Killer, pawn Other)
{
Other.DieCount++;
if ( killer != None )
{
killer.killCount++;
}
BaseMutator.ScoreKill(Killer, Other);
}
function bool RestartPlayer( pawn aPlayer )
{
local NavigationPoint startSpot;
local bool foundStart;
local DeusExPlayer PlayerToRestart;
local Pawn P;
if( bRestartLevel && Level.NetMode!=NM_DedicatedServer && Level.NetMode!=NM_ListenServer )
return true;
if ( aPlayer.PlayerReplicationInfo.Score < 1 )
{
NotifyOut (aPlayer.PlayerReplicationInfo.PlayerName);
}
startSpot = FindPlayerStart(aPlayer, 255);
if( startSpot == None )
return false;
foundStart = aPlayer.SetLocation(startSpot.Location);
if( foundStart )
{
startSpot.PlayTeleportEffect(aPlayer, true);
aPlayer.SetRotation(startSpot.Rotation);
aPlayer.ViewRotation = aPlayer.Rotation;
aPlayer.GroundSpeed = aPlayer.Default.GroundSpeed;
aPlayer.Acceleration = vect(0,0,0);
aPlayer.Velocity = vect(0,0,0);
aPlayer.Health = aPlayer.Default.Health;
aPlayer.ClientSetRotation( startSpot.Rotation );
aPlayer.bHidden = false;
aPlayer.SoundDampening = aPlayer.Default.SoundDampening;
aPlayer.DamageScaling = aPlayer.Default.DamageScaling;
if ( aPlayer.PlayerReplicationInfo.Score < 1 )
{
aPlayer.bHidden = true;
aPlayer.PlayerRestartState = 'PlayerSpectating';
}
else
{
aPlayer.SetCollision( true, true, true );
AddDefaultInventory(aPlayer);
if (aPlayer.IsA('DeusExPlayer'))
{
PlayerToRestart = DeusExPlayer(aPlayer);
PlayerToRestart.ShowHud(True);
PlayerToRestart.SkillSystem.ResetSkills();
PlayerToRestart.ResetPlayerToDefaults();
PlayerToRestart.SkillSystem.CreateSkills(PlayerToRestart);
PlayerToRestart.myProjKiller = None;
}
}
}
return foundStart;
}
//-------------------------------------------------------------------------------------------------
// ShowScores()
//-------------------------------------------------------------------------------------------------
simulated function DrawHeaders( GC gc, float screenWidth, float yoffset )
{
local float x, w, h, barLen;
// Player header
gc.GetTextExtent( 0, w, h, PlayerString );
x = screenWidth * PlayerX;
gc.DrawText( x, yoffset, w, h, PlayerString );
// Kills header
gc.GetTextExtent( 0, w, h, KillsString );
x = screenWidth * KillsX;
gc.DrawText( x, yoffset, w, h, KillsString );
// Deaths header
gc.GetTextExtent( 0, w, h, DeathsString );
x = screenWidth * DeathsX;
gc.DrawText( x, yoffset, w, h, DeathsString );
// Deaths header
gc.GetTextExtent( 0, w, h, StreakString );
x = screenWidth * StreakX;
gc.DrawText( x, yoffset, w, h, StreakString );
gc.SetTileColorRGB(255,255,255);
gc.DrawBox( PlayerX * screenWidth, yoffset+h, (x + w)-(PlayerX*screenWidth), 1, 0, 0, 1, Texture'Solid');
}
function NotifyOut(String name)
{
local Pawn curPawn;
for ( curPawn = Level.PawnList; curPawn != None; curPawn = curPawn.nextPawn )
if ( curPawn.IsA('DeusExPlayer') )
curPawn.ClientMessage(name$" has been eliminated.");
}
function GameOver()
{
Super.GameOver();
}
defaultproperties
{
EnemiesString="Hostiles"
AlliesString="Allies"
VictoryConString1="Objective: Eliminate each opposing team member's "
VictoryConString2=" lives."
TimeLimitString1="Objective: Score the most kills before the clock ( "
TimeLimitString2=" ) runs out!"
TeamScoreString=" Team Score:"
StrKilled=" killed "
StrSpree=" is on a killing spree!"
StrRampage=" is on a rampage!!"
StrDominating=" is dominating!"
StrUnstoppable=" is unstoppable!"
StrGodlike=" is Godlike!"
StrEndSpree="'s killing spree was ended by "
LivesString="Lives"
UnatcoClass=Class'mtlTeamElim.Terrorist'
NsfClass=Class'mtlTeamElim.SEAL'
UnatcoClassName=Terrorist
NsfClassName=SEAL
bAugsAllowed=False
KillsString="Lives"
TeamNsfString="SEAL"
TeamUnatcoString="Terrorist"
}