feat: implement purchasing of skins

This commit is contained in:
Sainan 2024-06-22 03:02:36 +02:00
parent ae3fe49d95
commit 7752d60c31
3 changed files with 27 additions and 7 deletions

View File

@ -31,7 +31,7 @@ import {
IQuestKeyResponse,
IFusionTreasure,
ISpectreLoadout,
IWeaponSkin,
IWeaponSkinDatabase,
ITauntHistory,
IPeriodicMissionCompletionDatabase,
IPeriodicMissionCompletionResponse,
@ -514,7 +514,7 @@ const spectreLoadoutsSchema = new Schema<ISpectreLoadout>(
{ _id: false }
);
const weaponSkinsSchema = new Schema<IWeaponSkin>(
const weaponSkinsSchema = new Schema<IWeaponSkinDatabase>(
{
ItemType: String
},
@ -976,6 +976,7 @@ type InventoryDocumentProps = {
SpaceMelee: Types.DocumentArray<IEquipmentDatabase>;
SentinelWeapons: Types.DocumentArray<IEquipmentDatabase>;
Hoverboards: Types.DocumentArray<IEquipmentDatabase>;
WeaponSkins: Types.DocumentArray<IWeaponSkinDatabase>;
};
// eslint-disable-next-line @typescript-eslint/ban-types

View File

@ -13,7 +13,8 @@ import {
IRawUpgrade,
ISeasonChallenge,
ITypeCount,
InventorySlot
InventorySlot,
IWeaponSkin
} from "@/src/types/inventoryTypes/inventoryTypes";
import { IGenericUpdate } from "../types/genericUpdate";
import {
@ -26,7 +27,7 @@ import { logger } from "@/src/utils/logger";
import { WeaponTypeInternal, getWeaponType, getExalted } from "@/src/services/itemDataService";
import { ISyndicateSacrifice, ISyndicateSacrificeResponse } from "../types/syndicateTypes";
import { IEquipmentClient } from "../types/inventoryTypes/commonInventoryTypes";
import { ExportRecipes, ExportResources } from "warframe-public-export-plus";
import { ExportCustoms, ExportRecipes, ExportResources } from "warframe-public-export-plus";
export const createInventory = async (
accountOwnerId: Types.ObjectId,
@ -104,6 +105,13 @@ export const addItem = async (
}
};
}
if (typeName in ExportCustoms) {
return {
InventoryChanges: {
WeaponSkins: [ await addSkin(typeName, accountId) ]
}
};
}
// Path-based duck typing
switch (typeName.substr(1).split("/")[1]) {
@ -445,12 +453,18 @@ export const addWeapon = async (
export const addCustomization = async (customizatonName: string, accountId: string): Promise<IFlavourItem> => {
const inventory = await getInventory(accountId);
const flavourItemIndex = inventory.FlavourItems.push({ ItemType: customizatonName }) - 1;
const changedInventory = await inventory.save();
return changedInventory.FlavourItems[flavourItemIndex].toJSON();
};
export const addSkin = async (typeName: string, accountId: string): Promise<IWeaponSkin> => {
const inventory = await getInventory(accountId);
const index = inventory.WeaponSkins.push({ ItemType: typeName }) - 1;
const changedInventory = await inventory.save();
return changedInventory.WeaponSkins[index].toJSON();
};
const addGearExpByCategory = (
inventory: IInventoryDatabaseDocument,
gearArray: IEquipmentClient[] | undefined,

View File

@ -24,6 +24,7 @@ export interface IInventoryDatabase
| "QuestKeys"
| "BlessingCooldown"
| "Ships"
| "WeaponSkins"
> {
accountOwnerId: Types.ObjectId;
Created: Date;
@ -35,6 +36,7 @@ export interface IInventoryDatabase
QuestKeys: IQuestKeyDatabase[];
BlessingCooldown: Date;
Ships: Types.ObjectId[];
WeaponSkins: IWeaponSkinDatabase[];
}
export interface IInventoryResponseDocument extends IInventoryResponse, Document {}
@ -846,8 +848,11 @@ export interface ITauntHistory {
state: string;
}
export interface IWeaponSkin {
ItemType: string;
export interface IWeaponSkinDatabase {
ItemType: string;
}
export interface IWeaponSkin extends IWeaponSkinDatabase {
ItemId: IOid;
}