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, E_LogLevel LogLevel) { local KFGFxObject_TraderItems TraderItems; local STraderItem Item; local class WeapDef; local Array > WeapDefs; local int MaxItemID; `Log_TraceStatic(); TraderItems = GetTraderItems(KFGRI, LogLevel); if (!ReplaceMode) { foreach TraderItems.SaleItems(Item) { if (Item.WeaponDef != None && RemoveItems.Find(Item.WeaponDef) == INDEX_NONE) { WeapDefs.AddItem(Item.WeaponDef); } } } WeapDefs.Sort(ByPrice); TraderItems.SaleItems.Length = 0; MaxItemID = 0; foreach WeapDefs(WeapDef) { Item.WeaponDef = WeapDef; Item.ItemID = ++MaxItemID; TraderItems.SaleItems.AddItem(Item); } TraderItems.SetItemsInfo(TraderItems.SaleItems); KFGRI.TraderItems = TraderItems; } defaultproperties { }