From e259484b5328fe00c61763e5aa1c52f831f968b2 Mon Sep 17 00:00:00 2001 From: n8n-gitea Date: Tue, 19 May 2026 12:06:46 +0200 Subject: [PATCH] =?UTF-8?q?fix(game):=20pass=20real=20effects=20to=20hasSp?= =?UTF-8?q?ecial=20in=20tick()=20=E2=80=94=20Executioner/Berserker=20now?= =?UTF-8?q?=20work?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/circular-deps.txt | 2 +- docs/dependency-graph.json | 2 +- src/lib/game/stores/gameStore.ts | 28 +++++++++++++++++++++++++--- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/docs/circular-deps.txt b/docs/circular-deps.txt index e8cf1d1..2267a36 100644 --- a/docs/circular-deps.txt +++ b/docs/circular-deps.txt @@ -1,5 +1,5 @@ # Circular Dependencies -Generated: 2026-05-19T09:19:14.412Z +Generated: 2026-05-19T09:44:29.294Z Found: 3 circular chain(s) — these MUST be fixed before modifying involved files. 1. Processed 121 files (1.2s) (28 warnings) diff --git a/docs/dependency-graph.json b/docs/dependency-graph.json index 51e2f5a..e4def9b 100644 --- a/docs/dependency-graph.json +++ b/docs/dependency-graph.json @@ -1,6 +1,6 @@ { "_meta": { - "generated": "2026-05-19T09:19:12.922Z", + "generated": "2026-05-19T09:44:27.808Z", "description": "Import dependency graph for src/lib/game. Keys are files, values are arrays of files they import.", "usage": "To find what a file affects, search for its path in the VALUES. To find what a file depends on, look at its KEY entry." }, diff --git a/src/lib/game/stores/gameStore.ts b/src/lib/game/stores/gameStore.ts index 6f3710e..629ba1f 100755 --- a/src/lib/game/stores/gameStore.ts +++ b/src/lib/game/stores/gameStore.ts @@ -6,6 +6,10 @@ import { create } from 'zustand'; import { persist } from 'zustand/middleware'; import { TICK_MS, HOURS_PER_TICK, MAX_DAY, SPELLS_DEF, GUARDIANS, getStudySpeedMultiplier } from '../constants'; import { hasSpecial, SPECIAL_EFFECTS } from '../effects/special-effects'; +import { computeEquipmentEffects } from '../effects'; +import type { ComputedEffects } from '../effects/upgrade-effects.types'; + +import { computeDisciplineEffects } from '../effects/discipline-effects'; import { computeMaxMana, computeRegen, @@ -23,6 +27,8 @@ import { usePrestigeStore } from './prestigeStore'; import { useManaStore } from './manaStore'; import { useCombatStore, makeInitialSpells } from './combatStore'; import { useAttunementStore } from './attunementStore'; +import { useCraftingStore } from './craftingStore'; +import { useDisciplineStore } from './discipline-slice'; import { ATTUNEMENTS_DEF, getAttunementConversionRate } from '../data/attunements'; import { createResetGame, createGatherMana } from './gameActions'; import { createStartNewLoop } from './gameLoopActions'; @@ -72,13 +78,29 @@ export const useGameStore = create()( const prestigeState = usePrestigeStore.getState(); const manaState = useManaStore.getState(); const combatState = useCombatStore.getState(); + const craftingState = useCraftingStore.getState(); + const disciplineStoreState = useDisciplineStore.getState(); + + // Compute equipment specials from enchanted gear + const equipmentEffects = computeEquipmentEffects( + craftingState.equipmentInstances || {}, + craftingState.equippedInstances || {} + ); + // Compute discipline specials from active discipline perks + const disciplineEffects = computeDisciplineEffects(disciplineStoreState as any); + // Merge all specials into a single set for hasSpecial checks + const allSpecials = new Set([ + ...equipmentEffects.specials, + ...disciplineEffects.specials, + ]); + const effects = { specials: allSpecials } as ComputedEffects; const maxMana = computeMaxMana( { skills: {}, prestigeUpgrades: prestigeState.prestigeUpgrades, skillUpgrades: {}, skillTiers: {} }, undefined ); const baseRegen = computeRegen( - { skills: {}, prestigeUpgrades: prestigeState.prestigeUpgrades, skillUpgrades: {}, skillTiers: {}, attunement: {} }, + { skills: {}, prestigeUpgrades: prestigeState.prestigeUpgrades, skillUpgrades: {}, skillTiers: {}, attunements: {} }, undefined ); @@ -222,12 +244,12 @@ export const useGameStore = create()( let dmg = damage; // Executioner: +100% damage to enemies below 25% HP - if (hasSpecial({}, SPECIAL_EFFECTS.EXECUTIONER) && combatState.floorHP / combatState.floorMaxHP < 0.25) { + if (hasSpecial(effects, SPECIAL_EFFECTS.EXECUTIONER) && combatState.floorHP / combatState.floorMaxHP < 0.25) { dmg *= 2; } // Berserker: +50% damage when below 50% mana - if (hasSpecial({}, SPECIAL_EFFECTS.BERSERKER) && rawMana < maxMana * 0.5) { + if (hasSpecial(effects, SPECIAL_EFFECTS.BERSERKER) && rawMana < maxMana * 0.5) { dmg *= 1.5; }