class Trader extends Object abstract; private delegate int ByPrice(class A, class B) { return A.default.BuyPrice > B.default.BuyPrice ? -1 : 0; } public static function KFGFxObject_TraderItems GetTraderItems(optional KFGameReplicationInfo KFGRI = None, optional E_LogLevel LogLevel = LL_Trace) { local String TraderItemsPath; if (KFGRI == None) { TraderItemsPath = class'KFGameReplicationInfo'.default.TraderItemsPath; } else { TraderItemsPath = KFGRI.TraderItemsPath; } return KFGFxObject_TraderItems(DynamicLoadObject(TraderItemsPath, class'KFGFxObject_TraderItems')); } public static function Array > GetTraderWeapDefs(optional KFGameReplicationInfo KFGRI = None,optional E_LogLevel LogLevel = LL_Trace) { local Array > KFWeapDefs; local KFGFxObject_TraderItems TraderItems; local STraderItem Item; TraderItems = GetTraderItems(KFGRI, LogLevel); foreach TraderItems.SaleItems(Item) { if (Item.WeaponDef != None) { KFWeapDefs.AddItem(Item.WeaponDef); } } return KFWeapDefs; } public static function Array > GetTraderWeapons(optional KFGameReplicationInfo KFGRI = None,optional E_LogLevel LogLevel = LL_Trace) { local Array > KFWeapons; local class KFWeapon; local KFGFxObject_TraderItems TraderItems; local STraderItem Item; TraderItems = GetTraderItems(KFGRI, LogLevel); foreach TraderItems.SaleItems(Item) { if (Item.WeaponDef != None) { KFWeapon = class (DynamicLoadObject(Item.WeaponDef.default.WeaponClassPath, class'Class')); if (KFWeapon != None) { KFWeapons.AddItem(KFWeapon); } } } return KFWeapons; } public static simulated function ModifyTrader( KFGameReplicationInfo KFGRI, Array > RemoveItems, bool ReplaceMode, bool RemoveHRG, bool RemoveDLC, E_LogLevel LogLevel) { local KFGFxObject_TraderItems TraderItems; local STraderItem Item; local Array > WeapDefs; `Log_TraceStatic(); TraderItems = GetTraderItems(KFGRI, LogLevel); if (!ReplaceMode) { foreach TraderItems.SaleItems(Item) { if (Item.WeaponDef != None && RemoveItems.Find(Item.WeaponDef) == INDEX_NONE && (!RemoveHRG || (RemoveHRG && InStr(Item.WeaponDef, "_HRG", true) == INDEX_NONE)) && (!RemoveDLC || (RemoveDLC && Item.WeaponDef.default.SharedUnlockId == SCU_None))) { WeapDefs.AddItem(Item.WeaponDef); } } } WeapDefs.Sort(ByPrice); OverwriteTraderItems(KFGRI, WeapDefs, LogLevel); } public static simulated function OverwriteTraderItems( KFGameReplicationInfo KFGRI, const out Array > WeapDefs, E_LogLevel LogLevel) { local KFGFxObject_TraderItems TraderItems; local STraderItem Item; local class WeapDef; local int MaxItemID; `Log_TraceStatic(); TraderItems = GetTraderItems(KFGRI, LogLevel); TraderItems.SaleItems.Length = 0; MaxItemID = 0; `Log_Debug("Trader Items:"); foreach WeapDefs(WeapDef) { Item.WeaponDef = WeapDef; Item.ItemID = MaxItemID++; TraderItems.SaleItems.AddItem(Item); `Log_Debug("[" $ MaxItemID $ "]" @ String(WeapDef)); } TraderItems.SetItemsInfo(TraderItems.SaleItems); KFGRI.TraderItems = TraderItems; } defaultproperties { }