1
0
KF2-SkinReplicator/Classes/SkinReplicatorRepInfo.uc

107 lines
2.2 KiB
Ucode
Raw Normal View History

2023-10-05 19:10:47 +00:00
class SkinReplicatorRepInfo extends ReplicationInfo
dependson(WeaponReplacements);
const Replacements = class'WeaponReplacements';
var public E_LogLevel LogLevel;
var public SkinReplicator SkinReplicator;
var private KFPlayerController KFPC;
var private KFPlayerReplicationInfo KFPRI;
replication
{
if (bNetInitial && Role == ROLE_Authority)
LogLevel;
}
public simulated function bool SafeDestroy()
{
`Log_Trace();
return (bPendingDelete || bDeleteMe || Destroy());
}
public simulated event PostBeginPlay()
{
if (WorldInfo.NetMode == NM_StandAlone || Role <= ROLE_Authority)
{
SetTimer(1.0f, true, nameof(UpdateSkinsDLC));
}
}
private simulated function UpdateSkinsDLC()
{
local SWeapReplace WeapReplace;
`Log_Debug("Wait for spawn");
if (GetKFPRI() != None && KFPRI.bHasSpawnedIn)
{
foreach Replacements.default.List(WeapReplace)
{
if (WeapReplace.WeapParent.default.SkinItemId > 0 && WeapReplace.Weap.default.SkinItemId != WeapReplace.WeapParent.default.SkinItemId)
{
`Log_Debug("Update skin for:" @ String(WeapReplace.WeapDef) @ "SkinId:" @ WeapReplace.WeapParent.default.SkinItemId);
class'KFWeaponSkinList'.static.SaveWeaponSkin(WeapReplace.WeapDef, WeapReplace.WeapParent.default.SkinItemId);
}
}
ClearTimer(nameof(UpdateSkinsDLC));
ClientCleanup();
}
}
private simulated function KFPlayerController GetKFPC()
{
`Log_Trace();
if (KFPC != None) return KFPC;
KFPC = KFPlayerController(Owner);
if (KFPC == None && ROLE < ROLE_Authority)
{
KFPC = KFPlayerController(GetALocalPlayerController());
}
return KFPC;
}
private simulated function KFPlayerReplicationInfo GetKFPRI()
{
`Log_Trace();
if (KFPRI != None) return KFPRI;
if (GetKFPC() == None) return None;
KFPRI = KFPlayerReplicationInfo(KFPC.PlayerReplicationInfo);
return KFPRI;
}
private simulated function ClientCleanup()
{
ServerCleanup();
SafeDestroy();
}
private reliable server function ServerCleanup()
{
`Log_Trace();
`Log_Debug("Cleanup");
if (!SkinReplicator.DestroyRepInfo(GetKFPC()))
{
`Log_Debug("Cleanup (forced)");
SafeDestroy();
}
}
defaultproperties
{
bAlwaysRelevant = false
bOnlyRelevantToOwner = true
bSkipActorPropertyReplication = false
}