From bcb0a46f41139bf62d0aa84787e0c8c4e0739af6 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 23 Feb 2025 04:33:58 +0100 Subject: [PATCH 1/3] add rivenFingerprintHelper --- .../api/rerollRandomModController.ts | 43 +------------------ src/helpers/rivenFingerprintHelper.ts | 40 +++++++++++++++++ 2 files changed, 42 insertions(+), 41 deletions(-) create mode 100644 src/helpers/rivenFingerprintHelper.ts diff --git a/src/controllers/api/rerollRandomModController.ts b/src/controllers/api/rerollRandomModController.ts index 71bc8f1c..17253ded 100644 --- a/src/controllers/api/rerollRandomModController.ts +++ b/src/controllers/api/rerollRandomModController.ts @@ -2,8 +2,7 @@ import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, getInventory } from "@/src/services/inventoryService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; -import { ExportUpgrades } from "warframe-public-export-plus"; -import { getRandomElement } from "@/src/services/rngService"; +import { IUnveiledRivenFingerprint, randomiseRivenStats } from "@/src/helpers/rivenFingerprintHelper"; export const rerollRandomModController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -25,7 +24,7 @@ export const rerollRandomModController: RequestHandler = async (req, res) => { fingerprint.rerolls++; upgrade.UpgradeFingerprint = JSON.stringify(fingerprint); - randomiseStats(upgrade.ItemType, fingerprint); + randomiseRivenStats(upgrade.ItemType, fingerprint); upgrade.PendingRerollFingerprint = JSON.stringify(fingerprint); await inventory.save(); @@ -52,28 +51,6 @@ export const rerollRandomModController: RequestHandler = async (req, res) => { } }; -const randomiseStats = (randomModType: string, fingerprint: IUnveiledRivenFingerprint): void => { - const meta = ExportUpgrades[randomModType]; - - fingerprint.buffs = []; - const numBuffs = 2 + Math.trunc(Math.random() * 2); // 2 or 3 - const buffEntries = meta.upgradeEntries!.filter(x => x.canBeBuff); - for (let i = 0; i != numBuffs; ++i) { - const buffIndex = Math.trunc(Math.random() * buffEntries.length); - const entry = buffEntries[buffIndex]; - fingerprint.buffs.push({ Tag: entry.tag, Value: Math.trunc(Math.random() * 0x40000000) }); - buffEntries.splice(buffIndex, 1); - } - - fingerprint.curses = []; - if (Math.random() < 0.5) { - const entry = getRandomElement( - meta.upgradeEntries!.filter(x => x.canBeCurse && !fingerprint.buffs.find(y => y.Tag == x.tag)) - ); - fingerprint.curses.push({ Tag: entry.tag, Value: Math.trunc(Math.random() * 0x40000000) }); - } -}; - type RerollRandomModRequest = LetsGoGamblingRequest | AwDangitRequest; interface LetsGoGamblingRequest { @@ -85,20 +62,4 @@ interface AwDangitRequest { CommitReroll: boolean; } -interface IUnveiledRivenFingerprint { - compat: string; - lim: number; - lvl: number; - lvlReq: 0; - rerolls?: number; - pol: string; - buffs: IRivenStat[]; - curses: IRivenStat[]; -} - -interface IRivenStat { - Tag: string; - Value: number; -} - const rerollCosts = [900, 1000, 1200, 1400, 1700, 2000, 2350, 2750, 3150]; diff --git a/src/helpers/rivenFingerprintHelper.ts b/src/helpers/rivenFingerprintHelper.ts new file mode 100644 index 00000000..912b911c --- /dev/null +++ b/src/helpers/rivenFingerprintHelper.ts @@ -0,0 +1,40 @@ +import { ExportUpgrades } from "warframe-public-export-plus"; +import { getRandomElement } from "../services/rngService"; + +export interface IUnveiledRivenFingerprint { + compat: string; + lim: number; + lvl: number; + lvlReq: 0; + rerolls?: number; + pol: string; + buffs: IRivenStat[]; + curses: IRivenStat[]; +} + +interface IRivenStat { + Tag: string; + Value: number; +} + +export const randomiseRivenStats = (randomModType: string, fingerprint: IUnveiledRivenFingerprint): void => { + const meta = ExportUpgrades[randomModType]; + + fingerprint.buffs = []; + const numBuffs = 2 + Math.trunc(Math.random() * 2); // 2 or 3 + const buffEntries = meta.upgradeEntries!.filter(x => x.canBeBuff); + for (let i = 0; i != numBuffs; ++i) { + const buffIndex = Math.trunc(Math.random() * buffEntries.length); + const entry = buffEntries[buffIndex]; + fingerprint.buffs.push({ Tag: entry.tag, Value: Math.trunc(Math.random() * 0x40000000) }); + buffEntries.splice(buffIndex, 1); + } + + fingerprint.curses = []; + if (Math.random() < 0.5) { + const entry = getRandomElement( + meta.upgradeEntries!.filter(x => x.canBeCurse && !fingerprint.buffs.find(y => y.Tag == x.tag)) + ); + fingerprint.curses.push({ Tag: entry.tag, Value: Math.trunc(Math.random() * 0x40000000) }); + } +}; -- 2.47.2 From 751ff8addbc19c8613b62a65b2ec48e64231e4ed Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 23 Feb 2025 05:00:15 +0100 Subject: [PATCH 2/3] feat: unveil riven with cipher --- .../completeRandomModChallengeController.ts | 57 +++++++++++++++++++ .../api/rerollRandomModController.ts | 3 +- src/helpers/rivenFingerprintHelper.ts | 10 ++-- src/routes/api.ts | 2 + 4 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 src/controllers/api/completeRandomModChallengeController.ts diff --git a/src/controllers/api/completeRandomModChallengeController.ts b/src/controllers/api/completeRandomModChallengeController.ts new file mode 100644 index 00000000..60c77b3c --- /dev/null +++ b/src/controllers/api/completeRandomModChallengeController.ts @@ -0,0 +1,57 @@ +import { RequestHandler } from "express"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; +import { IInventoryChanges } from "@/src/types/purchaseTypes"; +import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { IUnveiledRivenFingerprint, randomiseRivenStats } from "@/src/helpers/rivenFingerprintHelper"; +import { getRandomElement, getRandomInt } from "@/src/services/rngService"; +import { ExportUpgrades } from "warframe-public-export-plus"; + +export const completeRandomModChallengeController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId); + const request = getJSONfromString(String(req.body)); + let inventoryChanges: IInventoryChanges = {}; + + // Remove 20 plat or riven cipher + if ((req.query.p as string) == "1") { + inventoryChanges = { ...updateCurrency(inventory, 20, true) }; + } else { + const miscItemChanges: IMiscItem[] = [ + { + ItemType: "/Lotus/Types/Items/MiscItems/RivenIdentifier", + ItemCount: -1 + } + ]; + addMiscItems(inventory, miscItemChanges); + inventoryChanges.MiscItems = miscItemChanges; + } + + // Update riven fingerprint to a randomised unveiled state + const upgrade = inventory.Upgrades.id(request.ItemId)!; + const meta = ExportUpgrades[upgrade.ItemType]; + const fingerprint: IUnveiledRivenFingerprint = { + compat: getRandomElement(meta.compatibleItems!), + lim: 0, + lvl: 0, + lvlReq: getRandomInt(8, 16), + rerolls: 0, + pol: getRandomElement(["AP_ATTACK", "AP_DEFENSE", "AP_TACTIC"]), + buffs: [], + curses: [] + }; + randomiseRivenStats(meta, fingerprint); + upgrade.UpgradeFingerprint = JSON.stringify(fingerprint); + + await inventory.save(); + + res.json({ + InventoryChanges: inventoryChanges, + Fingerprint: upgrade.UpgradeFingerprint + }); +}; + +interface ICompleteRandomModChallengeRequest { + ItemId: string; +} diff --git a/src/controllers/api/rerollRandomModController.ts b/src/controllers/api/rerollRandomModController.ts index 17253ded..e35df1a8 100644 --- a/src/controllers/api/rerollRandomModController.ts +++ b/src/controllers/api/rerollRandomModController.ts @@ -3,6 +3,7 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, getInventory } from "@/src/services/inventoryService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { IUnveiledRivenFingerprint, randomiseRivenStats } from "@/src/helpers/rivenFingerprintHelper"; +import { ExportUpgrades } from "warframe-public-export-plus"; export const rerollRandomModController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -24,7 +25,7 @@ export const rerollRandomModController: RequestHandler = async (req, res) => { fingerprint.rerolls++; upgrade.UpgradeFingerprint = JSON.stringify(fingerprint); - randomiseRivenStats(upgrade.ItemType, fingerprint); + randomiseRivenStats(ExportUpgrades[upgrade.ItemType], fingerprint); upgrade.PendingRerollFingerprint = JSON.stringify(fingerprint); await inventory.save(); diff --git a/src/helpers/rivenFingerprintHelper.ts b/src/helpers/rivenFingerprintHelper.ts index 912b911c..c3742391 100644 --- a/src/helpers/rivenFingerprintHelper.ts +++ b/src/helpers/rivenFingerprintHelper.ts @@ -1,11 +1,11 @@ -import { ExportUpgrades } from "warframe-public-export-plus"; +import { IUpgrade } from "warframe-public-export-plus"; import { getRandomElement } from "../services/rngService"; export interface IUnveiledRivenFingerprint { compat: string; - lim: number; + lim: 0; lvl: number; - lvlReq: 0; + lvlReq: number; rerolls?: number; pol: string; buffs: IRivenStat[]; @@ -17,9 +17,7 @@ interface IRivenStat { Value: number; } -export const randomiseRivenStats = (randomModType: string, fingerprint: IUnveiledRivenFingerprint): void => { - const meta = ExportUpgrades[randomModType]; - +export const randomiseRivenStats = (meta: IUpgrade, fingerprint: IUnveiledRivenFingerprint): void => { fingerprint.buffs = []; const numBuffs = 2 + Math.trunc(Math.random() * 2); // 2 or 3 const buffEntries = meta.upgradeEntries!.filter(x => x.canBeBuff); diff --git a/src/routes/api.ts b/src/routes/api.ts index 2b3e511c..0a2c6716 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -8,6 +8,7 @@ import { changeDojoRootController } from "@/src/controllers/api/changeDojoRootCo import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDailyMissionBonusController"; import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController"; import { clearDialogueHistoryController } from "@/src/controllers/api/clearDialogueHistoryController"; +import { completeRandomModChallengeController } from "@/src/controllers/api/completeRandomModChallengeController"; import { createGuildController } from "@/src/controllers/api/createGuildController"; import { creditsController } from "@/src/controllers/api/creditsController"; import { deleteSessionController } from "@/src/controllers/api/deleteSessionController"; @@ -133,6 +134,7 @@ apiRouter.post("/artifacts.php", artifactsController); apiRouter.post("/changeDojoRoot.php", changeDojoRootController); apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController); apiRouter.post("/clearDialogueHistory.php", clearDialogueHistoryController); +apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController); apiRouter.post("/createGuild.php", createGuildController); apiRouter.post("/endlessXp.php", endlessXpController); apiRouter.post("/evolveWeapon.php", evolveWeaponController); -- 2.47.2 From 1e8d740b887d3d0dc0422a3143b23331ee893b96 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 23 Feb 2025 05:04:08 +0100 Subject: [PATCH 3/3] don't need to set rerolls for an unrolled riven --- src/controllers/api/completeRandomModChallengeController.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/controllers/api/completeRandomModChallengeController.ts b/src/controllers/api/completeRandomModChallengeController.ts index 60c77b3c..c2578eb7 100644 --- a/src/controllers/api/completeRandomModChallengeController.ts +++ b/src/controllers/api/completeRandomModChallengeController.ts @@ -36,7 +36,6 @@ export const completeRandomModChallengeController: RequestHandler = async (req, lim: 0, lvl: 0, lvlReq: getRandomInt(8, 16), - rerolls: 0, pol: getRandomElement(["AP_ATTACK", "AP_DEFENSE", "AP_TACTIC"]), buffs: [], curses: [] -- 2.47.2