2023-03-03 16:23:46 +01:00
|
|
|
import { inject, injectable } from "tsyringe";
|
|
|
|
|
2023-10-19 19:21:17 +02:00
|
|
|
import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
|
|
|
|
import { RepairHelper } from "@spt-aki/helpers/RepairHelper";
|
|
|
|
import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
|
|
|
|
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
|
|
|
|
import { IItemEventRouterResponse } from "@spt-aki/models/eft/itemEvent/IItemEventRouterResponse";
|
|
|
|
import { IRepairActionDataRequest } from "@spt-aki/models/eft/repair/IRepairActionDataRequest";
|
|
|
|
import { ITraderRepairActionDataRequest } from "@spt-aki/models/eft/repair/ITraderRepairActionDataRequest";
|
|
|
|
import { IRepairConfig } from "@spt-aki/models/spt/config/IRepairConfig";
|
|
|
|
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
|
|
|
|
import { EventOutputHolder } from "@spt-aki/routers/EventOutputHolder";
|
|
|
|
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
|
|
|
|
import { PaymentService } from "@spt-aki/services/PaymentService";
|
|
|
|
import { RepairService } from "@spt-aki/services/RepairService";
|
2023-03-03 16:23:46 +01: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-16 22:42:06 +01:00
|
|
|
@inject("RepairService") protected repairService: RepairService,
|
2023-03-03 16:23:46 +01:00
|
|
|
)
|
2023-11-16 22:42:06 +01:00
|
|
|
{}
|
2023-03-03 16:23:46 +01:00
|
|
|
|
|
|
|
/**
|
2023-07-15 15:49:25 +02:00
|
|
|
* Handle TraderRepair event
|
2023-03-03 16:23:46 +01:00
|
|
|
* Repair with trader
|
|
|
|
* @param sessionID session id
|
|
|
|
* @param body endpoint request data
|
|
|
|
* @param pmcData player profile
|
|
|
|
* @returns item event router action
|
|
|
|
*/
|
2023-11-16 22:42:06 +01:00
|
|
|
public traderRepair(
|
|
|
|
sessionID: string,
|
|
|
|
body: ITraderRepairActionDataRequest,
|
|
|
|
pmcData: IPmcData,
|
|
|
|
): IItemEventRouterResponse
|
2023-03-03 16:23:46 +01:00
|
|
|
{
|
|
|
|
const output = this.eventOutputHolder.getOutput(sessionID);
|
2023-11-16 22:42:06 +01:00
|
|
|
|
2023-03-03 16:23:46 +01:00
|
|
|
// find the item to repair
|
|
|
|
for (const repairItem of body.repairItems)
|
|
|
|
{
|
|
|
|
const repairDetails = this.repairService.repairItemByTrader(sessionID, pmcData, repairItem, body.tid);
|
|
|
|
|
2023-11-16 22:42:06 +01:00
|
|
|
this.repairService.payForRepair(
|
|
|
|
sessionID,
|
|
|
|
pmcData,
|
|
|
|
repairItem._id,
|
|
|
|
repairDetails.repairCost,
|
|
|
|
body.tid,
|
|
|
|
output,
|
|
|
|
);
|
2023-03-03 16:23:46 +01: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 15:49:25 +02:00
|
|
|
* Handle Repair event
|
2023-03-03 16:23:46 +01: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
|
|
|
|
{
|
|
|
|
const output = this.eventOutputHolder.getOutput(sessionID);
|
|
|
|
|
|
|
|
// repair item
|
2023-11-16 22:42:06 +01:00
|
|
|
const repairDetails = this.repairService.repairItemByKit(
|
|
|
|
sessionID,
|
|
|
|
pmcData,
|
|
|
|
body.repairKitsInfo,
|
|
|
|
body.target,
|
|
|
|
output,
|
|
|
|
);
|
2023-03-03 16:23:46 +01:00
|
|
|
|
|
|
|
this.repairService.addBuffToItem(repairDetails, pmcData);
|
|
|
|
|
|
|
|
// add repaired item to send to client
|
|
|
|
output.profileChanges[sessionID].items.change.push(repairDetails.repairedItem);
|
|
|
|
|
2023-07-13 11:26:47 +02:00
|
|
|
// Add skill points for repairing items
|
2023-03-03 16:23:46 +01:00
|
|
|
this.repairService.addRepairSkillPoints(sessionID, repairDetails, pmcData);
|
|
|
|
|
|
|
|
return output;
|
|
|
|
}
|
2023-11-16 22:42:06 +01:00
|
|
|
}
|