XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

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
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

1 个文件 +37 -11
Modified src/services/missionInventoryUpdateService.ts +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 {