feat: rewards for enemy caches & rathuum #384

Merged
Sainan merged 2 commits from more-rewards into main 2024-06-23 06:12:32 -07:00
Showing only changes of commit ba32ff6c4b - Show all commits

View File

@ -23,33 +23,46 @@ const getRewards = ({
return { InventoryChanges: {}, MissionRewards: [] };
}
const rewardManifests = ExportRegions[RewardInfo.node]?.rewardManifests ?? [];
if (rewardManifests.length == 0) {
return { InventoryChanges: {}, MissionRewards: [] };
}
let rotations: number[] = [];
if (RewardInfo.VaultsCracked) {
// For Spy missions, e.g. 3 vaults cracked = A, B, C
for (let i = 0; i != RewardInfo.VaultsCracked; ++i) {
rotations.push(i);
}
} else {
const rotationCount = RewardInfo.rewardQualifications?.length || 0;
rotations = getRotations(rotationCount);
}
const drops: IReward[] = [];
rewardManifests
.map(name => ExportRewards[name])
.forEach(table => {
for (const rotation of rotations) {
const rotationRewards = table[rotation];
const drop = getRandomRewardByChance(rotationRewards);
if (RewardInfo.node in ExportRegions) {
const region = ExportRegions[RewardInfo.node];
const rewardManifests = region.rewardManifests ?? [];
if (rewardManifests.length == 0) {
return { InventoryChanges: {}, MissionRewards: [] };
}
let rotations: number[] = [];
if (RewardInfo.VaultsCracked) {
// For Spy missions, e.g. 3 vaults cracked = A, B, C
for (let i = 0; i != RewardInfo.VaultsCracked; ++i) {
rotations.push(i);
}
} else {
const rotationCount = RewardInfo.rewardQualifications?.length || 0;
rotations = getRotations(rotationCount);
}
rewardManifests
.map(name => ExportRewards[name])
.forEach(table => {
for (const rotation of rotations) {
const rotationRewards = table[rotation];
const drop = getRandomRewardByChance(rotationRewards);
if (drop) {
drops.push(drop);
}
}
});
if (region.cacheRewardManifest && RewardInfo.EnemyCachesFound) {
const deck = ExportRewards[region.cacheRewardManifest];
for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
const drop = getRandomRewardByChance(deck[rotation]);
if (drop) {
drops.push(drop);
}
}
});
}
}
logger.debug("Mission rewards:", drops);
return formatRewardsToInventoryType(drops);