diff --git a/project/src/callbacks/BuildsCallbacks.ts b/project/src/callbacks/BuildsCallbacks.ts index 9bce275b..d1b1f1e8 100644 --- a/project/src/callbacks/BuildsCallbacks.ts +++ b/project/src/callbacks/BuildsCallbacks.ts @@ -1,4 +1,5 @@ import { BuildController } from "@spt-aki/controllers/BuildController"; +import { ISetMagazineRequest } from "@spt-aki/models/eft/builds/ISetMagazineRequest"; import { IEmptyRequestData } from "@spt-aki/models/eft/common/IEmptyRequestData"; import { IGetBodyResponseData } from "@spt-aki/models/eft/httpResponse/IGetBodyResponseData"; import { IUserBuilds } from "@spt-aki/models/eft/profile/IAkiProfile"; @@ -27,9 +28,11 @@ export class BuildsCallbacks * Handle client/builds/magazine/save */ // eslint-disable-next-line @typescript-eslint/no-unused-vars - public setMagazine(url: string, info: IEmptyRequestData, sessionID: string): any + public createMagazineTemplate(url: string, request: ISetMagazineRequest, sessionID: string): IGetBodyResponseData { - throw new Error("Not implemented"); + this.buildController.createMagazineTemplate(sessionID, request) + + return this.httpResponse.emptyResponse(); } /** diff --git a/project/src/controllers/BuildController.ts b/project/src/controllers/BuildController.ts index 942ff20b..16293e25 100644 --- a/project/src/controllers/BuildController.ts +++ b/project/src/controllers/BuildController.ts @@ -1,11 +1,13 @@ import { inject, injectable } from "tsyringe"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; +import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; +import { ISetMagazineRequest } from "@spt-aki/models/eft/builds/ISetMagazineRequest"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IItemEventRouterResponse } from "@spt-aki/models/eft/itemEvent/IItemEventRouterResponse"; import { IPresetBuildActionRequestData } from "@spt-aki/models/eft/presetBuild/IPresetBuildActionRequestData"; import { IRemoveBuildRequestData } from "@spt-aki/models/eft/presetBuild/IRemoveBuildRequestData"; -import { IUserBuilds, IWeaponBuild } from "@spt-aki/models/eft/profile/IAkiProfile"; +import { IMagazineBuild, IUserBuilds, IWeaponBuild } from "@spt-aki/models/eft/profile/IAkiProfile"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { EventOutputHolder } from "@spt-aki/routers/EventOutputHolder"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; @@ -22,6 +24,7 @@ export class BuildController @inject("EventOutputHolder") protected eventOutputHolder: EventOutputHolder, @inject("JsonUtil") protected jsonUtil: JsonUtil, @inject("DatabaseServer") protected databaseServer: DatabaseServer, + @inject("ProfileHelper") protected profileHelper: ProfileHelper, @inject("ItemHelper") protected itemHelper: ItemHelper, @inject("SaveServer") protected saveServer: SaveServer, ) @@ -226,4 +229,20 @@ export class BuildController return this.eventOutputHolder.getOutput(sessionID); } + + public createMagazineTemplate(sessionId: string, request: ISetMagazineRequest): void + { + const result: IMagazineBuild = { + Id: request.Id, + Name: request.Name, + Caliber: request.Caliber, + TopCount: request.TopCount, + BottomCount: request.BottomCount, + Items: request.items, + type: "magazine" + }; + + const profile = this.profileHelper.getFullProfile(sessionId); + profile.userbuilds.magazineBuilds.push(result); + } } diff --git a/project/src/controllers/ProfileController.ts b/project/src/controllers/ProfileController.ts index 741a45b3..acb52638 100644 --- a/project/src/controllers/ProfileController.ts +++ b/project/src/controllers/ProfileController.ts @@ -7,7 +7,7 @@ import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { QuestHelper } from "@spt-aki/helpers/QuestHelper"; import { TraderHelper } from "@spt-aki/helpers/TraderHelper"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; -import { TemplateSide } from "@spt-aki/models/eft/common/tables/IProfileTemplate"; +import { ITemplateSide } from "@spt-aki/models/eft/common/tables/IProfileTemplate"; import { IItemEventRouterResponse } from "@spt-aki/models/eft/itemEvent/IItemEventRouterResponse"; import { IMiniProfile } from "@spt-aki/models/eft/launcher/IMiniProfile"; import { GetProfileStatusResponseData } from "@spt-aki/models/eft/profile/GetProfileStatusResponseData"; @@ -127,7 +127,7 @@ export class ProfileController public createProfile(info: IProfileCreateRequestData, sessionID: string): string { const account = this.saveServer.getProfile(sessionID).info; - const profile: TemplateSide = + const profile: ITemplateSide = this.databaseServer.getTables().templates.profiles[account.edition][info.side.toLowerCase()]; const pmcData = profile.character; diff --git a/project/src/models/eft/builds/ISetMagazineRequest.ts b/project/src/models/eft/builds/ISetMagazineRequest.ts new file mode 100644 index 00000000..2bc6362c --- /dev/null +++ b/project/src/models/eft/builds/ISetMagazineRequest.ts @@ -0,0 +1,11 @@ +import { IMagazineTemplateAmmoItem } from "../profile/IAkiProfile" + +export interface ISetMagazineRequest +{ + Id: string + Name: string + Caliber: string + items: IMagazineTemplateAmmoItem[] + TopCount: number + BottomCount: number +} \ No newline at end of file diff --git a/project/src/models/eft/common/tables/IProfileTemplate.ts b/project/src/models/eft/common/tables/IProfileTemplate.ts index 7ad29b9e..c3da7bf3 100644 --- a/project/src/models/eft/common/tables/IProfileTemplate.ts +++ b/project/src/models/eft/common/tables/IProfileTemplate.ts @@ -17,11 +17,11 @@ export interface IProfileTemplates export interface IProfileSides { descriptionLocaleKey: string; - usec: TemplateSide; - bear: TemplateSide; + usec: ITemplateSide; + bear: ITemplateSide; } -export interface TemplateSide +export interface ITemplateSide { character: IPmcData; suits: string[]; diff --git a/project/src/models/eft/profile/IAkiProfile.ts b/project/src/models/eft/profile/IAkiProfile.ts index 5d2602a5..1b15489d 100644 --- a/project/src/models/eft/profile/IAkiProfile.ts +++ b/project/src/models/eft/profile/IAkiProfile.ts @@ -77,7 +77,19 @@ export interface IEquipmentBuild export interface IMagazineBuild { - + Id: string; + Name: string; + Caliber: string + TopCount: number + BottomCount: number + Items: IMagazineTemplateAmmoItem[] + type: string +} + +export interface IMagazineTemplateAmmoItem +{ + TemplateId: string + Count: number } export interface Dialogue diff --git a/project/src/routers/static/BuildStaticRouter.ts b/project/src/routers/static/BuildStaticRouter.ts index 6e083bee..9df72665 100644 --- a/project/src/routers/static/BuildStaticRouter.ts +++ b/project/src/routers/static/BuildStaticRouter.ts @@ -22,7 +22,7 @@ export class BuildsStaticRouter extends StaticRouter // eslint-disable-next-line @typescript-eslint/no-unused-vars (url: string, info: any, sessionID: string, output: string): any => { - return this.buildsCallbacks.setMagazine(url, info, sessionID); + return this.buildsCallbacks.createMagazineTemplate(url, info, sessionID); }, ), new RouteAction(