fix: implement fabricator attunement unlock condition (floor 20 guardian)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 1m3s
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 1m3s
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
# Circular Dependencies
|
# Circular Dependencies
|
||||||
Generated: 2026-06-10T20:56:06.167Z
|
Generated: 2026-06-10T20:57:50.802Z
|
||||||
Found: 3 circular chain(s) — these MUST be fixed before modifying involved files.
|
Found: 3 circular chain(s) — these MUST be fixed before modifying involved files.
|
||||||
|
|
||||||
1. 1) stores/golem-combat-actions.ts > stores/golem-combat-helpers.ts
|
1. 1) stores/golem-combat-actions.ts > stores/golem-combat-helpers.ts
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"generated": "2026-06-10T20:56:04.043Z",
|
"generated": "2026-06-10T20:57:48.663Z",
|
||||||
"description": "Import dependency graph for src/lib/game. Keys are files, values are arrays of files they import.",
|
"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."
|
"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."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -50,8 +50,17 @@ describe('Issue #354 — unlockAttunement ReferenceError', () => {
|
|||||||
expect(state.attunements['invoker']?.level).toBe(1);
|
expect(state.attunements['invoker']?.level).toBe(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return false for fabricator (gating not implemented)', () => {
|
it('should return false for fabricator when floor 20 guardian not defeated', () => {
|
||||||
const result = useAttunementStore.getState().unlockAttunement('fabricator', [10, 20, 30]);
|
const result = useAttunementStore.getState().unlockAttunement('fabricator', [10, 30]);
|
||||||
expect(result).toBe(false);
|
expect(result).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should unlock fabricator when floor 20 guardian is defeated', () => {
|
||||||
|
const result = useAttunementStore.getState().unlockAttunement('fabricator', [10, 20, 30]);
|
||||||
|
expect(result).toBe(true);
|
||||||
|
|
||||||
|
const state = useAttunementStore.getState();
|
||||||
|
expect(state.attunements['fabricator']?.active).toBe(true);
|
||||||
|
expect(state.attunements['fabricator']?.level).toBe(1);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -88,8 +88,8 @@ export const useAttunementStore = create<AttunementStoreState>()(
|
|||||||
// Invoker requires defeating the first guardian (floor 10)
|
// Invoker requires defeating the first guardian (floor 10)
|
||||||
if (!defeatedGuardians.includes(10)) return false;
|
if (!defeatedGuardians.includes(10)) return false;
|
||||||
} else if (attunementId === 'fabricator') {
|
} else if (attunementId === 'fabricator') {
|
||||||
// Fabricator: no specific gating condition implemented
|
// Fabricator requires defeating the second guardian (floor 20)
|
||||||
return false;
|
if (!defeatedGuardians.includes(20)) return false;
|
||||||
} else {
|
} else {
|
||||||
// Unknown attunement — don't unlock
|
// Unknown attunement — don't unlock
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -130,6 +130,15 @@ export function buildCombatCallbacks(params: BuildCombatCallbacksParams) {
|
|||||||
params.addLog('💜 The path of the Invoker is now available!');
|
params.addLog('💜 The path of the Invoker is now available!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Auto-unlock Fabricator when the second guardian (floor 20) is defeated
|
||||||
|
if (floor === 20) {
|
||||||
|
const prestigeState = usePrestigeStore.getState();
|
||||||
|
const unlocked = useAttunementStore.getState().unlockAttunement('fabricator', prestigeState.defeatedGuardians);
|
||||||
|
if (unlocked) {
|
||||||
|
params.addLog('⚒️ The path of the Fabricator is now available!');
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (floor % 5 === 0) {
|
} else if (floor % 5 === 0) {
|
||||||
params.addLog('Floor ' + floor + ' cleared!');
|
params.addLog('Floor ' + floor + ' cleared!');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user