forked from OpenWF/SpaceNinjaServer
feat: implement focus.php (#254)
This commit is contained in:
parent
e980d34458
commit
ae8913931c
@ -1,6 +1,149 @@
|
||||
import { Handler } from "express";
|
||||
import { RequestHandler } from "express";
|
||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||
import { getInventory, addMiscItems } from "@/src/services/inventoryService";
|
||||
import { IMiscItem, TFocusPolarity } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||
import { logger } from "@/src/utils/logger";
|
||||
import baseFocusPointCosts from "@/static/json/baseFocusPointCosts.json";
|
||||
|
||||
export const focusController: Handler = (_req, _res) => {
|
||||
//console.log("focusController", req.query);
|
||||
_res.sendStatus(400);
|
||||
export const focusController: RequestHandler = async (req, res) => {
|
||||
const accountId = await getAccountIdForRequest(req);
|
||||
switch (req.query.op) {
|
||||
default:
|
||||
logger.error("Unhandled focus op type: " + req.query.op);
|
||||
logger.debug(req.body.toString());
|
||||
res.end();
|
||||
break;
|
||||
case FocusOperation.UnlockWay: {
|
||||
const focusType = (JSON.parse(req.body.toString()) as IWayRequest).FocusType;
|
||||
const focusPolarity = focusTypeToPolarity(focusType);
|
||||
const inventory = await getInventory(accountId);
|
||||
const cost = inventory.FocusAbility ? 50_000 : 0;
|
||||
inventory.FocusAbility ??= focusType;
|
||||
inventory.FocusUpgrades.push({ ItemType: focusType });
|
||||
if (inventory.FocusXP) {
|
||||
inventory.FocusXP[focusPolarity] -= cost;
|
||||
}
|
||||
await inventory.save();
|
||||
res.json({
|
||||
FocusUpgrade: { ItemType: focusType },
|
||||
FocusPointCosts: { [focusPolarity]: cost }
|
||||
});
|
||||
break;
|
||||
}
|
||||
case FocusOperation.ActivateWay: {
|
||||
const focusType = (JSON.parse(req.body.toString()) as IWayRequest).FocusType;
|
||||
const inventory = await getInventory(accountId);
|
||||
inventory.FocusAbility = focusType;
|
||||
await inventory.save();
|
||||
res.end();
|
||||
break;
|
||||
}
|
||||
case FocusOperation.UnlockUpgrade: {
|
||||
const request = JSON.parse(req.body.toString()) as IUnlockUpgradeRequest;
|
||||
const focusPolarity = focusTypeToPolarity(request.FocusTypes[0]);
|
||||
const inventory = await getInventory(accountId);
|
||||
let cost = 0;
|
||||
for (const focusType of request.FocusTypes) {
|
||||
cost += baseFocusPointCosts[focusType as keyof typeof baseFocusPointCosts];
|
||||
inventory.FocusUpgrades.push({ ItemType: focusType, Level: 0 });
|
||||
}
|
||||
inventory.FocusXP[focusPolarity] -= cost;
|
||||
await inventory.save();
|
||||
res.json({
|
||||
FocusTypes: request.FocusTypes,
|
||||
FocusPointCosts: { [focusPolarity]: cost }
|
||||
});
|
||||
break;
|
||||
}
|
||||
case FocusOperation.LevelUpUpgrade: {
|
||||
const request = JSON.parse(req.body.toString()) as ILevelUpUpgradeRequest;
|
||||
const focusPolarity = focusTypeToPolarity(request.FocusInfos[0].ItemType);
|
||||
const inventory = await getInventory(accountId);
|
||||
let cost = 0;
|
||||
for (const focusUpgrade of request.FocusInfos) {
|
||||
cost += focusUpgrade.FocusXpCost;
|
||||
const focusUpgradeDb = inventory.FocusUpgrades.find(entry => entry.ItemType == focusUpgrade.ItemType)!;
|
||||
focusUpgradeDb.Level = focusUpgrade.Level;
|
||||
if (focusUpgrade.IsUniversal) {
|
||||
focusUpgradeDb.IsUniversal = true;
|
||||
}
|
||||
}
|
||||
inventory.FocusXP[focusPolarity] -= cost;
|
||||
await inventory.save();
|
||||
res.json({
|
||||
FocusInfos: request.FocusInfos,
|
||||
FocusPointCosts: { [focusPolarity]: cost }
|
||||
});
|
||||
break;
|
||||
}
|
||||
case FocusOperation.ConvertShard: {
|
||||
const request = JSON.parse(req.body.toString()) as IConvertShardRequest;
|
||||
// Tally XP
|
||||
let xp = 0;
|
||||
for (const shard of request.Shards) {
|
||||
xp += shardValues[shard.ItemType as keyof typeof shardValues] * shard.ItemCount;
|
||||
}
|
||||
// Send response
|
||||
res.json({
|
||||
FocusPointGains: {
|
||||
[request.Polarity]: xp
|
||||
},
|
||||
MiscItemCosts: request.Shards
|
||||
});
|
||||
// Commit added XP and removed shards to DB
|
||||
for (const shard of request.Shards) {
|
||||
shard.ItemCount *= -1;
|
||||
}
|
||||
const inventory = await getInventory(accountId);
|
||||
inventory.FocusXP ??= { AP_POWER: 0, AP_TACTIC: 0, AP_DEFENSE: 0, AP_ATTACK: 0, AP_WARD: 0 };
|
||||
inventory.FocusXP[request.Polarity] += xp;
|
||||
addMiscItems(inventory, request.Shards);
|
||||
await inventory.save();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
enum FocusOperation {
|
||||
UnlockWay = "2",
|
||||
UnlockUpgrade = "3",
|
||||
LevelUpUpgrade = "4",
|
||||
ActivateWay = "5",
|
||||
ConvertShard = "9"
|
||||
}
|
||||
|
||||
// For UnlockWay & ActivateWay
|
||||
interface IWayRequest {
|
||||
FocusType: string;
|
||||
}
|
||||
|
||||
interface IUnlockUpgradeRequest {
|
||||
FocusTypes: string[];
|
||||
}
|
||||
|
||||
interface ILevelUpUpgradeRequest {
|
||||
FocusInfos: {
|
||||
ItemType: string;
|
||||
FocusXpCost: number;
|
||||
IsUniversal: boolean;
|
||||
Level: number;
|
||||
IsActiveAbility: boolean;
|
||||
}[];
|
||||
}
|
||||
|
||||
interface IConvertShardRequest {
|
||||
Shards: IMiscItem[];
|
||||
Polarity: TFocusPolarity;
|
||||
}
|
||||
|
||||
// Works for ways & upgrades
|
||||
const focusTypeToPolarity = (type: string): TFocusPolarity => {
|
||||
return ("AP_" + type.substr(1).split("/")[3].toUpperCase()) as TFocusPolarity;
|
||||
};
|
||||
|
||||
const shardValues = {
|
||||
"/Lotus/Types/Gameplay/Eidolon/Resources/SentientShards/SentientShardCommonItem": 2_500,
|
||||
"/Lotus/Types/Gameplay/Eidolon/Resources/SentientShards/SentientShardSynthesizedItem": 5_000,
|
||||
"/Lotus/Types/Gameplay/Eidolon/Resources/SentientShards/SentientShardBrilliantItem": 25_000,
|
||||
"/Lotus/Types/Gameplay/Eidolon/Resources/SentientShards/SentientShardBrilliantTierTwoItem": 40_000
|
||||
};
|
||||
|
@ -553,6 +553,8 @@ export interface IFocusXP {
|
||||
AP_WARD: number;
|
||||
}
|
||||
|
||||
export type TFocusPolarity = keyof IFocusXP;
|
||||
|
||||
export interface IFusionTreasure {
|
||||
ItemCount: number;
|
||||
ItemType: string;
|
||||
|
82
static/json/baseFocusPointCosts.json
Normal file
82
static/json/baseFocusPointCosts.json
Normal file
@ -0,0 +1,82 @@
|
||||
{
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/AttackEfficiencyFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/BlastChargeFocusUpgrade": 80000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/BlastFireballFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/CloakAttackChargeFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/CloakBlindFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/ConsecutiveEfficienyUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/ConsecutivePowerUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/DashDamageFocusUpgrade": 80000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/DashFireFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/GhostWaveUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Active/GhostlyTouchUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Residual/ElementalDamageFocusUpgrade": 25000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Residual/PhysicalDamageFocusUpgrade": 25000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Residual/PowerSnapFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Stats/MoreAmmoFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Attack/Stats/RegenAmmoFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/BlastAllyShieldFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/BlastSelfShieldFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/CloakHealFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/CloakHealOthersFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/CloakShieldFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/DashImmunityFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/DashShockwaveFocusUpgrade": 80000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/DefenseShieldBreakFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/DefenseShieldFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Active/SonicDissipationUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Residual/InstantReviveFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Residual/RadialXpFocusUpgrade": 25000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Stats/HealthMaxFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Defense/Stats/HealthRegenFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Power/Active/BlastBurstFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Power/Active/BlastSlowFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Power/Active/CloakPullFocusUpgrade": 80000,
|
||||
"/Lotus/Upgrades/Focus/Power/Active/CloakStaticFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Power/Active/DashBubbleFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Power/Active/DashElectricityFocusUpgrade": 80000,
|
||||
"/Lotus/Upgrades/Focus/Power/Active/DisarmedEnergyUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Power/Active/DisarmingProjectionUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Power/Active/PowerFieldFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Power/Residual/EnergyOverTimeFocusUpgrade": 25000,
|
||||
"/Lotus/Upgrades/Focus/Power/Residual/FreeAbilityCastsFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Power/Residual/SlowHeadshotDamageFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Power/Stats/EnergyPoolFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Power/Stats/EnergyRestoreFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/BlastConfuseFocusUpgrade": 25000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/BlastDisarmFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/CloakMeleeCritFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/CloakRevealFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/ComboAmpDamageFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/DashFinisherFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/DashWaveFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/FinisherTransferenceUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/LiftHitDamageUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/LiftHitWaveUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/ProjectionExecutionUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/ProjectionStretchUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Active/SlamComboFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Residual/MeleeComboFocusUpgrade": 25000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Residual/MeleeXpFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Stats/DashSpeedFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Tactic/Stats/MoveSpeedFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/BlastBulletAttractorFocusUpgrade": 80000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/BlastDamagePickupFocusUpgrade": 80000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/ClearStaticOnKillFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/CloakAllyCloakFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/CloakReduceDamageFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/DashReduceArmourFocusUpgrade": 80000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/DashReduceDamageFocusUpgrade": 80000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/InvulnerableReturnFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/KnockdownImmunityFocusUpgrade": 25000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/MagneticExtensionUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/MagneticFieldFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/SunderingDissipationUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Active/UnairuWispFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Residual/ArmourBuffFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Residual/ReflectDamageFocusUpgrade": 25000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Residual/SecondChanceDamageBuffFocusUpgrade": 95000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Residual/SecondChanceFocusUpgrade": 60000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Stats/ArmourIncreaseFocusUpgrade": 50000,
|
||||
"/Lotus/Upgrades/Focus/Ward/Stats/BlastRadiusFocusUpgrade": 50000
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user