mirror of
https://github.com/sp-tarkov/server.git
synced 2025-02-13 09:50:43 -05:00
Improved accuracy of flea offer creation
`user` object of each offer matches live Added `getPmcNicknameOfMaxLength()` to `botHelper`
This commit is contained in:
parent
961210f73c
commit
4081508bf3
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user