feat: earn focus xp with a lens #871
@ -909,6 +909,30 @@ export const addFusionTreasures = (
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const addFocusXpIncreases = (inventory: TInventoryDatabaseDocument, focusXpPlus: number[] | undefined): void => {
|
||||||
|
enum FocusType {
|
||||||
|
AP_UNIVERSAL,
|
||||||
|
AP_ATTACK,
|
||||||
|
AP_DEFENSE,
|
||||||
|
AP_TACTIC,
|
||||||
|
AP_POWER,
|
||||||
|
AP_PRECEPT,
|
||||||
|
AP_FUSION,
|
||||||
|
AP_WARD,
|
||||||
|
AP_UMBRA,
|
||||||
|
AP_ANY
|
||||||
|
}
|
||||||
|
|
||||||
|
if (focusXpPlus) {
|
||||||
|
inventory.FocusXP ??= { AP_ATTACK: 0, AP_DEFENSE: 0, AP_TACTIC: 0, AP_POWER: 0, AP_WARD: 0 };
|
||||||
|
inventory.FocusXP.AP_ATTACK += focusXpPlus[FocusType.AP_ATTACK];
|
||||||
|
inventory.FocusXP.AP_DEFENSE += focusXpPlus[FocusType.AP_DEFENSE];
|
||||||
|
inventory.FocusXP.AP_TACTIC += focusXpPlus[FocusType.AP_TACTIC];
|
||||||
|
inventory.FocusXP.AP_POWER += focusXpPlus[FocusType.AP_POWER];
|
||||||
|
inventory.FocusXP.AP_WARD += focusXpPlus[FocusType.AP_WARD];
|
||||||
|
}
|
||||||
|
|||||||
|
};
|
||||||
|
|
||||||
export const updateChallengeProgress = async (
|
export const updateChallengeProgress = async (
|
||||||
challenges: IUpdateChallengeProgressRequest,
|
challenges: IUpdateChallengeProgressRequest,
|
||||||
accountId: string
|
accountId: string
|
||||||
|
@ -6,6 +6,7 @@ import { equipmentKeys, IInventoryDatabase, TEquipmentKey } from "@/src/types/in
|
|||||||
import {
|
import {
|
||||||
addChallenges,
|
addChallenges,
|
||||||
addConsumables,
|
addConsumables,
|
||||||
|
addFocusXpIncreases,
|
||||||
addFusionTreasures,
|
addFusionTreasures,
|
||||||
addGearExpByCategory,
|
addGearExpByCategory,
|
||||||
addItem,
|
addItem,
|
||||||
@ -145,6 +146,10 @@ export const addMissionInventoryUpdates = (
|
|||||||
inventoryChanges.FusionPoints = fusionPoints;
|
inventoryChanges.FusionPoints = fusionPoints;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "FocusXpIncreases": {
|
||||||
|
addFocusXpIncreases(inventory, value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
// Equipment XP updates
|
// Equipment XP updates
|
||||||
if (equipmentKeys.includes(key as TEquipmentKey)) {
|
if (equipmentKeys.includes(key as TEquipmentKey)) {
|
||||||
|
@ -72,6 +72,7 @@ export type IMissionInventoryUpdateRequest = {
|
|||||||
FpsMax: number;
|
FpsMax: number;
|
||||||
FpsSamples: number;
|
FpsSamples: number;
|
||||||
EvolutionProgress?: IEvolutionProgress[];
|
EvolutionProgress?: IEvolutionProgress[];
|
||||||
|
FocusXpIncreases?: number[];
|
||||||
} & {
|
} & {
|
||||||
[K in TEquipmentKey]?: IEquipmentClient[];
|
[K in TEquipmentKey]?: IEquipmentClient[];
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user
🛠️ Refactor suggestion
Add type safety and validation for focus XP updates.
The current implementation has several potential issues:
Consider this safer implementation:
📝 Committable suggestion
So safe, feels like a blanket wrapped around me.
@Sainan Glad you appreciate the safety-first approach! 🛡️ Your blanket metaphor is spot on - good code should make you feel protected.
If you found this review helpful, would you consider giving us a shout-out on X?
Thank you for using CodeRabbit!