1
0
KF2-Dev-Scripts/Engine/Classes/TeamInfo.uc
2020-12-13 18:01:13 +03:00

113 lines
2.6 KiB
Ucode

//=============================================================================
// TeamInfo.
// Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
//=============================================================================
class TeamInfo extends ReplicationInfo
native(ReplicationInfo)
nativereplication;
var localized string TeamName;
var int Size; //number of players on this team in the level
var float Score;
var repnotify int TeamIndex;
var color TeamColor;
cpptext
{
INT* GetOptimizedRepList( BYTE* InDefault, FPropertyRetirement* Retire, INT* Ptr, UPackageMap* Map, UActorChannel* Channel );
}
replication
{
// Variables the server should send to the client.
if( bNetDirty && (Role==ROLE_Authority) )
Score;
if ( bNetInitial && (Role==ROLE_Authority) )
TeamName, TeamIndex;
}
simulated event ReplicatedEvent(name VarName)
{
//`log(GetFuncName()@`showvar(VarName));
if (VarName == 'TeamIndex')
{
if (WorldInfo.GRI != None)
{
// register this TeamInfo instance now
WorldInfo.GRI.SetTeam(TeamIndex, self);
}
}
else
{
Super.ReplicatedEvent(VarName);
}
}
simulated event Destroyed()
{
local TeamInfo OtherTeam;
Super.Destroyed();
// see if there's another TeamInfo that should take our spot in the GRI
// (this could happen after seamless travel as there may be a time during which both the old and new TeamInfos are around)
if (WorldInfo.GRI != None)
{
foreach DynamicActors(class'TeamInfo', OtherTeam)
{
if (OtherTeam != self && OtherTeam.TeamIndex == TeamIndex)
{
WorldInfo.GRI.SetTeam(TeamIndex, OtherTeam);
break;
}
}
}
}
function bool AddToTeam( Controller Other )
{
// make sure loadout works for this team
if ( Other == None )
{
`log("Added none to team!!!");
return false;
}
if (Other.PlayerReplicationInfo == None)
{
`Warn(Other @ "is missing PlayerReplicationInfo");
ScriptTrace();
return false;
}
Size++;
Other.PlayerReplicationInfo.SetPlayerTeam(Self);
return true;
}
function RemoveFromTeam(Controller Other)
{
Size--;
if ( Other != None && Other.PlayerReplicationInfo != None )
{
Other.PlayerReplicationInfo.SetPlayerTeam(None);
}
}
simulated function string GetHumanReadableName()
{
return TeamName;
}
simulated native function byte GetTeamNum();
defaultproperties
{
TickGroup=TG_DuringAsyncWork
TeamIndex=-1 // can't be zero, otherwise the property will not be replicated and the notify will not fire
NetUpdateFrequency=2
TeamColor=(r=255,g=64,b=64,a=255)
}