返回提交历史
Modified
src/services/missionInventoryUpdateService.ts
+37
-11
XFEstudio/XFESpaceNinjaServer
feat: void tower rewards (#3365)
Closes #3364 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3365 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
467d035e
代码差异
1 个文件
+37
-11
@@ -2,7 +2,8 @@ import type {
2
2
IMissionReward as IMissionRewardExternal,
3
3
IRegion,
4
4
IReward,
5
TMissionType
5
TMissionType,
6
TRarity
6
7
} from "warframe-public-export-plus";
7
8
import {
8
9
ExportAnimals,
@@ -1849,17 +1850,42 @@ export const addFixedLevelRewards = (
1849
1850
}
1850
1851
}
1851
1852
if (rewards.droptable) {
1852
const metaDroptable = getMissionDeck(rewards.droptable);
1853
if (metaDroptable) {
1853
const droptable = getMissionDeck(rewards.droptable);
1854
if (droptable) {
1854
1855
const rotations: number[] = rewardInfo ? getRotations(rewardInfo) : [0];
1855
logger.debug(`rolling ${rewards.droptable} for level key rewards`, { rotations });
1856
for (const tier of rotations) {
1857
const reward = getRandomRewardByChance(metaDroptable[tier]);
1858
if (reward) {
1859
MissionRewards.push({
1860
StoreItem: reward.type,
1861
ItemCount: reward.itemCount
1862
});
1856
if (rewards.droptable.startsWith("/Lotus/Types/Game/MissionDecks/VoidKeyMissionRewards/")) {
1857
logger.debug(`rolling ${rewards.droptable} for ${rotations.length} void tower rewards`);
1858
const RARITY_TO_PROBABILITY: Record<TRarity, number> = {
1859
COMMON: 0.2533,
1860
UNCOMMON: 0.11,
1861
RARE: 0.02,
1862
LEGENDARY: 0
1863
};
1864
const pool = droptable[0].map(x => ({
1865
type: x.type,
1866
itemCount: x.itemCount,
1867
probability: RARITY_TO_PROBABILITY[x.rarity!]
1868
}));
1869
const rng = new SRng(BigInt(rewardInfo?.rewardSeed ?? generateRewardSeed()) ^ 0xffffffffffffffffn);
1870
for (let i = 0; i != rotations.length; ++i) {
1871
const reward = getRandomRewardByChance(pool, rng);
1872
if (reward) {
1873
MissionRewards.push({
1874
StoreItem: reward.type,
1875
ItemCount: reward.itemCount
1876
});
1877
}
1878
}
1879
} else {
1880
logger.debug(`rolling ${rewards.droptable} for level key rewards`, { rotations });
1881
for (const tier of rotations) {
1882
const reward = getRandomRewardByChance(droptable[tier]);
1883
if (reward) {
1884
MissionRewards.push({
1885
StoreItem: reward.type,
1886
ItemCount: reward.itemCount
1887
});
1888
}
1863
1889
}
1864
1890
}
1865
1891
} else {