From c2c6006260ee420b4d1368c5acb8f5b9eef10482 Mon Sep 17 00:00:00 2001 From: GenZmeY Date: Sun, 25 Feb 2024 17:03:08 +0300 Subject: [PATCH] fix InvManager initialization after player death --- CTI/Classes/CTI_AutoPurchaseHelper.uc | 3 +- CTI/Classes/CTI_InventoryManager.uc | 42 +++++++++++++++++++++++++++ CTI/Classes/CTI_RepInfo.uc | 9 +++++- CTI/Classes/RemoveItems.uc | 8 ++--- 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/CTI/Classes/CTI_AutoPurchaseHelper.uc b/CTI/Classes/CTI_AutoPurchaseHelper.uc index 29362a5..8b82c09 100644 --- a/CTI/Classes/CTI_AutoPurchaseHelper.uc +++ b/CTI/Classes/CTI_AutoPurchaseHelper.uc @@ -23,8 +23,9 @@ private function CTI_GFxObject_TraderItems GetCTI_TraderItems() private function CTI_InventoryManager GetCTI_IM() { - if (CTI_IM == None) + if (CTI_IM != Pawn.InvManager) { + `Log_Base("Update InvManager:" @ String(CTI_IM) @ "<-" @ String(Pawn.InvManager)); CTI_IM = CTI_InventoryManager(Pawn.InvManager); } diff --git a/CTI/Classes/CTI_InventoryManager.uc b/CTI/Classes/CTI_InventoryManager.uc index bcd22de..63aae51 100644 --- a/CTI/Classes/CTI_InventoryManager.uc +++ b/CTI/Classes/CTI_InventoryManager.uc @@ -1,5 +1,18 @@ class CTI_InventoryManager extends KFInventoryManager; +var private CTI_RepInfo RepInfo; + +public function Initialize(CTI_RepInfo _RepInfo) +{ + RepInfo = _RepInfo; +} + +public function OwnerDied() +{ + RepInfo.SetTimer(1.0f, false, nameof(RepInfo.InitInventoryManager)); + Super.OwnerDied(); +} + // simulated function final BuyAmmo( float AmountPurchased, EItemType ItemType, optional byte ItemIndex, optional bool bSecondaryAmmo ) public simulated function CTI_BuyAmmo(float AmountPurchased, EItemType ItemType, optional int ItemIndex, optional bool bSecondaryAmmo) { @@ -457,6 +470,35 @@ private reliable server function CTI_ServerBuyGrenade(int AmountPurchased) } } +public simulated function int GetWeaponBlocks(const out STraderItem ShopItem, optional int OverrideLevelValue = INDEX_NONE) +{ + local int ItemUpgradeLevel; + local KFPlayerController KFPC; + local Inventory InventoryItem; + + if (ShopItem.SingleClassName != '' && OverrideLevelValue == INDEX_NONE && ClassNameIsInInventory(ShopItem.SingleClassName, InventoryItem)) + { + ItemUpgradeLevel = KFWeapon(InventoryItem).CurrentWeaponUpgradeIndex; + } + else + { + if (OverrideLevelValue != INDEX_NONE) + { + ItemUpgradeLevel = OverrideLevelValue; + } + else + { + KFPC = KFPlayerController(Instigator.Owner); + if (KFPC != None) + { + ItemUpgradeLevel = KFPC.GetPurchaseHelper().GetItemUpgradeLevelByClassName(ShopItem.ClassName); + } + } + } + + return ShopItem.BlocksRequired + (ItemUpgradeLevel > INDEX_NONE ? ShopItem.WeaponUpgradeWeight[ItemUpgradeLevel] : 0); +} + defaultproperties { diff --git a/CTI/Classes/CTI_RepInfo.uc b/CTI/Classes/CTI_RepInfo.uc index 48f992c..7fa87cb 100644 --- a/CTI/Classes/CTI_RepInfo.uc +++ b/CTI/Classes/CTI_RepInfo.uc @@ -446,6 +446,12 @@ private reliable server function Cleanup() { `Log_Trace(); + if (PatchRequired) + { + `Log_Debug("Skip cleanup to keep CTI_RepInfo alive"); + return; + } + `Log_Debug("Cleanup" @ GetKFPC() @ GetKFPRI() == None? "" : GetKFPRI().PlayerName); if (!CTI.DestroyRepInfo(GetKFPC())) { @@ -466,7 +472,7 @@ public function InitInventoryManager() `Log_Trace(); - if (GetKFPRI() == None || !KFPRI.bHasSpawnedIn) + if (GetKFPRI() == None || !KFPRI.bHasSpawnedIn || KFPC.Pawn == None) { `Log_Debug("Wait for spawn (InventoryManager)"); SetTimer(1.0f, false, nameof(InitInventoryManager)); @@ -477,6 +483,7 @@ public function InitInventoryManager() KFPC.Pawn.InventoryManagerClass = InventoryManager; NextInventoryManger = Spawn(KFPC.Pawn.InventoryManagerClass, KFPC.Pawn); + CTI_InventoryManager(NextInventoryManger).Initialize(Self); if (NextInventoryManger == None) { diff --git a/CTI/Classes/RemoveItems.uc b/CTI/Classes/RemoveItems.uc index fa6914d..82aa305 100644 --- a/CTI/Classes/RemoveItems.uc +++ b/CTI/Classes/RemoveItems.uc @@ -2,7 +2,7 @@ class RemoveItems extends Object dependson(CTI) config(CTI); -var public config bool bAll; +var public config bool bALL; var public config bool bHRG; var public config bool bDLC; var private config Array Item; @@ -29,11 +29,11 @@ public static function InitConfig(int Version, int LatestVersion) private static function ApplyDefault() { - default.bAll = false; + default.bALL = false; default.bHRG = false; default.bDLC = false; default.Item.Length = 0; - default.Item.AddItem("KFGame.KFWeapDef_9mmDual"); + default.Item.AddItem("KFGame.SomeWeapon"); } public static function Array > Load(E_LogLevel LogLevel) @@ -45,7 +45,7 @@ public static function Array > Load(E_LogLevel LogLeve local int Line; `Log_Info("Load items to remove:"); - if (default.bAll) + if (default.bALL) { `Log_Info("Remove all default items"); }