diff --git a/CTI/Classes/CTI.uc b/CTI/Classes/CTI.uc index 2245386..d89e8ab 100644 --- a/CTI/Classes/CTI.uc +++ b/CTI/Classes/CTI.uc @@ -230,6 +230,7 @@ private function PostInit() { if (RepInfo.PendingSync) { + RepInfo.PrepareSync(Self, LogLevel, KFGI.KFGFxManagerClass, DLCSkinUpdateRequired.Value, bApplyPatch); RepInfo.Replicate(WeapDefs); } } @@ -348,12 +349,11 @@ public function bool CreateRepInfo(Controller C) if (RepInfo == None) return false; - RepInfo.PrepareSync(Self, KFPlayerController(C), LogLevel, DLCSkinUpdateRequired.Value, bApplyPatch); - RepInfos.AddItem(RepInfo); if (ReadyToSync) { + RepInfo.PrepareSync(Self, LogLevel, KFGI.KFGFxManagerClass, DLCSkinUpdateRequired.Value, bApplyPatch); RepInfo.Replicate(WeapDefs); } else diff --git a/CTI/Classes/CTI_InventoryManager.uc b/CTI/Classes/CTI_InventoryManager.uc index d42f4ca..bcd22de 100644 --- a/CTI/Classes/CTI_InventoryManager.uc +++ b/CTI/Classes/CTI_InventoryManager.uc @@ -137,7 +137,7 @@ public reliable server function CTI_ServerBuyWeapon(int ItemIndex, optional int if (CurrentCarryBlocks > CurrentCarryBlocks + BlocksRequired) return; if (!CTI_ProcessWeaponDosh(PurchasedItem)) return; - CTI_AddTransactionItem( PurchasedItem, WeaponUpgrade); + CTI_AddTransactionItem(PurchasedItem, WeaponUpgrade); } // final function AddTransactionItem( const out STraderItem ItemToAdd, optional byte WeaponUpgrade ) diff --git a/CTI/Classes/CTI_RepInfo.uc b/CTI/Classes/CTI_RepInfo.uc index 1fd3880..48f992c 100644 --- a/CTI/Classes/CTI_RepInfo.uc +++ b/CTI/Classes/CTI_RepInfo.uc @@ -23,6 +23,8 @@ var public bool PendingSync; var private CTI CTI; var private E_LogLevel LogLevel; +var private class FrontEndClass; + var private GameReplicationInfo GRI; var private KFPlayerController KFPC; var private KFPlayerReplicationInfo KFPRI; @@ -49,7 +51,7 @@ var private bool ClientReady, ServerReady; replication { if (bNetInitial && Role == ROLE_Authority) - LogLevel, SkinUpdateRequired, PatchRequired; + LogLevel, SkinUpdateRequired, PatchRequired, FrontEndClass; } public simulated function bool SafeDestroy() @@ -60,24 +62,50 @@ public simulated function bool SafeDestroy() } public function PrepareSync( - CTI _CTI, KFPlayerController _KFPC, E_LogLevel _LogLevel, + CTI _CTI, E_LogLevel _LogLevel, + class _FrontEndClass, bool _SkinUpdateRequired, bool _PatchRequired) { `Log_Trace(); CTI = _CTI; - KFPC = _KFPC; LogLevel = _LogLevel; + FrontEndClass = _FrontEndClass; SkinUpdateRequired = _SkinUpdateRequired; PatchRequired = _PatchRequired; } +private reliable client function ClientSetFrontEnd() +{ + if (FrontEndClass == None || GetKFPRI() == None) + { + `Log_Debug("Wait for frontend"); + SetTimer(1.0f, false, nameof(ClientSetFrontEnd)); + return; + } + + if (KFPC.MyGFxManager != None && KFPC.MyGFxManager.class == FrontEndClass) + { + `Log_Debug("MyGFxManager is ok:" @ String(KFPC.MyGFxManager.class)); + return; + } + + KFPC.MyGFxManager.CloseMenus(true); + KFPC.MyGFxManager = None; + + KFPC.ClientSetFrontEnd(FrontEndClass, KFPRI.bOnlySpectator); + + `Log_Debug(String(FrontEndClass) @ "initialized."); +} + public function Replicate(const out Array > WeapDefs) { `Log_Trace(); ServerReady = !PatchRequired; + ClientSetFrontEnd(); + if (PatchRequired) { if (GetKFPC() != None) @@ -92,13 +120,14 @@ public function Replicate(const out Array > WeapDefs) RepArray = WeapDefs; RepData.Size = RepArray.Length; - if (WorldInfo.NetMode == NM_StandAlone) + if (WorldInfo.NetMode != NM_StandAlone) { - Progress(RepArray.Length, RepArray.Length); - return; + Sync(); + } + else + { + Finished(); } - - Sync(); } private reliable server function Sync() @@ -179,7 +208,10 @@ private simulated function Finished() if (KFGRI != None) { `Log_Debug("Finished: Trader.static.OverwriteTraderItems"); - Trader.static.OverwriteTraderItems(KFGRI, RepArray, PatchRequired, LogLevel); + if (WorldInfo.NetMode != NM_StandAlone) + { + Trader.static.OverwriteTraderItems(KFGRI, RepArray, PatchRequired, LogLevel); + } `Log_Info("Trader items successfully synchronized!"); } else