Spirit gems: use whenever available, no SP threshold

Spirit gems now fire whenever one is slotted regardless of SP level.
This keeps SP constantly topped up for:
- Spark of Life (costs 50% SP to trigger)
- Manual Spirit Stance (costs 1 SP + 10% OC per round)
Removed the old SP < 30% threshold check.
This commit is contained in:
GaboGG 2026-07-22 07:11:40 -04:00
parent cdd0fe5984
commit a90dd47ec0
3 changed files with 33 additions and 42 deletions

View file

@ -863,16 +863,15 @@ function strategyNovice() {
} }
} }
// 4. Mana/spirit items — AFTER buffs, so we don't waste a potion // 4. Mana/spirit items — AFTER buffs
// before casting spells
if (STATE.mp < CFG.manaGemMP) { if (STATE.mp < CFG.manaGemMP) {
const gem = hasUsableGem('mana'); const gem = hasUsableGem('mana');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (gem) return { type: 'item', id: gem.id, selfTarget: true };
} }
if (STATE.sp < CFG.spiritPotionSP) { // Spirit gem — use whenever we have one, regardless of SP
const gem = hasUsableGem('spirit'); // Keeps SP topped for Spirit Stance and Spark of Life (50% cost)
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; const spiritItem = hasUsableGem('spirit');
} if (spiritItem) return { type: 'item', id: spiritItem.id, selfTarget: true };
// 5. Spirit Stance at OC 60 — but only if we have SP to sustain it // 5. Spirit Stance at OC 60 — but only if we have SP to sustain it
if (STATE.oc >= 60 && !STATE.spiritStance && STATE.sp > 0.10) if (STATE.oc >= 60 && !STATE.spiritStance && STATE.sp > 0.10)
@ -978,10 +977,9 @@ function strategyAdept() {
const gem = hasUsableGem('mana'); const gem = hasUsableGem('mana');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (gem) return { type: 'item', id: gem.id, selfTarget: true };
} }
if (STATE.sp < CFG.spiritPotionSP) { // Spirit gem — use whenever available (tops SP for Spark + Stance)
const gem = hasUsableGem('spirit'); const aspiritItem = hasUsableGem('spirit');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (aspiritItem) return { type: 'item', id: aspiritItem.id, selfTarget: true };
}
// 4. Debuffs — only on important fights (rare/boss/ultimate monsters) // 4. Debuffs — only on important fights (rare/boss/ultimate monsters)
// In random mob fights, just attack through them // In random mob fights, just attack through them
@ -1104,10 +1102,9 @@ function strategyVeteran() {
const gem = hasUsableGem('mana'); const gem = hasUsableGem('mana');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (gem) return { type: 'item', id: gem.id, selfTarget: true };
} }
if (STATE.sp < CFG.spiritPotionSP) { // Spirit gem — use whenever available
const gem = hasUsableGem('spirit'); const vspiritItem = hasUsableGem('spirit');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (vspiritItem) return { type: 'item', id: vspiritItem.id, selfTarget: true };
}
// 4. Debuffs — only on important fights (rare/boss) // 4. Debuffs — only on important fights (rare/boss)
if (CFG.autoDebuff && STATE.mp > 0.2 && (anyRareMonster() || STATE.monsters.length <= 2)) { if (CFG.autoDebuff && STATE.mp > 0.2 && (anyRareMonster() || STATE.monsters.length <= 2)) {

View file

@ -863,16 +863,15 @@ function strategyNovice() {
} }
} }
// 4. Mana/spirit items — AFTER buffs, so we don't waste a potion // 4. Mana/spirit items — AFTER buffs
// before casting spells
if (STATE.mp < CFG.manaGemMP) { if (STATE.mp < CFG.manaGemMP) {
const gem = hasUsableGem('mana'); const gem = hasUsableGem('mana');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (gem) return { type: 'item', id: gem.id, selfTarget: true };
} }
if (STATE.sp < CFG.spiritPotionSP) { // Spirit gem — use whenever we have one, regardless of SP
const gem = hasUsableGem('spirit'); // Keeps SP topped for Spirit Stance and Spark of Life (50% cost)
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; const spiritItem = hasUsableGem('spirit');
} if (spiritItem) return { type: 'item', id: spiritItem.id, selfTarget: true };
// 5. Spirit Stance at OC 60 — but only if we have SP to sustain it // 5. Spirit Stance at OC 60 — but only if we have SP to sustain it
if (STATE.oc >= 60 && !STATE.spiritStance && STATE.sp > 0.10) if (STATE.oc >= 60 && !STATE.spiritStance && STATE.sp > 0.10)
@ -978,10 +977,9 @@ function strategyAdept() {
const gem = hasUsableGem('mana'); const gem = hasUsableGem('mana');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (gem) return { type: 'item', id: gem.id, selfTarget: true };
} }
if (STATE.sp < CFG.spiritPotionSP) { // Spirit gem — use whenever available (tops SP for Spark + Stance)
const gem = hasUsableGem('spirit'); const aspiritItem = hasUsableGem('spirit');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (aspiritItem) return { type: 'item', id: aspiritItem.id, selfTarget: true };
}
// 4. Debuffs — only on important fights (rare/boss/ultimate monsters) // 4. Debuffs — only on important fights (rare/boss/ultimate monsters)
// In random mob fights, just attack through them // In random mob fights, just attack through them
@ -1104,10 +1102,9 @@ function strategyVeteran() {
const gem = hasUsableGem('mana'); const gem = hasUsableGem('mana');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (gem) return { type: 'item', id: gem.id, selfTarget: true };
} }
if (STATE.sp < CFG.spiritPotionSP) { // Spirit gem — use whenever available
const gem = hasUsableGem('spirit'); const vspiritItem = hasUsableGem('spirit');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (vspiritItem) return { type: 'item', id: vspiritItem.id, selfTarget: true };
}
// 4. Debuffs — only on important fights (rare/boss) // 4. Debuffs — only on important fights (rare/boss)
if (CFG.autoDebuff && STATE.mp > 0.2 && (anyRareMonster() || STATE.monsters.length <= 2)) { if (CFG.autoDebuff && STATE.mp > 0.2 && (anyRareMonster() || STATE.monsters.length <= 2)) {

View file

@ -218,16 +218,15 @@ function strategyNovice() {
} }
} }
// 4. Mana/spirit items — AFTER buffs, so we don't waste a potion // 4. Mana/spirit items — AFTER buffs
// before casting spells
if (STATE.mp < CFG.manaGemMP) { if (STATE.mp < CFG.manaGemMP) {
const gem = hasUsableGem('mana'); const gem = hasUsableGem('mana');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (gem) return { type: 'item', id: gem.id, selfTarget: true };
} }
if (STATE.sp < CFG.spiritPotionSP) { // Spirit gem — use whenever we have one, regardless of SP
const gem = hasUsableGem('spirit'); // Keeps SP topped for Spirit Stance and Spark of Life (50% cost)
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; const spiritItem = hasUsableGem('spirit');
} if (spiritItem) return { type: 'item', id: spiritItem.id, selfTarget: true };
// 5. Spirit Stance at OC 60 — but only if we have SP to sustain it // 5. Spirit Stance at OC 60 — but only if we have SP to sustain it
if (STATE.oc >= 60 && !STATE.spiritStance && STATE.sp > 0.10) if (STATE.oc >= 60 && !STATE.spiritStance && STATE.sp > 0.10)
@ -333,10 +332,9 @@ function strategyAdept() {
const gem = hasUsableGem('mana'); const gem = hasUsableGem('mana');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (gem) return { type: 'item', id: gem.id, selfTarget: true };
} }
if (STATE.sp < CFG.spiritPotionSP) { // Spirit gem — use whenever available (tops SP for Spark + Stance)
const gem = hasUsableGem('spirit'); const aspiritItem = hasUsableGem('spirit');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (aspiritItem) return { type: 'item', id: aspiritItem.id, selfTarget: true };
}
// 4. Debuffs — only on important fights (rare/boss/ultimate monsters) // 4. Debuffs — only on important fights (rare/boss/ultimate monsters)
// In random mob fights, just attack through them // In random mob fights, just attack through them
@ -459,10 +457,9 @@ function strategyVeteran() {
const gem = hasUsableGem('mana'); const gem = hasUsableGem('mana');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (gem) return { type: 'item', id: gem.id, selfTarget: true };
} }
if (STATE.sp < CFG.spiritPotionSP) { // Spirit gem — use whenever available
const gem = hasUsableGem('spirit'); const vspiritItem = hasUsableGem('spirit');
if (gem) return { type: 'item', id: gem.id, selfTarget: true }; if (vspiritItem) return { type: 'item', id: vspiritItem.id, selfTarget: true };
}
// 4. Debuffs — only on important fights (rare/boss) // 4. Debuffs — only on important fights (rare/boss)
if (CFG.autoDebuff && STATE.mp > 0.2 && (anyRareMonster() || STATE.monsters.length <= 2)) { if (CFG.autoDebuff && STATE.mp > 0.2 && (anyRareMonster() || STATE.monsters.length <= 2)) {