From 5460ccf93ded71255c2fa9b76effd453e0d303e6 Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Sat, 1 Feb 2025 07:41:34 -0800 Subject: [PATCH] feat: loc-pin saving (#879) Closes #404 Co-authored-by: Sainan Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/879 Reviewed-by: Sainan Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> --- src/models/inventoryModels/inventoryModel.ts | 37 ++++++++++++++++++- src/services/missionInventoryUpdateService.ts | 14 +++++++ src/types/inventoryTypes/inventoryTypes.ts | 21 +++++++++++ src/types/requestTypes.ts | 2 + 4 files changed, 73 insertions(+), 1 deletion(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 43587f96..52db89c0 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -60,7 +60,10 @@ import { ITraits, IKubrowPetDetailsClient, IKubrowPetEggDatabase, - IKubrowPetEggClient + IKubrowPetEggClient, + ICustomMarkers, + IMarkerInfo, + IMarker } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -849,6 +852,35 @@ infestedFoundrySchema.set("toJSON", { } }); +const markerSchema = new Schema( + { + anchorName: String, + color: Number, + label: String, + x: Number, + y: Number, + z: Number, + showInHud: Boolean + }, + { _id: false } +); + +const markerInfoSchema = new Schema( + { + icon: String, + markers: [markerSchema] + }, + { _id: false } +); + +const CustomMarkersSchema = new Schema( + { + tag: String, + markerInfos: [markerInfoSchema] + }, + { _id: false } +); + const inventorySchema = new Schema( { accountOwnerId: Schema.Types.ObjectId, @@ -1133,6 +1165,9 @@ const inventorySchema = new Schema( //https://warframe.fandom.com/wiki/Incarnon EvolutionProgress: { type: [evolutionProgressSchema], default: undefined }, + //https://warframe.fandom.com/wiki/Loc-Pin + CustomMarkers: { type: [CustomMarkersSchema], default: undefined }, + //Unknown and system DuviriInfo: DuviriInfoSchema, Mailbox: MailboxSchema, diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 547b63ef..32d55d54 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -155,6 +155,20 @@ export const addMissionInventoryUpdates = ( inventory.PlayerSkills.LPP_DRIFTER += value.LPP_DRIFTER; break; } + case "CustomMarkers": { + value.forEach(markers => { + const map = inventory.CustomMarkers + ? inventory.CustomMarkers.find(entry => entry.tag == markers.tag) + : undefined; + if (map) { + map.markerInfos = markers.markerInfos; + } else { + inventory.CustomMarkers ??= []; + inventory.CustomMarkers.push(markers); + } + }); + break; + } default: // Equipment XP updates if (equipmentKeys.includes(key as TEquipmentKey)) { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 0657ebad..256f8231 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -343,6 +343,7 @@ export interface IInventoryClient extends IDailyAffiliations { LastInventorySync: IOid; NextRefill: IMongoDate; // Next time argon crystals will have a decay tick FoundToday?: IMiscItem[]; // for Argon Crystals + CustomMarkers: ICustomMarkers[]; ActiveLandscapeTraps: any[]; EvolutionProgress?: IEvolutionProgress[]; RepVotes: any[]; @@ -1056,3 +1057,23 @@ export interface ICompletedDialogue { Booleans: string[]; Choices: number[]; } + +export interface ICustomMarkers { + tag: string; + markerInfos: IMarkerInfo[]; +} + +export interface IMarkerInfo { + icon: string; + markers: IMarker[]; +} + +export interface IMarker { + anchorName: string; + color: number; + label?: string; + x: number; + y: number; + z: number; + showInHud: boolean; +} diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 54363969..73fb8d73 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -11,6 +11,7 @@ import { TSolarMapRegion, TEquipmentKey, IFusionTreasure, + ICustomMarkers, IPlayerSkills, IQuestKeyDatabase } from "./inventoryTypes/inventoryTypes"; @@ -75,6 +76,7 @@ export type IMissionInventoryUpdateRequest = { EvolutionProgress?: IEvolutionProgress[]; FocusXpIncreases?: number[]; PlayerSkillGains: IPlayerSkills; + CustomMarkers?: ICustomMarkers[]; } & { [K in TEquipmentKey]?: IEquipmentClient[]; };