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 { inject, injectable } from "tsyringe";
|
||||||
import { RagfairAssortGenerator } from "@spt/generators/RagfairAssortGenerator";
|
import { RagfairAssortGenerator } from "@spt/generators/RagfairAssortGenerator";
|
||||||
|
import { BotHelper } from "@spt/helpers/BotHelper";
|
||||||
import { HandbookHelper } from "@spt/helpers/HandbookHelper";
|
import { HandbookHelper } from "@spt/helpers/HandbookHelper";
|
||||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||||
import { PaymentHelper } from "@spt/helpers/PaymentHelper";
|
import { PaymentHelper } from "@spt/helpers/PaymentHelper";
|
||||||
import { PresetHelper } from "@spt/helpers/PresetHelper";
|
import { PresetHelper } from "@spt/helpers/PresetHelper";
|
||||||
|
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||||
import { RagfairServerHelper } from "@spt/helpers/RagfairServerHelper";
|
import { RagfairServerHelper } from "@spt/helpers/RagfairServerHelper";
|
||||||
import { Item } from "@spt/models/eft/common/tables/IItem";
|
import { Item } from "@spt/models/eft/common/tables/IItem";
|
||||||
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
|
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
|
||||||
import { IBarterScheme } from "@spt/models/eft/common/tables/ITrader";
|
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 { BaseClasses } from "@spt/models/enums/BaseClasses";
|
||||||
import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
|
import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
|
||||||
import { MemberCategory } from "@spt/models/enums/MemberCategory";
|
import { MemberCategory } from "@spt/models/enums/MemberCategory";
|
||||||
@ -48,7 +50,9 @@ export class RagfairOfferGenerator
|
|||||||
@inject("TimeUtil") protected timeUtil: TimeUtil,
|
@inject("TimeUtil") protected timeUtil: TimeUtil,
|
||||||
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
||||||
@inject("RagfairServerHelper") protected ragfairServerHelper: RagfairServerHelper,
|
@inject("RagfairServerHelper") protected ragfairServerHelper: RagfairServerHelper,
|
||||||
|
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
|
||||||
@inject("HandbookHelper") protected handbookHelper: HandbookHelper,
|
@inject("HandbookHelper") protected handbookHelper: HandbookHelper,
|
||||||
|
@inject("BotHelper") protected botHelper: BotHelper,
|
||||||
@inject("SaveServer") protected saveServer: SaveServer,
|
@inject("SaveServer") protected saveServer: SaveServer,
|
||||||
@inject("PresetHelper") protected presetHelper: PresetHelper,
|
@inject("PresetHelper") protected presetHelper: PresetHelper,
|
||||||
@inject("RagfairAssortGenerator") protected ragfairAssortGenerator: RagfairAssortGenerator,
|
@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 roublePrice = Math.round(this.convertOfferRequirementsIntoRoubles(offerRequirements));
|
||||||
|
|
||||||
const offer: IRagfairOffer = {
|
const offer: IRagfairOffer = {
|
||||||
_id: this.hashUtil.generate(),
|
_id: this.hashUtil.generate(),
|
||||||
intId: this.offerCounter,
|
intId: this.offerCounter,
|
||||||
user: {
|
user: this.createUserDataForFleaOffer(userID, isTrader),
|
||||||
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),
|
|
||||||
},
|
|
||||||
root: items[0]._id,
|
root: items[0]._id,
|
||||||
items: itemsClone,
|
items: itemsClone,
|
||||||
itemsCost: Math.round(this.handbookHelper.getTemplatePrice(items[0]._tpl)), // Handbook price
|
itemsCost: Math.round(this.handbookHelper.getTemplatePrice(items[0]._tpl)), // Handbook price
|
||||||
@ -165,7 +160,7 @@ export class RagfairOfferGenerator
|
|||||||
locked: false,
|
locked: false,
|
||||||
unlimitedCount: false,
|
unlimitedCount: false,
|
||||||
notAvailable: false,
|
notAvailable: false,
|
||||||
CurrentItemCount: itemCount,
|
CurrentItemCount: itemRootCount,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.offerCounter++;
|
this.offerCounter++;
|
||||||
@ -173,6 +168,52 @@ export class RagfairOfferGenerator
|
|||||||
return offer;
|
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
|
* Calculate the offer price that's listed on the flea listing
|
||||||
* @param offerRequirements barter requirements for offer
|
* @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 { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||||
import { DatabaseServer } from "@spt/servers/DatabaseServer";
|
import { DatabaseServer } from "@spt/servers/DatabaseServer";
|
||||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
|
||||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||||
|
|
||||||
@injectable()
|
@injectable()
|
||||||
@ -20,7 +19,6 @@ export class BotHelper
|
|||||||
@inject("WinstonLogger") protected logger: ILogger,
|
@inject("WinstonLogger") protected logger: ILogger,
|
||||||
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
||||||
@inject("RandomUtil") protected randomUtil: RandomUtil,
|
@inject("RandomUtil") protected randomUtil: RandomUtil,
|
||||||
@inject("LocalisationService") protected localisationService: LocalisationService,
|
|
||||||
@inject("ConfigServer") protected configServer: ConfigServer,
|
@inject("ConfigServer") protected configServer: ConfigServer,
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -247,4 +245,15 @@ export class BotHelper
|
|||||||
{
|
{
|
||||||
return this.randomUtil.getChance100(this.pmcConfig.isUsec) ? "Usec" : "Bear";
|
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 { inject, injectable } from "tsyringe";
|
||||||
|
import { BotHelper } from "@spt/helpers/BotHelper";
|
||||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||||
import { PaymentHelper } from "@spt/helpers/PaymentHelper";
|
import { PaymentHelper } from "@spt/helpers/PaymentHelper";
|
||||||
import { PresetHelper } from "@spt/helpers/PresetHelper";
|
import { PresetHelper } from "@spt/helpers/PresetHelper";
|
||||||
@ -51,6 +52,7 @@ export class RagfairOfferHelper
|
|||||||
@inject("TraderHelper") protected traderHelper: TraderHelper,
|
@inject("TraderHelper") protected traderHelper: TraderHelper,
|
||||||
@inject("SaveServer") protected saveServer: SaveServer,
|
@inject("SaveServer") protected saveServer: SaveServer,
|
||||||
@inject("ItemHelper") protected itemHelper: ItemHelper,
|
@inject("ItemHelper") protected itemHelper: ItemHelper,
|
||||||
|
@inject("BotHelper") protected botHelper: BotHelper,
|
||||||
@inject("PaymentHelper") protected paymentHelper: PaymentHelper,
|
@inject("PaymentHelper") protected paymentHelper: PaymentHelper,
|
||||||
@inject("PresetHelper") protected presetHelper: PresetHelper,
|
@inject("PresetHelper") protected presetHelper: PresetHelper,
|
||||||
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
|
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
|
||||||
@ -538,7 +540,7 @@ export class RagfairOfferHelper
|
|||||||
// Used to replace tokens in sold message sent to player
|
// Used to replace tokens in sold message sent to player
|
||||||
const tplVars: ISystemData = {
|
const tplVars: ISystemData = {
|
||||||
soldItem: globalLocales[`${itemTpl} Name`] || itemTpl,
|
soldItem: globalLocales[`${itemTpl} Name`] || itemTpl,
|
||||||
buyerNickname: this.ragfairServerHelper.getNickname(this.hashUtil.generate()),
|
buyerNickname: this.botHelper.getPmcNicknameOfMaxLength(this.hashUtil.generate(), 50),
|
||||||
itemCount: boughtAmount,
|
itemCount: boughtAmount,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { inject, injectable } from "tsyringe";
|
import { inject, injectable } from "tsyringe";
|
||||||
import { DialogueHelper } from "@spt/helpers/DialogueHelper";
|
|
||||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
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 { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
|
||||||
import { BaseClasses } from "@spt/models/enums/BaseClasses";
|
import { BaseClasses } from "@spt/models/enums/BaseClasses";
|
||||||
import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
|
import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
|
||||||
import { MemberCategory } from "@spt/models/enums/MemberCategory";
|
|
||||||
import { MessageType } from "@spt/models/enums/MessageType";
|
import { MessageType } from "@spt/models/enums/MessageType";
|
||||||
import { Traders } from "@spt/models/enums/Traders";
|
import { Traders } from "@spt/models/enums/Traders";
|
||||||
import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig";
|
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 { DatabaseServer } from "@spt/servers/DatabaseServer";
|
||||||
import { SaveServer } from "@spt/servers/SaveServer";
|
import { SaveServer } from "@spt/servers/SaveServer";
|
||||||
import { ItemFilterService } from "@spt/services/ItemFilterService";
|
import { ItemFilterService } from "@spt/services/ItemFilterService";
|
||||||
import { LocaleService } from "@spt/services/LocaleService";
|
|
||||||
import { MailSendService } from "@spt/services/MailSendService";
|
import { MailSendService } from "@spt/services/MailSendService";
|
||||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||||
import { HashUtil } from "@spt/utils/HashUtil";
|
|
||||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||||
|
|
||||||
@ -37,14 +33,11 @@ export class RagfairServerHelper
|
|||||||
constructor(
|
constructor(
|
||||||
@inject("WinstonLogger") protected logger: ILogger,
|
@inject("WinstonLogger") protected logger: ILogger,
|
||||||
@inject("RandomUtil") protected randomUtil: RandomUtil,
|
@inject("RandomUtil") protected randomUtil: RandomUtil,
|
||||||
@inject("HashUtil") protected hashUtil: HashUtil,
|
|
||||||
@inject("TimeUtil") protected timeUtil: TimeUtil,
|
@inject("TimeUtil") protected timeUtil: TimeUtil,
|
||||||
@inject("SaveServer") protected saveServer: SaveServer,
|
@inject("SaveServer") protected saveServer: SaveServer,
|
||||||
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
||||||
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
|
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
|
||||||
@inject("ItemHelper") protected itemHelper: ItemHelper,
|
@inject("ItemHelper") protected itemHelper: ItemHelper,
|
||||||
@inject("LocaleService") protected localeService: LocaleService,
|
|
||||||
@inject("DialogueHelper") protected dialogueHelper: DialogueHelper,
|
|
||||||
@inject("TraderHelper") protected traderHelper: TraderHelper,
|
@inject("TraderHelper") protected traderHelper: TraderHelper,
|
||||||
@inject("MailSendService") protected mailSendService: MailSendService,
|
@inject("MailSendService") protected mailSendService: MailSendService,
|
||||||
@inject("ItemFilterService") protected itemFilterService: ItemFilterService,
|
@inject("ItemFilterService") protected itemFilterService: ItemFilterService,
|
||||||
@ -241,68 +234,6 @@ export class RagfairServerHelper
|
|||||||
return bias[Math.floor(Math.random() * bias.length)];
|
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
|
* Given a preset id from globals.json, return an array of items[] with unique ids
|
||||||
* @param item Preset item
|
* @param item Preset item
|
||||||
|
Loading…
x
Reference in New Issue
Block a user