返回提交历史
Modified
src/constants/gameToBuildVersion.ts
+1
-0
Modified
src/controllers/api/claimCompletedRecipeController.ts
+1
-1
Modified
src/controllers/api/startRecipeController.ts
+1
-1
Modified
src/services/itemDataService.ts
+89
-2
XFEstudio/XFESpaceNinjaServer
chore: add historic rhino recipe data (#3979)
Closes #3901 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3979 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
43960dd0
代码差异
4 个文件
+92
-4
@@ -4,6 +4,7 @@ const gameToBuildVersion = {
4
4
"41.0.0": "2025.12.09.14.18",
5
5
"40.0.0": "2025.09.25.17.01",
6
6
"39.1.0": "2025.08.26.09.49",
7
"39.0.0": "2025.06.23.11.39",
7
8
"38.6.0": "2025.05.20.10.18",
8
9
"38.5.0": "2025.03.18.09.51",
9
10
"38.0.8": "2025.02.05.11.19",
@@ -68,7 +68,7 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) =
68
68
69
69
inventory.PendingRecipes.pull(pendingRecipe._id);
70
70
71
const recipe = getRecipe(pendingRecipe.ItemType);
71
const recipe = getRecipe(pendingRecipe.ItemType, account.BuildLabel);
72
72
if (!recipe) {
73
73
throw new Error(`no completed item found for recipe ${pendingRecipe._id.toString()}`);
74
74
}
@@ -38,7 +38,7 @@ export const startRecipeController: RequestHandler = async (req, res) => {
38
38
const modernItemType = U5ToModernRecipes[recipeName];
39
39
if (modernItemType) recipeName = modernItemType;
40
40
}
41
const recipe = getRecipe(recipeName);
41
const recipe = getRecipe(recipeName, account.BuildLabel);
42
42
43
43
if (!recipe) {
44
44
throw new Error(`unknown recipe ${recipeName}`);
@@ -1300,8 +1300,95 @@ const getLegacySolarMapData = async (target: string, buildLabel: string): Promis
1300
1300
return json;
1301
1301
};
1302
1302
1303
export const getRecipe = (uniqueName: string): IRecipe | undefined => {
1304
return ExportRecipes[uniqueName] ?? supplementalRecipes[uniqueName];
1303
export const getRecipe = (uniqueName: string, buildLabel?: string): IRecipe | undefined => {
1304
let data = ExportRecipes[uniqueName] ?? supplementalRecipes[uniqueName];
1305
if (buildLabel) {
1306
if (uniqueName == "/Lotus/Types/Recipes/WarframeRecipes/RhinoBlueprint") {
1307
if (version_compare(buildLabel, gameToBuildVersion["39.0.0"]) < 0) {
1308
data = {
1309
...data,
1310
ingredients: [
1311
data.ingredients[0],
1312
data.ingredients[1],
1313
data.ingredients[2],
1314
{
1315
ItemType: "/Lotus/Types/Items/MiscItems/Gallium",
1316
ItemCount: 1
1317
}
1318
]
1319
};
1320
if (version_compare(buildLabel, gameToBuildVersion["38.5.0"]) < 0) {
1321
data.buildTime = 259200;
1322
// Update 19.13 (2017-03-09)
1323
if (version_compare(buildLabel, "2017.03.09.00.00") < 0) {
1324
data.ingredients[3].ItemType = "/Lotus/Types/Items/MiscItems/OrokinCell";
1325
}
1326
}
1327
}
1328
} else if (uniqueName == "/Lotus/Types/Recipes/WarframeRecipes/RhinoChassisBlueprint") {
1329
if (version_compare(buildLabel, gameToBuildVersion["39.0.0"]) < 0) {
1330
data = {
1331
...data,
1332
ingredients: [
1333
{
1334
ItemType: "/Lotus/Types/Items/MiscItems/Morphic",
1335
ItemCount: 1
1336
},
1337
data.ingredients[1],
1338
data.ingredients[2]
1339
]
1340
};
1341
}
1342
} else if (uniqueName == "/Lotus/Types/Recipes/WarframeRecipes/RhinoHelmetBlueprint") {
1343
if (version_compare(buildLabel, gameToBuildVersion["39.0.0"]) < 0) {
1344
data = {
1345
...data,
1346
ingredients: [
1347
data.ingredients[0],
1348
{
1349
ItemType: "/Lotus/Types/Items/MiscItems/Morphic",
1350
ItemCount: 1
1351
},
1352
data.ingredients[2],
1353
data.ingredients[3]
1354
]
1355
};
1356
// Update 19.13 (2017-03-09)
1357
if (version_compare(buildLabel, "2017.03.09.00.00") < 0) {
1358
data.ingredients[1].ItemType = "/Lotus/Types/Items/MiscItems/NeuralSensor";
1359
}
1360
}
1361
} else if (uniqueName == "/Lotus/Types/Recipes/WarframeRecipes/RhinoSystemsBlueprint") {
1362
if (version_compare(buildLabel, gameToBuildVersion["39.0.0"]) < 0) {
1363
data = {
1364
...data,
1365
ingredients: [
1366
{
1367
ItemType: "/Lotus/Types/Items/MiscItems/Gallium",
1368
ItemCount: 1
1369
},
1370
{
1371
ItemType: "/Lotus/Types/Items/MiscItems/Morphic",
1372
ItemCount: 1
1373
},
1374
{
1375
ItemType: "/Lotus/Types/Items/MiscItems/Salvage",
1376
ItemCount: 500
1377
},
1378
{
1379
ItemType: "/Lotus/Types/Items/MiscItems/Plastids",
1380
ItemCount: 600
1381
}
1382
]
1383
};
1384
// Hotfix 30.0.6 (2021-04-20) Swapped the crafting requirement of Control Module for Gallium in Rhino Systems Blueprint to ease early player acquisition.
1385
if (version_compare(buildLabel, "2021.04.20.00.00") < 0) {
1386
data.ingredients[0].ItemType = "/Lotus/Types/Items/MiscItems/ControlModule";
1387
}
1388
}
1389
}
1390
}
1391
return data;
1305
1392
};
1306
1393
1307
1394
export const getSyndicate = (tag: string, buildLabel: string | undefined): ISyndicate | undefined => {