feat: handle KeyToRemove in EOM upload #1491
@ -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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,7 @@ import {
 | 
				
			|||||||
    addFusionTreasures,
 | 
					    addFusionTreasures,
 | 
				
			||||||
    addGearExpByCategory,
 | 
					    addGearExpByCategory,
 | 
				
			||||||
    addItem,
 | 
					    addItem,
 | 
				
			||||||
 | 
					    addLevelKeys,
 | 
				
			||||||
    addMiscItems,
 | 
					    addMiscItems,
 | 
				
			||||||
    addMissionComplete,
 | 
					    addMissionComplete,
 | 
				
			||||||
    addMods,
 | 
					    addMods,
 | 
				
			||||||
@ -77,11 +78,8 @@ 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 &&
 | 
					 | 
				
			||||||
        inventoryUpdates.Missions.Tag in ExportRegions
 | 
					 | 
				
			||||||
    ) {
 | 
					 | 
				
			||||||
            const node = ExportRegions[inventoryUpdates.Missions.Tag];
 | 
					            const node = ExportRegions[inventoryUpdates.Missions.Tag];
 | 
				
			||||||
            if (node.miscItemFee) {
 | 
					            if (node.miscItemFee) {
 | 
				
			||||||
                addMiscItems(inventory, [
 | 
					                addMiscItems(inventory, [
 | 
				
			||||||
@ -92,28 +90,19 @@ export const addMissionInventoryUpdates = async (
 | 
				
			|||||||
                ]);
 | 
					                ]);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    if (inventoryUpdates.RewardInfo) {
 | 
					        if (inventoryUpdates.KeyToRemove) {
 | 
				
			||||||
        if (inventoryUpdates.RewardInfo.periodicMissionTag) {
 | 
					            if (!inventoryUpdates.KeyOwner || inventory.accountOwnerId.equals(inventoryUpdates.KeyOwner)) {
 | 
				
			||||||
            const tag = inventoryUpdates.RewardInfo.periodicMissionTag;
 | 
					                addLevelKeys(inventory, [
 | 
				
			||||||
            const existingCompletion = inventory.PeriodicMissionCompletions.find(completion => completion.tag === tag);
 | 
					                    {
 | 
				
			||||||
 | 
					                        ItemType: inventoryUpdates.KeyToRemove,
 | 
				
			||||||
            if (existingCompletion) {
 | 
					                        ItemCount: -1
 | 
				
			||||||
                existingCompletion.date = new Date();
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                inventory.PeriodicMissionCompletions.push({
 | 
					 | 
				
			||||||
                    tag: tag,
 | 
					 | 
				
			||||||
                    date: new Date()
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
        }
 | 
					                ]);
 | 
				
			||||||
        if (inventoryUpdates.RewardInfo.NemesisAbandonedRewards) {
 | 
					 | 
				
			||||||
            inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards;
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (
 | 
					        if (
 | 
				
			||||||
            inventoryUpdates.MissionFailed &&
 | 
					            inventoryUpdates.MissionFailed &&
 | 
				
			||||||
            inventoryUpdates.MissionStatus == "GS_FAILURE" &&
 | 
					            inventoryUpdates.MissionStatus == "GS_FAILURE" &&
 | 
				
			||||||
        inventoryUpdates.EndOfMatchUpload &&
 | 
					 | 
				
			||||||
            inventoryUpdates.ObjectiveReached &&
 | 
					            inventoryUpdates.ObjectiveReached &&
 | 
				
			||||||
            !inventoryUpdates.LockedWeaponGroup
 | 
					            !inventoryUpdates.LockedWeaponGroup
 | 
				
			||||||
        ) {
 | 
					        ) {
 | 
				
			||||||
@ -136,6 +125,25 @@ export const addMissionInventoryUpdates = async (
 | 
				
			|||||||
                ]);
 | 
					                ]);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (inventoryUpdates.RewardInfo) {
 | 
				
			||||||
 | 
					        if (inventoryUpdates.RewardInfo.periodicMissionTag) {
 | 
				
			||||||
 | 
					            const tag = inventoryUpdates.RewardInfo.periodicMissionTag;
 | 
				
			||||||
 | 
					            const existingCompletion = inventory.PeriodicMissionCompletions.find(completion => completion.tag === tag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (existingCompletion) {
 | 
				
			||||||
 | 
					                existingCompletion.date = new Date();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                inventory.PeriodicMissionCompletions.push({
 | 
				
			||||||
 | 
					                    tag: tag,
 | 
				
			||||||
 | 
					                    date: new Date()
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (inventoryUpdates.RewardInfo.NemesisAbandonedRewards) {
 | 
				
			||||||
 | 
					            inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    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 `);
 | 
				
			||||||
 | 
				
			|||||||
@ -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[];
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user