2024-05-07 23:57:08 -04:00
|
|
|
import { inject, injectable } from "tsyringe";
|
2024-05-21 17:59:04 +00:00
|
|
|
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
|
|
|
import { QuestStatus } from "@spt/models/enums/QuestStatus";
|
2024-05-27 16:05:16 +00:00
|
|
|
import { TraderServiceType } from "@spt/models/enums/TraderServiceType";
|
2024-05-21 17:59:04 +00:00
|
|
|
import { ITraderServiceModel } from "@spt/models/spt/services/ITraderServiceModel";
|
|
|
|
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
|
|
|
import { DatabaseServer } from "@spt/servers/DatabaseServer";
|
|
|
|
import { ICloner } from "@spt/utils/cloners/ICloner";
|
2024-01-08 08:51:46 +00:00
|
|
|
|
|
|
|
@injectable()
|
|
|
|
export class TraderServicesService
|
|
|
|
{
|
|
|
|
constructor(
|
2024-02-25 20:18:54 +00:00
|
|
|
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
|
2024-05-28 14:04:20 +00:00
|
|
|
@inject("PrimaryLogger") protected logger: ILogger,
|
2024-01-08 08:51:46 +00:00
|
|
|
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
2024-05-28 14:04:20 +00:00
|
|
|
@inject("PrimaryCloner") protected cloner: ICloner,
|
2024-01-08 08:51:46 +00:00
|
|
|
)
|
|
|
|
{}
|
|
|
|
|
2024-02-25 20:18:54 +00:00
|
|
|
public getTraderServices(sessionId: string, traderId: string): ITraderServiceModel[]
|
2024-01-08 08:51:46 +00:00
|
|
|
{
|
2024-02-25 20:18:54 +00:00
|
|
|
const pmcData = this.profileHelper.getPmcProfile(sessionId);
|
2024-05-27 16:05:16 +00:00
|
|
|
let traderServices = this.cloner.clone(this.databaseServer.getTables().traders![traderId]?.services);
|
2024-02-25 20:18:54 +00:00
|
|
|
if (!traderServices)
|
|
|
|
{
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
|
|
|
// Filter out any service the user doesn't meet the conditions for
|
2024-05-27 16:05:16 +00:00
|
|
|
const servicesToDelete: TraderServiceType[] = [];
|
2024-02-25 20:18:54 +00:00
|
|
|
for (const service of traderServices)
|
|
|
|
{
|
|
|
|
if (service.requirements?.standings)
|
|
|
|
{
|
|
|
|
for (const [standingTrader, standing] of Object.entries(service.requirements.standings))
|
|
|
|
{
|
|
|
|
if (pmcData.TradersInfo[standingTrader].standing < standing)
|
|
|
|
{
|
|
|
|
servicesToDelete.push(service.serviceType);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (service.requirements?.completedQuests)
|
|
|
|
{
|
|
|
|
for (const questId of service.requirements.completedQuests)
|
|
|
|
{
|
2024-05-17 15:32:41 -04:00
|
|
|
const quest = pmcData.Quests.find((x) => x.qid === questId);
|
2024-03-30 14:25:46 -04:00
|
|
|
if (!quest || quest.status !== QuestStatus.Success)
|
2024-02-25 20:18:54 +00:00
|
|
|
{
|
|
|
|
servicesToDelete.push(service.serviceType);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Clear any unavailable services from the list
|
2024-05-17 15:32:41 -04:00
|
|
|
traderServices = traderServices.filter((x) => !servicesToDelete.includes(x.serviceType));
|
2024-02-25 20:18:54 +00:00
|
|
|
|
|
|
|
return traderServices;
|
2024-01-08 08:51:46 +00:00
|
|
|
}
|
2024-02-02 13:54:07 -05:00
|
|
|
}
|