import { HandbookHelper } from "../helpers/HandbookHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { PresetHelper } from "../helpers/PresetHelper"; import { FenceLevel } from "../models/eft/common/IGlobals"; import { IPmcData } from "../models/eft/common/IPmcData"; import { ITraderAssort } from "../models/eft/common/tables/ITrader"; import { ITraderConfig } from "../models/spt/config/ITraderConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; import { TimeUtil } from "../utils/TimeUtil"; import { ItemFilterService } from "./ItemFilterService"; /** * Handle actions surrounding Fence * e.g. generating or refreshing assorts / get next refresh time */ export declare class FenceService { protected logger: ILogger; protected hashUtil: HashUtil; protected jsonUtil: JsonUtil; protected timeUtil: TimeUtil; protected randomUtil: RandomUtil; protected databaseServer: DatabaseServer; protected handbookHelper: HandbookHelper; protected itemHelper: ItemHelper; protected presetHelper: PresetHelper; protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected fenceAssort: ITraderAssort; protected traderConfig: ITraderConfig; protected nextMiniRefreshTimestamp: number; constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, itemFilterService: ItemFilterService, configServer: ConfigServer); protected setFenceAssort(fenceAssort: ITraderAssort): void; /** * Get assorts player can purchase * Adjust prices based on fence level of player * @param pmcProfile Player profile * @returns ITraderAssort */ getFenceAssorts(pmcProfile: IPmcData): ITraderAssort; /** * Get fence assorts with no price adjustments based on fence rep * @returns ITraderAssort */ getRawFenceAssorts(): ITraderAssort; /** * Does fence need to perform a partial refresh because its passed the refresh timer defined in trader.json * @returns true if it needs a partial refresh */ needsPartialRefresh(): boolean; /** * Replace a percentage of fence assorts with freshly generated items */ performPartialRefresh(): void; /** * Choose an item (not mod) at random and remove from assorts */ protected removeRandomItemFromAssorts(): void; /** * Get an integer rounded count of items to replace based on percentrage from traderConfig value * @param totalItemCount total item count * @returns rounded int of items to replace */ protected getCountOfItemsToReplace(totalItemCount: number): number; /** * Get the count of items fence offers * @returns number */ getOfferCount(): number; /** * Create a trader assort for fence */ generateFenceAssortCache(): void; /** * Create skeleton to hold assort items * @returns ITraderAssort object */ protected createBaseTraderAssortItem(): ITraderAssort; /** * Hydrate result parameter object with generated assorts * @param assortCount Number of assorts to generate * @param assorts object to add assorts to */ protected createAssorts(assortCount: number, assorts: ITraderAssort): void; /** * Get the next update timestamp for fence * @returns future timestamp */ getNextFenceUpdateTimestamp(): number; /** * Get fence refresh time in seconds */ protected getFenceRefreshTime(): number; /** * Get fence level the passed in profile has * @param pmcData Player profile * @returns FenceLevel object */ getFenceInfo(pmcData: IPmcData): FenceLevel; /** * Remove an assort from fence by id * @param assortIdToRemove assort id to remove from fence assorts */ removeFenceOffer(assortIdToRemove: string): void; }