返回提交历史
Modified
config-vanilla.json
+2
-1
Modified
src/services/configService.ts
+1
-0
Modified
src/services/itemDataService.ts
+52
-0
Modified
src/services/missionInventoryUpdateService.ts
+7
-2
XFEstudio/SpaceNinjaServer
feat: U42 Equinox parts drop (#4311)
Closes #4308 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/4311 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
8d6c4629
代码差异
4 个文件
+62
-3
@@ -128,7 +128,8 @@
128
128
},
129
129
"serversideQualityOfLife": {
130
130
"twentythreeHourMasteryRankCooldown": true,
131
"doubleDailySynthesisEndoReward": true
131
"doubleDailySynthesisEndoReward": true,
132
"tylRegorDropsTwoEquinoxParts": true
132
133
},
133
134
"inventoryDefaults": {},
134
135
"tunables": {
@@ -137,6 +137,7 @@ export interface IConfig {
137
137
serversideQualityOfLife?: {
138
138
twentythreeHourMasteryRankCooldown?: boolean;
139
139
doubleDailySynthesisEndoReward?: boolean;
140
tylRegorDropsTwoEquinoxParts?: boolean;
140
141
};
141
142
inventoryDefaults?: Record<string, any>;
142
143
tunables?: {
@@ -80,6 +80,7 @@ import { promises as fs } from "fs";
80
80
import path from "path";
81
81
import { BL_LATEST } from "../constants/gameVersions.ts";
82
82
import type { TInventorySlot } from "../types/inventoryTypes/inventoryTypes.ts";
83
import { config } from "./configService.ts";
83
84
84
85
export type WeaponTypeInternal =
85
86
| "LongGuns"
@@ -1546,6 +1547,51 @@ export const supplementalVendors: Record<string, IVendor> = {
1546
1547
}
1547
1548
};
1548
1549
1550
const preU42YinYangRewards: TMissionDeck = [
1551
[
1552
{
1553
type: "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AnimaBlueprint",
1554
itemCount: 1,
1555
probability: 0.1128
1556
},
1557
{
1558
type: "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AnimaChassisBlueprint",
1559
itemCount: 1,
1560
probability: 0.1291
1561
},
1562
{
1563
type: "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AnimaHelmetBlueprint",
1564
itemCount: 1,
1565
probability: 0.1291
1566
},
1567
{
1568
type: "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AnimaSystemsBlueprint",
1569
itemCount: 1,
1570
probability: 0.1291
1571
},
1572
{
1573
type: "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AnimusBlueprint",
1574
itemCount: 1,
1575
probability: 0.1128
1576
},
1577
{
1578
type: "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AnimusChassisBlueprint",
1579
itemCount: 1,
1580
probability: 0.1291
1581
},
1582
{
1583
type: "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AnimusHelmetBlueprint",
1584
itemCount: 1,
1585
probability: 0.1291
1586
},
1587
{
1588
type: "/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AnimusSystemsBlueprint",
1589
itemCount: 1,
1590
probability: 0.1291
1591
}
1592
]
1593
];
1594
1549
1595
interface IU5FingerprintData {
1550
1596
fits: { type: string; rarity: TRarity; statAtten?: number }[];
1551
1597
upgrades: IU5FingerprintUpgrade[];
@@ -3217,6 +3263,12 @@ export const getKey = (uniqueName: string, buildLabel: string = BL_LATEST): IKey
3217
3263
};
3218
3264
3219
3265
export const getMissionDeck = (uniqueName: string): TMissionDeck | undefined => {
3266
if (
3267
uniqueName == "/Lotus/Types/Game/MissionDecks/BossMissionRewards/YinYangRewards" &&
3268
!(config.serversideQualityOfLife?.tylRegorDropsTwoEquinoxParts ?? true)
3269
) {
3270
return preU42YinYangRewards;
3271
}
3220
3272
return ExportRewards[uniqueName];
3221
3273
};
3222
3274
@@ -164,6 +164,12 @@ const getRotations = async (rewardInfo: IRewardInfo, buildLabel: string, tierOve
164
164
}
165
165
}
166
166
167
if (rewardInfo.node == "SolNode105" && (config.serversideQualityOfLife?.tylRegorDropsTwoEquinoxParts ?? true)) {
168
// U42 QoL change:
169
// Defeating Tyl Regor now rewards two Equinox Component Blueprints — one guaranteed for the Night and Day Aspect each.
170
return [0, 1];
171
}
172
167
173
// 'rewardQualifications' may stick from previous missions for non-endless missions done after them
168
174
// - via railjack (https://onlyg.it/OpenWF/SpaceNinjaServer/issues/2586, https://onlyg.it/OpenWF/SpaceNinjaServer/issues/2612)
169
175
// - via lab conquest (https://onlyg.it/OpenWF/SpaceNinjaServer/issues/2768)
@@ -2230,8 +2236,7 @@ async function getRandomMissionDrops(
2230
2236
}*/
2231
2237
const rng = new SRng(BigInt(RewardInfo.rewardSeed ?? generateRewardSeed()) ^ 0xffffffffffffffffn);
2232
2238
rewardManifests.forEach(name => {
2233
const table = ExportRewards[name];
2234
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
2239
const table = getMissionDeck(name);
2235
2240
if (!table) {
2236
2241
logger.error(`unknown droptable: ${name}`);
2237
2242
return;