Server/project/src/controllers/RepairController.ts

116 lines
4.1 KiB
TypeScript
Raw Normal View History

2023-03-03 15:23:46 +00:00
import { inject, injectable } from "tsyringe";
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { QuestHelper } from "@spt/helpers/QuestHelper";
import { RepairHelper } from "@spt/helpers/RepairHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IRepairActionDataRequest } from "@spt/models/eft/repair/IRepairActionDataRequest";
import { ITraderRepairActionDataRequest } from "@spt/models/eft/repair/ITraderRepairActionDataRequest";
import { IRepairConfig } from "@spt/models/spt/config/IRepairConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
import { DatabaseServer } from "@spt/servers/DatabaseServer";
import { PaymentService } from "@spt/services/PaymentService";
import { RepairService } from "@spt/services/RepairService";
2023-03-03 15:23:46 +00:00
@injectable()
export class RepairController
{
protected repairConfig: IRepairConfig;
constructor(
@inject("WinstonLogger") protected logger: ILogger,
@inject("EventOutputHolder") protected eventOutputHolder: EventOutputHolder,
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
@inject("QuestHelper") protected questHelper: QuestHelper,
@inject("TraderHelper") protected traderHelper: TraderHelper,
@inject("PaymentService") protected paymentService: PaymentService,
@inject("RepairHelper") protected repairHelper: RepairHelper,
2023-11-15 20:35:05 -05:00
@inject("RepairService") protected repairService: RepairService,
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
2023-03-03 15:23:46 +00:00
)
2023-11-15 20:35:05 -05:00
{}
2023-03-03 15:23:46 +00:00
/**
2023-07-15 14:49:25 +01:00
* Handle TraderRepair event
2023-03-03 15:23:46 +00:00
* Repair with trader
* @param sessionID session id
* @param body endpoint request data
* @param pmcData player profile
* @returns item event router action
*/
2023-11-15 20:35:05 -05:00
public traderRepair(
sessionID: string,
body: ITraderRepairActionDataRequest,
pmcData: IPmcData,
): IItemEventRouterResponse
2023-03-03 15:23:46 +00:00
{
const output = this.eventOutputHolder.getOutput(sessionID);
2023-11-15 20:35:05 -05:00
2023-03-03 15:23:46 +00:00
// find the item to repair
for (const repairItem of body.repairItems)
{
const repairDetails = this.repairService.repairItemByTrader(sessionID, pmcData, repairItem, body.tid);
2023-11-15 20:35:05 -05:00
this.repairService.payForRepair(
sessionID,
pmcData,
repairItem._id,
repairDetails.repairCost,
body.tid,
output,
);
2023-03-03 15:23:46 +00:00
if (output.warnings.length > 0)
{
return output;
}
// Add repaired item to output object
output.profileChanges[sessionID].items.change.push(repairDetails.repairedItem);
// Add skill points for repairing weapons
this.repairService.addRepairSkillPoints(sessionID, repairDetails, pmcData);
}
return output;
}
/**
2023-07-15 14:49:25 +01:00
* Handle Repair event
2023-03-03 15:23:46 +00:00
* Repair with repair kit
* @param sessionID session id
* @param body endpoint request data
* @param pmcData player profile
* @returns item event router action
*/
public repairWithKit(
sessionID: string,
body: IRepairActionDataRequest,
pmcData: IPmcData,
): IItemEventRouterResponse
2023-03-03 15:23:46 +00:00
{
const output = this.eventOutputHolder.getOutput(sessionID);
// repair item
2023-11-15 20:35:05 -05:00
const repairDetails = this.repairService.repairItemByKit(
sessionID,
pmcData,
body.repairKitsInfo,
body.target,
output,
);
2023-03-03 15:23:46 +00:00
this.repairService.addBuffToItem(repairDetails, pmcData);
2023-03-03 15:23:46 +00:00
// add repaired item to send to client
output.profileChanges[sessionID].items.change.push(repairDetails.repairedItem);
// Add skill points for repairing items
2023-03-03 15:23:46 +00:00
this.repairService.addRepairSkillPoints(sessionID, repairDetails, pmcData);
return output;
}
2023-11-15 20:35:05 -05:00
}