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: nightwave rank up rewards (#1320)

Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1320

bfcd928f
Sainan <sainan@calamity.inc>
提交于

代码差异

4 个文件 +35 -3
Added src/controllers/api/clearNewEpisodeRewardController.ts +6 -0
@@ -0,0 +1,6 @@
1 import { RequestHandler } from "express";
2
3 // example req.body: {"NewEpisodeReward":true,"crossPlaySetting":"ENABLED"}
4 export const clearNewEpisodeRewardController: RequestHandler = (_req, res) => {
5 res.status(200).end();
6 };
Modified src/controllers/api/syndicateSacrificeController.ts +23 -3
@@ -1,10 +1,17 @@
1 1 import { getJSONfromString } from "@/src/helpers/stringHelpers";
2 2 import { RequestHandler } from "express";
3 3 import { getAccountIdForRequest } from "@/src/services/loginService";
4 import { ExportSyndicates, ISyndicateSacrifice } from "warframe-public-export-plus";
4 import { ExportNightwave, ExportSyndicates, ISyndicateSacrifice } from "warframe-public-export-plus";
5 5 import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
6 import { addMiscItems, combineInventoryChanges, getInventory, updateCurrency } from "@/src/services/inventoryService";
6 import {
7 addItem,
8 addMiscItems,
9 combineInventoryChanges,
10 getInventory,
11 updateCurrency
12 } from "@/src/services/inventoryService";
7 13 import { IInventoryChanges } from "@/src/types/purchaseTypes";
14 import { fromStoreItem, isStoreItem } from "@/src/services/itemDataService";
8 15
9 16 export const syndicateSacrificeController: RequestHandler = async (request, response) => {
10 17 const accountId = await getAccountIdForRequest(request);
@@ -22,7 +29,7 @@ export const syndicateSacrificeController: RequestHandler = async (request, resp
22 29 InventoryChanges: {},
23 30 Level: data.SacrificeLevel,
24 31 LevelIncrease: level <= 0 ? 1 : level,
25 NewEpisodeReward: syndicate.Tag == "RadioLegionIntermission9Syndicate"
32 NewEpisodeReward: false
26 33 };
27 34
28 35 const manifest = ExportSyndicates[data.AffiliationTag];
@@ -64,6 +71,19 @@ export const syndicateSacrificeController: RequestHandler = async (request, resp
64 71 );
65 72 }
66 73
74 if (data.AffiliationTag == ExportNightwave.affiliationTag) {
75 const index = syndicate.Title - 1;
76 if (index < ExportNightwave.rewards.length) {
77 res.NewEpisodeReward = true;
78 const reward = ExportNightwave.rewards[index];
79 let rewardType = reward.uniqueName;
80 if (isStoreItem(rewardType)) {
81 rewardType = fromStoreItem(rewardType);
82 }
83 combineInventoryChanges(res.InventoryChanges, await addItem(inventory, rewardType, reward.itemCount ?? 1));
84 }
85 }
86
67 87 await inventory.save();
68 88
69 89 response.json(res);
Modified src/routes/api.ts +2 -0
@@ -15,6 +15,7 @@ import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDai
15 15 import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController";
16 16 import { claimLibraryDailyTaskRewardController } from "@/src/controllers/api/claimLibraryDailyTaskRewardController";
17 17 import { clearDialogueHistoryController } from "@/src/controllers/api/clearDialogueHistoryController";
18 import { clearNewEpisodeRewardController } from "@/src/controllers/api/clearNewEpisodeRewardController";
18 19 import { completeRandomModChallengeController } from "@/src/controllers/api/completeRandomModChallengeController";
19 20 import { confirmGuildInvitationController } from "@/src/controllers/api/confirmGuildInvitationController";
20 21 import { contributeGuildClassController } from "@/src/controllers/api/contributeGuildClassController";
@@ -175,6 +176,7 @@ apiRouter.post("/artifactTransmutation.php", artifactTransmutationController);
175 176 apiRouter.post("/changeDojoRoot.php", changeDojoRootController);
176 177 apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
177 178 apiRouter.post("/clearDialogueHistory.php", clearDialogueHistoryController);
179 apiRouter.post("/clearNewEpisodeReward.php", clearNewEpisodeRewardController);
178 180 apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController);
179 181 apiRouter.post("/contributeGuildClass.php", contributeGuildClassController);
180 182 apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
Modified src/services/itemDataService.ts +4 -0
@@ -250,6 +250,10 @@ export const convertInboxMessage = (message: IInboxMessage): IMessage => {
250 250 } satisfies IMessage;
251 251 };
252 252
253 export const isStoreItem = (type: string): boolean => {
254 return type.startsWith("/Lotus/StoreItems/");
255 };
256
253 257 export const toStoreItem = (type: string): string => {
254 258 return "/Lotus/StoreItems/" + type.substring("/Lotus/".length);
255 259 };