diff --git a/src/controllers/api/creditsController.ts b/src/controllers/api/creditsController.ts index 5fb60575..d7b91d24 100644 --- a/src/controllers/api/creditsController.ts +++ b/src/controllers/api/creditsController.ts @@ -4,9 +4,15 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory } from "@/src/services/inventoryService"; export const creditsController: RequestHandler = async (req, res) => { - const accountId = await getAccountIdForRequest(req); - - const inventory = await getInventory(accountId, "RegularCredits TradesRemaining PremiumCreditsFree PremiumCredits"); + const inventory = ( + await Promise.all([ + getAccountIdForRequest(req), + getInventory( + req.query.accountId as string, + "RegularCredits TradesRemaining PremiumCreditsFree PremiumCredits" + ) + ]) + )[1]; const response = { RegularCredits: inventory.RegularCredits, diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 730756a1..cb855f16 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -13,7 +13,8 @@ import { allDailyAffiliationKeys, cleanupInventory, createLibraryDailyTask, - generateRewardSeed + generateRewardSeed, + getCalendarProgress } from "@/src/services/inventoryService"; import { logger } from "@/src/utils/logger"; import { addString, catBreadHash } from "@/src/helpers/stringHelpers"; @@ -108,6 +109,10 @@ export const inventoryController: RequestHandler = async (request, response) => } } + if (inventory.CalendarProgress) { + getCalendarProgress(inventory); // handle year rollover; the client expects to receive an inventory with an up-to-date CalendarProgress + } + cleanupInventory(inventory); inventory.NextRefill = new Date((today + 1) * 86400000); // tomorrow at 0 UTC diff --git a/src/controllers/api/loginRewardsController.ts b/src/controllers/api/loginRewardsController.ts index 8959c5c7..19940d08 100644 --- a/src/controllers/api/loginRewardsController.ts +++ b/src/controllers/api/loginRewardsController.ts @@ -9,6 +9,7 @@ import { } from "@/src/services/loginRewardService"; import { getInventory } from "@/src/services/inventoryService"; import { config } from "@/src/services/configService"; +import { sendWsBroadcastTo } from "@/src/services/webService"; export const loginRewardsController: RequestHandler = async (req, res) => { const account = await getAccountForRequest(req); @@ -51,6 +52,8 @@ export const loginRewardsController: RequestHandler = async (req, res) => { setAccountGotLoginRewardToday(account); await account.save(); + + sendWsBroadcastTo(account._id.toString(), { update_inventory: true }); } res.json(response); }; diff --git a/src/controllers/api/loginRewardsSelectionController.ts b/src/controllers/api/loginRewardsSelectionController.ts index 290a13f8..e3a699ec 100644 --- a/src/controllers/api/loginRewardsSelectionController.ts +++ b/src/controllers/api/loginRewardsSelectionController.ts @@ -6,6 +6,7 @@ import { } from "@/src/services/loginRewardService"; import { getAccountForRequest } from "@/src/services/loginService"; import { handleStoreItemAcquisition } from "@/src/services/purchaseService"; +import { sendWsBroadcastTo } from "@/src/services/webService"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { logger } from "@/src/utils/logger"; import { RequestHandler } from "express"; @@ -39,6 +40,7 @@ export const loginRewardsSelectionController: RequestHandler = async (req, res) setAccountGotLoginRewardToday(account); await account.save(); + sendWsBroadcastTo(account._id.toString(), { update_inventory: true }); res.json({ DailyTributeInfo: { NewInventory: inventoryChanges, diff --git a/src/controllers/api/sellController.ts b/src/controllers/api/sellController.ts index ff5c8f42..ccc96385 100644 --- a/src/controllers/api/sellController.ts +++ b/src/controllers/api/sellController.ts @@ -58,6 +58,9 @@ export const sellController: RequestHandler = async (req, res) => { if (payload.Items.Hoverboards) { requiredFields.add(InventorySlot.SPACESUITS); } + if (payload.Items.CrewMembers) { + requiredFields.add(InventorySlot.CREWMEMBERS); + } if (payload.Items.CrewShipWeapons || payload.Items.CrewShipWeaponSkins) { requiredFields.add(InventorySlot.RJ_COMPONENT_AND_ARMAMENTS); requiredFields.add("CrewShipRawSalvage"); @@ -181,6 +184,12 @@ export const sellController: RequestHandler = async (req, res) => { inventory.Drones.pull({ _id: sellItem.String }); }); } + if (payload.Items.CrewMembers) { + payload.Items.CrewMembers.forEach(sellItem => { + inventory.CrewMembers.pull({ _id: sellItem.String }); + freeUpSlot(inventory, InventorySlot.CREWMEMBERS); + }); + } if (payload.Items.CrewShipWeapons) { payload.Items.CrewShipWeapons.forEach(sellItem => { if (sellItem.String[0] == "/") { @@ -303,6 +312,7 @@ interface ISellRequest { OperatorAmps?: ISellItem[]; Hoverboards?: ISellItem[]; Drones?: ISellItem[]; + CrewMembers?: ISellItem[]; CrewShipWeapons?: ISellItem[]; CrewShipWeaponSkins?: ISellItem[]; }; diff --git a/src/services/itemDataService.ts b/src/services/itemDataService.ts index 0e862283..c44691f5 100644 --- a/src/services/itemDataService.ts +++ b/src/services/itemDataService.ts @@ -45,6 +45,39 @@ export type WeaponTypeInternal = | "SpecialItems"; export const getRecipe = (uniqueName: string): IRecipe | undefined => { + // Handle crafting of archwing summon for versions prior to 39.0.0 as this blueprint was removed then. + if (uniqueName == "/Lotus/Types/Recipes/EidolonRecipes/OpenArchwingSummonBlueprint") { + return { + resultType: "/Lotus/Types/Restoratives/OpenArchwingSummon", + buildPrice: 7500, + buildTime: 1800, + skipBuildTimePrice: 10, + consumeOnUse: false, + num: 1, + codexSecret: false, + alwaysAvailable: true, + ingredients: [ + { + ItemType: "/Lotus/Types/Gameplay/Eidolon/Resources/IraditeItem", + ItemCount: 50 + }, + { + ItemType: "/Lotus/Types/Gameplay/Eidolon/Resources/GrokdrulItem", + ItemCount: 50 + }, + { + ItemType: "/Lotus/Types/Items/Fish/Eidolon/FishParts/EidolonFishOilItem", + ItemCount: 30 + }, + { + ItemType: "/Lotus/Types/Items/MiscItems/Circuits", + ItemCount: 600 + } + ], + excludeFromMarket: true + }; + } + return ExportRecipes[uniqueName]; }; diff --git a/static/webui/index.html b/static/webui/index.html index 6c62867e..c228a9ef 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -75,7 +75,7 @@ -