respect IEmailItem.sendOnlyOnce
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Successful in 59s
Build / build (18) (pull_request) Successful in 41s
Build / build (20) (pull_request) Successful in 59s
Build / build (22) (pull_request) Successful in 40s
Build / build (22) (push) Successful in 36s
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Successful in 59s
Build / build (18) (pull_request) Successful in 41s
Build / build (20) (pull_request) Successful in 59s
Build / build (22) (pull_request) Successful in 40s
Build / build (22) (push) Successful in 36s
This commit is contained in:
parent
1341b71177
commit
26ad8fceff
@ -54,7 +54,7 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res)
|
||||
logger.debug("mission report:", missionReport);
|
||||
|
||||
const inventory = await getInventory(accountId);
|
||||
const inventoryUpdates = addMissionInventoryUpdates(inventory, missionReport);
|
||||
const inventoryUpdates = await addMissionInventoryUpdates(inventory, missionReport);
|
||||
|
||||
if (missionReport.MissionStatus !== "GS_SUCCESS") {
|
||||
await inventory.save();
|
||||
|
@ -428,10 +428,8 @@ export const addItem = async (
|
||||
};
|
||||
}
|
||||
if (typeName in ExportEmailItems) {
|
||||
const emailItem = ExportEmailItems[typeName];
|
||||
await createMessage(inventory.accountOwnerId.toString(), [convertInboxMessage(emailItem.message)]);
|
||||
return {
|
||||
InventoryChanges: {}
|
||||
InventoryChanges: await addEmailItem(inventory, typeName)
|
||||
};
|
||||
}
|
||||
|
||||
@ -943,6 +941,23 @@ const addDrone = (
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
export const addEmailItem = async (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
typeName: string,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): Promise<IInventoryChanges> => {
|
||||
const emailItem = ExportEmailItems[typeName];
|
||||
if (!emailItem.sendOnlyOnce || !inventory.EmailItems.find(x => x.ItemType == typeName)) {
|
||||
await createMessage(inventory.accountOwnerId.toString(), [convertInboxMessage(emailItem.message)]);
|
||||
|
||||
inventory.EmailItems.push({ ItemType: typeName, ItemCount: 1 });
|
||||
|
||||
inventoryChanges.EmailItems ??= [];
|
||||
inventoryChanges.EmailItems.push({ ItemType: typeName, ItemCount: 1 });
|
||||
}
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
//TODO: wrong id is not erroring
|
||||
export const addGearExpByCategory = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
|
@ -1,5 +1,4 @@
|
||||
import {
|
||||
ExportEmailItems,
|
||||
ExportFusionBundles,
|
||||
ExportRegions,
|
||||
ExportRewards,
|
||||
@ -15,6 +14,7 @@ import {
|
||||
addConsumables,
|
||||
addCrewShipAmmo,
|
||||
addCrewShipRawSalvage,
|
||||
addEmailItem,
|
||||
addFocusXpIncreases,
|
||||
addFusionTreasures,
|
||||
addGearExpByCategory,
|
||||
@ -28,7 +28,7 @@ import {
|
||||
import { updateQuestKey } from "@/src/services/questService";
|
||||
import { HydratedDocument } from "mongoose";
|
||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
||||
import { convertInboxMessage, getLevelKeyRewards, getNode } from "@/src/services/itemDataService";
|
||||
import { getLevelKeyRewards, getNode } from "@/src/services/itemDataService";
|
||||
import { InventoryDocumentProps, TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
||||
import { getEntriesUnsafe } from "@/src/utils/ts-utils";
|
||||
import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
||||
@ -62,10 +62,10 @@ const getRandomRewardByChance = (pool: IReward[]): IRngResult | undefined => {
|
||||
//type TignoredInventoryUpdateKeys = (typeof ignoredInventoryUpdateKeys)[number];
|
||||
//const knownUnhandledKeys: readonly string[] = ["test"] as const; // for unimplemented but important keys
|
||||
|
||||
export const addMissionInventoryUpdates = (
|
||||
export const addMissionInventoryUpdates = async (
|
||||
inventory: HydratedDocument<IInventoryDatabase, InventoryDocumentProps>,
|
||||
inventoryUpdates: IMissionInventoryUpdateRequest
|
||||
): Partial<IInventoryDatabase> | undefined => {
|
||||
): Promise<Partial<IInventoryDatabase> | undefined> => {
|
||||
//TODO: type this properly
|
||||
const inventoryChanges: Partial<IInventoryDatabase> = {};
|
||||
if (inventoryUpdates.MissionFailed === true) {
|
||||
@ -158,10 +158,9 @@ export const addMissionInventoryUpdates = (
|
||||
break;
|
||||
}
|
||||
case "EmailItems": {
|
||||
value.forEach(tc => {
|
||||
const emailItem = ExportEmailItems[tc.ItemType];
|
||||
void createMessage(inventory.accountOwnerId.toString(), [convertInboxMessage(emailItem.message)]);
|
||||
});
|
||||
for (const tc of value) {
|
||||
await addEmailItem(inventory, tc.ItemType);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "FocusXpIncreases": {
|
||||
@ -214,32 +213,32 @@ export const addMissionInventoryUpdates = (
|
||||
});
|
||||
break;
|
||||
case "CollectibleScans":
|
||||
value.forEach(scan => {
|
||||
for (const scan of value) {
|
||||
const entry = inventory.CollectibleSeries?.find(x => x.CollectibleType == scan.CollectibleType);
|
||||
if (entry) {
|
||||
entry.Count = scan.Count;
|
||||
entry.Tracking = scan.Tracking;
|
||||
if (entry.CollectibleType == "/Lotus/Objects/Orokin/Props/CollectibleSeriesOne") {
|
||||
const progress = entry.Count / entry.ReqScans;
|
||||
entry.IncentiveStates.forEach(gate => {
|
||||
for (const gate of entry.IncentiveStates) {
|
||||
gate.complete = progress >= gate.threshold;
|
||||
if (gate.complete && !gate.sent) {
|
||||
gate.sent = true;
|
||||
if (gate.threshold == 0.5) {
|
||||
void createMessage(inventory.accountOwnerId.toString(), [kuriaMessage50]);
|
||||
await createMessage(inventory.accountOwnerId.toString(), [kuriaMessage50]);
|
||||
} else {
|
||||
void createMessage(inventory.accountOwnerId.toString(), [kuriaMessage75]);
|
||||
await createMessage(inventory.accountOwnerId.toString(), [kuriaMessage75]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if (progress >= 1.0) {
|
||||
void createMessage(inventory.accountOwnerId.toString(), [kuriaMessage100]);
|
||||
await createMessage(inventory.accountOwnerId.toString(), [kuriaMessage100]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.warn(`${scan.CollectibleType} was not found in inventory, ignoring scans`);
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
case "Upgrades":
|
||||
value.forEach(clientUpgrade => {
|
||||
|
@ -1,5 +1,11 @@
|
||||
import { IEquipmentClient } from "./inventoryTypes/commonInventoryTypes";
|
||||
import { IDroneClient, IInfestedFoundryClient, IMiscItem, TEquipmentKey } from "./inventoryTypes/inventoryTypes";
|
||||
import {
|
||||
IDroneClient,
|
||||
IInfestedFoundryClient,
|
||||
IMiscItem,
|
||||
ITypeCount,
|
||||
TEquipmentKey
|
||||
} from "./inventoryTypes/inventoryTypes";
|
||||
|
||||
export interface IPurchaseRequest {
|
||||
PurchaseParams: IPurchaseParams;
|
||||
@ -33,6 +39,7 @@ export type IInventoryChanges = {
|
||||
InfestedFoundry?: IInfestedFoundryClient;
|
||||
Drones?: IDroneClient[];
|
||||
MiscItems?: IMiscItem[];
|
||||
EmailItems?: ITypeCount[];
|
||||
} & Record<
|
||||
Exclude<
|
||||
string,
|
||||
@ -44,6 +51,7 @@ export type IInventoryChanges = {
|
||||
| "InfestedFoundry"
|
||||
| "Drones"
|
||||
| "MiscItems"
|
||||
| "EmailItems"
|
||||
>,
|
||||
number | object[]
|
||||
>;
|
||||
|
Loading…
x
Reference in New Issue
Block a user