class SkinReplicator extends Info; var private Array RepInfos; var private E_LogLevel LogLevel; public simulated function bool SafeDestroy() { `Log_Trace(); return (bPendingDelete || bDeleteMe || Destroy()); } public event PreBeginPlay() { `Log_Trace(); if (WorldInfo.NetMode == NM_Client) { `Log_Fatal("NetMode == NM_Client, Destroy..."); SafeDestroy(); return; } Super.PreBeginPlay(); PreInit(); } public event PostBeginPlay() { `Log_Trace(); if (bPendingDelete || bDeleteMe) return; Super.PostBeginPlay(); PostInit(); } private function PreInit() { `Log_Trace(); if (LogLevel == LL_WrongLevel) { LogLevel = LL_Info; `Log_Warn("Wrong 'LogLevel', return to default value"); SaveConfig(); } `Log_Base("LogLevel:" @ LogLevel); } private function PostInit() { `Log_Trace(); } public function NotifyLogin(Controller C) { `Log_Trace(); if (!CreateRepInfo(C)) { `Log_Error("Can't create RepInfo for:" @ C); } } public function NotifyLogout(Controller C) { `Log_Trace(); DestroyRepInfo(C); } public function bool CreateRepInfo(Controller C) { local SkinReplicatorRepInfo RepInfo; `Log_Trace(); if (C == None || KFPlayerController(C) == None) return false; RepInfo = Spawn(class'SkinReplicatorRepInfo', C); if (RepInfo == None) return false; RepInfo.LogLevel = LogLevel; RepInfo.SkinReplicator = Self; RepInfos.AddItem(RepInfo); return true; } public function bool DestroyRepInfo(Controller C) { local SkinReplicatorRepInfo RepInfo; `Log_Trace(); if (C == None) return false; foreach RepInfos(RepInfo) { if (RepInfo.Owner == C) { RepInfos.RemoveItem(RepInfo); RepInfo.SafeDestroy(); return true; } } return false; } DefaultProperties { LogLevel = LL_Info }