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
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:
parent
9de57668ab
commit
322c978476
8
package-lock.json
generated
8
package-lock.json
generated
@ -12,7 +12,7 @@
|
|||||||
"copyfiles": "^2.4.1",
|
"copyfiles": "^2.4.1",
|
||||||
"express": "^5",
|
"express": "^5",
|
||||||
"mongoose": "^8.9.4",
|
"mongoose": "^8.9.4",
|
||||||
"warframe-public-export-plus": "^0.5.30",
|
"warframe-public-export-plus": "^0.5.35",
|
||||||
"warframe-riven-info": "^0.1.2",
|
"warframe-riven-info": "^0.1.2",
|
||||||
"winston": "^3.17.0",
|
"winston": "^3.17.0",
|
||||||
"winston-daily-rotate-file": "^5.0.0"
|
"winston-daily-rotate-file": "^5.0.0"
|
||||||
@ -4093,9 +4093,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/warframe-public-export-plus": {
|
"node_modules/warframe-public-export-plus": {
|
||||||
"version": "0.5.32",
|
"version": "0.5.35",
|
||||||
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.32.tgz",
|
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.35.tgz",
|
||||||
"integrity": "sha512-jO9i2Gzz9DWibiHlEO17D975ajs6KrTay8cS5I0GkUUe1XWVU8mML4b+IYCHzM4FWq1t6p2YPCGznQfknqvorg=="
|
"integrity": "sha512-YLQP1n5sOV+PS5hfC4Kuoapa9gsqOy5Qy/E4EYfRV/xJBruFl3tPhbdbgFn3HhL2OBrgRJ8yzT5bjIvaHKhOCw=="
|
||||||
},
|
},
|
||||||
"node_modules/warframe-riven-info": {
|
"node_modules/warframe-riven-info": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
"copyfiles": "^2.4.1",
|
"copyfiles": "^2.4.1",
|
||||||
"express": "^5",
|
"express": "^5",
|
||||||
"mongoose": "^8.9.4",
|
"mongoose": "^8.9.4",
|
||||||
"warframe-public-export-plus": "^0.5.30",
|
"warframe-public-export-plus": "^0.5.35",
|
||||||
"warframe-riven-info": "^0.1.2",
|
"warframe-riven-info": "^0.1.2",
|
||||||
"winston": "^3.17.0",
|
"winston": "^3.17.0",
|
||||||
"winston-daily-rotate-file": "^5.0.0"
|
"winston-daily-rotate-file": "^5.0.0"
|
||||||
|
@ -163,20 +163,21 @@ export const getKeyChainItems = ({ KeyChain, ChainStage }: IKeyChainRequest): st
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const getLevelKeyRewards = (levelKey: string) => {
|
export const getLevelKeyRewards = (levelKey: string) => {
|
||||||
const levelKeyData = ExportKeys[levelKey];
|
if (!ExportKeys[levelKey]) {
|
||||||
if (!levelKeyData) {
|
throw new Error(`LevelKey ${levelKey} not found`);
|
||||||
const error = `LevelKey ${levelKey} not found`;
|
|
||||||
logger.error(error);
|
|
||||||
throw new Error(error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!levelKeyData.rewards) {
|
const levelKeyRewards = ExportKeys[levelKey]?.missionReward;
|
||||||
const error = `LevelKey ${levelKey} does not contain rewards`;
|
const levelKeyRewards2 = ExportKeys[levelKey]?.rewards;
|
||||||
logger.error(error);
|
|
||||||
throw new Error(error);
|
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 => {
|
export const getNode = (nodeName: string): IRegion => {
|
||||||
|
@ -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 { IMissionInventoryUpdateRequest, IRewardInfo } from "../types/requestTypes";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "@/src/utils/logger";
|
||||||
import { IRngResult, getRandomReward } from "@/src/services/rngService";
|
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 { InventoryDocumentProps, TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
||||||
import { getEntriesUnsafe } from "@/src/utils/ts-utils";
|
import { getEntriesUnsafe } from "@/src/utils/ts-utils";
|
||||||
import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
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 { handleStoreItemAcquisition } from "./purchaseService";
|
||||||
|
import { IMissionReward } from "../types/missionTypes";
|
||||||
|
|
||||||
const getRotations = (rotationCount: number): number[] => {
|
const getRotations = (rotationCount: number): number[] => {
|
||||||
if (rotationCount === 0) return [0];
|
if (rotationCount === 0) return [0];
|
||||||
@ -258,31 +263,38 @@ export const addMissionRewards = async (
|
|||||||
if (levelKeyName) {
|
if (levelKeyName) {
|
||||||
const fixedLevelRewards = getLevelKeyRewards(levelKeyName);
|
const fixedLevelRewards = getLevelKeyRewards(levelKeyName);
|
||||||
//logger.debug(`fixedLevelRewards ${fixedLevelRewards}`);
|
//logger.debug(`fixedLevelRewards ${fixedLevelRewards}`);
|
||||||
for (const reward of fixedLevelRewards) {
|
if (fixedLevelRewards.levelKeyRewards) {
|
||||||
//quest stage completion credit rewards
|
addFixedLevelRewards(fixedLevelRewards.levelKeyRewards, inventory, MissionRewards);
|
||||||
if (reward.rewardType == "RT_CREDITS") {
|
}
|
||||||
inventory.RegularCredits += reward.amount;
|
if (fixedLevelRewards.levelKeyRewards2) {
|
||||||
missionCompletionCredits += reward.amount;
|
for (const reward of fixedLevelRewards.levelKeyRewards2) {
|
||||||
continue;
|
//quest stage completion credit rewards
|
||||||
|
if (reward.rewardType == "RT_CREDITS") {
|
||||||
|
inventory.RegularCredits += reward.amount;
|
||||||
|
missionCompletionCredits += reward.amount;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
MissionRewards.push({
|
||||||
|
StoreItem: reward.itemType,
|
||||||
|
ItemCount: reward.rewardType === "RT_RESOURCE" ? reward.amount : 1
|
||||||
|
});
|
||||||
}
|
}
|
||||||
MissionRewards.push({
|
|
||||||
StoreItem: reward.itemType,
|
|
||||||
ItemCount: reward.rewardType === "RT_RESOURCE" ? reward.amount : 1
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rewardInfo.node in junctionRewards) {
|
if (missions) {
|
||||||
const junctionReward = (junctionRewards as IJunctionRewards)[rewardInfo.node];
|
const node = getNode(missions.Tag);
|
||||||
for (const item of junctionReward.items) {
|
|
||||||
MissionRewards.push({
|
//node based credit rewards for mission completion
|
||||||
StoreItem: item.ItemType,
|
if (node.missionIndex !== 28) {
|
||||||
ItemCount: item.ItemCount
|
const levelCreditReward = getLevelCreditRewards(missions?.Tag);
|
||||||
});
|
missionCompletionCredits += levelCreditReward;
|
||||||
|
inventory.RegularCredits += levelCreditReward;
|
||||||
|
logger.debug(`levelCreditReward ${levelCreditReward}`);
|
||||||
}
|
}
|
||||||
if (junctionReward.credits) {
|
|
||||||
inventory.RegularCredits += junctionReward.credits;
|
if (node.missionReward) {
|
||||||
missionCompletionCredits += junctionReward.credits;
|
missionCompletionCredits += addFixedLevelRewards(node.missionReward, inventory, MissionRewards);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,19 +306,6 @@ export const addMissionRewards = async (
|
|||||||
combineInventoryChanges(inventoryChanges, inventoryChange.InventoryChanges);
|
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, {
|
const credits = addCredits(inventory, {
|
||||||
missionCompletionCredits,
|
missionCompletionCredits,
|
||||||
missionDropCredits: creditDrops ?? 0,
|
missionDropCredits: creditDrops ?? 0,
|
||||||
@ -316,7 +315,7 @@ export const addMissionRewards = async (
|
|||||||
return { inventoryChanges, MissionRewards, credits };
|
return { inventoryChanges, MissionRewards, credits };
|
||||||
};
|
};
|
||||||
|
|
||||||
//slightly inaccurate compared to official
|
//creditBonus is not entirely accurate.
|
||||||
//TODO: consider ActiveBoosters
|
//TODO: consider ActiveBoosters
|
||||||
export const addCredits = (
|
export const addCredits = (
|
||||||
inventory: HydratedDocument<IInventoryDatabase>,
|
inventory: HydratedDocument<IInventoryDatabase>,
|
||||||
@ -348,6 +347,40 @@ export const addCredits = (
|
|||||||
return { ...finalCredits, DailyMissionBonus: true };
|
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 {
|
function getLevelCreditRewards(nodeName: string): number {
|
||||||
const minEnemyLevel = getNode(nodeName).minEnemyLevel;
|
const minEnemyLevel = getNode(nodeName).minEnemyLevel;
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ import {
|
|||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "@/src/utils/logger";
|
||||||
import { HydratedDocument } from "mongoose";
|
import { HydratedDocument } from "mongoose";
|
||||||
import { ExportKeys } from "warframe-public-export-plus";
|
import { ExportKeys } from "warframe-public-export-plus";
|
||||||
|
import { addFixedLevelRewards } from "./missionInventoryUpdateService";
|
||||||
|
|
||||||
export interface IUpdateQuestRequest {
|
export interface IUpdateQuestRequest {
|
||||||
QuestKeys: Omit<IQuestKeyDatabase, "CompletionDate">[];
|
QuestKeys: Omit<IQuestKeyDatabase, "CompletionDate">[];
|
||||||
@ -136,16 +137,27 @@ export const completeQuest = async (inventory: TInventoryDatabaseDocument, quest
|
|||||||
const missionName = chainStages[i].key;
|
const missionName = chainStages[i].key;
|
||||||
if (missionName) {
|
if (missionName) {
|
||||||
const fixedLevelRewards = getLevelKeyRewards(missionName);
|
const fixedLevelRewards = getLevelKeyRewards(missionName);
|
||||||
//logger.debug(`fixedLevelRewards ${fixedLevelRewards}`);
|
//logger.debug(`fixedLevelRewards`, fixedLevelRewards);
|
||||||
for (const reward of fixedLevelRewards) {
|
if (fixedLevelRewards.levelKeyRewards) {
|
||||||
if (reward.rewardType == "RT_CREDITS") {
|
const missionRewards: { StoreItem: string; ItemCount: number }[] = [];
|
||||||
inventory.RegularCredits += reward.amount;
|
addFixedLevelRewards(fixedLevelRewards.levelKeyRewards, inventory, missionRewards);
|
||||||
continue;
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
if (reward.rewardType == "RT_RESOURCE") {
|
} else if (fixedLevelRewards.levelKeyRewards2) {
|
||||||
await addItem(inventory, reward.itemType.replace("StoreItems/", ""), reward.amount);
|
for (const reward of fixedLevelRewards.levelKeyRewards2) {
|
||||||
} else {
|
if (reward.rewardType == "RT_CREDITS") {
|
||||||
await addItem(inventory, reward.itemType.replace("StoreItems/", ""));
|
inventory.RegularCredits += reward.amount;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (reward.rewardType == "RT_RESOURCE") {
|
||||||
|
await addItem(inventory, reward.itemType.replace("StoreItems/", ""), reward.amount);
|
||||||
|
} else {
|
||||||
|
await addItem(inventory, reward.itemType.replace("StoreItems/", ""));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user