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

SpaceNinjaServer

A simple server for a small space ninja game

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

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

代码差异

4 个文件 +62 -3
Modified config-vanilla.json +2 -1
@@ -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": {
Modified src/services/configService.ts +1 -0
@@ -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?: {
Modified src/services/itemDataService.ts +52 -0
@@ -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
Modified src/services/missionInventoryUpdateService.ts +7 -2
@@ -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;