// This class gets spawned in the mutator, serverside.
// Because of its Role, it will also get copied to clients.
// The replicated variables are accessible there.

class SmartCTFGameReplicationInfo expands ReplicationInfo;

var int TickRate;
var bool bShowFCLocation, bStatsDrawFaces, bPlay30SecSound, bDrawLogo, bExtraStats, bShowSpecs, bDoKeybind, bSCTFSbDef, bSnowyScoreboard, bXmasImages;
var float SbDelayC;
var color SpectatorColor;
var string CountryFlagsPackage;
var class<ScoreBoard> NormalScoreBoardClass;
var SmartCTFEndStats EndStats;
var SmartCTFWelcomeNewPlayers WelcomeNewPlayers;
var SmartCTFPlayerReplicationInfo PRIArray[64];
var bool bInitialized, bServerInfoSetServerSide, bDoneBind;
var class<HUD> DefaultHUDType;

replication
{
  // Settings
  reliable if( Role == ROLE_Authority )
    bShowFCLocation, bPlay30SecSound, bStatsDrawFaces, bDrawLogo, bExtraStats, CountryFlagsPackage, bShowSpecs, bSCTFSbDef, bDoKeybind, bSnowyScoreboard, bXmasImages;

  reliable if( Role == ROLE_Authority )
    bInitialized, TickRate, NormalScoreBoardClass, EndStats, bServerInfoSetServerSide, DefaultHUDType, DoBind, SbDelayC, SpectatorColor;
}

simulated function PostBeginPlay()
{
	SetTimer( 0.5, True );
}

simulated function Timer()
{
	local PlayerPawn P;

	RefreshPRI();

	if (Level.Netmode == NM_DedicatedServer || bDoneBind || !bDoKeybind) return; // Only execute on clients,  if bind hasn't been done yet and if bind should be done.

	foreach AllActors(class 'PlayerPawn', P)
	if (Viewport(P.Player) != None) break;
	if(P!=None) DoBind(P);
	bDoneBind=true;
}

simulated function SmartCTFPlayerReplicationInfo GetStats( Actor P )
{
  local int i;
  local PlayerReplicationInfo PRI;

  if( !P.IsA( 'Pawn' ) ) return None;
  PRI = Pawn( P ).PlayerReplicationInfo;
  if( PRI == None ) return None;

  for( i = 0; i < 64; i++ )
  {
    if( PRIArray[i] == None ) break;
    if( PRIArray[i].Owner == PRI ) return PRIArray[i];
  }
  return None;
}

simulated function SmartCTFPlayerReplicationInfo GetStatsByPRI( PlayerReplicationInfo PRI )
{
  local int i;

  if( PRI == None ) return None;
  for( i = 0; i < 64; i++ )
  {
    if( PRIArray[i] == None ) break;
    if( PRIArray[i].Owner == PRI ) return PRIArray[i];
  }
  return None;
}

simulated function SmartCTFPlayerReplicationInfo GetStatNr( byte i )
{
  return PRIArray[i];
}

simulated function ClearStats()
{
  local int i;
  for( i = 0; i < 64; i++ )
  {
    if( PRIArray[i] == None ) break;
    PRIArray[i].ClearStats();
  }
}

simulated function RefreshPRI()
{
  local SmartCTFPlayerReplicationInfo PRI;
  local int i;

  for( i = 0; i < 64; i++ ) PRIArray[i] = None;

  i = 0;
  ForEach AllActors( class'SmartCTFPlayerReplicationInfo', PRI )
  {
    if( i < 64 )
    {
      if( PRI.Owner != None ) PRIArray[i++] = PRI;
    }
    else break;
  }
}

simulated function DoBind(PlayerPawn P)
{	
	local string keyBinding;

		if ((InStr( Caps(P.ConsoleCommand("Keybinding F3")), "MUTATE SMARTCTF SHOWSTATS") == -1))
		{
			keyBinding = P.ConsoleCommand("Keybinding F3");
			P.ConsoleCommand("SET INPUT F3 mutate smartctf showstats|"$keyBinding);
		}
}

defaultproperties
{
      TickRate=0
      bShowFCLocation=False
      bStatsDrawFaces=False
      bPlay30SecSound=False
      bDrawLogo=False
      bExtraStats=False
      bShowSpecs=False
      bDoKeybind=False
      bSCTFSbDef=False
      bSnowyScoreboard=False
      bXmasImages=False
      SbDelayC=0.000000
      SpectatorColor=(R=0,G=0,B=0,A=0)
      CountryFlagsPackage=""
      NormalScoreBoardClass=None
      EndStats=None
      PRIArray(0)=None
      PRIArray(1)=None
      PRIArray(2)=None
      PRIArray(3)=None
      PRIArray(4)=None
      PRIArray(5)=None
      PRIArray(6)=None
      PRIArray(7)=None
      PRIArray(8)=None
      PRIArray(9)=None
      PRIArray(10)=None
      PRIArray(11)=None
      PRIArray(12)=None
      PRIArray(13)=None
      PRIArray(14)=None
      PRIArray(15)=None
      PRIArray(16)=None
      PRIArray(17)=None
      PRIArray(18)=None
      PRIArray(19)=None
      PRIArray(20)=None
      PRIArray(21)=None
      PRIArray(22)=None
      PRIArray(23)=None
      PRIArray(24)=None
      PRIArray(25)=None
      PRIArray(26)=None
      PRIArray(27)=None
      PRIArray(28)=None
      PRIArray(29)=None
      PRIArray(30)=None
      PRIArray(31)=None
      PRIArray(32)=None
      PRIArray(33)=None
      PRIArray(34)=None
      PRIArray(35)=None
      PRIArray(36)=None
      PRIArray(37)=None
      PRIArray(38)=None
      PRIArray(39)=None
      PRIArray(40)=None
      PRIArray(41)=None
      PRIArray(42)=None
      PRIArray(43)=None
      PRIArray(44)=None
      PRIArray(45)=None
      PRIArray(46)=None
      PRIArray(47)=None
      PRIArray(48)=None
      PRIArray(49)=None
      PRIArray(50)=None
      PRIArray(51)=None
      PRIArray(52)=None
      PRIArray(53)=None
      PRIArray(54)=None
      PRIArray(55)=None
      PRIArray(56)=None
      PRIArray(57)=None
      PRIArray(58)=None
      PRIArray(59)=None
      PRIArray(60)=None
      PRIArray(61)=None
      PRIArray(62)=None
      PRIArray(63)=None
      bInitialized=False
      bServerInfoSetServerSide=False
      bDoneBind=False
      DefaultHUDType=None
      RemoteRole=ROLE_SimulatedProxy
}
