feat: acquisition of resource extractor drones (#998)
Related to #793 Reviewed-on: OpenWF/SpaceNinjaServer#998 Co-authored-by: Sainan <sainan@calamity.inc> Co-committed-by: Sainan <sainan@calamity.inc>
This commit is contained in:
parent
d69cba6bef
commit
ebb28d56d5
@ -68,7 +68,9 @@ import {
|
|||||||
ICalendarProgress,
|
ICalendarProgress,
|
||||||
IPendingCouponDatabase,
|
IPendingCouponDatabase,
|
||||||
IPendingCouponClient,
|
IPendingCouponClient,
|
||||||
ILibraryAvailableDailyTaskInfo
|
ILibraryAvailableDailyTaskInfo,
|
||||||
|
IDroneDatabase,
|
||||||
|
IDroneClient
|
||||||
} from "../../types/inventoryTypes/inventoryTypes";
|
} from "../../types/inventoryTypes/inventoryTypes";
|
||||||
import { IOid } from "../../types/commonTypes";
|
import { IOid } from "../../types/commonTypes";
|
||||||
import {
|
import {
|
||||||
@ -349,6 +351,27 @@ const TypeXPItemSchema = new Schema<ITypeXPItem>(
|
|||||||
{ _id: false }
|
{ _id: false }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const droneSchema = new Schema<IDroneDatabase>(
|
||||||
|
{
|
||||||
|
ItemType: String,
|
||||||
|
CurrentHP: Number,
|
||||||
|
RepairStart: { type: Date, default: undefined }
|
||||||
|
},
|
||||||
|
{ id: false }
|
||||||
|
);
|
||||||
|
droneSchema.set("toJSON", {
|
||||||
|
virtuals: true,
|
||||||
|
transform(_document, obj) {
|
||||||
|
const client = obj as IDroneClient;
|
||||||
|
const db = obj as IDroneDatabase;
|
||||||
|
|
||||||
|
client.ItemId = toOid(db._id);
|
||||||
|
|
||||||
|
delete obj._id;
|
||||||
|
delete obj.__v;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const challengeProgressSchema = new Schema<IChallengeProgress>(
|
const challengeProgressSchema = new Schema<IChallengeProgress>(
|
||||||
{
|
{
|
||||||
Progress: Number,
|
Progress: Number,
|
||||||
@ -1148,8 +1171,8 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
|||||||
CompletedSorties: [String],
|
CompletedSorties: [String],
|
||||||
LastSortieReward: [Schema.Types.Mixed],
|
LastSortieReward: [Schema.Types.Mixed],
|
||||||
|
|
||||||
//Resource_Drone[Uselees stuff]
|
// Resource Extractor Drones
|
||||||
Drones: [Schema.Types.Mixed],
|
Drones: [droneSchema],
|
||||||
|
|
||||||
//Active profile ico
|
//Active profile ico
|
||||||
ActiveAvatarImageType: String,
|
ActiveAvatarImageType: String,
|
||||||
@ -1299,6 +1322,7 @@ export type InventoryDocumentProps = {
|
|||||||
PendingRecipes: Types.DocumentArray<IPendingRecipeDatabase>;
|
PendingRecipes: Types.DocumentArray<IPendingRecipeDatabase>;
|
||||||
WeaponSkins: Types.DocumentArray<IWeaponSkinDatabase>;
|
WeaponSkins: Types.DocumentArray<IWeaponSkinDatabase>;
|
||||||
QuestKeys: Types.DocumentArray<IQuestKeyDatabase>;
|
QuestKeys: Types.DocumentArray<IQuestKeyDatabase>;
|
||||||
|
Drones: Types.DocumentArray<IDroneDatabase>;
|
||||||
} & { [K in TEquipmentKey]: Types.DocumentArray<IEquipmentDatabase> };
|
} & { [K in TEquipmentKey]: Types.DocumentArray<IEquipmentDatabase> };
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||||
|
@ -24,7 +24,8 @@ import {
|
|||||||
IKubrowPetEggDatabase,
|
IKubrowPetEggDatabase,
|
||||||
IKubrowPetEggClient,
|
IKubrowPetEggClient,
|
||||||
ILibraryAvailableDailyTaskInfo,
|
ILibraryAvailableDailyTaskInfo,
|
||||||
ICalendarProgress
|
ICalendarProgress,
|
||||||
|
IDroneClient
|
||||||
} from "@/src/types/inventoryTypes/inventoryTypes";
|
} from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
import { IGenericUpdate } from "../types/genericUpdate";
|
import { IGenericUpdate } from "../types/genericUpdate";
|
||||||
import {
|
import {
|
||||||
@ -38,6 +39,7 @@ import { IEquipmentClient, IEquipmentDatabase, IItemConfig } from "../types/inve
|
|||||||
import {
|
import {
|
||||||
ExportArcanes,
|
ExportArcanes,
|
||||||
ExportCustoms,
|
ExportCustoms,
|
||||||
|
ExportDrones,
|
||||||
ExportFlavour,
|
ExportFlavour,
|
||||||
ExportFusionBundles,
|
ExportFusionBundles,
|
||||||
ExportGear,
|
ExportGear,
|
||||||
@ -336,6 +338,12 @@ export const addItem = async (
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
if (typeName in ExportDrones) {
|
||||||
|
const inventoryChanges = addDrone(inventory, typeName);
|
||||||
|
return {
|
||||||
|
InventoryChanges: inventoryChanges
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// Path-based duck typing
|
// Path-based duck typing
|
||||||
switch (typeName.substr(1).split("/")[1]) {
|
switch (typeName.substr(1).split("/")[1]) {
|
||||||
@ -809,6 +817,17 @@ const addMotorcycle = (
|
|||||||
return inventoryChanges;
|
return inventoryChanges;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const addDrone = (
|
||||||
|
inventory: TInventoryDatabaseDocument,
|
||||||
|
typeName: string,
|
||||||
|
inventoryChanges: IInventoryChanges = {}
|
||||||
|
): IInventoryChanges => {
|
||||||
|
const index = inventory.Drones.push({ ItemType: typeName, CurrentHP: ExportDrones[typeName].durability }) - 1;
|
||||||
|
inventoryChanges.Drones ??= [];
|
||||||
|
inventoryChanges.Drones.push(inventory.Drones[index].toJSON<IDroneClient>());
|
||||||
|
return inventoryChanges;
|
||||||
|
};
|
||||||
|
|
||||||
//TODO: wrong id is not erroring
|
//TODO: wrong id is not erroring
|
||||||
export const addGearExpByCategory = (
|
export const addGearExpByCategory = (
|
||||||
inventory: TInventoryDatabaseDocument,
|
inventory: TInventoryDatabaseDocument,
|
||||||
|
@ -39,6 +39,7 @@ export interface IInventoryDatabase
|
|||||||
| "DialogueHistory"
|
| "DialogueHistory"
|
||||||
| "KubrowPetEggs"
|
| "KubrowPetEggs"
|
||||||
| "PendingCoupon"
|
| "PendingCoupon"
|
||||||
|
| "Drones"
|
||||||
| TEquipmentKey
|
| TEquipmentKey
|
||||||
>,
|
>,
|
||||||
InventoryDatabaseEquipment {
|
InventoryDatabaseEquipment {
|
||||||
@ -63,6 +64,7 @@ export interface IInventoryDatabase
|
|||||||
DialogueHistory?: IDialogueHistoryDatabase;
|
DialogueHistory?: IDialogueHistoryDatabase;
|
||||||
KubrowPetEggs?: IKubrowPetEggDatabase[];
|
KubrowPetEggs?: IKubrowPetEggDatabase[];
|
||||||
PendingCoupon?: IPendingCouponDatabase;
|
PendingCoupon?: IPendingCouponDatabase;
|
||||||
|
Drones: IDroneDatabase[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IQuestKeyDatabase {
|
export interface IQuestKeyDatabase {
|
||||||
@ -258,7 +260,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu
|
|||||||
Alignment: IAlignment;
|
Alignment: IAlignment;
|
||||||
CompletedSorties: string[];
|
CompletedSorties: string[];
|
||||||
LastSortieReward: ILastSortieReward[];
|
LastSortieReward: ILastSortieReward[];
|
||||||
Drones: IDrone[];
|
Drones: IDroneClient[];
|
||||||
StepSequencers: IStepSequencer[];
|
StepSequencers: IStepSequencer[];
|
||||||
ActiveAvatarImageType: string;
|
ActiveAvatarImageType: string;
|
||||||
ShipDecorations: IConsumable[];
|
ShipDecorations: IConsumable[];
|
||||||
@ -508,13 +510,20 @@ export interface IDiscoveredMarker {
|
|||||||
discoveryState: number[];
|
discoveryState: number[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IDrone {
|
export interface IDroneClient {
|
||||||
ItemType: string;
|
ItemType: string;
|
||||||
CurrentHP: number;
|
CurrentHP: number;
|
||||||
ItemId: IOid;
|
ItemId: IOid;
|
||||||
RepairStart?: IMongoDate;
|
RepairStart?: IMongoDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IDroneDatabase {
|
||||||
|
ItemType: string;
|
||||||
|
CurrentHP: number;
|
||||||
|
_id: Types.ObjectId;
|
||||||
|
RepairStart?: Date;
|
||||||
|
}
|
||||||
|
|
||||||
export interface ITypeXPItem {
|
export interface ITypeXPItem {
|
||||||
ItemType: string;
|
ItemType: string;
|
||||||
XP: number;
|
XP: number;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { IEquipmentClient } from "./inventoryTypes/commonInventoryTypes";
|
import { IEquipmentClient } from "./inventoryTypes/commonInventoryTypes";
|
||||||
import { IInfestedFoundryClient, TEquipmentKey } from "./inventoryTypes/inventoryTypes";
|
import { IDroneClient, IInfestedFoundryClient, TEquipmentKey } from "./inventoryTypes/inventoryTypes";
|
||||||
|
|
||||||
export interface IPurchaseRequest {
|
export interface IPurchaseRequest {
|
||||||
PurchaseParams: IPurchaseParams;
|
PurchaseParams: IPurchaseParams;
|
||||||
@ -32,10 +32,10 @@ export type IInventoryChanges = {
|
|||||||
[_ in SlotNames]?: IBinChanges;
|
[_ in SlotNames]?: IBinChanges;
|
||||||
} & {
|
} & {
|
||||||
[_ in TEquipmentKey]?: IEquipmentClient[];
|
[_ in TEquipmentKey]?: IEquipmentClient[];
|
||||||
} & ICurrencyChanges & { InfestedFoundry?: IInfestedFoundryClient } & Record<
|
} & ICurrencyChanges & {
|
||||||
string,
|
InfestedFoundry?: IInfestedFoundryClient;
|
||||||
IBinChanges | number | object[] | IInfestedFoundryClient
|
Drones?: IDroneClient[];
|
||||||
>;
|
} & Record<string, IBinChanges | number | object[] | IInfestedFoundryClient>;
|
||||||
|
|
||||||
export interface IAffiliationMods {
|
export interface IAffiliationMods {
|
||||||
Tag: string;
|
Tag: string;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user