0
0
mirror of https://github.com/sp-tarkov/server.git synced 2025-02-13 09:50:43 -05:00
server/project/src/servers/RagfairServer.ts

139 lines
4.9 KiB
TypeScript
Raw Normal View History

2023-03-03 15:23:46 +00:00
import { inject, injectable } from "tsyringe";
import { RagfairOfferGenerator } from "@spt-aki/generators/RagfairOfferGenerator";
import { TraderAssortHelper } from "@spt-aki/helpers/TraderAssortHelper";
import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
import { IRagfairOffer } from "@spt-aki/models/eft/ragfair/IRagfairOffer";
import { ISearchRequestData } from "@spt-aki/models/eft/ragfair/ISearchRequestData";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { Traders } from "@spt-aki/models/enums/Traders";
import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { LocalisationService } from "@spt-aki/services/LocalisationService";
import { RagfairCategoriesService } from "@spt-aki/services/RagfairCategoriesService";
import { RagfairOfferService } from "@spt-aki/services/RagfairOfferService";
import { RagfairRequiredItemsService } from "@spt-aki/services/RagfairRequiredItemsService";
2023-03-03 15:23:46 +00:00
@injectable()
export class RagfairServer
{
protected ragfairConfig: IRagfairConfig;
constructor(
@inject("WinstonLogger") protected logger: ILogger,
@inject("RagfairOfferGenerator") protected ragfairOfferGenerator: RagfairOfferGenerator,
@inject("RagfairOfferService") protected ragfairOfferService: RagfairOfferService,
@inject("RagfairCategoriesService") protected ragfairCategoriesService: RagfairCategoriesService,
@inject("RagfairRequiredItemsService") protected ragfairRequiredItemsService: RagfairRequiredItemsService,
@inject("LocalisationService") protected localisationService: LocalisationService,
@inject("TraderHelper") protected traderHelper: TraderHelper,
@inject("TraderAssortHelper") protected traderAssortHelper: TraderAssortHelper,
@inject("ConfigServer") protected configServer: ConfigServer,
2023-03-03 15:23:46 +00:00
)
{
this.ragfairConfig = this.configServer.getConfig(ConfigTypes.RAGFAIR);
}
public async load(): Promise<void>
{
await this.ragfairOfferGenerator.generateDynamicOffers();
await this.update();
}
public async update(): Promise<void>
{
this.ragfairOfferService.expireStaleOffers();
// Generate trader offers
const traders = this.getUpdateableTraders();
for (const traderId of traders)
2023-03-03 15:23:46 +00:00
{
// Skip generating fence offers
if (traderId === Traders.FENCE)
2023-03-03 15:23:46 +00:00
{
continue;
}
if (this.ragfairOfferService.traderOffersNeedRefreshing(traderId))
2023-03-03 15:23:46 +00:00
{
this.ragfairOfferGenerator.generateFleaOffersForTrader(traderId);
2023-03-03 15:23:46 +00:00
}
}
// Regenerate expired offers when over threshold limit
2023-03-03 15:23:46 +00:00
if (this.ragfairOfferService.getExpiredOfferCount() >= this.ragfairConfig.dynamic.expiredOfferThreshold)
{
const expiredAssortsWithChildren = this.ragfairOfferService.getExpiredOfferAssorts();
await this.ragfairOfferGenerator.generateDynamicOffers(expiredAssortsWithChildren);
2023-03-03 15:23:46 +00:00
// Clear out expired offers now we've generated them
2023-03-03 15:23:46 +00:00
this.ragfairOfferService.resetExpiredOffers();
}
this.ragfairRequiredItemsService.buildRequiredItemTable();
}
/**
* Get traders who need to be periodically refreshed
* @returns string array of traders
*/
2023-12-15 15:26:23 +00:00
public getUpdateableTraders(): string[]
2023-03-03 15:23:46 +00:00
{
return Object.keys(this.ragfairConfig.traders).filter((x) => this.ragfairConfig.traders[x]);
2023-03-03 15:23:46 +00:00
}
public getAllActiveCategories(
fleaUnlocked: boolean,
searchRequestData: ISearchRequestData,
offers: IRagfairOffer[],
): Record<string, number>
2023-03-03 15:23:46 +00:00
{
return this.ragfairCategoriesService.getCategoriesFromOffers(offers, searchRequestData, fleaUnlocked);
2023-03-03 15:23:46 +00:00
}
/**
* Disable/Hide an offer from flea
* @param offerId
*/
public hideOffer(offerId: string): void
{
const offers = this.ragfairOfferService.getOffers();
const offer = offers.find((x) => x._id === offerId);
2023-03-03 15:23:46 +00:00
if (!offer)
{
this.logger.error(this.localisationService.getText("ragfair-offer_not_found_unable_to_hide", offerId));
return;
}
offer.locked = true;
}
public getOffer(offerID: string): IRagfairOffer
{
return this.ragfairOfferService.getOfferByOfferId(offerID);
}
public getOffers(): IRagfairOffer[]
{
return this.ragfairOfferService.getOffers();
}
public removeOfferStack(offerID: string, amount: number): void
{
this.ragfairOfferService.removeOfferStack(offerID, amount);
2023-03-03 15:23:46 +00:00
}
public doesOfferExist(offerId: string): boolean
{
return this.ragfairOfferService.doesOfferExist(offerId);
}
public addPlayerOffers(): void
{
this.ragfairOfferService.addPlayerOffers();
}
}