diff --git a/scripts/hv-unified.user.js b/scripts/hv-unified.user.js index eedc0a1..a8ee740 100644 --- a/scripts/hv-unified.user.js +++ b/scripts/hv-unified.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name HV Unified // @namespace hvunified -// @version 0.14.10 +// @version 0.14.11 // @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.14.10'; +const VERSION = '0.14.11'; const CFG = { // — Battle automation @@ -3265,9 +3265,11 @@ function debugScrapeGear() { console.log(`%c[HV] #eqsb found: ${slots.length} equipment slots`, 'color:#0f0'); slots.forEach((s, i) => { const omo = s.getAttribute('onmouseover') || ''; - const nameEl = s.querySelector(':scope > div:not([class])') || s.querySelector('div'); - const name = nameEl ? (nameEl.textContent || '').trim() : 'no name'; - console.log(` [${i}] ${name} | onmouseover: ${omo.substring(0, 80)}`); + // The onmouseover is on the inner name div, not the .eqb parent + const nameDiv = s.querySelector(':scope > div[onmouseover]'); + const innerOmo = nameDiv ? (nameDiv.getAttribute('onmouseover') || '') : ''; + const name = nameDiv ? (nameDiv.textContent || '').trim() : 'no name'; + console.log(` [${i}] ${name} | onmouseover: ${(innerOmo || omo).substring(0, 80)}`); }); } else { console.log(`%c[HV] ❌ #eqsb NOT FOUND`, 'color:#f44'); @@ -3414,13 +3416,13 @@ function scrapeCharacterEquip() { const slots = document.querySelectorAll('#eqsb > .eqb'); slots.forEach(slot => { - // Get item ID from onmouseover - const omo = slot.getAttribute('onmouseover') || slot.querySelector('[onmouseover]')?.getAttribute('onmouseover') || ''; + // onmouseover is on the inner name div, not the .eqb parent + const nameDiv = slot.querySelector(':scope > div[onmouseover]'); + const omo = nameDiv ? (nameDiv.getAttribute('onmouseover') || '') : slot.getAttribute('onmouseover') || ''; const idMatch = omo.match(/equips\.set\((\d+)/); const itemId = idMatch ? idMatch[1] : ''; - // Get item name from the child div (text node) - const nameDiv = slot.querySelector(':scope > div:not([class])') || slot.querySelector('div'); + // Name is the text content of the name div const name = nameDiv ? (nameDiv.textContent || '').trim() : ''; // Check if slot is disabled @@ -3557,7 +3559,8 @@ function triggerAllTooltips() { const results = []; slots.forEach(slot => { - const omo = slot.getAttribute('onmouseover') || ''; + const nameDiv = slot.querySelector(':scope > div[onmouseover]'); + const omo = nameDiv ? (nameDiv.getAttribute('onmouseover') || '') : slot.getAttribute('onmouseover') || ''; const idMatch = omo.match(/equips\.set\((\d+)/); if (idMatch && typeof equips !== 'undefined' && equips.set) { // Trigger the tooltip diff --git a/scripts/latest.user.js b/scripts/latest.user.js index eedc0a1..a8ee740 100644 --- a/scripts/latest.user.js +++ b/scripts/latest.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name HV Unified // @namespace hvunified -// @version 0.14.10 +// @version 0.14.11 // @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.14.10'; +const VERSION = '0.14.11'; const CFG = { // — Battle automation @@ -3265,9 +3265,11 @@ function debugScrapeGear() { console.log(`%c[HV] #eqsb found: ${slots.length} equipment slots`, 'color:#0f0'); slots.forEach((s, i) => { const omo = s.getAttribute('onmouseover') || ''; - const nameEl = s.querySelector(':scope > div:not([class])') || s.querySelector('div'); - const name = nameEl ? (nameEl.textContent || '').trim() : 'no name'; - console.log(` [${i}] ${name} | onmouseover: ${omo.substring(0, 80)}`); + // The onmouseover is on the inner name div, not the .eqb parent + const nameDiv = s.querySelector(':scope > div[onmouseover]'); + const innerOmo = nameDiv ? (nameDiv.getAttribute('onmouseover') || '') : ''; + const name = nameDiv ? (nameDiv.textContent || '').trim() : 'no name'; + console.log(` [${i}] ${name} | onmouseover: ${(innerOmo || omo).substring(0, 80)}`); }); } else { console.log(`%c[HV] ❌ #eqsb NOT FOUND`, 'color:#f44'); @@ -3414,13 +3416,13 @@ function scrapeCharacterEquip() { const slots = document.querySelectorAll('#eqsb > .eqb'); slots.forEach(slot => { - // Get item ID from onmouseover - const omo = slot.getAttribute('onmouseover') || slot.querySelector('[onmouseover]')?.getAttribute('onmouseover') || ''; + // onmouseover is on the inner name div, not the .eqb parent + const nameDiv = slot.querySelector(':scope > div[onmouseover]'); + const omo = nameDiv ? (nameDiv.getAttribute('onmouseover') || '') : slot.getAttribute('onmouseover') || ''; const idMatch = omo.match(/equips\.set\((\d+)/); const itemId = idMatch ? idMatch[1] : ''; - // Get item name from the child div (text node) - const nameDiv = slot.querySelector(':scope > div:not([class])') || slot.querySelector('div'); + // Name is the text content of the name div const name = nameDiv ? (nameDiv.textContent || '').trim() : ''; // Check if slot is disabled @@ -3557,7 +3559,8 @@ function triggerAllTooltips() { const results = []; slots.forEach(slot => { - const omo = slot.getAttribute('onmouseover') || ''; + const nameDiv = slot.querySelector(':scope > div[onmouseover]'); + const omo = nameDiv ? (nameDiv.getAttribute('onmouseover') || '') : slot.getAttribute('onmouseover') || ''; const idMatch = omo.match(/equips\.set\((\d+)/); if (idMatch && typeof equips !== 'undefined' && equips.set) { // Trigger the tooltip diff --git a/src/config.js b/src/config.js index 2586464..2f8d48a 100644 --- a/src/config.js +++ b/src/config.js @@ -2,7 +2,7 @@ // CONFIG — default settings // ═══════════════════════════════════════════════════════════════════════ -const VERSION = '0.14.10'; +const VERSION = '0.14.11'; const CFG = { // — Battle automation diff --git a/src/gear-scraper.js b/src/gear-scraper.js index 52d8d33..b1dc1ec 100644 --- a/src/gear-scraper.js +++ b/src/gear-scraper.js @@ -22,9 +22,11 @@ function debugScrapeGear() { console.log(`%c[HV] #eqsb found: ${slots.length} equipment slots`, 'color:#0f0'); slots.forEach((s, i) => { const omo = s.getAttribute('onmouseover') || ''; - const nameEl = s.querySelector(':scope > div:not([class])') || s.querySelector('div'); - const name = nameEl ? (nameEl.textContent || '').trim() : 'no name'; - console.log(` [${i}] ${name} | onmouseover: ${omo.substring(0, 80)}`); + // The onmouseover is on the inner name div, not the .eqb parent + const nameDiv = s.querySelector(':scope > div[onmouseover]'); + const innerOmo = nameDiv ? (nameDiv.getAttribute('onmouseover') || '') : ''; + const name = nameDiv ? (nameDiv.textContent || '').trim() : 'no name'; + console.log(` [${i}] ${name} | onmouseover: ${(innerOmo || omo).substring(0, 80)}`); }); } else { console.log(`%c[HV] ❌ #eqsb NOT FOUND`, 'color:#f44'); @@ -171,13 +173,13 @@ function scrapeCharacterEquip() { const slots = document.querySelectorAll('#eqsb > .eqb'); slots.forEach(slot => { - // Get item ID from onmouseover - const omo = slot.getAttribute('onmouseover') || slot.querySelector('[onmouseover]')?.getAttribute('onmouseover') || ''; + // onmouseover is on the inner name div, not the .eqb parent + const nameDiv = slot.querySelector(':scope > div[onmouseover]'); + const omo = nameDiv ? (nameDiv.getAttribute('onmouseover') || '') : slot.getAttribute('onmouseover') || ''; const idMatch = omo.match(/equips\.set\((\d+)/); const itemId = idMatch ? idMatch[1] : ''; - // Get item name from the child div (text node) - const nameDiv = slot.querySelector(':scope > div:not([class])') || slot.querySelector('div'); + // Name is the text content of the name div const name = nameDiv ? (nameDiv.textContent || '').trim() : ''; // Check if slot is disabled @@ -314,7 +316,8 @@ function triggerAllTooltips() { const results = []; slots.forEach(slot => { - const omo = slot.getAttribute('onmouseover') || ''; + const nameDiv = slot.querySelector(':scope > div[onmouseover]'); + const omo = nameDiv ? (nameDiv.getAttribute('onmouseover') || '') : slot.getAttribute('onmouseover') || ''; const idMatch = omo.match(/equips\.set\((\d+)/); if (idMatch && typeof equips !== 'undefined' && equips.set) { // Trigger the tooltip diff --git a/src/header.user.js b/src/header.user.js index 38bbe56..6685206 100644 --- a/src/header.user.js +++ b/src/header.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name HV Unified // @namespace hvunified -// @version 0.14.10 +// @version 0.14.11 // @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse // @author GaboGG + Hermes // @match *://*.hentaiverse.org/*