From 4081508bf3a53c5e29ac8e892087f022300d0711 Mon Sep 17 00:00:00 2001 From: Dev Date: Wed, 22 May 2024 13:26:35 +0100 Subject: [PATCH] Improved accuracy of flea offer creation `user` object of each offer matches live Added `getPmcNicknameOfMaxLength()` to `botHelper` --- .../src/generators/RagfairOfferGenerator.ts | 67 ++++++++++++++---- project/src/helpers/BotHelper.ts | 13 +++- project/src/helpers/RagfairOfferHelper.ts | 4 +- project/src/helpers/RagfairServerHelper.ts | 69 ------------------- 4 files changed, 68 insertions(+), 85 deletions(-) diff --git a/project/src/generators/RagfairOfferGenerator.ts b/project/src/generators/RagfairOfferGenerator.ts index f71b93c5..d3a2b39d 100644 --- a/project/src/generators/RagfairOfferGenerator.ts +++ b/project/src/generators/RagfairOfferGenerator.ts @@ -1,14 +1,16 @@ import { inject, injectable } from "tsyringe"; import { RagfairAssortGenerator } from "@spt/generators/RagfairAssortGenerator"; +import { BotHelper } from "@spt/helpers/BotHelper"; import { HandbookHelper } from "@spt/helpers/HandbookHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper"; import { PaymentHelper } from "@spt/helpers/PaymentHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper"; +import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { RagfairServerHelper } from "@spt/helpers/RagfairServerHelper"; import { Item } from "@spt/models/eft/common/tables/IItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { IBarterScheme } from "@spt/models/eft/common/tables/ITrader"; -import { IRagfairOffer, OfferRequirement } from "@spt/models/eft/ragfair/IRagfairOffer"; +import { IRagfairOffer, IRagfairOfferUser, OfferRequirement } from "@spt/models/eft/ragfair/IRagfairOffer"; import { BaseClasses } from "@spt/models/enums/BaseClasses"; import { ConfigTypes } from "@spt/models/enums/ConfigTypes"; import { MemberCategory } from "@spt/models/enums/MemberCategory"; @@ -48,7 +50,9 @@ export class RagfairOfferGenerator @inject("TimeUtil") protected timeUtil: TimeUtil, @inject("DatabaseServer") protected databaseServer: DatabaseServer, @inject("RagfairServerHelper") protected ragfairServerHelper: RagfairServerHelper, + @inject("ProfileHelper") protected profileHelper: ProfileHelper, @inject("HandbookHelper") protected handbookHelper: HandbookHelper, + @inject("BotHelper") protected botHelper: BotHelper, @inject("SaveServer") protected saveServer: SaveServer, @inject("PresetHelper") protected presetHelper: PresetHelper, @inject("RagfairAssortGenerator") protected ragfairAssortGenerator: RagfairAssortGenerator, @@ -135,22 +139,13 @@ export class RagfairOfferGenerator } } - const itemCount = items.filter((x) => x.slotId === "hideout").length; + const itemRootCount = items.filter((item) => item.slotId === "hideout").length; const roublePrice = Math.round(this.convertOfferRequirementsIntoRoubles(offerRequirements)); const offer: IRagfairOffer = { _id: this.hashUtil.generate(), intId: this.offerCounter, - user: { - id: this.getTraderId(userID), - memberType: - userID === "ragfair" ? MemberCategory.DEFAULT : this.ragfairServerHelper.getMemberType(userID), - nickname: this.ragfairServerHelper.getNickname(userID), - rating: this.getRating(userID), - isRatingGrowing: this.getRatingGrowing(userID), - avatar: this.getAvatarUrl(isTrader, userID), - aid: this.ragfairServerHelper.getUserAid(userID), - }, + user: this.createUserDataForFleaOffer(userID, isTrader), root: items[0]._id, items: itemsClone, itemsCost: Math.round(this.handbookHelper.getTemplatePrice(items[0]._tpl)), // Handbook price @@ -165,7 +160,7 @@ export class RagfairOfferGenerator locked: false, unlimitedCount: false, notAvailable: false, - CurrentItemCount: itemCount, + CurrentItemCount: itemRootCount, }; this.offerCounter++; @@ -173,6 +168,52 @@ export class RagfairOfferGenerator return offer; } + /** + * Create the user object stored inside each flea offer object + * @param userID user creating the offer + * @param isTrader Is the user creating the offer a trader + * @returns IRagfairOfferUser + */ + createUserDataForFleaOffer(userID: string, isTrader: boolean): IRagfairOfferUser + { + // Trader offer + if (isTrader) + { + return { + id: userID, + memberType: MemberCategory.TRADER, + }; + } + + const isPlayerOffer = this.ragfairServerHelper.isPlayer(userID); + if (isPlayerOffer) + { + const playerProfile = this.profileHelper.getPmcProfile(userID); + return { + id: playerProfile._id, + memberType: MemberCategory.DEFAULT, + nickname: playerProfile.Info.Nickname, + rating: playerProfile.RagfairInfo.rating, + isRatingGrowing: playerProfile.RagfairInfo.isRatingGrowing, + avatar: null, + aid: playerProfile.aid, + }; + } + + // Regular old fake pmc offer + return { + id: userID, + memberType: MemberCategory.DEFAULT, + nickname: this.botHelper.getPmcNicknameOfMaxLength(userID, 50), + rating: this.randomUtil.getFloat( + this.ragfairConfig.dynamic.rating.min, + this.ragfairConfig.dynamic.rating.max), + isRatingGrowing: this.randomUtil.getBool(), + avatar: null, + aid: this.hashUtil.generateAccountId(), + }; + } + /** * Calculate the offer price that's listed on the flea listing * @param offerRequirements barter requirements for offer diff --git a/project/src/helpers/BotHelper.ts b/project/src/helpers/BotHelper.ts index 55949ad2..08f19bab 100644 --- a/project/src/helpers/BotHelper.ts +++ b/project/src/helpers/BotHelper.ts @@ -7,7 +7,6 @@ import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig"; import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ConfigServer } from "@spt/servers/ConfigServer"; import { DatabaseServer } from "@spt/servers/DatabaseServer"; -import { LocalisationService } from "@spt/services/LocalisationService"; import { RandomUtil } from "@spt/utils/RandomUtil"; @injectable() @@ -20,7 +19,6 @@ export class BotHelper @inject("WinstonLogger") protected logger: ILogger, @inject("DatabaseServer") protected databaseServer: DatabaseServer, @inject("RandomUtil") protected randomUtil: RandomUtil, - @inject("LocalisationService") protected localisationService: LocalisationService, @inject("ConfigServer") protected configServer: ConfigServer, ) { @@ -247,4 +245,15 @@ export class BotHelper { return this.randomUtil.getChance100(this.pmcConfig.isUsec) ? "Usec" : "Bear"; } + + public getPmcNicknameOfMaxLength(userId: string, maxLength: number): string + { + // recurivse if name is longer than max characters allowed (15 characters) + const randomType = this.randomUtil.getInt(0, 1) === 0 ? "usec" : "bear"; + const name + = this.randomUtil.getStringArrayValue(this.databaseServer.getTables().bots.types[randomType].firstName); + return name.length > maxLength + ? this.getPmcNicknameOfMaxLength(userId, maxLength) + : name; + } } diff --git a/project/src/helpers/RagfairOfferHelper.ts b/project/src/helpers/RagfairOfferHelper.ts index 7567fdce..16f33061 100644 --- a/project/src/helpers/RagfairOfferHelper.ts +++ b/project/src/helpers/RagfairOfferHelper.ts @@ -1,4 +1,5 @@ import { inject, injectable } from "tsyringe"; +import { BotHelper } from "@spt/helpers/BotHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper"; import { PaymentHelper } from "@spt/helpers/PaymentHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper"; @@ -51,6 +52,7 @@ export class RagfairOfferHelper @inject("TraderHelper") protected traderHelper: TraderHelper, @inject("SaveServer") protected saveServer: SaveServer, @inject("ItemHelper") protected itemHelper: ItemHelper, + @inject("BotHelper") protected botHelper: BotHelper, @inject("PaymentHelper") protected paymentHelper: PaymentHelper, @inject("PresetHelper") protected presetHelper: PresetHelper, @inject("ProfileHelper") protected profileHelper: ProfileHelper, @@ -538,7 +540,7 @@ export class RagfairOfferHelper // Used to replace tokens in sold message sent to player const tplVars: ISystemData = { soldItem: globalLocales[`${itemTpl} Name`] || itemTpl, - buyerNickname: this.ragfairServerHelper.getNickname(this.hashUtil.generate()), + buyerNickname: this.botHelper.getPmcNicknameOfMaxLength(this.hashUtil.generate(), 50), itemCount: boughtAmount, }; diff --git a/project/src/helpers/RagfairServerHelper.ts b/project/src/helpers/RagfairServerHelper.ts index b1558f8a..b7a4984c 100644 --- a/project/src/helpers/RagfairServerHelper.ts +++ b/project/src/helpers/RagfairServerHelper.ts @@ -1,5 +1,4 @@ import { inject, injectable } from "tsyringe"; -import { DialogueHelper } from "@spt/helpers/DialogueHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper"; @@ -7,7 +6,6 @@ import { Item } from "@spt/models/eft/common/tables/IItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { BaseClasses } from "@spt/models/enums/BaseClasses"; import { ConfigTypes } from "@spt/models/enums/ConfigTypes"; -import { MemberCategory } from "@spt/models/enums/MemberCategory"; import { MessageType } from "@spt/models/enums/MessageType"; import { Traders } from "@spt/models/enums/Traders"; import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig"; @@ -17,10 +15,8 @@ import { ConfigServer } from "@spt/servers/ConfigServer"; import { DatabaseServer } from "@spt/servers/DatabaseServer"; import { SaveServer } from "@spt/servers/SaveServer"; import { ItemFilterService } from "@spt/services/ItemFilterService"; -import { LocaleService } from "@spt/services/LocaleService"; import { MailSendService } from "@spt/services/MailSendService"; import { ICloner } from "@spt/utils/cloners/ICloner"; -import { HashUtil } from "@spt/utils/HashUtil"; import { RandomUtil } from "@spt/utils/RandomUtil"; import { TimeUtil } from "@spt/utils/TimeUtil"; @@ -37,14 +33,11 @@ export class RagfairServerHelper constructor( @inject("WinstonLogger") protected logger: ILogger, @inject("RandomUtil") protected randomUtil: RandomUtil, - @inject("HashUtil") protected hashUtil: HashUtil, @inject("TimeUtil") protected timeUtil: TimeUtil, @inject("SaveServer") protected saveServer: SaveServer, @inject("DatabaseServer") protected databaseServer: DatabaseServer, @inject("ProfileHelper") protected profileHelper: ProfileHelper, @inject("ItemHelper") protected itemHelper: ItemHelper, - @inject("LocaleService") protected localeService: LocaleService, - @inject("DialogueHelper") protected dialogueHelper: DialogueHelper, @inject("TraderHelper") protected traderHelper: TraderHelper, @inject("MailSendService") protected mailSendService: MailSendService, @inject("ItemFilterService") protected itemFilterService: ItemFilterService, @@ -241,68 +234,6 @@ export class RagfairServerHelper return bias[Math.floor(Math.random() * bias.length)]; } - public getMemberType(userID: string): MemberCategory - { - if (this.isPlayer(userID)) - { - // Player offer - return this.saveServer.getProfile(userID).characters.pmc.Info.AccountType; - } - - if (this.isTrader(userID)) - { - // trader offer - return MemberCategory.TRADER; - } - - // generated PMC offer - return MemberCategory.DEFAULT; - } - - public getUserAid(userID: string): number - { - if (this.isPlayer(userID)) - { - // Player offer - return this.saveServer.getProfile(userID).characters.pmc.aid; - } - - if (this.isTrader(userID)) - { - // trader offer - return undefined; - } - - // Generated PMC offer - return this.hashUtil.generateAccountId(); - } - - /** - * Get a player or traders nickname from their profile by their user id - * @param userID Sessionid/userid - * @returns Nickname of individual - */ - public getNickname(userID: string): string - { - if (this.isPlayer(userID)) - { - // player offer - return this.saveServer.getProfile(userID).characters.pmc.Info.Nickname; - } - - if (this.isTrader(userID)) - { - // trader offer - return this.databaseServer.getTables().traders[userID].base.nickname; - } - - // generated offer - // recurivse if name is longer than max characters allowed (15 characters) - const type = this.randomUtil.getInt(0, 1) === 0 ? "usec" : "bear"; - const name = this.randomUtil.getStringArrayValue(this.databaseServer.getTables().bots.types[type].firstName); - return name.length > 15 ? this.getNickname(userID) : name; - } - /** * Given a preset id from globals.json, return an array of items[] with unique ids * @param item Preset item