diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index ab739c4c..e9b15a63 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -18,10 +18,12 @@ import { addMiscItems, allDailyAffiliationKeys, cleanupInventory, - createLibraryDailyTask + createLibraryDailyTask, + generateRewardSeed } from "@/src/services/inventoryService"; import { logger } from "@/src/utils/logger"; import { catBreadHash } from "@/src/helpers/stringHelpers"; +import { Types } from "mongoose"; export const inventoryController: RequestHandler = async (request, response) => { const accountId = await getAccountIdForRequest(request); @@ -87,7 +89,7 @@ export const inventoryController: RequestHandler = async (request, response) => cleanupInventory(inventory); inventory.NextRefill = new Date((Math.trunc(Date.now() / 86400000) + 1) * 86400000); - await inventory.save(); + //await inventory.save(); } if ( @@ -96,9 +98,20 @@ export const inventoryController: RequestHandler = async (request, response) => new Date() >= inventory.InfestedFoundry.AbilityOverrideUnlockCooldown ) { handleSubsumeCompletion(inventory); - await inventory.save(); + //await inventory.save(); } + if (inventory.LastInventorySync) { + const lastSyncDuviriMood = Math.trunc(inventory.LastInventorySync.getTimestamp().getTime() / 7200000); + const currentDuviriMood = Math.trunc(Date.now() / 7200000); + if (lastSyncDuviriMood != currentDuviriMood) { + logger.debug(`refreshing duviri seed`); + inventory.DuviriInfo.Seed = generateRewardSeed(); + } + } + inventory.LastInventorySync = new Types.ObjectId(); + await inventory.save(); + response.json(await getInventoryResponse(inventory, "xpBasedLevelCapDisabled" in request.query)); }; @@ -274,7 +287,7 @@ export const getInventoryResponse = async ( } // Omitting this field so opening the navigation resyncs the inventory which is more desirable for typical usage. - //inventoryResponse.LastInventorySync = toOid(new Types.ObjectId()); + inventoryResponse.LastInventorySync = undefined; // Set 2FA enabled so trading post can be used inventoryResponse.HWIDProtectEnabled = true; diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 2c1b4b09..dcb5a536 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -1662,6 +1662,7 @@ const inventorySchema = new Schema( //Unknown and system DuviriInfo: DuviriInfoSchema, + LastInventorySync: Schema.Types.ObjectId, Mailbox: MailboxSchema, HandlerPoints: Number, ChallengesFixVersion: { type: Number, default: 6 }, @@ -1759,6 +1760,9 @@ inventorySchema.set("toJSON", { sn: inventoryDatabase.LockedWeaponGroup.sn ? toOid(inventoryDatabase.LockedWeaponGroup.sn) : undefined }; } + if (inventoryDatabase.LastInventorySync) { + inventoryResponse.LastInventorySync = toOid(inventoryDatabase.LastInventorySync); + } } }); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 3662dc23..4973ff87 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -52,6 +52,7 @@ export interface IInventoryDatabase | "LastLiteSortieReward" | "CrewMembers" | "QualifyingInvasions" + | "LastInventorySync" | TEquipmentKey >, InventoryDatabaseEquipment { @@ -89,6 +90,7 @@ export interface IInventoryDatabase LastLiteSortieReward?: ILastSortieRewardDatabase[]; CrewMembers: ICrewMemberDatabase[]; QualifyingInvasions: IInvasionProgressDatabase[]; + LastInventorySync?: Types.ObjectId; } export interface IQuestKeyDatabase { @@ -333,7 +335,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu LotusCustomization?: ILotusCustomization; UseAdultOperatorLoadout?: boolean; NemesisAbandonedRewards: string[]; - LastInventorySync: IOid; + LastInventorySync?: IOid; NextRefill?: IMongoDate; FoundToday?: IMiscItem[]; // for Argon Crystals CustomMarkers?: ICustomMarkers[];