fix: resolve 7 medium-priority bugs from audit #372
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 1m1s

- #371: Replace Math.random() with seeded PRNG in getSpireEnemyArmor/Barrier
- #370: Add mana refund when cancelling pact ritual in cancelPactRitual
- #367: Add ENCHANT_MASTERY check for design slot 2 in crafting store
- #364: Fix useGameDerived to read crafting data from useCraftingStore
- #363: Clamp recovery room regen delta to prevent negative mana loss
- #365: Add shield/barrier/healthRegen fields to all procedural guardians
- #362: Refactor enchanting tick pipeline to return writes instead of direct store calls

Extracted procedural guardian generators into guardian-procedural.ts to stay under 400-line limit.

All 1158 tests pass.
This commit is contained in:
2026-06-11 11:37:06 +02:00
parent 2d9f0042ef
commit 9476e92a4b
11 changed files with 253 additions and 319 deletions
+3 -2
View File
@@ -3,6 +3,7 @@
import { useMemo } from 'react';
import { useGameStore } from '../stores/gameStore';
import { useCraftingStore } from '../stores/craftingStore';
import { useManaStore } from '../stores/manaStore';
import { useCombatStore } from '../stores/combatStore';
import { usePrestigeStore } from '../stores/prestigeStore';
@@ -122,8 +123,8 @@ export function useCombatStats() {
const currentFloor = useCombatStore((s) => s.currentFloor);
const activeSpell = useCombatStore((s) => s.activeSpell);
const { upgradeEffects } = useManaStats();
const equipmentInstances = useGameStore((s) => s.crafting.equipmentInstances);
const equippedInstances = useGameStore((s) => s.crafting.equippedInstances);
const equipmentInstances = useCraftingStore((s) => s.equipmentInstances);
const equippedInstances = useCraftingStore((s) => s.equippedInstances);
const floorElem = useMemo(
() => getFloorElement(currentFloor),