v0.13.23 - Fix affordable MP check using actual current MP from DOM
- Was using vrhd (HP element) instead of vrm (current MP) - Now reads #vrm textContent for current MP value - Simply compares mpCost > curMp to skip unaffordable spells - This prevents the infinite Heartseeker loop when you don't have enough MP even though the buff is a good target
This commit is contained in:
parent
31799a7261
commit
0aa268b3f9
5 changed files with 15 additions and 12 deletions
|
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name HV Unified
|
||||
// @namespace hvunified
|
||||
// @version 0.13.22
|
||||
// @version 0.13.23
|
||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||
// @author GaboGG + Hermes
|
||||
// @match *://*.hentaiverse.org/*
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
// CONFIG — default settings
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
|
||||
const VERSION = '0.13.22';
|
||||
const VERSION = '0.13.23';
|
||||
|
||||
const CFG = {
|
||||
// — Battle automation
|
||||
|
|
@ -940,8 +940,9 @@ function findBestChannelingTarget() {
|
|||
}
|
||||
// Skip if we can't afford the base cost — game pre-checks even when
|
||||
// channeling makes the effective cost 1 MP
|
||||
const maxMp = parseInt((document.getElementById('vrhd') || {}).textContent) || 414;
|
||||
if (mpCost > 0 && (mpCost / maxMp) > STATE.mp) continue;
|
||||
const curMp = parseInt((document.getElementById('vrm') || {}).textContent) || 0;
|
||||
const estMaxMp = (STATE.mp > 0 && curMp > 0) ? Math.round(curMp / STATE.mp) : 414;
|
||||
if (mpCost > 0 && curMp > 0 && mpCost > curMp) continue;
|
||||
// Fill level: how empty is this buff relative to its max observed duration
|
||||
let maxDur = STATE.maxBuffDur[b.icon] || 0;
|
||||
// If max matches current (first observation, no learning yet), assume min 30 turns
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name HV Unified
|
||||
// @namespace hvunified
|
||||
// @version 0.13.22
|
||||
// @version 0.13.23
|
||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||
// @author GaboGG + Hermes
|
||||
// @match *://*.hentaiverse.org/*
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
// CONFIG — default settings
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
|
||||
const VERSION = '0.13.22';
|
||||
const VERSION = '0.13.23';
|
||||
|
||||
const CFG = {
|
||||
// — Battle automation
|
||||
|
|
@ -940,8 +940,9 @@ function findBestChannelingTarget() {
|
|||
}
|
||||
// Skip if we can't afford the base cost — game pre-checks even when
|
||||
// channeling makes the effective cost 1 MP
|
||||
const maxMp = parseInt((document.getElementById('vrhd') || {}).textContent) || 414;
|
||||
if (mpCost > 0 && (mpCost / maxMp) > STATE.mp) continue;
|
||||
const curMp = parseInt((document.getElementById('vrm') || {}).textContent) || 0;
|
||||
const estMaxMp = (STATE.mp > 0 && curMp > 0) ? Math.round(curMp / STATE.mp) : 414;
|
||||
if (mpCost > 0 && curMp > 0 && mpCost > curMp) continue;
|
||||
// Fill level: how empty is this buff relative to its max observed duration
|
||||
let maxDur = STATE.maxBuffDur[b.icon] || 0;
|
||||
// If max matches current (first observation, no learning yet), assume min 30 turns
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// CONFIG — default settings
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
|
||||
const VERSION = '0.13.22';
|
||||
const VERSION = '0.13.23';
|
||||
|
||||
const CFG = {
|
||||
// — Battle automation
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name HV Unified
|
||||
// @namespace hvunified
|
||||
// @version 0.13.22
|
||||
// @version 0.13.23
|
||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||
// @author GaboGG + Hermes
|
||||
// @match *://*.hentaiverse.org/*
|
||||
|
|
|
|||
|
|
@ -255,8 +255,9 @@ function findBestChannelingTarget() {
|
|||
}
|
||||
// Skip if we can't afford the base cost — game pre-checks even when
|
||||
// channeling makes the effective cost 1 MP
|
||||
const maxMp = parseInt((document.getElementById('vrhd') || {}).textContent) || 414;
|
||||
if (mpCost > 0 && (mpCost / maxMp) > STATE.mp) continue;
|
||||
const curMp = parseInt((document.getElementById('vrm') || {}).textContent) || 0;
|
||||
const estMaxMp = (STATE.mp > 0 && curMp > 0) ? Math.round(curMp / STATE.mp) : 414;
|
||||
if (mpCost > 0 && curMp > 0 && mpCost > curMp) continue;
|
||||
// Fill level: how empty is this buff relative to its max observed duration
|
||||
let maxDur = STATE.maxBuffDur[b.icon] || 0;
|
||||
// If max matches current (first observation, no learning yet), assume min 30 turns
|
||||
|
|
|
|||
Loading…
Reference in a new issue