feat: rewards for overriden enemy caches #2919
8
package-lock.json
generated
8
package-lock.json
generated
@ -18,7 +18,7 @@
|
|||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"ncp": "^2.0.0",
|
"ncp": "^2.0.0",
|
||||||
"undici": "^7.10.0",
|
"undici": "^7.10.0",
|
||||||
"warframe-public-export-plus": "^0.5.91",
|
"warframe-public-export-plus": "^0.5.92",
|
||||||
"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",
|
||||||
@ -5534,9 +5534,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/warframe-public-export-plus": {
|
"node_modules/warframe-public-export-plus": {
|
||||||
"version": "0.5.91",
|
"version": "0.5.92",
|
||||||
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.91.tgz",
|
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.92.tgz",
|
||||||
"integrity": "sha512-xp8rq/dvFC6+urb6vVFRtAmm1v0iE/ZALI3uVGBpblsVB/PWmGxjBBp8l00dCZs67JsqEKcrCcogKwtKTwDc1w=="
|
"integrity": "sha512-5O5VtyVXxKtl5QdpzoVyKov5GX6t3z/U5tqPq73kjoSyA5NQT2V9sWsZK4ASyY8Edv9hNsdwlZdsdP8QmYbubg=="
|
||||||
},
|
},
|
||||||
"node_modules/warframe-riven-info": {
|
"node_modules/warframe-riven-info": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
|
|||||||
@ -36,7 +36,7 @@
|
|||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"ncp": "^2.0.0",
|
"ncp": "^2.0.0",
|
||||||
"undici": "^7.10.0",
|
"undici": "^7.10.0",
|
||||||
"warframe-public-export-plus": "^0.5.91",
|
"warframe-public-export-plus": "^0.5.92",
|
||||||
"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",
|
||||||
|
|||||||
@ -117,6 +117,7 @@ export const createInventory = async (
|
|||||||
inventory.PlayedParkourTutorial = true;
|
inventory.PlayedParkourTutorial = true;
|
||||||
await addStartingGear(inventory);
|
await addStartingGear(inventory);
|
||||||
await completeQuest(inventory, "/Lotus/Types/Keys/VorsPrize/VorsPrizeQuestKeyChain");
|
await completeQuest(inventory, "/Lotus/Types/Keys/VorsPrize/VorsPrizeQuestKeyChain");
|
||||||
|
await completeQuest(inventory, "/Lotus/Types/Keys/ModQuest/ModQuestKeyChain");
|
||||||
|
|
||||||
const completedMissions = ["SolNode27", "SolNode89", "SolNode63", "SolNode85", "SolNode15", "SolNode79"];
|
const completedMissions = ["SolNode27", "SolNode89", "SolNode63", "SolNode85", "SolNode15", "SolNode79"];
|
||||||
|
|
||||||
@ -134,16 +135,6 @@ export const createInventory = async (
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//TODO: RawUpgrades might need to return a LastAdded
|
|
||||||
const awakeningRewards = [
|
|
||||||
"/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem1",
|
|
||||||
"/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem2",
|
|
||||||
"/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem3",
|
|
||||||
"/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem4",
|
|
||||||
"/Lotus/Types/Restoratives/LisetAutoHack",
|
|
||||||
"/Lotus/Upgrades/Mods/Warframe/AvatarShieldMaxMod"
|
|
||||||
];
|
|
||||||
|
|
||||||
export const addStartingGear = async (
|
export const addStartingGear = async (
|
||||||
inventory: TInventoryDatabaseDocument,
|
inventory: TInventoryDatabaseDocument,
|
||||||
startingGear?: TPartialStartingGear
|
startingGear?: TPartialStartingGear
|
||||||
@ -196,6 +187,14 @@ export const addStartingGear = async (
|
|||||||
inventory.RegularCredits = 3000;
|
inventory.RegularCredits = 3000;
|
||||||
inventoryChanges.RegularCredits = 3000;
|
inventoryChanges.RegularCredits = 3000;
|
||||||
|
|
||||||
|
const awakeningRewards = [
|
||||||
|
"/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem1",
|
||||||
|
"/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem2",
|
||||||
|
"/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem3",
|
||||||
|
"/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem4",
|
||||||
|
"/Lotus/Types/Restoratives/LisetAutoHack"
|
||||||
|
];
|
||||||
|
|
||||||
for (const item of awakeningRewards) {
|
for (const item of awakeningRewards) {
|
||||||
const inventoryDelta = await addItem(inventory, item);
|
const inventoryDelta = await addItem(inventory, item);
|
||||||
combineInventoryChanges(inventoryChanges, inventoryDelta);
|
combineInventoryChanges(inventoryChanges, inventoryDelta);
|
||||||
|
|||||||
@ -65,7 +65,7 @@ export const createPersonalRooms = async (accountId: Types.ObjectId, shipId: Typ
|
|||||||
activeShipId: shipId
|
activeShipId: shipId
|
||||||
});
|
});
|
||||||
if (config.skipTutorial) {
|
if (config.skipTutorial) {
|
||||||
// unlocked during Vor's Prize
|
// unlocked during Vor's Prize and The Teacher quests
|
||||||
const defaultFeatures = [
|
const defaultFeatures = [
|
||||||
"/Lotus/Types/Items/ShipFeatureItems/MercuryNavigationFeatureItem",
|
"/Lotus/Types/Items/ShipFeatureItems/MercuryNavigationFeatureItem",
|
||||||
"/Lotus/Types/Items/ShipFeatureItems/ArsenalFeatureItem",
|
"/Lotus/Types/Items/ShipFeatureItems/ArsenalFeatureItem",
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import {
|
|||||||
ExportAnimals,
|
ExportAnimals,
|
||||||
ExportEnemies,
|
ExportEnemies,
|
||||||
ExportFusionBundles,
|
ExportFusionBundles,
|
||||||
|
ExportKeys,
|
||||||
ExportRegions,
|
ExportRegions,
|
||||||
ExportRelics,
|
ExportRelics,
|
||||||
ExportRewards
|
ExportRewards
|
||||||
@ -1141,6 +1142,7 @@ export const addMissionRewards = async (
|
|||||||
const MissionRewards: IMissionReward[] = getRandomMissionDrops(
|
const MissionRewards: IMissionReward[] = getRandomMissionDrops(
|
||||||
inventory,
|
inventory,
|
||||||
rewardInfo,
|
rewardInfo,
|
||||||
|
levelKeyName,
|
||||||
missions,
|
missions,
|
||||||
wagerTier,
|
wagerTier,
|
||||||
firstCompletion
|
firstCompletion
|
||||||
@ -1756,6 +1758,7 @@ function getLevelCreditRewards(node: IRegion): number {
|
|||||||
function getRandomMissionDrops(
|
function getRandomMissionDrops(
|
||||||
inventory: TInventoryDatabaseDocument,
|
inventory: TInventoryDatabaseDocument,
|
||||||
RewardInfo: IRewardInfo,
|
RewardInfo: IRewardInfo,
|
||||||
|
levelKeyName: string | undefined,
|
||||||
mission: IMission | undefined,
|
mission: IMission | undefined,
|
||||||
tierOverride: number | undefined,
|
tierOverride: number | undefined,
|
||||||
firstCompletion: boolean
|
firstCompletion: boolean
|
||||||
@ -2193,7 +2196,7 @@ function getRandomMissionDrops(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (region.cacheRewardManifest && RewardInfo.EnemyCachesFound) {
|
if (region.cacheRewardManifest && RewardInfo.EnemyCachesFound && !RewardInfo.goalId) {
|
||||||
const deck = ExportRewards[region.cacheRewardManifest];
|
const deck = ExportRewards[region.cacheRewardManifest];
|
||||||
for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
|
for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
|
||||||
const drop = getRandomRewardByChance(deck[rotation]);
|
const drop = getRandomRewardByChance(deck[rotation]);
|
||||||
@ -2259,6 +2262,71 @@ function getRandomMissionDrops(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (RewardInfo.EnemyCachesFound) {
|
||||||
|
if (RewardInfo.goalId) {
|
||||||
|
const goal = getWorldState().Goals.find(x => x._id.$oid == RewardInfo.goalId);
|
||||||
|
if (goal) {
|
||||||
|
let currentMissionKey: string | undefined;
|
||||||
|
if (RewardInfo.node == goal.Node) {
|
||||||
|
currentMissionKey = goal.MissionKeyName;
|
||||||
|
} else if (goal.ConcurrentNodes && goal.ConcurrentMissionKeyNames) {
|
||||||
|
for (let i = 0; i < goal.ConcurrentNodes.length; i++) {
|
||||||
|
if (RewardInfo.node == goal.ConcurrentNodes[i]) {
|
||||||
|
currentMissionKey = goal.ConcurrentMissionKeyNames[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (currentMissionKey) {
|
||||||
|
const keyMeta = ExportKeys[currentMissionKey];
|
||||||
|
if (keyMeta.cacheRewardManifest) {
|
||||||
|
const deck = ExportRewards[keyMeta.cacheRewardManifest];
|
||||||
|
for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
|
||||||
|
const drop = getRandomRewardByChance(deck[rotation]);
|
||||||
|
if (drop) {
|
||||||
|
drops.push({
|
||||||
|
StoreItem: drop.type,
|
||||||
|
ItemCount: drop.itemCount,
|
||||||
|
FromEnemyCache: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (RewardInfo.alertId) {
|
||||||
|
const alert = getWorldState().Alerts.find(x => x._id.$oid == RewardInfo.alertId);
|
||||||
|
if (alert && alert.MissionInfo.enemyCacheOverride) {
|
||||||
|
const deck = ExportRewards[alert.MissionInfo.enemyCacheOverride];
|
||||||
|
for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
|
||||||
|
const drop = getRandomRewardByChance(deck[rotation]);
|
||||||
|
if (drop) {
|
||||||
|
drops.push({
|
||||||
|
StoreItem: drop.type,
|
||||||
|
ItemCount: drop.itemCount,
|
||||||
|
FromEnemyCache: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (levelKeyName) {
|
||||||
|
const keyMeta = ExportKeys[levelKeyName];
|
||||||
|
if (keyMeta.cacheRewardManifest) {
|
||||||
|
const deck = ExportRewards[keyMeta.cacheRewardManifest];
|
||||||
|
for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
|
||||||
|
const drop = getRandomRewardByChance(deck[rotation]);
|
||||||
|
if (drop) {
|
||||||
|
drops.push({
|
||||||
|
StoreItem: drop.type,
|
||||||
|
ItemCount: drop.itemCount,
|
||||||
|
FromEnemyCache: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (inventory.missionsCanGiveAllRelics) {
|
if (inventory.missionsCanGiveAllRelics) {
|
||||||
for (const drop of drops) {
|
for (const drop of drops) {
|
||||||
const itemType = fromStoreItem(drop.StoreItem);
|
const itemType = fromStoreItem(drop.StoreItem);
|
||||||
|
|||||||
@ -58,6 +58,7 @@ export interface IAlertMissionInfo {
|
|||||||
maxEnemyLevel?: number;
|
maxEnemyLevel?: number;
|
||||||
maxWaveNum?: number;
|
maxWaveNum?: number;
|
||||||
descText?: string;
|
descText?: string;
|
||||||
|
enemyCacheOverride?: string;
|
||||||
|
|
||||||
maxRotations?: number; // SNS specific field
|
maxRotations?: number; // SNS specific field
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user