test
All checks were successful
Build / build (22) (push) Successful in 37s
Build / build (20) (push) Successful in 1m3s
Build / build (18) (push) Successful in 1m6s
Build / build (20) (pull_request) Successful in 38s
Build / build (18) (pull_request) Successful in 1m6s
Build / build (22) (pull_request) Successful in 1m8s

This commit is contained in:
OrdisPrime 2025-02-24 17:43:23 +01:00
parent 9de57668ab
commit 322c978476
5 changed files with 107 additions and 61 deletions

8
package-lock.json generated
View File

@ -12,7 +12,7 @@
"copyfiles": "^2.4.1",
"express": "^5",
"mongoose": "^8.9.4",
"warframe-public-export-plus": "^0.5.30",
"warframe-public-export-plus": "^0.5.35",
"warframe-riven-info": "^0.1.2",
"winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0"
@ -4093,9 +4093,9 @@
}
},
"node_modules/warframe-public-export-plus": {
"version": "0.5.32",
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.32.tgz",
"integrity": "sha512-jO9i2Gzz9DWibiHlEO17D975ajs6KrTay8cS5I0GkUUe1XWVU8mML4b+IYCHzM4FWq1t6p2YPCGznQfknqvorg=="
"version": "0.5.35",
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.35.tgz",
"integrity": "sha512-YLQP1n5sOV+PS5hfC4Kuoapa9gsqOy5Qy/E4EYfRV/xJBruFl3tPhbdbgFn3HhL2OBrgRJ8yzT5bjIvaHKhOCw=="
},
"node_modules/warframe-riven-info": {
"version": "0.1.2",

View File

@ -17,7 +17,7 @@
"copyfiles": "^2.4.1",
"express": "^5",
"mongoose": "^8.9.4",
"warframe-public-export-plus": "^0.5.30",
"warframe-public-export-plus": "^0.5.35",
"warframe-riven-info": "^0.1.2",
"winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0"

View File

@ -163,20 +163,21 @@ export const getKeyChainItems = ({ KeyChain, ChainStage }: IKeyChainRequest): st
};
export const getLevelKeyRewards = (levelKey: string) => {
const levelKeyData = ExportKeys[levelKey];
if (!levelKeyData) {
const error = `LevelKey ${levelKey} not found`;
logger.error(error);
throw new Error(error);
if (!ExportKeys[levelKey]) {
throw new Error(`LevelKey ${levelKey} not found`);
}
if (!levelKeyData.rewards) {
const error = `LevelKey ${levelKey} does not contain rewards`;
logger.error(error);
throw new Error(error);
const levelKeyRewards = ExportKeys[levelKey]?.missionReward;
const levelKeyRewards2 = ExportKeys[levelKey]?.rewards;
if (!levelKeyRewards && !levelKeyRewards2) {
throw new Error(`LevelKey ${levelKey} does not contain either rewards1 or rewards2`);
}
return levelKeyData.rewards;
return {
levelKeyRewards,
levelKeyRewards2
};
};
export const getNode = (nodeName: string): IRegion => {

View File

@ -1,4 +1,10 @@
import { ExportFusionBundles, ExportRegions, ExportRewards, IReward } from "warframe-public-export-plus";
import {
ExportFusionBundles,
ExportRegions,
ExportRewards,
IMissionReward as IMissionRewardExternal,
IReward
} from "warframe-public-export-plus";
import { IMissionInventoryUpdateRequest, IRewardInfo } from "../types/requestTypes";
import { logger } from "@/src/utils/logger";
import { IRngResult, getRandomReward } from "@/src/services/rngService";
@ -25,9 +31,8 @@ import { getLevelKeyRewards, getNode } from "@/src/services/itemDataService";
import { InventoryDocumentProps, TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
import { getEntriesUnsafe } from "@/src/utils/ts-utils";
import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
import junctionRewards from "@/static/fixed_responses/junctionRewards.json";
import { IJunctionRewards } from "@/src/types/commonTypes";
import { handleStoreItemAcquisition } from "./purchaseService";
import { IMissionReward } from "../types/missionTypes";
const getRotations = (rotationCount: number): number[] => {
if (rotationCount === 0) return [0];
@ -258,7 +263,11 @@ export const addMissionRewards = async (
if (levelKeyName) {
const fixedLevelRewards = getLevelKeyRewards(levelKeyName);
//logger.debug(`fixedLevelRewards ${fixedLevelRewards}`);
for (const reward of fixedLevelRewards) {
if (fixedLevelRewards.levelKeyRewards) {
addFixedLevelRewards(fixedLevelRewards.levelKeyRewards, inventory, MissionRewards);
}
if (fixedLevelRewards.levelKeyRewards2) {
for (const reward of fixedLevelRewards.levelKeyRewards2) {
//quest stage completion credit rewards
if (reward.rewardType == "RT_CREDITS") {
inventory.RegularCredits += reward.amount;
@ -271,18 +280,21 @@ export const addMissionRewards = async (
});
}
}
if (rewardInfo.node in junctionRewards) {
const junctionReward = (junctionRewards as IJunctionRewards)[rewardInfo.node];
for (const item of junctionReward.items) {
MissionRewards.push({
StoreItem: item.ItemType,
ItemCount: item.ItemCount
});
}
if (junctionReward.credits) {
inventory.RegularCredits += junctionReward.credits;
missionCompletionCredits += junctionReward.credits;
if (missions) {
const node = getNode(missions.Tag);
//node based credit rewards for mission completion
if (node.missionIndex !== 28) {
const levelCreditReward = getLevelCreditRewards(missions?.Tag);
missionCompletionCredits += levelCreditReward;
inventory.RegularCredits += levelCreditReward;
logger.debug(`levelCreditReward ${levelCreditReward}`);
}
if (node.missionReward) {
missionCompletionCredits += addFixedLevelRewards(node.missionReward, inventory, MissionRewards);
}
}
@ -294,19 +306,6 @@ export const addMissionRewards = async (
combineInventoryChanges(inventoryChanges, inventoryChange.InventoryChanges);
}
//node based credit rewards for mission completion
if (missions) {
const node = getNode(missions.Tag);
if (node.missionIndex !== 28) {
const levelCreditReward = getLevelCreditRewards(missions?.Tag);
missionCompletionCredits += levelCreditReward;
inventory.RegularCredits += levelCreditReward;
logger.debug(`levelCreditReward ${levelCreditReward}`);
}
}
//creditBonus is not correct for mirage mission 3
const credits = addCredits(inventory, {
missionCompletionCredits,
missionDropCredits: creditDrops ?? 0,
@ -316,7 +315,7 @@ export const addMissionRewards = async (
return { inventoryChanges, MissionRewards, credits };
};
//slightly inaccurate compared to official
//creditBonus is not entirely accurate.
//TODO: consider ActiveBoosters
export const addCredits = (
inventory: HydratedDocument<IInventoryDatabase>,
@ -348,6 +347,40 @@ export const addCredits = (
return { ...finalCredits, DailyMissionBonus: true };
};
export const addFixedLevelRewards = (
rewards: IMissionRewardExternal,
inventory: TInventoryDatabaseDocument,
MissionRewards: IMissionReward[]
) => {
let missionBonusCredits = 0;
if (rewards.credits) {
missionBonusCredits += rewards.credits;
inventory.RegularCredits += rewards.credits;
}
if (rewards.items) {
for (const item of rewards.items) {
MissionRewards.push({
StoreItem: `/Lotus/StoreItems${item.substring("Lotus/".length)}`,
ItemCount: 1
});
}
}
if (rewards.countedItems) {
for (const item of rewards.countedItems) {
MissionRewards.push({
StoreItem: `/Lotus/StoreItems${item.ItemType.substring("Lotus/".length)}`,
ItemCount: item.ItemCount
});
}
}
if (rewards.countedStoreItems) {
for (const item of rewards.countedStoreItems) {
MissionRewards.push(item);
}
}
return missionBonusCredits;
};
function getLevelCreditRewards(nodeName: string): number {
const minEnemyLevel = getNode(nodeName).minEnemyLevel;

View File

@ -14,6 +14,7 @@ import {
import { logger } from "@/src/utils/logger";
import { HydratedDocument } from "mongoose";
import { ExportKeys } from "warframe-public-export-plus";
import { addFixedLevelRewards } from "./missionInventoryUpdateService";
export interface IUpdateQuestRequest {
QuestKeys: Omit<IQuestKeyDatabase, "CompletionDate">[];
@ -136,8 +137,18 @@ export const completeQuest = async (inventory: TInventoryDatabaseDocument, quest
const missionName = chainStages[i].key;
if (missionName) {
const fixedLevelRewards = getLevelKeyRewards(missionName);
//logger.debug(`fixedLevelRewards ${fixedLevelRewards}`);
for (const reward of fixedLevelRewards) {
//logger.debug(`fixedLevelRewards`, fixedLevelRewards);
if (fixedLevelRewards.levelKeyRewards) {
const missionRewards: { StoreItem: string; ItemCount: number }[] = [];
addFixedLevelRewards(fixedLevelRewards.levelKeyRewards, inventory, missionRewards);
console.log("missionRewards", missionRewards);
for (const reward of missionRewards) {
console.log("adding reward", reward.StoreItem.replace("StoreItems/", ""), reward.ItemCount);
await addItem(inventory, reward.StoreItem.replace("StoreItems/", ""), reward.ItemCount);
}
} else if (fixedLevelRewards.levelKeyRewards2) {
for (const reward of fixedLevelRewards.levelKeyRewards2) {
if (reward.rewardType == "RT_CREDITS") {
inventory.RegularCredits += reward.amount;
continue;
@ -150,6 +161,7 @@ export const completeQuest = async (inventory: TInventoryDatabaseDocument, quest
}
}
}
}
inventory.ActiveQuest = "";
//TODO: handle quest completion items
};