rott/kf_sources/ServerPerksMut/Classes/SRGameRules.uc
2026-07-14 20:27:09 +07:00

58 lines
1.6 KiB
Ucode

//=============================================================================
// SRGameRules
//=============================================================================
class SRGameRules extends GameRules;
function PostBeginPlay()
{
if( Level.Game.GameRulesModifiers==None )
Level.Game.GameRulesModifiers = Self;
else Level.Game.GameRulesModifiers.AddGameRules(Self);
}
function AddGameRules(GameRules GR)
{
if ( GR!=Self )
Super.AddGameRules(GR);
}
function bool PreventDeath(Pawn Killed, Controller Killer, class<DamageType> damageType, vector HitLocation)
{
local ClientPerkRepLink R;
local SRCustomProgress S;
if ( (NextGameRules != None) && NextGameRules.PreventDeath(Killed,Killer, damageType,HitLocation) )
return true;
if( xPlayer(Killer)!=None && Killed.Controller!=None && Killed.Controller!=Killer )
{
R = FindStatsFor(Killer);
if( R!=None )
for( S=R.CustomLink; S!=None; S=S.NextLink )
S.NotifyPlayerKill(Killed,damageType);
}
if( xPlayer(Killed.Controller)!=None && Killer!=None && Killer.Pawn!=None )
{
R = FindStatsFor(Killed.Controller);
if( R!=None )
for( S=R.CustomLink; S!=None; S=S.NextLink )
S.NotifyPlayerKilled(Killer.Pawn,damageType);
}
return false;
}
static final function ClientPerkRepLink FindStatsFor( Controller C )
{
local LinkedReplicationInfo L;
if( C.PlayerReplicationInfo==None )
return None;
for( L=C.PlayerReplicationInfo.CustomReplicationInfo; L!=None; L=L.NextReplicationInfo )
if( ClientPerkRepLink(L)!=None )
return ClientPerkRepLink(L);
return None;
}
defaultproperties
{
}