feat: argon crystal decay
This commit is contained in:
parent
84fdcdde1a
commit
784ead7222
@ -14,7 +14,8 @@ import {
|
|||||||
ExportVirtuals
|
ExportVirtuals
|
||||||
} from "warframe-public-export-plus";
|
} from "warframe-public-export-plus";
|
||||||
import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "./infestedFoundryController";
|
import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "./infestedFoundryController";
|
||||||
import { allDailyAffiliationKeys, createLibraryDailyTask } from "@/src/services/inventoryService";
|
import { addMiscItems, allDailyAffiliationKeys, createLibraryDailyTask } from "@/src/services/inventoryService";
|
||||||
|
import { logger } from "@/src/utils/logger";
|
||||||
|
|
||||||
export const inventoryController: RequestHandler = async (request, response) => {
|
export const inventoryController: RequestHandler = async (request, response) => {
|
||||||
const accountId = await getAccountIdForRequest(request);
|
const accountId = await getAccountIdForRequest(request);
|
||||||
@ -35,6 +36,40 @@ export const inventoryController: RequestHandler = async (request, response) =>
|
|||||||
|
|
||||||
inventory.LibraryAvailableDailyTaskInfo = createLibraryDailyTask();
|
inventory.LibraryAvailableDailyTaskInfo = createLibraryDailyTask();
|
||||||
|
|
||||||
|
if (inventory.NextRefill) {
|
||||||
|
const lastLoginDay = Math.trunc(inventory.NextRefill.getTime() / 86400000) - 1;
|
||||||
|
const today = Math.trunc(Date.now() / 86400000);
|
||||||
|
const daysPassed = today - lastLoginDay;
|
||||||
|
for (let i = 0; i != daysPassed; ++i) {
|
||||||
|
const numArgonCrystals =
|
||||||
|
inventory.MiscItems.find(x => x.ItemType == "/Lotus/Types/Items/MiscItems/ArgonCrystal")
|
||||||
|
?.ItemCount ?? 0;
|
||||||
|
if (numArgonCrystals == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const numStableArgonCrystals =
|
||||||
|
inventory.FoundToday?.find(x => x.ItemType == "/Lotus/Types/Items/MiscItems/ArgonCrystal")
|
||||||
|
?.ItemCount ?? 0;
|
||||||
|
const numDecayingArgonCrystals = numArgonCrystals - numStableArgonCrystals;
|
||||||
|
const numDecayingArgonCrystalsToRemove = Math.ceil(numDecayingArgonCrystals / 2);
|
||||||
|
logger.debug(`ticking argon crystals for day ${i + 1} of ${daysPassed}`, {
|
||||||
|
numArgonCrystals,
|
||||||
|
numStableArgonCrystals,
|
||||||
|
numDecayingArgonCrystals,
|
||||||
|
numDecayingArgonCrystalsToRemove
|
||||||
|
});
|
||||||
|
// Remove half of owned decaying argon crystals
|
||||||
|
addMiscItems(inventory, [
|
||||||
|
{
|
||||||
|
ItemType: "/Lotus/Types/Items/MiscItems/ArgonCrystal",
|
||||||
|
ItemCount: numDecayingArgonCrystalsToRemove * -1
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
// All stable argon crystals are now decaying
|
||||||
|
inventory.FoundToday = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inventory.NextRefill = new Date((Math.trunc(Date.now() / 86400000) + 1) * 86400000);
|
inventory.NextRefill = new Date((Math.trunc(Date.now() / 86400000) + 1) * 86400000);
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
}
|
}
|
||||||
|
@ -1161,7 +1161,8 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
|||||||
ChallengeProgress: [challengeProgressSchema],
|
ChallengeProgress: [challengeProgressSchema],
|
||||||
|
|
||||||
//Account Item like Ferrite,Form,Kuva etc
|
//Account Item like Ferrite,Form,Kuva etc
|
||||||
MiscItems: [typeCountSchema],
|
MiscItems: { type: [typeCountSchema], default: [] },
|
||||||
|
FoundToday: { type: [typeCountSchema], default: undefined },
|
||||||
|
|
||||||
//Non Upgrade Mods Example:I have 999 item WeaponElectricityDamageMod (only "ItemCount"+"ItemType")
|
//Non Upgrade Mods Example:I have 999 item WeaponElectricityDamageMod (only "ItemCount"+"ItemType")
|
||||||
RawUpgrades: [RawUpgrades],
|
RawUpgrades: [RawUpgrades],
|
||||||
|
@ -1045,6 +1045,22 @@ export const addMiscItems = (inventory: TInventoryDatabaseDocument, itemsArray:
|
|||||||
}
|
}
|
||||||
|
|
||||||
MiscItems[itemIndex].ItemCount += ItemCount;
|
MiscItems[itemIndex].ItemCount += ItemCount;
|
||||||
|
|
||||||
|
if (ItemType == "/Lotus/Types/Items/MiscItems/ArgonCrystal") {
|
||||||
|
inventory.FoundToday ??= [];
|
||||||
|
let foundTodayIndex = inventory.FoundToday.findIndex(x => x.ItemType == ItemType);
|
||||||
|
if (foundTodayIndex == -1) {
|
||||||
|
foundTodayIndex = inventory.FoundToday.push({ ItemType, ItemCount: 0 }) - 1;
|
||||||
|
}
|
||||||
|
inventory.FoundToday[foundTodayIndex].ItemCount += ItemCount;
|
||||||
|
if (inventory.FoundToday[foundTodayIndex].ItemCount <= 0) {
|
||||||
|
inventory.FoundToday.splice(foundTodayIndex, 1);
|
||||||
|
}
|
||||||
|
if (inventory.FoundToday.length == 0) {
|
||||||
|
inventory.FoundToday = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MiscItems[itemIndex].ItemCount == 0) {
|
if (MiscItems[itemIndex].ItemCount == 0) {
|
||||||
MiscItems.splice(itemIndex, 1);
|
MiscItems.splice(itemIndex, 1);
|
||||||
} else if (MiscItems[itemIndex].ItemCount <= 0) {
|
} else if (MiscItems[itemIndex].ItemCount <= 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user