chore: initial support for focus 2.0
All checks were successful
Build / build (pull_request) Successful in 3m14s
All checks were successful
Build / build (pull_request) Successful in 3m14s
handling some common operations but not implementing pools yet
This commit is contained in:
parent
fd7ddd9696
commit
bfce46cf83
@ -1,23 +1,79 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory, addMiscItems, addEquipment, occupySlot } from "../../services/inventoryService.ts";
|
import { getInventory, addMiscItems, addEquipment, occupySlot } from "../../services/inventoryService.ts";
|
||||||
import type { IMiscItem, TFocusPolarity, TEquipmentKey } from "../../types/inventoryTypes/inventoryTypes.ts";
|
import type { IMiscItem, TFocusPolarity, TEquipmentKey } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
|
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { logger } from "../../utils/logger.ts";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import { ExportFocusUpgrades } from "warframe-public-export-plus";
|
import { ExportFocusUpgrades } from "warframe-public-export-plus";
|
||||||
import { Inventory } from "../../models/inventoryModels/inventoryModel.ts";
|
import { Inventory } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
|
import { version_compare } from "../../helpers/inventoryHelpers.ts";
|
||||||
|
|
||||||
export const focusController: RequestHandler = async (req, res) => {
|
export const focusController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const account = await getAccountForRequest(req);
|
||||||
switch (req.query.op) {
|
|
||||||
|
let op: string | undefined;
|
||||||
|
const focus2 = account.BuildLabel && version_compare(account.BuildLabel, "2022.04.29.12.53") < 0;
|
||||||
|
if (focus2) {
|
||||||
|
// Focus 2.0
|
||||||
|
switch (req.query.op) {
|
||||||
|
case Focus2Operation.UnlockWay:
|
||||||
|
op = "UnlockWay";
|
||||||
|
break;
|
||||||
|
case Focus2Operation.IncreasePool:
|
||||||
|
op = "IncreasePool";
|
||||||
|
break;
|
||||||
|
case Focus2Operation.UnlockUpgrade:
|
||||||
|
op = "UnlockUpgrade";
|
||||||
|
break;
|
||||||
|
case Focus2Operation.ActivateWay:
|
||||||
|
op = "ActivateWay";
|
||||||
|
break;
|
||||||
|
case Focus2Operation.LevelUpUpgrade:
|
||||||
|
op = "LevelUpUpgrade";
|
||||||
|
break;
|
||||||
|
case Focus2Operation.ConvertShard:
|
||||||
|
op = "ConvertShard";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Focus 3.0
|
||||||
|
switch (req.query.op) {
|
||||||
|
case Focus3Operation.InstallLens:
|
||||||
|
op = "InstallLens";
|
||||||
|
break;
|
||||||
|
case Focus3Operation.UnlockWay:
|
||||||
|
op = "UnlockWay";
|
||||||
|
break;
|
||||||
|
case Focus3Operation.UnlockUpgrade:
|
||||||
|
op = "UnlockUpgrade";
|
||||||
|
break;
|
||||||
|
case Focus3Operation.LevelUpUpgrade:
|
||||||
|
op = "LevelUpUpgrade";
|
||||||
|
break;
|
||||||
|
case Focus3Operation.ActivateWay:
|
||||||
|
op = "ActivateWay";
|
||||||
|
break;
|
||||||
|
case Focus3Operation.SentTrainingAmplifier:
|
||||||
|
op = "SentTrainingAmplifier";
|
||||||
|
break;
|
||||||
|
case Focus3Operation.UnbindUpgrade:
|
||||||
|
op = "UnbindUpgrade";
|
||||||
|
break;
|
||||||
|
case Focus3Operation.ConvertShard:
|
||||||
|
op = "ConvertShard";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (op) {
|
||||||
default:
|
default:
|
||||||
logger.error("Unhandled focus op type: " + String(req.query.op));
|
logger.error("Unhandled focus op type: " + String(req.query.op));
|
||||||
logger.debug(String(req.body));
|
logger.debug(String(req.body));
|
||||||
res.end();
|
res.end();
|
||||||
break;
|
break;
|
||||||
case FocusOperation.InstallLens: {
|
case "InstallLens": {
|
||||||
const request = JSON.parse(String(req.body)) as ILensInstallRequest;
|
const request = JSON.parse(String(req.body)) as ILensInstallRequest;
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(account._id.toString());
|
||||||
const item = inventory[request.Category].id(request.WeaponId);
|
const item = inventory[request.Category].id(request.WeaponId);
|
||||||
if (item) {
|
if (item) {
|
||||||
item.FocusLens = request.LensType;
|
item.FocusLens = request.LensType;
|
||||||
@ -35,10 +91,10 @@ export const focusController: RequestHandler = async (req, res) => {
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FocusOperation.UnlockWay: {
|
case "UnlockWay": {
|
||||||
const focusType = (JSON.parse(String(req.body)) as IWayRequest).FocusType;
|
const focusType = (JSON.parse(String(req.body)) as IWayRequest).FocusType;
|
||||||
const focusPolarity = focusTypeToPolarity(focusType);
|
const focusPolarity = focusTypeToPolarity(focusType);
|
||||||
const inventory = await getInventory(accountId, "FocusAbility FocusUpgrades FocusXP");
|
const inventory = await getInventory(account._id.toString(), "FocusAbility FocusUpgrades FocusXP");
|
||||||
const cost = inventory.FocusAbility ? 50_000 : 0;
|
const cost = inventory.FocusAbility ? 50_000 : 0;
|
||||||
inventory.FocusAbility ??= focusType;
|
inventory.FocusAbility ??= focusType;
|
||||||
inventory.FocusUpgrades.push({ ItemType: focusType });
|
inventory.FocusUpgrades.push({ ItemType: focusType });
|
||||||
@ -52,12 +108,12 @@ export const focusController: RequestHandler = async (req, res) => {
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FocusOperation.ActivateWay: {
|
case "ActivateWay": {
|
||||||
const focusType = (JSON.parse(String(req.body)) as IWayRequest).FocusType;
|
const focusType = (JSON.parse(String(req.body)) as IWayRequest).FocusType;
|
||||||
|
|
||||||
await Inventory.updateOne(
|
await Inventory.updateOne(
|
||||||
{
|
{
|
||||||
accountOwnerId: accountId
|
accountOwnerId: account._id.toString()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
FocusAbility: focusType
|
FocusAbility: focusType
|
||||||
@ -69,10 +125,10 @@ export const focusController: RequestHandler = async (req, res) => {
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FocusOperation.UnlockUpgrade: {
|
case "UnlockUpgrade": {
|
||||||
const request = JSON.parse(String(req.body)) as IUnlockUpgradeRequest;
|
const request = JSON.parse(String(req.body)) as IUnlockUpgradeRequest;
|
||||||
const focusPolarity = focusTypeToPolarity(request.FocusTypes[0]);
|
const focusPolarity = focusTypeToPolarity(request.FocusTypes[0]);
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(account._id.toString());
|
||||||
let cost = 0;
|
let cost = 0;
|
||||||
for (const focusType of request.FocusTypes) {
|
for (const focusType of request.FocusTypes) {
|
||||||
cost += ExportFocusUpgrades[focusType].baseFocusPointCost;
|
cost += ExportFocusUpgrades[focusType].baseFocusPointCost;
|
||||||
@ -86,15 +142,18 @@ export const focusController: RequestHandler = async (req, res) => {
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FocusOperation.LevelUpUpgrade: {
|
case "LevelUpUpgrade": {
|
||||||
const request = JSON.parse(String(req.body)) as ILevelUpUpgradeRequest;
|
const request = JSON.parse(String(req.body)) as ILevelUpUpgradeRequest;
|
||||||
const focusPolarity = focusTypeToPolarity(request.FocusInfos[0].ItemType);
|
const focusPolarity = focusTypeToPolarity(request.FocusInfos[0].ItemType);
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(account._id.toString());
|
||||||
let cost = 0;
|
let cost = 0;
|
||||||
for (const focusUpgrade of request.FocusInfos) {
|
for (const focusUpgrade of request.FocusInfos) {
|
||||||
cost += focusUpgrade.FocusXpCost;
|
cost += focusUpgrade.FocusXpCost;
|
||||||
const focusUpgradeDb = inventory.FocusUpgrades.find(entry => entry.ItemType == focusUpgrade.ItemType)!;
|
const focusUpgradeDb = inventory.FocusUpgrades.find(entry => entry.ItemType == focusUpgrade.ItemType)!;
|
||||||
focusUpgradeDb.Level = focusUpgrade.Level;
|
focusUpgradeDb.Level = focusUpgrade.Level;
|
||||||
|
if (focus2) {
|
||||||
|
focusUpgradeDb.IsActive = focusUpgrade.IsActive;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
inventory.FocusXP![focusPolarity]! -= cost;
|
inventory.FocusXP![focusPolarity]! -= cost;
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
@ -104,9 +163,9 @@ export const focusController: RequestHandler = async (req, res) => {
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FocusOperation.SentTrainingAmplifier: {
|
case "SentTrainingAmplifier": {
|
||||||
const request = JSON.parse(String(req.body)) as ISentTrainingAmplifierRequest;
|
const request = JSON.parse(String(req.body)) as ISentTrainingAmplifierRequest;
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(account._id.toString());
|
||||||
const inventoryChanges = addEquipment(inventory, "OperatorAmps", request.StartingWeaponType, {
|
const inventoryChanges = addEquipment(inventory, "OperatorAmps", request.StartingWeaponType, {
|
||||||
ModularParts: [
|
ModularParts: [
|
||||||
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingGrip",
|
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingGrip",
|
||||||
@ -119,10 +178,10 @@ export const focusController: RequestHandler = async (req, res) => {
|
|||||||
res.json(inventoryChanges.OperatorAmps![0]);
|
res.json(inventoryChanges.OperatorAmps![0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FocusOperation.UnbindUpgrade: {
|
case "UnbindUpgrade": {
|
||||||
const request = JSON.parse(String(req.body)) as IUnbindUpgradeRequest;
|
const request = JSON.parse(String(req.body)) as IUnbindUpgradeRequest;
|
||||||
const focusPolarity = focusTypeToPolarity(request.FocusTypes[0]);
|
const focusPolarity = focusTypeToPolarity(request.FocusTypes[0]);
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(account._id.toString());
|
||||||
inventory.FocusXP![focusPolarity]! -= 750_000 * request.FocusTypes.length;
|
inventory.FocusXP![focusPolarity]! -= 750_000 * request.FocusTypes.length;
|
||||||
addMiscItems(inventory, [
|
addMiscItems(inventory, [
|
||||||
{
|
{
|
||||||
@ -149,7 +208,7 @@ export const focusController: RequestHandler = async (req, res) => {
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FocusOperation.ConvertShard: {
|
case "ConvertShard": {
|
||||||
const request = JSON.parse(String(req.body)) as IConvertShardRequest;
|
const request = JSON.parse(String(req.body)) as IConvertShardRequest;
|
||||||
// Tally XP
|
// Tally XP
|
||||||
let xp = 0;
|
let xp = 0;
|
||||||
@ -167,7 +226,7 @@ export const focusController: RequestHandler = async (req, res) => {
|
|||||||
for (const shard of request.Shards) {
|
for (const shard of request.Shards) {
|
||||||
shard.ItemCount *= -1;
|
shard.ItemCount *= -1;
|
||||||
}
|
}
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(account._id.toString());
|
||||||
const polarity = request.Polarity;
|
const polarity = request.Polarity;
|
||||||
inventory.FocusXP ??= {};
|
inventory.FocusXP ??= {};
|
||||||
inventory.FocusXP[polarity] ??= 0;
|
inventory.FocusXP[polarity] ??= 0;
|
||||||
@ -179,7 +238,8 @@ export const focusController: RequestHandler = async (req, res) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
enum FocusOperation {
|
// Focus 3.0
|
||||||
|
enum Focus3Operation {
|
||||||
InstallLens = "1",
|
InstallLens = "1",
|
||||||
UnlockWay = "2",
|
UnlockWay = "2",
|
||||||
UnlockUpgrade = "3",
|
UnlockUpgrade = "3",
|
||||||
@ -190,6 +250,17 @@ enum FocusOperation {
|
|||||||
ConvertShard = "9"
|
ConvertShard = "9"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Focus 2.0
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
enum Focus2Operation {
|
||||||
|
UnlockWay = "2",
|
||||||
|
IncreasePool = "4", // {"FocusType":"/Lotus/Upgrades/Focus/Defense/DefenseFocusAbility","CurrentTotalCapacity":5,"NewTotalCapacity":7}
|
||||||
|
UnlockUpgrade = "5",
|
||||||
|
ActivateWay = "6",
|
||||||
|
LevelUpUpgrade = "7", // used to level up & activate ability
|
||||||
|
ConvertShard = "11"
|
||||||
|
}
|
||||||
|
|
||||||
// For UnlockWay & ActivateWay
|
// For UnlockWay & ActivateWay
|
||||||
interface IWayRequest {
|
interface IWayRequest {
|
||||||
FocusType: string;
|
FocusType: string;
|
||||||
@ -206,6 +277,7 @@ interface ILevelUpUpgradeRequest {
|
|||||||
IsUniversal: boolean;
|
IsUniversal: boolean;
|
||||||
Level: number;
|
Level: number;
|
||||||
IsActiveAbility: boolean;
|
IsActiveAbility: boolean;
|
||||||
|
IsActive?: number; // Focus 2.0
|
||||||
}[];
|
}[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -146,7 +146,8 @@ const focusUpgradeSchema = new Schema<IFocusUpgrade>(
|
|||||||
{
|
{
|
||||||
ItemType: String,
|
ItemType: String,
|
||||||
Level: Number,
|
Level: Number,
|
||||||
IsUniversal: Boolean
|
IsUniversal: Boolean,
|
||||||
|
IsActive: Number
|
||||||
},
|
},
|
||||||
{ _id: false }
|
{ _id: false }
|
||||||
);
|
);
|
||||||
|
|||||||
@ -638,6 +638,7 @@ export interface IFocusUpgrade {
|
|||||||
ItemType: string;
|
ItemType: string;
|
||||||
Level?: number;
|
Level?: number;
|
||||||
IsUniversal?: boolean;
|
IsUniversal?: boolean;
|
||||||
|
IsActive?: number; // Focus 2.0
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IFocusXP {
|
export interface IFocusXP {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user