diff --git a/project/assets/database/templates/profiles.json b/project/assets/database/templates/profiles.json index b630a10c..bb1d702d 100644 --- a/project/assets/database/templates/profiles.json +++ b/project/assets/database/templates/profiles.json @@ -777,6 +777,26 @@ } } }, { + "_id": "658c3f38bb2016e5630bdbe5", + "_tpl": "65703d866584602f7d057a8a", + "parentId": "af4d8b34228a85208fb85895", + "slotId": "Soft_armor_front" + }, { + "_id": "658c3f38bb2016e5630bdbe6", + "_tpl": "65703fa06584602f7d057a8e", + "parentId": "af4d8b34228a85208fb85895", + "slotId": "Soft_armor_back" + }, { + "_id": "658c3f38bb2016e5630bdbe7", + "_tpl": "65703fe46a912c8b5c03468b", + "parentId": "af4d8b34228a85208fb85895", + "slotId": "Soft_armor_left" + }, { + "_id": "658c3f38bb2016e5630bdbe8", + "_tpl": "657040374e67e8ec7a0d261c", + "parentId": "af4d8b34228a85208fb85895", + "slotId": "soft_armor_right" + }, { "_id": "01e9d751f10e4e9aebdd94d5", "_tpl": "627a4e6b255f7527fb05a0f6", "parentId": "5fe49444ae6628187a2e77b8", @@ -866,6 +886,26 @@ } } }, { + "_id": "658c3f38bb2016e5630bdbe5", + "_tpl": "65703d866584602f7d057a8a", + "parentId": "fb08ac9e01a36533563a4389", + "slotId": "Soft_armor_front" + }, { + "_id": "658c3f38bb2016e5630bdbe6", + "_tpl": "65703fa06584602f7d057a8e", + "parentId": "fb08ac9e01a36533563a4389", + "slotId": "Soft_armor_back" + }, { + "_id": "658c3f38bb2016e5630bdbe7", + "_tpl": "65703fe46a912c8b5c03468b", + "parentId": "fb08ac9e01a36533563a4389", + "slotId": "Soft_armor_left" + }, { + "_id": "658c3f38bb2016e5630bdbe8", + "_tpl": "657040374e67e8ec7a0d261c", + "parentId": "fb08ac9e01a36533563a4389", + "slotId": "soft_armor_right" + }, { "_id": "686cfcc458f923cb2e76b8d7", "_tpl": "5710c24ad2720bc3458b45a3", "location": { @@ -37199,7 +37239,28 @@ "MaxDurability": 50 } } - }, { + }, +{ + "_id": "658c3f38bb2016e5630bdbe5", + "_tpl": "65703d866584602f7d057a8a", + "parentId": "5fe4977574f15b4ad31b662b", + "slotId": "Soft_armor_front" + }, { + "_id": "658c3f38bb2016e5630bdbe6", + "_tpl": "65703fa06584602f7d057a8e", + "parentId": "5fe4977574f15b4ad31b662b", + "slotId": "Soft_armor_back" + }, { + "_id": "658c3f38bb2016e5630bdbe7", + "_tpl": "65703fe46a912c8b5c03468b", + "parentId": "5fe4977574f15b4ad31b662b", + "slotId": "Soft_armor_left" + }, { + "_id": "658c3f38bb2016e5630bdbe8", + "_tpl": "657040374e67e8ec7a0d261c", + "parentId": "5fe4977574f15b4ad31b662b", + "slotId": "soft_armor_right" + }, { "_id": "5fe4977574f15b4ad31b662f", "_tpl": "627a4e6b255f7527fb05a0f6", "parentId": "5fe4977574f15b4ad31b6631", @@ -37288,7 +37349,27 @@ "MaxDurability": 50 } } - }, { + }, { + "_id": "658c3f38bb2016e5630bdbe5", + "_tpl": "65703d866584602f7d057a8a", + "parentId": "5fe4977574f15b4ad31b6633", + "slotId": "Soft_armor_front" + }, { + "_id": "658c3f38bb2016e5630bdbe6", + "_tpl": "65703fa06584602f7d057a8e", + "parentId": "5fe4977574f15b4ad31b6633", + "slotId": "Soft_armor_back" + }, { + "_id": "658c3f38bb2016e5630bdbe7", + "_tpl": "65703fe46a912c8b5c03468b", + "parentId": "5fe4977574f15b4ad31b6633", + "slotId": "Soft_armor_left" + }, { + "_id": "658c3f38bb2016e5630bdbe8", + "_tpl": "657040374e67e8ec7a0d261c", + "parentId": "5fe4977574f15b4ad31b6633", + "slotId": "soft_armor_right" + }, { "_id": "5fe4977574f15b4ad31b6634", "_tpl": "5710c24ad2720bc3458b45a3", "location": { @@ -37461,6 +37542,26 @@ } } }, { + "_id": "658c3f38bb2016e5630bdbe5", + "_tpl": "65703d866584602f7d057a8a", + "parentId": "5fe4977574f15b4ad31b6641", + "slotId": "Soft_armor_front" + }, { + "_id": "658c3f38bb2016e5630bdbe6", + "_tpl": "65703fa06584602f7d057a8e", + "parentId": "5fe4977574f15b4ad31b6641", + "slotId": "Soft_armor_back" + }, { + "_id": "658c3f38bb2016e5630bdbe7", + "_tpl": "65703fe46a912c8b5c03468b", + "parentId": "5fe4977574f15b4ad31b6641", + "slotId": "Soft_armor_left" + }, { + "_id": "658c3f38bb2016e5630bdbe8", + "_tpl": "657040374e67e8ec7a0d261c", + "parentId": "5fe4977574f15b4ad31b6641", + "slotId": "soft_armor_right" + }, { "_id": "5fe4977574f15b4ad31b6642", "_tpl": "5b40e5e25acfc4001a599bea", "location": { @@ -39793,6 +39894,26 @@ } } }, { + "_id": "658c3f38bb2016e5630bdbe5", + "_tpl": "65703d866584602f7d057a8a", + "parentId": "5fe49cdfa19cac3fa905407f", + "slotId": "Soft_armor_front" + }, { + "_id": "658c3f38bb2016e5630bdbe6", + "_tpl": "65703fa06584602f7d057a8e", + "parentId": "5fe49cdfa19cac3fa905407f", + "slotId": "Soft_armor_back" + }, { + "_id": "658c3f38bb2016e5630bdbe7", + "_tpl": "65703fe46a912c8b5c03468b", + "parentId": "5fe49cdfa19cac3fa905407f", + "slotId": "Soft_armor_left" + }, { + "_id": "658c3f38bb2016e5630bdbe8", + "_tpl": "657040374e67e8ec7a0d261c", + "parentId": "5fe49cdfa19cac3fa905407f", + "slotId": "soft_armor_right" + }, { "_id": "5fe49cdfa19cac3fa905407d", "_tpl": "627a4e6b255f7527fb05a0f6", "parentId": "5fe49cdfa19cac3fa905407f", @@ -40234,6 +40355,26 @@ } } }, { + "_id": "658c3f38bb2016e5630bdbe5", + "_tpl": "65703d866584602f7d057a8a", + "parentId": "5fe49cdfa19cac3fa905409d", + "slotId": "Soft_armor_front" + }, { + "_id": "658c3f38bb2016e5630bdbe6", + "_tpl": "65703fa06584602f7d057a8e", + "parentId": "5fe49cdfa19cac3fa905409d", + "slotId": "Soft_armor_back" + }, { + "_id": "658c3f38bb2016e5630bdbe7", + "_tpl": "65703fe46a912c8b5c03468b", + "parentId": "5fe49cdfa19cac3fa905409d", + "slotId": "Soft_armor_left" + }, { + "_id": "658c3f38bb2016e5630bdbe8", + "_tpl": "657040374e67e8ec7a0d261c", + "parentId": "5fe49cdfa19cac3fa905409d", + "slotId": "soft_armor_right" + }, { "_id": "5fe49cdfa19cac3fa905409e", "_tpl": "5448fee04bdc2dbc018b4567", "location": { @@ -40340,6 +40481,26 @@ } } }, { + "_id": "658c3f38bb2016e5630bdbe5", + "_tpl": "65703d866584602f7d057a8a", + "parentId": "5fe49cdfa19cac3fa90540a5", + "slotId": "Soft_armor_front" + }, { + "_id": "658c3f38bb2016e5630bdbe6", + "_tpl": "65703fa06584602f7d057a8e", + "parentId": "5fe49cdfa19cac3fa90540a5", + "slotId": "Soft_armor_back" + }, { + "_id": "658c3f38bb2016e5630bdbe7", + "_tpl": "65703fe46a912c8b5c03468b", + "parentId": "5fe49cdfa19cac3fa90540a5", + "slotId": "Soft_armor_left" + }, { + "_id": "658c3f38bb2016e5630bdbe8", + "_tpl": "657040374e67e8ec7a0d261c", + "parentId": "5fe49cdfa19cac3fa90540a5", + "slotId": "soft_armor_right" + }, { "_id": "5fe49cdfa19cac3fa90540a6", "_tpl": "5e831507ea0a7c419c2f9bd9", "location": { diff --git a/project/src/callbacks/AchievementCallbacks.ts b/project/src/callbacks/AchievementCallbacks.ts index ed823ecb..057a08ad 100644 --- a/project/src/callbacks/AchievementCallbacks.ts +++ b/project/src/callbacks/AchievementCallbacks.ts @@ -1,5 +1,10 @@ import { AchievementController } from "@spt-aki/controllers/AchievementController"; +import { ProfileController } from "@spt-aki/controllers/ProfileController"; import { IEmptyRequestData } from "@spt-aki/models/eft/common/IEmptyRequestData"; +import { IAchievement } from "@spt-aki/models/eft/common/tables/IAchievement"; +import { IGetBodyResponseData } from "@spt-aki/models/eft/httpResponse/IGetBodyResponseData"; +import { ICompletedAchievementsResponse } from "@spt-aki/models/eft/profile/ICompletedAchievementsResponse"; +import { IGetAchievementsResponse } from "@spt-aki/models/eft/profile/IGetAchievementsResponse"; import { HttpResponseUtil } from "@spt-aki/utils/HttpResponseUtil"; import { inject, injectable } from "tsyringe"; @@ -8,6 +13,7 @@ export class AchievementCallbacks { constructor( @inject("AchievementController") protected achievementController: AchievementController, + @inject("ProfileController") protected profileController: ProfileController, @inject("HttpResponseUtil") protected httpResponse: HttpResponseUtil, ) {} @@ -17,7 +23,7 @@ export class AchievementCallbacks * */ // eslint-disable-next-line @typescript-eslint/no-unused-vars - public getAchievements(url: string, info: IEmptyRequestData, sessionID: string): any + public getAchievements(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody(this.achievementController.getAchievements(sessionID)); @@ -28,8 +34,8 @@ export class AchievementCallbacks * */ // eslint-disable-next-line @typescript-eslint/no-unused-vars - public statistic(url: string, info: IEmptyRequestData, sessionID: string): any + public statistic(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData { - throw new Error("Not implemented"); + return this.httpResponse.getBody(this.profileController.getCompletedAchievements(sessionID)); } } \ No newline at end of file diff --git a/project/src/controllers/AchievementController.ts b/project/src/controllers/AchievementController.ts index 44b4f170..5f7d5e04 100644 --- a/project/src/controllers/AchievementController.ts +++ b/project/src/controllers/AchievementController.ts @@ -1,6 +1,6 @@ import { inject, injectable } from "tsyringe"; -import { IAchievement } from "@spt-aki/models/eft/common/tables/IAchievement"; +import { IGetAchievementsResponse } from "@spt-aki/models/eft/profile/IGetAchievementsResponse"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; @@ -21,8 +21,8 @@ export class AchievementController * Get base achievements * @param sessionID Session id */ - public getAchievements(sessionID: string): IAchievement[] + public getAchievements(sessionID: string): IGetAchievementsResponse { - return this.databaseServer.getTables().templates.achievements; + return {elements: this.databaseServer.getTables().templates.achievements }; } } diff --git a/project/src/controllers/ProfileController.ts b/project/src/controllers/ProfileController.ts index 5318bf8d..741a45b3 100644 --- a/project/src/controllers/ProfileController.ts +++ b/project/src/controllers/ProfileController.ts @@ -12,6 +12,7 @@ import { IItemEventRouterResponse } from "@spt-aki/models/eft/itemEvent/IItemEve import { IMiniProfile } from "@spt-aki/models/eft/launcher/IMiniProfile"; import { GetProfileStatusResponseData } from "@spt-aki/models/eft/profile/GetProfileStatusResponseData"; import { IAkiProfile, Inraid, Vitality } from "@spt-aki/models/eft/profile/IAkiProfile"; +import { ICompletedAchievementsResponse } from "@spt-aki/models/eft/profile/ICompletedAchievementsResponse"; import { IProfileChangeNicknameRequestData } from "@spt-aki/models/eft/profile/IProfileChangeNicknameRequestData"; import { IProfileChangeVoiceRequestData } from "@spt-aki/models/eft/profile/IProfileChangeVoiceRequestData"; import { IProfileCreateRequestData } from "@spt-aki/models/eft/profile/IProfileCreateRequestData"; @@ -178,6 +179,7 @@ export class ProfileController inraid: {} as Inraid, insurance: [], traderPurchases: {}, + achievements: {} }; this.profileFixerService.checkForAndFixPmcProfileIssues(profileDetails.characters.pmc); @@ -383,4 +385,11 @@ export class ProfileController return response; } + + public getCompletedAchievements(sessionId: string): ICompletedAchievementsResponse + { + const profile = this.profileHelper.getFullProfile(sessionId); + + return {elements: profile.achievements}; + } } diff --git a/project/src/models/eft/profile/IAkiProfile.ts b/project/src/models/eft/profile/IAkiProfile.ts index cefa2c5d..5d2602a5 100644 --- a/project/src/models/eft/profile/IAkiProfile.ts +++ b/project/src/models/eft/profile/IAkiProfile.ts @@ -7,6 +7,7 @@ import { IProfileChangeEvent } from "@spt-aki/models/spt/dialog/ISendMessageDeta export interface IAkiProfile { + info: Info; characters: Characters; /** Clothing purchases */ @@ -19,6 +20,8 @@ export interface IAkiProfile insurance: Insurance[]; /** Assort purchases made by player since last trader refresh */ traderPurchases?: Record>; + /** Achievements earned by player */ + achievements: Record; } export class TraderPurchaseData diff --git a/project/src/models/eft/profile/ICompletedAchievementsResponse.ts b/project/src/models/eft/profile/ICompletedAchievementsResponse.ts new file mode 100644 index 00000000..e9eaa9b0 --- /dev/null +++ b/project/src/models/eft/profile/ICompletedAchievementsResponse.ts @@ -0,0 +1,4 @@ +export interface ICompletedAchievementsResponse +{ + elements: Record +} \ No newline at end of file diff --git a/project/src/models/eft/profile/IGetAchievementsResponse.ts b/project/src/models/eft/profile/IGetAchievementsResponse.ts new file mode 100644 index 00000000..fc7cd1ad --- /dev/null +++ b/project/src/models/eft/profile/IGetAchievementsResponse.ts @@ -0,0 +1,6 @@ +import { IAchievement } from "../common/tables/IAchievement"; + +export interface IGetAchievementsResponse +{ + elements: IAchievement[] +} \ No newline at end of file