193 lines
4.1 KiB
Plaintext
193 lines
4.1 KiB
Plaintext
class SmartCTFPlayerReplicationInfo expands ReplicationInfo;
|
|
|
|
// Replicated
|
|
var int Captures, Assists, Grabs, Covers, Seals, FlagKills, DefKills;
|
|
var int Frags, HeadShots, ShieldBelts, Amps;
|
|
|
|
var string CountryPrefix; // for IpToCountry
|
|
|
|
// Server side
|
|
var float LastKillTime;
|
|
var int MultiLevel;
|
|
var int FragSpree, CoverSpree, SealSpree, SpawnKillSpree;
|
|
var float SpawnTime;
|
|
var bool bHadFirstSpawn;
|
|
|
|
// Client side
|
|
var bool bViewingStats;
|
|
var bool bEndStats;
|
|
var float IndicatorStartShow;
|
|
var byte IndicatorVisibility;
|
|
|
|
var Actor IpToCountry;
|
|
var bool bIpToCountry;
|
|
|
|
replication
|
|
{
|
|
// Stats
|
|
reliable if( Role == ROLE_Authority )
|
|
Captures, Assists, Grabs, Covers, Seals, FlagKills, DefKills,
|
|
Frags, HeadShots, ShieldBelts, Amps, CountryPrefix;
|
|
|
|
// Toggle stats functions
|
|
reliable if( Role == ROLE_Authority )
|
|
ToggleStats, ShowStats;
|
|
}
|
|
|
|
function PostBeginPlay()
|
|
{
|
|
|
|
super.PostBeginPlay();
|
|
|
|
SetTimer( 0.5, True );
|
|
}
|
|
|
|
function Timer()
|
|
{
|
|
local string temp;
|
|
local PlayerPawn P;
|
|
if( Owner == None )
|
|
{
|
|
SetTimer( 0.0, False );
|
|
Destroy();
|
|
return;
|
|
}
|
|
if(bIpToCountry)
|
|
{
|
|
if(CountryPrefix == "")
|
|
{
|
|
if(Owner.Owner.IsA('PlayerPawn'))
|
|
{
|
|
P=PlayerPawn(Owner.Owner);
|
|
if(NetConnection(P.Player) != None)
|
|
{
|
|
temp=P.GetPlayerNetworkAddress();
|
|
temp=Left(temp, InStr(temp, ":"));
|
|
temp=IpToCountry.GetItemName(temp);
|
|
if(temp == "!Disabled") /* after this return, iptocountry won't resolve anything anyway */
|
|
bIpToCountry=False;
|
|
else if(Left(temp, 1) != "!") /* good response */
|
|
{
|
|
CountryPrefix=SelElem(temp, 5);
|
|
if(CountryPrefix=="") /* the country is probably unknown(maybe LAN), so as the prefix */
|
|
bIpToCountry=False;
|
|
}
|
|
}
|
|
else
|
|
bIpToCountry=False;
|
|
}
|
|
else
|
|
bIpToCountry=False;
|
|
}
|
|
else
|
|
bIpToCountry=False;
|
|
}
|
|
}
|
|
|
|
static final function string SelElem(string Str, int Elem)
|
|
{
|
|
local int pos;
|
|
while(Elem-->1)
|
|
Str=Mid(Str, InStr(Str,":")+1);
|
|
pos=InStr(Str, ":");
|
|
if(pos != -1)
|
|
Str=Left(Str, pos);
|
|
return Str;
|
|
}
|
|
|
|
// Called on the server, executed on the client
|
|
simulated function ToggleStats()
|
|
{
|
|
local PlayerPawn P;
|
|
|
|
if( Owner == None ) return;
|
|
P = PlayerPawn( Owner.Owner );
|
|
if( P == None ) return;
|
|
|
|
if( P.Scoring != None && !P.Scoring.IsA( 'SmartCTFScoreBoard' ) )
|
|
{
|
|
P.ClientMessage( "Problem loading the SmartCTF ScoreBoard..." );
|
|
}
|
|
else
|
|
{
|
|
bViewingStats = !bViewingStats;
|
|
IndicatorStartShow = Level.TimeSeconds;
|
|
IndicatorVisibility = 255;
|
|
P.bShowScores = True;
|
|
}
|
|
}
|
|
|
|
// Called on the client
|
|
simulated function ShowStats(optional bool bHide)
|
|
{
|
|
local PlayerPawn P;
|
|
|
|
if( Owner == None ) return;
|
|
P = PlayerPawn( Owner.Owner );
|
|
if( P == None ) return;
|
|
|
|
if( P.Scoring != None && !P.Scoring.IsA( 'SmartCTFScoreBoard' ) )
|
|
{
|
|
P.ClientMessage( "Problem loading the SmartCTF ScoreBoard..." );
|
|
}
|
|
else
|
|
{
|
|
bViewingStats = True;
|
|
if(!bHide) P.bShowScores = True;
|
|
}
|
|
}
|
|
|
|
function ClearStats()
|
|
{
|
|
Captures = 0;
|
|
Assists = 0;
|
|
Grabs = 0;
|
|
Covers = 0;
|
|
Seals = 0;
|
|
DefKills = 0;
|
|
FlagKills = 0;
|
|
Frags = 0;
|
|
HeadShots = 0;
|
|
ShieldBelts = 0;
|
|
Amps = 0;
|
|
|
|
FragSpree = 0;
|
|
CoverSpree = 0;
|
|
SealSpree = 0;
|
|
SpawnKillSpree = 0;
|
|
SpawnTime = 0;
|
|
|
|
LastKillTime = 0;
|
|
MultiLevel = 0;
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
Captures=0
|
|
Assists=0
|
|
Grabs=0
|
|
Covers=0
|
|
Seals=0
|
|
FlagKills=0
|
|
DefKills=0
|
|
Frags=0
|
|
HeadShots=0
|
|
ShieldBelts=0
|
|
Amps=0
|
|
CountryPrefix=""
|
|
LastKillTime=0.000000
|
|
MultiLevel=0
|
|
FragSpree=0
|
|
CoverSpree=0
|
|
SealSpree=0
|
|
SpawnKillSpree=0
|
|
SpawnTime=0.000000
|
|
bHadFirstSpawn=False
|
|
bViewingStats=False
|
|
bEndStats=False
|
|
IndicatorStartShow=0.000000
|
|
IndicatorVisibility=0
|
|
ipToCountry=None
|
|
bIpToCountry=False
|
|
}
|