feat: handle KeyToRemove in EOM upload #1491

Merged
Sainan merged 3 commits from key-to-remove into main 2025-04-07 05:29:33 -07:00
3 changed files with 57 additions and 48 deletions

View File

@ -538,15 +538,9 @@ export const addItem = async (
if (!key) return {}; if (!key) return {};
return { QuestKeys: [key] }; return { QuestKeys: [key] };
} else { } else {
const key = { ItemType: typeName, ItemCount: quantity }; const levelKeyChanges = [{ ItemType: typeName, ItemCount: quantity }];
addLevelKeys(inventory, levelKeyChanges);
const index = inventory.LevelKeys.findIndex(levelKey => levelKey.ItemType == typeName); return { LevelKeys: levelKeyChanges };
if (index != -1) {
inventory.LevelKeys[index].ItemCount += quantity;
} else {
inventory.LevelKeys.push(key);
}
return { LevelKeys: [key] };
} }
} }
if (typeName in ExportDrones) { if (typeName in ExportDrones) {
@ -1240,6 +1234,10 @@ export const addRecipes = (inventory: TInventoryDatabaseDocument, itemsArray: IT
applyArrayChanges(inventory.Recipes, itemsArray); applyArrayChanges(inventory.Recipes, itemsArray);
}; };
export const addLevelKeys = (inventory: TInventoryDatabaseDocument, itemsArray: ITypeCount[]): void => {
applyArrayChanges(inventory.LevelKeys, itemsArray);
};
export const addMods = (inventory: TInventoryDatabaseDocument, itemsArray: IRawUpgrade[]): void => { export const addMods = (inventory: TInventoryDatabaseDocument, itemsArray: IRawUpgrade[]): void => {
const { RawUpgrades } = inventory; const { RawUpgrades } = inventory;

View File

@ -22,6 +22,7 @@ import {
addFusionTreasures, addFusionTreasures,
addGearExpByCategory, addGearExpByCategory,
addItem, addItem,
addLevelKeys,
addMiscItems, addMiscItems,
addMissionComplete, addMissionComplete,
addMods, addMods,
@ -77,19 +78,52 @@ export const addMissionInventoryUpdates = async (
inventoryUpdates: IMissionInventoryUpdateRequest inventoryUpdates: IMissionInventoryUpdateRequest
): Promise<IInventoryChanges> => { ): Promise<IInventoryChanges> => {
const inventoryChanges: IInventoryChanges = {}; const inventoryChanges: IInventoryChanges = {};
if ( if (inventoryUpdates.EndOfMatchUpload) {
inventoryUpdates.EndOfMatchUpload && if (inventoryUpdates.Missions && inventoryUpdates.Missions.Tag in ExportRegions) {
inventoryUpdates.Missions && const node = ExportRegions[inventoryUpdates.Missions.Tag];
inventoryUpdates.Missions.Tag in ExportRegions if (node.miscItemFee) {
) { addMiscItems(inventory, [
const node = ExportRegions[inventoryUpdates.Missions.Tag]; {
if (node.miscItemFee) { ItemType: node.miscItemFee.ItemType,
addMiscItems(inventory, [ ItemCount: node.miscItemFee.ItemCount * -1
{ }
ItemType: node.miscItemFee.ItemType, ]);
ItemCount: node.miscItemFee.ItemCount * -1 }
} }
]); if (inventoryUpdates.KeyToRemove) {
if (!inventoryUpdates.KeyOwner || inventory.accountOwnerId.equals(inventoryUpdates.KeyOwner)) {
addLevelKeys(inventory, [
{
ItemType: inventoryUpdates.KeyToRemove,
ItemCount: -1
}
]);
}
}
if (
inventoryUpdates.MissionFailed &&
inventoryUpdates.MissionStatus == "GS_FAILURE" &&
inventoryUpdates.ObjectiveReached &&
!inventoryUpdates.LockedWeaponGroup
) {
const loadout = (await Loadout.findById(inventory.LoadOutPresets, "NORMAL"))!;
const config = loadout.NORMAL.id(inventory.CurrentLoadOutIds[0].$oid)!;
const SuitId = new Types.ObjectId(config.s!.ItemId.$oid);
inventory.BrandedSuits ??= [];
if (!inventory.BrandedSuits.find(x => x.equals(SuitId))) {
inventory.BrandedSuits.push(SuitId);
await createMessage(inventory.accountOwnerId, [
{
sndr: "/Lotus/Language/Menu/Mailbox_WarframeSender",
msg: "/Lotus/Language/G1Quests/BrandedMessage",
sub: "/Lotus/Language/G1Quests/BrandedTitle",
att: ["/Lotus/Types/Recipes/Components/BrandRemovalBlueprint"],
highPriority: true // TOVERIFY: I cannot find any content of this within the last 10 years so I can only assume that highPriority is set (it certainly would make sense), but I just don't know for sure that it is so on live.
}
]);
}
} }
} }
if (inventoryUpdates.RewardInfo) { if (inventoryUpdates.RewardInfo) {
@ -110,32 +144,6 @@ export const addMissionInventoryUpdates = async (
inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards; inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards;
} }
} }
if (
inventoryUpdates.MissionFailed &&
inventoryUpdates.MissionStatus == "GS_FAILURE" &&
inventoryUpdates.EndOfMatchUpload &&
inventoryUpdates.ObjectiveReached &&
!inventoryUpdates.LockedWeaponGroup
) {
const loadout = (await Loadout.findById(inventory.LoadOutPresets, "NORMAL"))!;
const config = loadout.NORMAL.id(inventory.CurrentLoadOutIds[0].$oid)!;
const SuitId = new Types.ObjectId(config.s!.ItemId.$oid);
inventory.BrandedSuits ??= [];
if (!inventory.BrandedSuits.find(x => x.equals(SuitId))) {
inventory.BrandedSuits.push(SuitId);
await createMessage(inventory.accountOwnerId, [
{
sndr: "/Lotus/Language/Menu/Mailbox_WarframeSender",
msg: "/Lotus/Language/G1Quests/BrandedMessage",
sub: "/Lotus/Language/G1Quests/BrandedTitle",
att: ["/Lotus/Types/Recipes/Components/BrandRemovalBlueprint"],
highPriority: true // TOVERIFY: I cannot find any content of this within the last 10 years so I can only assume that highPriority is set (it certainly would make sense), but I just don't know for sure that it is so on live.
}
]);
}
}
for (const [key, value] of getEntriesUnsafe(inventoryUpdates)) { for (const [key, value] of getEntriesUnsafe(inventoryUpdates)) {
if (value === undefined) { if (value === undefined) {
logger.error(`Inventory update key ${key} has no value `); logger.error(`Inventory update key ${key} has no value `);

View File

@ -49,6 +49,9 @@ export type IMissionInventoryUpdateRequest = {
rewardsMultiplier?: number; rewardsMultiplier?: number;
GoalTag: string; GoalTag: string;
LevelKeyName: string; LevelKeyName: string;
KeyOwner?: string;
KeyRemovalHash?: string;
KeyToRemove?: string;
ActiveBoosters?: IBooster[]; ActiveBoosters?: IBooster[];
RawUpgrades?: IRawUpgrade[]; RawUpgrades?: IRawUpgrade[];
FusionTreasures?: IFusionTreasure[]; FusionTreasures?: IFusionTreasure[];