fix: consume a slot when item is crafted instead of bought via plat #1029
@ -26,7 +26,8 @@ import {
 | 
				
			|||||||
    ILibraryDailyTaskInfo,
 | 
					    ILibraryDailyTaskInfo,
 | 
				
			||||||
    ICalendarProgress,
 | 
					    ICalendarProgress,
 | 
				
			||||||
    IDroneClient,
 | 
					    IDroneClient,
 | 
				
			||||||
    IUpgradeClient
 | 
					    IUpgradeClient,
 | 
				
			||||||
 | 
					    ISlots
 | 
				
			||||||
} from "@/src/types/inventoryTypes/inventoryTypes";
 | 
					} from "@/src/types/inventoryTypes/inventoryTypes";
 | 
				
			||||||
import { IGenericUpdate } from "../types/genericUpdate";
 | 
					import { IGenericUpdate } from "../types/genericUpdate";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
@ -159,10 +160,31 @@ export const getInventory = async (
 | 
				
			|||||||
    return inventory;
 | 
					    return inventory;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const occupySlot = (
 | 
				
			||||||
 | 
					    inventory: TInventoryDatabaseDocument,
 | 
				
			||||||
 | 
					    bin: InventorySlot,
 | 
				
			||||||
 | 
					    premiumPurchase: boolean
 | 
				
			||||||
 | 
					): IInventoryChanges => {
 | 
				
			||||||
 | 
					    const slotChanges = {
 | 
				
			||||||
 | 
					        Slots: 0,
 | 
				
			||||||
 | 
					        Extra: 0
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    if (premiumPurchase) {
 | 
				
			||||||
 | 
					        slotChanges.Extra += 1;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        slotChanges.Slots -= 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    updateSlots(inventory, bin, slotChanges.Slots, slotChanges.Extra);
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					        [bin]: slotChanges satisfies ISlots
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const addItem = async (
 | 
					export const addItem = async (
 | 
				
			||||||
    inventory: TInventoryDatabaseDocument,
 | 
					    inventory: TInventoryDatabaseDocument,
 | 
				
			||||||
    typeName: string,
 | 
					    typeName: string,
 | 
				
			||||||
    quantity: number = 1
 | 
					    quantity: number = 1,
 | 
				
			||||||
 | 
					    premiumPurchase: boolean = false
 | 
				
			||||||
): Promise<{ InventoryChanges: IInventoryChanges }> => {
 | 
					): Promise<{ InventoryChanges: IInventoryChanges }> => {
 | 
				
			||||||
    // Bundles are technically StoreItems but a) they don't have a normal counterpart, and b) they are used in non-StoreItem contexts, e.g. email attachments.
 | 
					    // Bundles are technically StoreItems but a) they don't have a normal counterpart, and b) they are used in non-StoreItem contexts, e.g. email attachments.
 | 
				
			||||||
    if (typeName in ExportBundles) {
 | 
					    if (typeName in ExportBundles) {
 | 
				
			||||||
@ -305,11 +327,10 @@ export const addItem = async (
 | 
				
			|||||||
                    combineInventoryChanges(inventoryChanges, await addItem(inventory, item, 1));
 | 
					                    combineInventoryChanges(inventoryChanges, await addItem(inventory, item, 1));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            updateSlots(inventory, InventorySlot.WEAPONS, 0, 1);
 | 
					 | 
				
			||||||
            return {
 | 
					            return {
 | 
				
			||||||
                InventoryChanges: {
 | 
					                InventoryChanges: {
 | 
				
			||||||
                    ...inventoryChanges,
 | 
					                    ...inventoryChanges,
 | 
				
			||||||
                    WeaponBin: { count: 1, platinum: 0, Slots: -1 }
 | 
					                    ...occupySlot(inventory, InventorySlot.WEAPONS, premiumPurchase)
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
@ -378,44 +399,26 @@ export const addItem = async (
 | 
				
			|||||||
        case "Powersuits":
 | 
					        case "Powersuits":
 | 
				
			||||||
            switch (typeName.substr(1).split("/")[2]) {
 | 
					            switch (typeName.substr(1).split("/")[2]) {
 | 
				
			||||||
                default: {
 | 
					                default: {
 | 
				
			||||||
                    const inventoryChanges = addPowerSuit(inventory, typeName);
 | 
					 | 
				
			||||||
                    updateSlots(inventory, InventorySlot.SUITS, 0, 1);
 | 
					 | 
				
			||||||
                    return {
 | 
					                    return {
 | 
				
			||||||
                        InventoryChanges: {
 | 
					                        InventoryChanges: {
 | 
				
			||||||
                            ...inventoryChanges,
 | 
					                            ...addPowerSuit(inventory, typeName),
 | 
				
			||||||
                            SuitBin: {
 | 
					                            ...occupySlot(inventory, InventorySlot.SUITS, premiumPurchase)
 | 
				
			||||||
                                count: 1,
 | 
					 | 
				
			||||||
                                platinum: 0,
 | 
					 | 
				
			||||||
                                Slots: -1
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                case "Archwing": {
 | 
					                case "Archwing": {
 | 
				
			||||||
                    const inventoryChanges = addSpaceSuit(inventory, typeName);
 | 
					 | 
				
			||||||
                    updateSlots(inventory, InventorySlot.SPACESUITS, 0, 1);
 | 
					 | 
				
			||||||
                    return {
 | 
					                    return {
 | 
				
			||||||
                        InventoryChanges: {
 | 
					                        InventoryChanges: {
 | 
				
			||||||
                            ...inventoryChanges,
 | 
					                            ...addSpaceSuit(inventory, typeName),
 | 
				
			||||||
                            SpaceSuitBin: {
 | 
					                            ...occupySlot(inventory, InventorySlot.SPACESUITS, premiumPurchase)
 | 
				
			||||||
                                count: 1,
 | 
					 | 
				
			||||||
                                platinum: 0,
 | 
					 | 
				
			||||||
                                Slots: -1
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                case "EntratiMech": {
 | 
					                case "EntratiMech": {
 | 
				
			||||||
                    const inventoryChanges = addMechSuit(inventory, typeName);
 | 
					 | 
				
			||||||
                    updateSlots(inventory, InventorySlot.MECHSUITS, 0, 1);
 | 
					 | 
				
			||||||
                    return {
 | 
					                    return {
 | 
				
			||||||
                        InventoryChanges: {
 | 
					                        InventoryChanges: {
 | 
				
			||||||
                            ...inventoryChanges,
 | 
					                            ...addMechSuit(inventory, typeName),
 | 
				
			||||||
                            MechBin: {
 | 
					                            ...occupySlot(inventory, InventorySlot.MECHSUITS, premiumPurchase)
 | 
				
			||||||
                                count: 1,
 | 
					 | 
				
			||||||
                                platinum: 0,
 | 
					 | 
				
			||||||
                                Slots: -1
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -446,12 +449,10 @@ export const addItem = async (
 | 
				
			|||||||
        case "Types":
 | 
					        case "Types":
 | 
				
			||||||
            switch (typeName.substr(1).split("/")[2]) {
 | 
					            switch (typeName.substr(1).split("/")[2]) {
 | 
				
			||||||
                case "Sentinels": {
 | 
					                case "Sentinels": {
 | 
				
			||||||
                    const inventoryChanges = addSentinel(inventory, typeName);
 | 
					 | 
				
			||||||
                    updateSlots(inventory, InventorySlot.SENTINELS, 0, 1);
 | 
					 | 
				
			||||||
                    return {
 | 
					                    return {
 | 
				
			||||||
                        InventoryChanges: {
 | 
					                        InventoryChanges: {
 | 
				
			||||||
                            ...inventoryChanges,
 | 
					                            ...addSentinel(inventory, typeName),
 | 
				
			||||||
                            SentinelBin: { count: 1, platinum: 0, Slots: -1 }
 | 
					                            ...occupySlot(inventory, InventorySlot.SENTINELS, premiumPurchase)
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
				
			|||||||
@ -251,7 +251,7 @@ export const handleStoreItemAcquisition = async (
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        switch (storeCategory) {
 | 
					        switch (storeCategory) {
 | 
				
			||||||
            default: {
 | 
					            default: {
 | 
				
			||||||
                purchaseResponse = await addItem(inventory, internalName, quantity);
 | 
					                purchaseResponse = await addItem(inventory, internalName, quantity, true);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            case "Types":
 | 
					            case "Types":
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user