fix: resolve issues #188, #189, #190, #191 - EffectSelector gating, discipline tab completeness, and stat bonus integration
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m21s

This commit is contained in:
2026-05-28 21:01:28 +02:00
parent 6355cf308b
commit adeb106428
6 changed files with 25 additions and 6 deletions
@@ -19,7 +19,7 @@ import {
addEffectToDesign,
removeEffectFromDesign,
} from './EnchantmentDesigner/utils';
import { useCraftingStore } from '@/lib/game/stores';
import { useCraftingStore, useAttunementStore } from '@/lib/game/stores';
import { DebugName } from '@/components/game/debug/debug-context';
export function EnchantmentDesigner({
@@ -32,6 +32,9 @@ export function EnchantmentDesigner({
selectedDesign,
setSelectedDesign,
}: EnchantmentDesignerProps) {
// Attunement store — get Enchanter level for effect selector gating
const enchanterLevel = useAttunementStore((s) => s.attunements?.enchanter?.level ?? 0);
// Crafting store selectors
const enchantmentDesigns = useCraftingStore((s) => s.enchantmentDesigns);
const designProgress = useCraftingStore((s) => s.designProgress);
@@ -108,7 +111,7 @@ export function EnchantmentDesigner({
setSelectedEffects={setSelectedEffects}
availableEffects={availableEffects}
incompatibleEffects={incompatibleEffects}
enchantingLevel={0}
enchantingLevel={enchanterLevel}
efficiencyBonus={0}
designProgress={designProgress}
addEffect={addEffect}
+4 -1
View File
@@ -8,6 +8,9 @@ import { elementalAttunementDisciplines } from '@/lib/game/data/disciplines/elem
import { elementalRegenDisciplines } from '@/lib/game/data/disciplines/elemental-regen';
import { elementalRegenAdvancedDisciplines } from '@/lib/game/data/disciplines/elemental-regen-advanced';
import { enchanterDisciplines } from '@/lib/game/data/disciplines/enchanter';
import { enchanterUtilityDisciplines } from '@/lib/game/data/disciplines/enchanter-utility';
import { enchanterSpellDisciplines } from '@/lib/game/data/disciplines/enchanter-spells';
import { enchanterSpecialDisciplines } from '@/lib/game/data/disciplines/enchanter-special';
import { fabricatorDisciplines } from '@/lib/game/data/disciplines/fabricator';
import { invokerDisciplines } from '@/lib/game/data/disciplines/invoker';
import { calculateStatBonus, calculateManaDrain, checkDisciplinePrerequisites } from '@/lib/game/utils/discipline-math';
@@ -30,7 +33,7 @@ interface AttunementTab {
const ATTUNEMENT_TABS: AttunementTab[] = [
{ key: 'base', label: 'Base', items: baseDisciplines },
{ key: 'elemental', label: 'Elemental', items: [...elementalAttunementDisciplines, ...elementalRegenDisciplines, ...elementalRegenAdvancedDisciplines] },
{ key: 'enchanter', label: 'Enchanter', items: enchanterDisciplines },
{ key: 'enchanter', label: 'Enchanter', items: [...enchanterDisciplines, ...enchanterUtilityDisciplines, ...enchanterSpellDisciplines, ...enchanterSpecialDisciplines] },
{ key: 'fabricator', label: 'Fabricator', items: fabricatorDisciplines },
{ key: 'invoker', label: 'Invoker', items: invokerDisciplines },
];
+4 -1
View File
@@ -124,7 +124,7 @@ export function computeAllEffects(
perElementRegenBonus,
maxManaMultiplier: upgradeEffects.maxManaMultiplier * (equipmentEffects.multipliers.maxMana || 1),
regenMultiplier: upgradeEffects.regenMultiplier * (equipmentEffects.multipliers.regen || 1) * (1 + (disciplineEffects.multipliers.regenMultiplier || 0)),
clickManaMultiplier: upgradeEffects.clickManaMultiplier * (equipmentEffects.multipliers.clickMana || 1),
clickManaMultiplier: (upgradeEffects.clickManaMultiplier * (equipmentEffects.multipliers.clickMana || 1)) * (1 + (disciplineEffects.bonuses.clickManaMultiplier || 0)),
baseDamageMultiplier: upgradeEffects.baseDamageMultiplier * (equipmentEffects.multipliers.baseDamage || 1),
attackSpeedMultiplier: upgradeEffects.attackSpeedMultiplier * (equipmentEffects.multipliers.attackSpeed || 1),
elementCapMultiplier: upgradeEffects.elementCapMultiplier * (equipmentEffects.multipliers.elementCap || 1),
@@ -148,6 +148,9 @@ export function computeAllEffects(
if (equipmentEffects.bonuses.studySpeed) {
merged.studySpeedMultiplier *= (equipmentEffects.multipliers.studySpeed || 1);
}
if (disciplineEffects.bonuses.studySpeed) {
merged.studySpeedMultiplier *= (1 + disciplineEffects.bonuses.studySpeed);
}
return merged;
}
@@ -30,6 +30,8 @@ const KNOWN_BONUS_STATS = new Set([
'golemCapacity',
'craftingCostReduction',
'disciplineXpBonus',
'clickManaMultiplier',
'studySpeed',
]);
export interface DisciplineEffectsResult {