v0.13.27 - Remove auto Spirit Stance toggle from all tiers
- Removed toggle_spirit calls from Novice, Adept, and Veteran strategy functions (was auto-toggling stance at OC 60+) - Spirit Stance is now fully manual (press spirit button yourself) - Spirit Gem auto-consumption remains (fills SP when dropped) - Kept the config guards (CFG.autoSpirit) for future opt-in
This commit is contained in:
parent
1a4f9a80a3
commit
ad2ff4b482
3 changed files with 12 additions and 81 deletions
|
|
@ -1058,11 +1058,10 @@ function strategyNovice() {
|
||||||
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 };
|
||||||
}
|
}
|
||||||
// Spirit gem (P-slot) — use immediately when available (free to refill)
|
// Spirit gem (P-slot) — auto-consume when available
|
||||||
const pGem = document.getElementById('ikey_p');
|
const pGem = document.getElementById('ikey_p');
|
||||||
const pGemId = pGem ? (pGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
const pGemId = pGem ? (pGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
||||||
if (pGemId && pGemId[1] === '10007') {
|
if (pGemId && pGemId[1] === '10007') {
|
||||||
// P-slot has a Spirit Gem (10007) — use it
|
|
||||||
if (hasUsableGem('spirit')) return { type: 'item', id: 'p', selfTarget: true };
|
if (hasUsableGem('spirit')) return { type: 'item', id: 'p', selfTarget: true };
|
||||||
}
|
}
|
||||||
// Spirit draughts/potions — only when SP drops below threshold
|
// Spirit draughts/potions — only when SP drops below threshold
|
||||||
|
|
@ -1077,11 +1076,7 @@ function strategyNovice() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Spirit Stance at OC 60 — but only if we have SP to sustain it
|
// 5. Weapon skills — these are better than basic attacks
|
||||||
if (STATE.oc >= 60 && !STATE.spiritStance && STATE.sp > 0.10)
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
|
|
||||||
// 6. Weapon skills only at OC thresholds with specific conditions
|
|
||||||
const skillOC = CFG.skillOC || 80;
|
const skillOC = CFG.skillOC || 80;
|
||||||
if (STATE.oc >= skillOC) {
|
if (STATE.oc >= skillOC) {
|
||||||
// Great Cleave: boss/rare fights only
|
// Great Cleave: boss/rare fights only
|
||||||
|
|
@ -1180,7 +1175,7 @@ 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 };
|
||||||
}
|
}
|
||||||
// Spirit gem (P-slot) — use immediately
|
// Spirit gem (P-slot) — auto-consume when available
|
||||||
const apGem = document.getElementById('ikey_p');
|
const apGem = document.getElementById('ikey_p');
|
||||||
const apGemId = apGem ? (apGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
const apGemId = apGem ? (apGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
||||||
if (apGemId && apGemId[1] === '10007') {
|
if (apGemId && apGemId[1] === '10007') {
|
||||||
|
|
@ -1234,16 +1229,7 @@ function strategyAdept() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Spirit Stance — manual only (no auto-activation)
|
// 5. Damage spells
|
||||||
// Spark of Life consumes 50% SP when triggered. Auto-disable if SP
|
|
||||||
// drops below 65% to ensure Spark always has enough SP.
|
|
||||||
if (STATE.spiritStance && STATE.sp < 0.65 && !STATE._spiritCooldown) {
|
|
||||||
STATE._spiritCooldown = 5;
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
}
|
|
||||||
if (STATE._spiritCooldown > 0) STATE._spiritCooldown--;
|
|
||||||
|
|
||||||
// 7. Damage spells
|
|
||||||
const dmg = CFG.useAttackSpells ? getBestDamageSpell() : null;
|
const dmg = CFG.useAttackSpells ? getBestDamageSpell() : null;
|
||||||
if (dmg && STATE.mp > 0.2) {
|
if (dmg && STATE.mp > 0.2) {
|
||||||
const t = STATE.monsters.length > 1 ? findWeakestMonster() : findStrongestMonster();
|
const t = STATE.monsters.length > 1 ? findWeakestMonster() : findStrongestMonster();
|
||||||
|
|
@ -1343,15 +1329,6 @@ function strategyVeteran() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Spirit Stance — manual only. Auto-disable if SP < 65% (Spark needs 50%)
|
|
||||||
if (CFG.autoSpirit && STATE.oc >= CFG.spiritStanceOC && !STATE.spiritStance && STATE.sp > 0.65)
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
if (STATE.spiritStance && STATE.sp < 0.65 && !STATE._spiritCooldown) {
|
|
||||||
STATE._spiritCooldown = 5;
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
}
|
|
||||||
if (STATE._spiritCooldown > 0) STATE._spiritCooldown--;
|
|
||||||
|
|
||||||
// 6. Weapon skills only at OC thresholds (let OC build via basic attacks)
|
// 6. Weapon skills only at OC thresholds (let OC build via basic attacks)
|
||||||
const askillOC3 = CFG.skillOC || 80;
|
const askillOC3 = CFG.skillOC || 80;
|
||||||
if (STATE.oc >= askillOC3) {
|
if (STATE.oc >= askillOC3) {
|
||||||
|
|
|
||||||
|
|
@ -1058,11 +1058,10 @@ function strategyNovice() {
|
||||||
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 };
|
||||||
}
|
}
|
||||||
// Spirit gem (P-slot) — use immediately when available (free to refill)
|
// Spirit gem (P-slot) — auto-consume when available
|
||||||
const pGem = document.getElementById('ikey_p');
|
const pGem = document.getElementById('ikey_p');
|
||||||
const pGemId = pGem ? (pGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
const pGemId = pGem ? (pGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
||||||
if (pGemId && pGemId[1] === '10007') {
|
if (pGemId && pGemId[1] === '10007') {
|
||||||
// P-slot has a Spirit Gem (10007) — use it
|
|
||||||
if (hasUsableGem('spirit')) return { type: 'item', id: 'p', selfTarget: true };
|
if (hasUsableGem('spirit')) return { type: 'item', id: 'p', selfTarget: true };
|
||||||
}
|
}
|
||||||
// Spirit draughts/potions — only when SP drops below threshold
|
// Spirit draughts/potions — only when SP drops below threshold
|
||||||
|
|
@ -1077,11 +1076,7 @@ function strategyNovice() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Spirit Stance at OC 60 — but only if we have SP to sustain it
|
// 5. Weapon skills — these are better than basic attacks
|
||||||
if (STATE.oc >= 60 && !STATE.spiritStance && STATE.sp > 0.10)
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
|
|
||||||
// 6. Weapon skills only at OC thresholds with specific conditions
|
|
||||||
const skillOC = CFG.skillOC || 80;
|
const skillOC = CFG.skillOC || 80;
|
||||||
if (STATE.oc >= skillOC) {
|
if (STATE.oc >= skillOC) {
|
||||||
// Great Cleave: boss/rare fights only
|
// Great Cleave: boss/rare fights only
|
||||||
|
|
@ -1180,7 +1175,7 @@ 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 };
|
||||||
}
|
}
|
||||||
// Spirit gem (P-slot) — use immediately
|
// Spirit gem (P-slot) — auto-consume when available
|
||||||
const apGem = document.getElementById('ikey_p');
|
const apGem = document.getElementById('ikey_p');
|
||||||
const apGemId = apGem ? (apGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
const apGemId = apGem ? (apGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
||||||
if (apGemId && apGemId[1] === '10007') {
|
if (apGemId && apGemId[1] === '10007') {
|
||||||
|
|
@ -1234,16 +1229,7 @@ function strategyAdept() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Spirit Stance — manual only (no auto-activation)
|
// 5. Damage spells
|
||||||
// Spark of Life consumes 50% SP when triggered. Auto-disable if SP
|
|
||||||
// drops below 65% to ensure Spark always has enough SP.
|
|
||||||
if (STATE.spiritStance && STATE.sp < 0.65 && !STATE._spiritCooldown) {
|
|
||||||
STATE._spiritCooldown = 5;
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
}
|
|
||||||
if (STATE._spiritCooldown > 0) STATE._spiritCooldown--;
|
|
||||||
|
|
||||||
// 7. Damage spells
|
|
||||||
const dmg = CFG.useAttackSpells ? getBestDamageSpell() : null;
|
const dmg = CFG.useAttackSpells ? getBestDamageSpell() : null;
|
||||||
if (dmg && STATE.mp > 0.2) {
|
if (dmg && STATE.mp > 0.2) {
|
||||||
const t = STATE.monsters.length > 1 ? findWeakestMonster() : findStrongestMonster();
|
const t = STATE.monsters.length > 1 ? findWeakestMonster() : findStrongestMonster();
|
||||||
|
|
@ -1343,15 +1329,6 @@ function strategyVeteran() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Spirit Stance — manual only. Auto-disable if SP < 65% (Spark needs 50%)
|
|
||||||
if (CFG.autoSpirit && STATE.oc >= CFG.spiritStanceOC && !STATE.spiritStance && STATE.sp > 0.65)
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
if (STATE.spiritStance && STATE.sp < 0.65 && !STATE._spiritCooldown) {
|
|
||||||
STATE._spiritCooldown = 5;
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
}
|
|
||||||
if (STATE._spiritCooldown > 0) STATE._spiritCooldown--;
|
|
||||||
|
|
||||||
// 6. Weapon skills only at OC thresholds (let OC build via basic attacks)
|
// 6. Weapon skills only at OC thresholds (let OC build via basic attacks)
|
||||||
const askillOC3 = CFG.skillOC || 80;
|
const askillOC3 = CFG.skillOC || 80;
|
||||||
if (STATE.oc >= askillOC3) {
|
if (STATE.oc >= askillOC3) {
|
||||||
|
|
|
||||||
|
|
@ -372,11 +372,10 @@ function strategyNovice() {
|
||||||
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 };
|
||||||
}
|
}
|
||||||
// Spirit gem (P-slot) — use immediately when available (free to refill)
|
// Spirit gem (P-slot) — auto-consume when available
|
||||||
const pGem = document.getElementById('ikey_p');
|
const pGem = document.getElementById('ikey_p');
|
||||||
const pGemId = pGem ? (pGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
const pGemId = pGem ? (pGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
||||||
if (pGemId && pGemId[1] === '10007') {
|
if (pGemId && pGemId[1] === '10007') {
|
||||||
// P-slot has a Spirit Gem (10007) — use it
|
|
||||||
if (hasUsableGem('spirit')) return { type: 'item', id: 'p', selfTarget: true };
|
if (hasUsableGem('spirit')) return { type: 'item', id: 'p', selfTarget: true };
|
||||||
}
|
}
|
||||||
// Spirit draughts/potions — only when SP drops below threshold
|
// Spirit draughts/potions — only when SP drops below threshold
|
||||||
|
|
@ -391,11 +390,7 @@ function strategyNovice() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Spirit Stance at OC 60 — but only if we have SP to sustain it
|
// 5. Weapon skills — these are better than basic attacks
|
||||||
if (STATE.oc >= 60 && !STATE.spiritStance && STATE.sp > 0.10)
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
|
|
||||||
// 6. Weapon skills only at OC thresholds with specific conditions
|
|
||||||
const skillOC = CFG.skillOC || 80;
|
const skillOC = CFG.skillOC || 80;
|
||||||
if (STATE.oc >= skillOC) {
|
if (STATE.oc >= skillOC) {
|
||||||
// Great Cleave: boss/rare fights only
|
// Great Cleave: boss/rare fights only
|
||||||
|
|
@ -494,7 +489,7 @@ 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 };
|
||||||
}
|
}
|
||||||
// Spirit gem (P-slot) — use immediately
|
// Spirit gem (P-slot) — auto-consume when available
|
||||||
const apGem = document.getElementById('ikey_p');
|
const apGem = document.getElementById('ikey_p');
|
||||||
const apGemId = apGem ? (apGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
const apGemId = apGem ? (apGem.getAttribute('onmouseover') || '').match(/set_infopane_item\((\d+)\)/) : null;
|
||||||
if (apGemId && apGemId[1] === '10007') {
|
if (apGemId && apGemId[1] === '10007') {
|
||||||
|
|
@ -548,16 +543,7 @@ function strategyAdept() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Spirit Stance — manual only (no auto-activation)
|
// 5. Damage spells
|
||||||
// Spark of Life consumes 50% SP when triggered. Auto-disable if SP
|
|
||||||
// drops below 65% to ensure Spark always has enough SP.
|
|
||||||
if (STATE.spiritStance && STATE.sp < 0.65 && !STATE._spiritCooldown) {
|
|
||||||
STATE._spiritCooldown = 5;
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
}
|
|
||||||
if (STATE._spiritCooldown > 0) STATE._spiritCooldown--;
|
|
||||||
|
|
||||||
// 7. Damage spells
|
|
||||||
const dmg = CFG.useAttackSpells ? getBestDamageSpell() : null;
|
const dmg = CFG.useAttackSpells ? getBestDamageSpell() : null;
|
||||||
if (dmg && STATE.mp > 0.2) {
|
if (dmg && STATE.mp > 0.2) {
|
||||||
const t = STATE.monsters.length > 1 ? findWeakestMonster() : findStrongestMonster();
|
const t = STATE.monsters.length > 1 ? findWeakestMonster() : findStrongestMonster();
|
||||||
|
|
@ -657,15 +643,6 @@ function strategyVeteran() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Spirit Stance — manual only. Auto-disable if SP < 65% (Spark needs 50%)
|
|
||||||
if (CFG.autoSpirit && STATE.oc >= CFG.spiritStanceOC && !STATE.spiritStance && STATE.sp > 0.65)
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
if (STATE.spiritStance && STATE.sp < 0.65 && !STATE._spiritCooldown) {
|
|
||||||
STATE._spiritCooldown = 5;
|
|
||||||
return { type: 'toggle_spirit' };
|
|
||||||
}
|
|
||||||
if (STATE._spiritCooldown > 0) STATE._spiritCooldown--;
|
|
||||||
|
|
||||||
// 6. Weapon skills only at OC thresholds (let OC build via basic attacks)
|
// 6. Weapon skills only at OC thresholds (let OC build via basic attacks)
|
||||||
const askillOC3 = CFG.skillOC || 80;
|
const askillOC3 = CFG.skillOC || 80;
|
||||||
if (STATE.oc >= askillOC3) {
|
if (STATE.oc >= askillOC3) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue