feat: implement focus.php (#254)

This commit is contained in:
Sainan 2024-06-01 18:22:02 +02:00 committed by GitHub
parent e980d34458
commit ae8913931c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 231 additions and 4 deletions

View File

@ -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) => { export const focusController: RequestHandler = async (req, res) => {
//console.log("focusController", req.query); const accountId = await getAccountIdForRequest(req);
_res.sendStatus(400); 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
}; };

View File

@ -553,6 +553,8 @@ export interface IFocusXP {
AP_WARD: number; AP_WARD: number;
} }
export type TFocusPolarity = keyof IFocusXP;
export interface IFusionTreasure { export interface IFusionTreasure {
ItemCount: number; ItemCount: number;
ItemType: string; ItemType: string;

View 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
}