Update types

This commit is contained in:
Dev 2024-05-07 12:10:15 +01:00
parent ff6fd48e6b
commit 4bd5124cf0
169 changed files with 937 additions and 1129 deletions

View File

@ -1,4 +1,4 @@
# Mod examples for v3.8.1 # Mod examples for v3.8.2
A collection of example mods that perform typical actions in SPT A collection of example mods that perform typical actions in SPT

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

View File

@ -1,4 +1,5 @@
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigServer } from "@spt-aki/servers/ConfigServer";
@ -17,11 +18,13 @@ export declare class PMCLootGenerator {
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected ragfairPriceService: RagfairPriceService; protected ragfairPriceService: RagfairPriceService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected weightedRandomHelper: WeightedRandomHelper;
protected pocketLootPool: Record<string, number>; protected pocketLootPool: Record<string, number>;
protected vestLootPool: Record<string, number>; protected vestLootPool: Record<string, number>;
protected backpackLootPool: Record<string, number>; protected backpackLootPool: Record<string, number>;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService); protected roubleTpl: string;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, ragfairPriceService: RagfairPriceService, seasonalEventService: SeasonalEventService, weightedRandomHelper: WeightedRandomHelper);
/** /**
* Create an array of loot items a PMC can have in their pockets * Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls * @returns string array of tpls
@ -44,11 +47,4 @@ export declare class PMCLootGenerator {
* @returns string array of tpls * @returns string array of tpls
*/ */
generatePMCBackpackLootPool(botRole: string): Record<string, number>; generatePMCBackpackLootPool(botRole: string): Record<string, number>;
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict
*/
protected reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -2,6 +2,7 @@ import { SavedCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/Giv
import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { PresetHelper } from "@spt-aki/helpers/PresetHelper"; import { PresetHelper } from "@spt-aki/helpers/PresetHelper";
import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest";
import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
@ -30,10 +31,16 @@ export declare class GiveSptCommand implements ISptCommand {
* spt give 5 <== this is the reply when the algo isn't sure about an item * spt give 5 <== this is the reply when the algo isn't sure about an item
*/ */
private static commandRegex; private static commandRegex;
private static maxAllowedDistance; private static acceptableConfidence;
protected savedCommand: Map<string, SavedCommand>; protected savedCommand: Map<string, SavedCommand>;
constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService); constructor(logger: ILogger, itemHelper: ItemHelper, hashUtil: HashUtil, jsonUtil: JsonUtil, presetHelper: PresetHelper, mailSendService: MailSendService, localeService: LocaleService, databaseServer: DatabaseServer, itemFilterService: ItemFilterService);
getCommand(): string; getCommand(): string;
getCommandHelp(): string; getCommandHelp(): string;
performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string; performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string;
/**
* A "simple" function that checks if an item is supposed to be given to a player or not
* @param templateItem the template item to check
* @returns true if its obtainable, false if its not
*/
protected isItemAllowed(templateItem: ITemplateItem): boolean;
} }

View File

@ -34,4 +34,11 @@ export declare class WeightedRandomHelper {
item: any; item: any;
index: number; index: number;
}; };
/**
* Find the greated common divisor of all weights and use it on the passed in dictionary
* @param weightedDict values to reduce
*/
reduceWeightValues(weightedDict: Record<string, number>): void;
protected commonDivisor(numbers: number[]): number;
protected gcd(a: number, b: number): number;
} }

View File

@ -109,5 +109,6 @@ export declare enum BaseClasses {
RECEIVER = "55818a304bdc2db5418b457d", RECEIVER = "55818a304bdc2db5418b457d",
BARREL = "555ef6e44bdc2de9068b457e", BARREL = "555ef6e44bdc2de9068b457e",
CHARGING_HANDLE = "55818a6f4bdc2db9688b456b", CHARGING_HANDLE = "55818a6f4bdc2db9688b456b",
COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 " COMB_MUZZLE_DEVICE = "550aa4dd4bdc2dc9348b4569 ",
HIDEOUT_AREA_CONTAINER = "63da6da4784a55176c018dba"
} }

View File

@ -13,4 +13,6 @@ export interface IInsuranceConfig extends IBaseConfig {
returnTimeOverrideSeconds: number; returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */ /** How often server should process insurance in seconds */
runIntervalSeconds: number; runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;
chanceNoAttachmentsTakenPercent: number;
} }

View File

@ -100,9 +100,9 @@ export declare class RagfairPriceService implements OnLoad {
*/ */
getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number; getDynamicOfferPriceForOffer(offerItems: Item[], desiredCurrency: string, isPackOffer: boolean): number;
/** /**
* @param itemTemplateId * @param itemTemplateId items tpl value
* @param desiredCurrency * @param desiredCurrency Currency to return result in
* @param item * @param item Item object (used for weapon presets)
* @param offerItems * @param offerItems
* @param isPackOffer * @param isPackOffer
* @returns * @returns

View File

@ -2,6 +2,7 @@ import { DialogueHelper } from "@spt-aki/helpers/DialogueHelper";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt-aki/models/eft/insurance/IGetInsuranceCostRequestData";
@ -20,6 +21,7 @@ import { MailSendService } from "@spt-aki/services/MailSendService";
import { PaymentService } from "@spt-aki/services/PaymentService"; import { PaymentService } from "@spt-aki/services/PaymentService";
import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService"; import { RagfairPriceService } from "@spt-aki/services/RagfairPriceService";
import { HashUtil } from "@spt-aki/utils/HashUtil"; import { HashUtil } from "@spt-aki/utils/HashUtil";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
import { MathUtil } from "@spt-aki/utils/MathUtil"; import { MathUtil } from "@spt-aki/utils/MathUtil";
import { RandomUtil } from "@spt-aki/utils/RandomUtil"; import { RandomUtil } from "@spt-aki/utils/RandomUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil";
@ -27,6 +29,7 @@ export declare class InsuranceController {
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mathUtil: MathUtil; protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -35,6 +38,7 @@ export declare class InsuranceController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper; protected dialogueHelper: DialogueHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -43,7 +47,7 @@ export declare class InsuranceController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig; protected insuranceConfig: IInsuranceConfig;
protected roubleTpl: string; protected roubleTpl: string;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, configServer: ConfigServer);
/** /**
* Process insurance items of all profiles prior to being given back to the player through the mail service. * Process insurance items of all profiles prior to being given back to the player through the mail service.
* *
@ -146,35 +150,15 @@ export declare class InsuranceController {
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>;
/** /**
* Sorts the attachment items by their dynamic price in descending order. * Get count of items to remove from weapon (take into account trader + price of attachment)
* * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
* @param attachments The array of attachments items. * @param traderId Trader attachment insured against
* @returns An array of items enriched with their max price and common locale-name. * @returns Attachment count to remove
*/ */
protected sortAttachmentsByPrice(attachments: Item[]): EnrichedItem[]; protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
/**
* Logs the details of each attachment item.
*
* @param attachments The array of attachment items.
*/
protected logAttachmentsDetails(attachments: EnrichedItem[]): void;
/**
* Counts the number of successful rolls for the attachment items.
*
* @param attachments The array of attachment items.
* @param traderId The ID of the trader that has insured these attachments.
* @returns The number of successful rolls.
*/
protected countSuccessfulRolls(attachments: Item[], traderId: string): number;
/**
* Marks the most valuable attachments for deletion based on the number of successful rolls made.
*
* @param attachments The array of attachment items.
* @param successfulRolls The number of successful rolls.
* @param toDelete The array that accumulates the IDs of the items to be deleted.
*/
protected attachmentDeletionByValue(attachments: EnrichedItem[], successfulRolls: number, toDelete: Set<string>): void;
/** /**
* Remove items from the insured items that should not be returned to the player. * Remove items from the insured items that should not be returned to the player.
* *
@ -192,7 +176,7 @@ export declare class InsuranceController {
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: Insurance): void;
/** /**
* Determines whether a insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
* *
* @param traderId The ID of the trader who insured the item. * @param traderId The ID of the trader who insured the item.
@ -220,8 +204,3 @@ export declare class InsuranceController {
*/ */
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
} }
interface EnrichedItem extends Item {
name: string;
dynamicPrice: number;
}
export {};

Some files were not shown because too many files have changed in this diff Show More