feat: valence fusion #1251
@ -1,16 +1,56 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { freeUpSlot, getInventory } from "@/src/services/inventoryService";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
import { SRng } from "@/src/services/rngService";
|
import { SRng } from "@/src/services/rngService";
|
||||||
import { IMongoDate } from "@/src/types/commonTypes";
|
import { IMongoDate, IOid } from "@/src/types/commonTypes";
|
||||||
import { IInfNode } from "@/src/types/inventoryTypes/inventoryTypes";
|
import {
|
||||||
|
IInfNode,
|
||||||
|
IInnateDamageFingerprint,
|
||||||
|
InventorySlot,
|
||||||
|
TEquipmentKey
|
||||||
|
} from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "@/src/utils/logger";
|
||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import { ExportRegions } from "warframe-public-export-plus";
|
import { ExportRegions } from "warframe-public-export-plus";
|
||||||
|
|
||||||
export const nemesisController: RequestHandler = async (req, res) => {
|
export const nemesisController: RequestHandler = async (req, res) => {
|
||||||
if ((req.query.mode as string) == "s") {
|
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
if ((req.query.mode as string) == "f") {
|
||||||
|
const body = getJSONfromString<IValenceFusionRequest>(String(req.body));
|
||||||
|
const inventory = await getInventory(accountId, body.Category + " WeaponBin");
|
||||||
|
const destWeapon = inventory[body.Category].id(body.DestWeapon.$oid)!;
|
||||||
|
const sourceWeapon = inventory[body.Category].id(body.SourceWeapon.$oid)!;
|
||||||
|
const destFingerprint = JSON.parse(destWeapon.UpgradeFingerprint!) as IInnateDamageFingerprint;
|
||||||
|
const sourceFingerprint = JSON.parse(sourceWeapon.UpgradeFingerprint!) as IInnateDamageFingerprint;
|
||||||
|
|
||||||
|
// Upgrade destination damage type if desireed
|
||||||
|
if (body.UseSourceDmgType) {
|
||||||
|
destFingerprint.buffs[0].Tag = sourceFingerprint.buffs[0].Tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Upgrade destination damage value
|
||||||
|
const destDamage = 0.25 + (destFingerprint.buffs[0].Value / 0x3fffffff) * (0.6 - 0.25);
|
||||||
|
const sourceDamage = 0.25 + (sourceFingerprint.buffs[0].Value / 0x3fffffff) * (0.6 - 0.25);
|
||||||
|
let newDamage = Math.max(destDamage, sourceDamage) * 1.1;
|
||||||
|
if (newDamage >= 0.58) {
|
||||||
|
newDamage = 0.6;
|
||||||
|
}
|
||||||
|
destFingerprint.buffs[0].Value = Math.trunc(((newDamage - 0.25) / (0.6 - 0.25)) * 0x3fffffff);
|
||||||
|
|
||||||
|
// Commit fingerprint
|
||||||
|
destWeapon.UpgradeFingerprint = JSON.stringify(destFingerprint);
|
||||||
|
|
||||||
|
// Remove source weapon
|
||||||
|
inventory[body.Category].pull({ _id: body.SourceWeapon.$oid });
|
||||||
|
freeUpSlot(inventory, InventorySlot.WEAPONS);
|
||||||
|
|
||||||
|
await inventory.save();
|
||||||
|
res.json({
|
||||||
|
InventoryChanges: {
|
||||||
|
[body.Category]: [destWeapon.toJSON()]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if ((req.query.mode as string) == "s") {
|
||||||
const inventory = await getInventory(accountId, "Nemesis NemesisAbandonedRewards");
|
const inventory = await getInventory(accountId, "Nemesis NemesisAbandonedRewards");
|
||||||
const body = getJSONfromString<INemesisStartRequest>(String(req.body));
|
const body = getJSONfromString<INemesisStartRequest>(String(req.body));
|
||||||
|
|
||||||
@ -88,7 +128,14 @@ export const nemesisController: RequestHandler = async (req, res) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface INemesisStartRequest {
|
interface IValenceFusionRequest {
|
||||||
|
DestWeapon: IOid;
|
||||||
|
SourceWeapon: IOid;
|
||||||
|
Category: TEquipmentKey;
|
||||||
|
UseSourceDmgType: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface INemesisStartRequest {
|
||||||
target: {
|
target: {
|
||||||
fp: number | bigint;
|
fp: number | bigint;
|
||||||
manifest: string;
|
manifest: string;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "@/src/services/inventoryService";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
import { IOid } from "@/src/types/commonTypes";
|
import { IOid } from "@/src/types/commonTypes";
|
||||||
import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { IInnateDamageFingerprint, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
|
|
||||||
export const valenceSwapController: RequestHandler = async (req, res) => {
|
export const valenceSwapController: RequestHandler = async (req, res) => {
|
||||||
@ -27,11 +27,3 @@ interface IValenceSwapRequest {
|
|||||||
WeaponCategory: TEquipmentKey;
|
WeaponCategory: TEquipmentKey;
|
||||||
NewValenceUpgradeTag: string;
|
NewValenceUpgradeTag: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IInnateDamageFingerprint {
|
|
||||||
compat: string;
|
|
||||||
buffs: {
|
|
||||||
Tag: string;
|
|
||||||
Value: number;
|
|
||||||
}[];
|
|
||||||
}
|
|
||||||
|
@ -21,11 +21,11 @@ export interface IUnveiledRivenFingerprint {
|
|||||||
lvlReq: number;
|
lvlReq: number;
|
||||||
rerolls?: number;
|
rerolls?: number;
|
||||||
pol: string;
|
pol: string;
|
||||||
buffs: IRivenStat[];
|
buffs: IFingerprintStat[];
|
||||||
curses: IRivenStat[];
|
curses: IFingerprintStat[];
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IRivenStat {
|
export interface IFingerprintStat {
|
||||||
Tag: string;
|
Tag: string;
|
||||||
Value: number;
|
Value: number;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { IOid, IMongoDate } from "../commonTypes";
|
import { IOid, IMongoDate } from "../commonTypes";
|
||||||
import {
|
import {
|
||||||
ArtifactPolarity,
|
|
||||||
IColor,
|
IColor,
|
||||||
IItemConfig,
|
IItemConfig,
|
||||||
IOperatorConfigClient,
|
IOperatorConfigClient,
|
||||||
@ -11,6 +10,7 @@ import {
|
|||||||
IEquipmentClient,
|
IEquipmentClient,
|
||||||
IOperatorConfigDatabase
|
IOperatorConfigDatabase
|
||||||
} from "@/src/types/inventoryTypes/commonInventoryTypes";
|
} from "@/src/types/inventoryTypes/commonInventoryTypes";
|
||||||
|
import { IFingerprintStat, RivenFingerprint } from "@/src/helpers/rivenHelper";
|
||||||
|
|
||||||
export type InventoryDatabaseEquipment = {
|
export type InventoryDatabaseEquipment = {
|
||||||
[_ in TEquipmentKey]: IEquipmentDatabase[];
|
[_ in TEquipmentKey]: IEquipmentDatabase[];
|
||||||
@ -869,23 +869,14 @@ export interface IGetting {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface IRandomUpgrade {
|
export interface IRandomUpgrade {
|
||||||
UpgradeFingerprint: IUpgradeFingerprint;
|
UpgradeFingerprint: RivenFingerprint;
|
||||||
ItemType: string;
|
ItemType: string;
|
||||||
ItemId: IOid;
|
ItemId: IOid;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IUpgradeFingerprint {
|
export interface IInnateDamageFingerprint {
|
||||||
compat: string;
|
compat: string;
|
||||||
lim: number;
|
buffs: IFingerprintStat[];
|
||||||
lvlReq: number;
|
|
||||||
pol: ArtifactPolarity;
|
|
||||||
buffs: IBuff[];
|
|
||||||
curses: IBuff[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IBuff {
|
|
||||||
Tag: string;
|
|
||||||
Value: number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum GettingSlotOrderInfo {
|
export enum GettingSlotOrderInfo {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user