feat: nightwave rank up rewards
Some checks failed
Build / build (22) (push) Failing after 1m7s
Build / build (18) (push) Failing after 57s
Build / build (20) (push) Failing after 1m24s
Build / build (20) (pull_request) Failing after 40s
Build / build (18) (pull_request) Failing after 1m11s
Build / build (22) (pull_request) Failing after 1m18s

This commit is contained in:
Sainan 2025-03-24 22:08:05 +01:00
parent 2ec2b0278a
commit 00fdb8e5e1
4 changed files with 29 additions and 3 deletions

View File

@ -0,0 +1,6 @@
import { RequestHandler } from "express";
// example req.body: {"NewEpisodeReward":true,"crossPlaySetting":"ENABLED"}
export const clearNewEpisodeRewardController: RequestHandler = (_req, res) => {
res.status(200).end();
};

View File

@ -1,10 +1,11 @@
import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { ExportSyndicates, ISyndicateSacrifice } from "warframe-public-export-plus"; import { ExportNightwave, ExportSyndicates, ISyndicateSacrifice } from "warframe-public-export-plus";
import { handleStoreItemAcquisition } from "@/src/services/purchaseService"; import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
import { addMiscItems, combineInventoryChanges, getInventory, updateCurrency } from "@/src/services/inventoryService"; import { addItem, addMiscItems, combineInventoryChanges, getInventory, updateCurrency } from "@/src/services/inventoryService";
import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { IInventoryChanges } from "@/src/types/purchaseTypes";
import { fromStoreItem, isStoreItem } from "@/src/services/itemDataService";
export const syndicateSacrificeController: RequestHandler = async (request, response) => { export const syndicateSacrificeController: RequestHandler = async (request, response) => {
const accountId = await getAccountIdForRequest(request); const accountId = await getAccountIdForRequest(request);
@ -22,7 +23,7 @@ export const syndicateSacrificeController: RequestHandler = async (request, resp
InventoryChanges: {}, InventoryChanges: {},
Level: data.SacrificeLevel, Level: data.SacrificeLevel,
LevelIncrease: level <= 0 ? 1 : level, LevelIncrease: level <= 0 ? 1 : level,
NewEpisodeReward: syndicate.Tag == "RadioLegionIntermission9Syndicate" NewEpisodeReward: false
}; };
const manifest = ExportSyndicates[data.AffiliationTag]; const manifest = ExportSyndicates[data.AffiliationTag];
@ -64,6 +65,19 @@ export const syndicateSacrificeController: RequestHandler = async (request, resp
); );
} }
if (data.AffiliationTag == ExportNightwave.affiliationTag) {
const index = syndicate.Title - 1;
if (index < ExportNightwave.rewards.length) {
res.NewEpisodeReward = true;
const reward = ExportNightwave.rewards[index];
let rewardType = reward.uniqueName;
if (isStoreItem(rewardType)) {
rewardType = fromStoreItem(rewardType);
}
combineInventoryChanges(res.InventoryChanges, await addItem(inventory, rewardType, reward.itemCount ?? 1));
}
}
await inventory.save(); await inventory.save();
response.json(res); response.json(res);

View File

@ -15,6 +15,7 @@ import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDai
import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController"; import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController";
import { claimLibraryDailyTaskRewardController } from "@/src/controllers/api/claimLibraryDailyTaskRewardController"; import { claimLibraryDailyTaskRewardController } from "@/src/controllers/api/claimLibraryDailyTaskRewardController";
import { clearDialogueHistoryController } from "@/src/controllers/api/clearDialogueHistoryController"; import { clearDialogueHistoryController } from "@/src/controllers/api/clearDialogueHistoryController";
import { clearNewEpisodeRewardController } from "@/src/controllers/api/clearNewEpisodeRewardController";
import { completeRandomModChallengeController } from "@/src/controllers/api/completeRandomModChallengeController"; import { completeRandomModChallengeController } from "@/src/controllers/api/completeRandomModChallengeController";
import { confirmGuildInvitationController } from "@/src/controllers/api/confirmGuildInvitationController"; import { confirmGuildInvitationController } from "@/src/controllers/api/confirmGuildInvitationController";
import { contributeGuildClassController } from "@/src/controllers/api/contributeGuildClassController"; import { contributeGuildClassController } from "@/src/controllers/api/contributeGuildClassController";
@ -175,6 +176,7 @@ apiRouter.post("/artifactTransmutation.php", artifactTransmutationController);
apiRouter.post("/changeDojoRoot.php", changeDojoRootController); apiRouter.post("/changeDojoRoot.php", changeDojoRootController);
apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController); apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
apiRouter.post("/clearDialogueHistory.php", clearDialogueHistoryController); apiRouter.post("/clearDialogueHistory.php", clearDialogueHistoryController);
apiRouter.post("/clearNewEpisodeReward.php", clearNewEpisodeRewardController);
apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController); apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController);
apiRouter.post("/contributeGuildClass.php", contributeGuildClassController); apiRouter.post("/contributeGuildClass.php", contributeGuildClassController);
apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController); apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);

View File

@ -250,6 +250,10 @@ export const convertInboxMessage = (message: IInboxMessage): IMessage => {
} satisfies IMessage; } satisfies IMessage;
}; };
export const isStoreItem = (type: string): boolean => {
return type.startsWith("/Lotus/StoreItems/");
}
export const toStoreItem = (type: string): string => { export const toStoreItem = (type: string): string => {
return "/Lotus/StoreItems/" + type.substring("/Lotus/".length); return "/Lotus/StoreItems/" + type.substring("/Lotus/".length);
}; };