using Core.Annotations; using Core.Models.Eft.Common; using Core.Models.Eft.Common.Tables; using Core.Models.Spt.Config; using Core.Models.Spt.Fence; namespace Core.Services; [Injectable(InjectionType.Singleton)] public class FenceService { /// /// Replace main fence assort with new assort /// /// New assorts to replace old with public void SetFenceAssort(TraderAssort assort) { throw new NotImplementedException(); } /// /// Replace discount fence assort with new assort /// /// New assorts to replace old with public void SetDiscountFenceAssort(TraderAssort assort) { throw new NotImplementedException(); } /// /// Get main fence assort /// /// TraderAssort public TraderAssort GetMainFenceAssort() { throw new NotImplementedException(); } /// /// Get discount fence assort /// /// TraderAssort public TraderAssort GetDiscountFenceAssort() { throw new NotImplementedException(); } /// /// Replace high rep level fence assort with new assort /// /// New assorts to replace old with public void SetFenceDiscountAssort(TraderAssort discountAssort) { throw new NotImplementedException(); } /// /// Get assorts player can purchase /// Adjust prices based on fence level of player /// /// Player profile /// TraderAssort public TraderAssort GetFenceAssorts(PmcData pmcProfile) { throw new NotImplementedException(); } /// /// Adds to fence assort a single item (with its children) /// /// the items to add with all its childrens /// the most parent item of the array public void AddItemsToFenceAssort(List items, Item mainItem) { throw new NotImplementedException(); } /// /// Calculates the overall price for an item (with all its children) /// /// the item tpl to calculate the fence price for /// the items (with its children) to calculate fence price for /// the fence price of the item public double GetItemPrice(string itemTpl, List items) { throw new NotImplementedException(); } /// /// Calculate the overall price for an ammo box, where only one item is /// the ammo box itself and every other items are the bullets in that box /// /// the ammo box (and all its children ammo items) /// the price of the ammo box protected double GetAmmoBoxPrice(List items) { throw new NotImplementedException(); } /// /// Adjust all items contained inside an assort by a multiplier /// /// (clone)Assort that contains items with prices to adjust /// multipler to use on items /// preset multipler to use on presets protected void AdjustAssortItemPricesByConfigMultiplier( TraderAssort assort, double itemMultipler, double presetMultiplier) { throw new NotImplementedException(); } /// /// Merge two trader assort files together /// /// assort 1# /// assort #2 /// merged assort protected TraderAssort MergeAssorts(TraderAssort firstAssort, TraderAssort secondAssort) { throw new NotImplementedException(); } /// /// Adjust assorts price by a modifier /// /// assort item details /// assort to be modified /// value to multiply item price by /// value to multiply preset price by protected void AdjustItemPriceByModifier( Item item, TraderAssort assort, double modifier, double presetModifier) { throw new NotImplementedException(); } /// /// Get fence assorts with no price adjustments based on fence rep /// /// TraderAssort public TraderAssort GetRawFenceAssorts() { throw new NotImplementedException(); } /// /// Does fence need to perform a partial refresh because its passed the refresh timer defined in trader.json /// /// true if it needs a partial refresh public bool NeedsPartialRefresh() { throw new NotImplementedException(); } /// /// Replace a percentage of fence assorts with freshly generated items /// public void PerformPartialRefresh() { throw new NotImplementedException(); } /// /// Handle the process of folding new assorts into existing assorts, when a new assort exists already, increment its StackObjectsCount instead /// /// Assorts to fold into existing fence assorts /// Current fence assorts new assorts will be added to protected void UpdateFenceAssorts( CreateFenceAssortsResult newFenceAssorts, TraderAssort existingFenceAssorts ) { throw new NotImplementedException(); } /// /// Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config /// protected void IncrementPartialRefreshTime() { throw new NotImplementedException(); } /// /// Get values that will hydrate the passed in assorts back to the desired counts /// /// Current assorts after items have been removed /// Base counts assorts should be adjusted to /// GenerationAssortValues object with adjustments needed to reach desired state protected GenerationAssortValues GetItemCountsToGenerate( Item[] assortItems, GenerationAssortValues generationValues ) { throw new NotImplementedException(); } /// /// Delete desired number of items from assort (including children) /// /// /// protected void DeleteRandomAssorts(int itemCountToReplace, TraderAssort assort) { throw new NotImplementedException(); } /// /// Choose an item at random and remove it + mods from assorts /// /// Trader assort to remove item from /// Pool of root items to pick from to remove protected void RemoveRandomItemFromAssorts(TraderAssort assort, Item[] rootItems) { throw new NotImplementedException(); } /// /// Get an integer rounded count of items to replace based on percentrage from traderConfig value /// /// total item count /// rounded int of items to replace protected int GetCountOfItemsToReplace(int totalItemCount) { throw new NotImplementedException(); } /// /// Get the count of items fence offers /// /// int public int GetOfferCount() { throw new NotImplementedException(); } /// /// Create trader assorts for fence and store in fenceService cache /// Uses fence base cache generated on server start as a base /// public void GenerateFenceAssorts() { throw new NotImplementedException(); } /// /// Convert the intermediary assort data generated into format client can process /// /// Generated assorts that will be converted /// TraderAssort protected TraderAssort ConvertIntoFenceAssort(CreateFenceAssortsResult intermediaryAssorts) { throw new NotImplementedException(); } /// /// Create object that contains calculated fence assort item values to make based on config /// Stored in this.DesiredAssortCounts /// protected void CreateInitialFenceAssortGenerationValues() { throw new NotImplementedException(); } /// /// Create skeleton to hold assort items /// /// TraderAssort object protected TraderAssort CreateFenceAssortSkeleton() { throw new NotImplementedException(); } /// /// Hydrate assorts parameter object with generated assorts /// /// Number of assorts to generate /// Loyalty level to set new item to /// CreateFenceAssortsResult protected CreateFenceAssortsResult CreateAssorts(GenerationAssortValues itemCounts, int loyaltyLevel) { throw new NotImplementedException(); } /// /// Add item assorts to existing assort data /// /// Number to add /// Assorts data to add to /// Base data to draw from /// /// Loyalty level to set new item to protected void AddItemAssorts( int assortCount, CreateFenceAssortsResult assorts, TraderAssort baseFenceAssortClone, Dictionary itemTypeLimits, int loyaltyLevel ) { throw new NotImplementedException(); } /// /// Find an assort item that matches the first parameter, also matches based on upd properties /// e.g. salewa hp resource units left /// /// item to look for a match against /// Db details of matching item /// Items to search through /// Matching assort item protected virtual Item GetMatchingItem( Item rootItemBeingAdded, TemplateItem itemDbDetails, List> itemsWithChildren) { throw new NotImplementedException(); } /// /// Should this item be forced into only 1 stack on fence /// /// Existing item from fence assort /// Item we want to add db details /// True item should be force stacked protected virtual bool ItemShouldBeForceStacked(Item existingItem, TemplateItem itemDbDetails) { throw new NotImplementedException(); } protected virtual bool ItemInPreventDupeCategoryList(string tpl) { throw new NotImplementedException(); } /// /// Adjust price of item based on what is left to buy (resource/uses left) /// /// All barter scheme for item having price adjusted /// Root item having price adjusted /// Db template of item protected virtual void AdjustItemPriceByQuality( Dictionary>> barterSchemes, Item itemRoot, TemplateItem itemTemplate) { throw new NotImplementedException(); } protected virtual Dictionary GetMatchingItemLimit( Dictionary itemTypeLimits, string itemTpl) { throw new NotImplementedException(); } /// /// Find presets in base fence assort and add desired number to 'assorts' parameter /// /// /// Assorts to add preset to /// Base data to draw from /// Which loyalty level is required to see/buy item protected virtual void AddPresetsToAssort( int desiredWeaponPresetsCount, int desiredEquipmentPresetsCount, CreateFenceAssortsResult assorts, TraderAssort baseFenceAssort, int loyaltyLevel) { throw new NotImplementedException(); } /// /// Adjust plate / soft insert durability values /// /// Armor item array to add mods into /// Armor items db template protected virtual void RandomiseArmorModDurability(List armor, TemplateItem itemDbDetails) { throw new NotImplementedException(); } /// /// Randomise the durability values of items on armor with a passed in slot /// /// Slots of items to randomise /// Array of armor + inserts to get items from protected virtual void RandomiseArmorSoftInsertDurabilities(List softInsertSlots, List armorItemAndMods) { throw new NotImplementedException(); } /// /// Randomise the durability values of plate items in armor /// Has chance to remove plate /// /// Slots of items to randomise /// Array of armor + inserts to get items from protected virtual void RandomiseArmorInsertsDurabilities(List plateSlots, List armorItemAndMods) { throw new NotImplementedException(); } /// /// Get stack size of a singular item (no mods) /// /// item being added to fence /// Stack size protected virtual int GetSingleItemStackCount(TemplateItem itemDbDetails) { throw new NotImplementedException(); } /// /// Remove parts of a weapon prior to being listed on flea /// /// Weapon to remove parts from protected virtual void RemoveRandomModsOfItem(List itemAndMods) { throw new NotImplementedException(); } /// /// Roll % chance check to see if item should be removed /// /// Weapon mod being checked /// Current list of items on weapon being deleted /// True if item will be removed protected virtual bool PresetModItemWillBeRemoved(Item weaponMod, List itemsBeingDeleted) { throw new NotImplementedException(); } /// /// Randomise items' upd properties e.g. med packs/weapons/armor /// /// Item being randomised /// Item being edited protected virtual void RandomiseItemUpdProperties(TemplateItem itemDetails, Item itemToAdjust) { throw new NotImplementedException(); } /// /// Generate a randomised current and max durabiltiy value for an armor item /// /// Item to create values for /// Max durabiltiy percent min/max values /// Durability + MaxDurability values protected virtual UpdRepairable GetRandomisedArmorDurabilityValues( TemplateItem itemDetails, ItemDurabilityCurrentMax equipmentDurabilityLimits) { throw new NotImplementedException(); } /// /// Construct item limit record to hold max and current item count /// /// limits as defined in config /// record, key: item tplId, value: current/max item count allowed protected Dictionary InitItemLimitCounter(Dictionary limits) { throw new NotImplementedException(); } /// /// Get the next update timestamp for fence /// /// future timestamp public int GetNextFenceUpdateTimestamp() { throw new NotImplementedException(); } /// /// Get fence refresh time in seconds /// /// Refresh time in seconds protected int GetFenceRefreshTime() { throw new NotImplementedException(); } /// /// Get fence level the passed in profile has /// /// Player profile /// FenceLevel object public FenceLevel GetFenceInfo(PmcData pmcData) { throw new NotImplementedException(); } /// /// Remove or lower stack size of an assort from fence by id /// /// assort id to adjust /// Count of items bought public void AmendOrRemoveFenceOffer(string assortId, int buyCount) { throw new NotImplementedException(); } protected void DeleteOffer(string assortId, List assorts) { throw new NotImplementedException(); } }