remove placed decos from vault & re-add on removal
All checks were successful
Build / build (22) (push) Successful in 41s
Build / build (20) (push) Successful in 1m16s
Build / build (18) (pull_request) Successful in 41s
Build / build (22) (pull_request) Successful in 1m17s
Build / build (18) (push) Successful in 1m13s
Build / build (20) (pull_request) Successful in 1m15s

This commit is contained in:
Sainan 2025-04-03 19:33:47 +02:00
parent 5e6d958358
commit 0588d6e5c6
5 changed files with 87 additions and 23 deletions

8
package-lock.json generated
View File

@ -18,7 +18,7 @@
"morgan": "^1.10.0",
"ncp": "^2.0.0",
"typescript": ">=5.5 <5.6.0",
"warframe-public-export-plus": "^0.5.49",
"warframe-public-export-plus": "^0.5.50",
"warframe-riven-info": "^0.1.2",
"winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0"
@ -3789,9 +3789,9 @@
}
},
"node_modules/warframe-public-export-plus": {
"version": "0.5.49",
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.49.tgz",
"integrity": "sha512-11HA8qEMhFfl12W2qIjjk7fhas+/5G2yXbrOEb8FRZby6tWka0CyUnB6tLT+PCqBEIoU+kwhz0g7CLh3Zmy7Pw=="
"version": "0.5.50",
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.50.tgz",
"integrity": "sha512-KlhdY/Q5sRAIn/RhmdviKBoX3gk+Jtuen0cWnFB2zqK7eKYMDtd79bKOtTPtnK9zCNzh6gFug2wEeDVam3Bwlw=="
},
"node_modules/warframe-riven-info": {
"version": "0.1.2",

View File

@ -24,7 +24,7 @@
"morgan": "^1.10.0",
"ncp": "^2.0.0",
"typescript": ">=5.5 <5.6.0",
"warframe-public-export-plus": "^0.5.49",
"warframe-public-export-plus": "^0.5.50",
"warframe-riven-info": "^0.1.2",
"winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0"

View File

@ -1,7 +1,10 @@
import { Alliance, GuildMember } from "@/src/models/guildModel";
import {
addGuildMemberMiscItemContribution,
addGuildMemberShipDecoContribution,
addVaultFusionTreasures,
addVaultMiscItems,
addVaultShipDecos,
getGuildForRequestEx
} from "@/src/services/guildService";
import {
@ -51,26 +54,21 @@ export const contributeToVaultController: RequestHandler = async (req, res) => {
}
if (request.MiscItems.length) {
addVaultMiscItems(guild, request.MiscItems);
for (const item of request.MiscItems) {
addGuildMemberMiscItemContribution(guildMember, item);
addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}
if (request.ShipDecorations.length) {
guild.VaultShipDecorations ??= [];
guildMember.ShipDecorationsContributed ??= [];
addVaultShipDecos(guild, request.ShipDecorations);
for (const item of request.ShipDecorations) {
guild.VaultShipDecorations.push(item);
guildMember.ShipDecorationsContributed.push(item);
addGuildMemberShipDecoContribution(guildMember, item);
addShipDecorations(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}
if (request.FusionTreasures.length) {
guild.VaultFusionTreasures ??= [];
addVaultFusionTreasures(guild, request.FusionTreasures);
for (const item of request.FusionTreasures) {
guild.VaultFusionTreasures.push(item);
addFusionTreasures(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}

View File

@ -4,7 +4,7 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
import { GuildPermission } from "@/src/types/guildTypes";
import { RequestHandler } from "express";
import { Types } from "mongoose";
import { ExportDojoRecipes } from "warframe-public-export-plus";
import { ExportDojoRecipes, ExportResources } from "warframe-public-export-plus";
export const placeDecoInComponentController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
@ -45,6 +45,14 @@ export const placeDecoInComponentController: RequestHandler = async (req, res) =
if (meta.capacityCost) {
component.DecoCapacity -= meta.capacityCost;
}
} else {
const itemType = Object.entries(ExportResources).find(arr => arr[1].deco == deco.Type)![0];
if (deco.Sockets !== undefined) {
guild.VaultFusionTreasures!.find(x => x.ItemType == itemType && x.Sockets == deco.Sockets)!.ItemCount -=
1;
} else {
guild.VaultShipDecorations!.find(x => x.ItemType == itemType)!.ItemCount -= 1;
}
}
if (!meta || (meta.price == 0 && meta.ingredients.length == 0)) {
deco.CompletionTime = new Date();
@ -65,4 +73,6 @@ interface IPlaceDecoInComponentRequest {
Sockets?: number;
Scale?: number; // only provided alongside MoveId and seems to always be 1
MoveId?: string;
ShipDeco?: boolean;
VaultDeco?: boolean;
}

View File

@ -21,13 +21,13 @@ import {
} from "@/src/types/guildTypes";
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
import { Types } from "mongoose";
import { ExportDojoRecipes, IDojoBuild, IDojoResearch } from "warframe-public-export-plus";
import { ExportDojoRecipes, ExportResources, IDojoBuild, IDojoResearch } from "warframe-public-export-plus";
import { logger } from "../utils/logger";
import { config } from "./configService";
import { Account } from "../models/loginModel";
import { getRandomInt } from "./rngService";
import { Inbox } from "../models/inboxModel";
import { ITypeCount } from "../types/inventoryTypes/inventoryTypes";
import { IFusionTreasure, ITypeCount } from "../types/inventoryTypes/inventoryTypes";
import { IInventoryChanges } from "../types/purchaseTypes";
export const getGuildForRequest = async (req: Request): Promise<TGuildDatabaseDocument> => {
@ -287,8 +287,28 @@ export const removeDojoDeco = (
1
)[0];
const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type);
if (meta && meta.capacityCost) {
component.DecoCapacity! += meta.capacityCost;
if (meta) {
if (meta.capacityCost) {
component.DecoCapacity! += meta.capacityCost;
}
} else {
const itemType = Object.entries(ExportResources).find(arr => arr[1].deco == deco.Type)![0];
if (deco.Sockets !== undefined) {
addVaultFusionTreasures(guild, [
{
ItemType: itemType,
ItemCount: 1,
Sockets: deco.Sockets
}
]);
} else {
addVaultShipDecos(guild, [
{
ItemType: itemType,
ItemCount: 1
}
]);
}
}
moveResourcesToVault(guild, deco);
};
@ -313,12 +333,38 @@ export const getVaultMiscItemCount = (guild: TGuildDatabaseDocument, itemType: s
export const addVaultMiscItems = (guild: TGuildDatabaseDocument, miscItems: ITypeCount[]): void => {
guild.VaultMiscItems ??= [];
for (const miscItem of miscItems) {
const vaultMiscItem = guild.VaultMiscItems.find(x => x.ItemType == miscItem.ItemType);
if (vaultMiscItem) {
vaultMiscItem.ItemCount += miscItem.ItemCount;
for (const item of miscItems) {
const vaultItem = guild.VaultMiscItems.find(x => x.ItemType == item.ItemType);
if (vaultItem) {
vaultItem.ItemCount += item.ItemCount;
} else {
guild.VaultMiscItems.push(miscItem);
guild.VaultMiscItems.push(item);
}
}
};
export const addVaultShipDecos = (guild: TGuildDatabaseDocument, shipDecos: ITypeCount[]): void => {
guild.VaultShipDecorations ??= [];
for (const item of shipDecos) {
const vaultItem = guild.VaultShipDecorations.find(x => x.ItemType == item.ItemType);
if (vaultItem) {
vaultItem.ItemCount += item.ItemCount;
} else {
guild.VaultShipDecorations.push(item);
}
}
};
export const addVaultFusionTreasures = (guild: TGuildDatabaseDocument, fusionTreasures: IFusionTreasure[]): void => {
guild.VaultFusionTreasures ??= [];
for (const item of fusionTreasures) {
const vaultItem = guild.VaultFusionTreasures.find(
x => x.ItemType == item.ItemType && x.Sockets == item.Sockets
);
if (vaultItem) {
vaultItem.ItemCount += item.ItemCount;
} else {
guild.VaultFusionTreasures.push(item);
}
}
};
@ -333,6 +379,16 @@ export const addGuildMemberMiscItemContribution = (guildMember: IGuildMemberData
}
};
export const addGuildMemberShipDecoContribution = (guildMember: IGuildMemberDatabase, item: ITypeCount): void => {
guildMember.ShipDecorationsContributed ??= [];
const shipDecoContribution = guildMember.ShipDecorationsContributed.find(x => x.ItemType == item.ItemType);
if (shipDecoContribution) {
shipDecoContribution.ItemCount += item.ItemCount;
} else {
guildMember.ShipDecorationsContributed.push(item);
}
};
export const processDojoBuildMaterialsGathered = (guild: TGuildDatabaseDocument, build: IDojoBuild): void => {
if (build.guildXpValue) {
guild.ClaimedXP ??= [];