v0.14.29 - Fix Rending Blow positioning + remove hp guard on OC build
- Rending Blow now uses findOptimalDominoTarget() which scores monsters by how many alive neighbors are within 2 slots left/right. This ensures RB hits max targets instead of wasting half the AoE on edge monsters (previously used findDangerousMonster which ignores positioning). - Removed STATE.hp > 0.40 guard from step 2c OC-building check. When Spark of Life procs, hp=0 in the DOM but the player is still alive. The old guard blocked OC building in this state, causing Imperil to fire instead of basic attacking to build OC.
This commit is contained in:
parent
e48ef78121
commit
782a094691
5 changed files with 27 additions and 21 deletions
|
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name HV Unified
|
||||
// @namespace hvunified
|
||||
// @version 0.14.28
|
||||
// @version 0.14.29
|
||||
// @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.28';
|
||||
const VERSION = '0.14.29';
|
||||
|
||||
const CFG = {
|
||||
// — Battle automation
|
||||
|
|
@ -1477,7 +1477,8 @@ function strategyVeteran() {
|
|||
const isHighThreatEarly = hasHighThreat(THREAT_PX);
|
||||
if ((isHighThreatEarly || anyImminent) && STATE.oc >= 20) {
|
||||
if (STATE.monsters.length >= 3 && STATE.skillsKnown.includes('Rending Blow')) {
|
||||
const t = findDangerousMonster();
|
||||
// Use findOptimalDominoTarget for max AoE coverage (target + 2 left + 2 right)
|
||||
const t = findOptimalDominoTarget();
|
||||
if (t >= 0) return { type: 'skill', name: 'Rending Blow', target: t, _reason: 'threat_early' };
|
||||
}
|
||||
if (STATE.monsters.length >= 3 && STATE.skillsKnown.includes('Shatter Strike')) {
|
||||
|
|
@ -1505,12 +1506,13 @@ function strategyVeteran() {
|
|||
|
||||
// 2c. OC-building priority: when 5+ monsters, OC < 60, and AoE skills ready,
|
||||
// skip debuffs/non-essential buffs and basic attack to build OC fast.
|
||||
const needsOC = STATE.monsters && STATE.monsters.length >= 5
|
||||
const needsOC = STATE.monsters && STATE.monsters.length >= 4
|
||||
&& STATE.oc < (CFG.skillOC || 60)
|
||||
&& STATE.skillsKnown.includes('Rending Blow')
|
||||
&& document.querySelector(`.btqs[onmouseover*="set_infopane_spell('Rending Blow'"], .btsd[onmouseover*="set_infopane_spell('Rending Blow'"]`)
|
||||
?.hasAttribute('onclick');
|
||||
if (needsOC && STATE.hp > 0.40 && STATE.mp > 0.20) {
|
||||
if (needsOC) {
|
||||
// No hp/mp guard — if Spark procced, hp=0 but we still need OC
|
||||
const t = hasHighThreat(THREAT_PX) ? findDangerousMonster() : findOptimalDominoTarget();
|
||||
if (t >= 0 && STATE.monsters[t] && STATE.monsters[t].hasAttribute('onclick'))
|
||||
return { type: 'attack', target: t, _reason: 'oc_build' };
|
||||
|
|
@ -1591,9 +1593,9 @@ function strategyVeteran() {
|
|||
if (STATE.oc >= askillOC3 || isHighThreat) {
|
||||
if (isHighThreat && STATE.oc < askillOC3) console.log('%c[HV] ⚠ emergency: using skill at OC=' + STATE.oc.toFixed(0), 'color:#f80');
|
||||
// Emergency: 2+ monsters about to special — spend OC to kill them fast
|
||||
// Rending Blow: AoE armor pen vs 3+ enemies (reduced from 5 for IWBTH survivability)
|
||||
// Rending Blow: AoE armor pen vs 3+ enemies. Target center monster for max 5-target splash.
|
||||
if (STATE.monsters.length >= 3 && STATE.skillsKnown.includes('Rending Blow')) {
|
||||
const t = isHighThreat ? findDangerousMonster() : findStrongestMonster();
|
||||
const t = isHighThreat ? findDangerousMonster() : findOptimalDominoTarget();
|
||||
if (t >= 0) return { type: 'skill', name: 'Rending Blow', target: t, _reason: isHighThreat ? 'threat' : 'oc' };
|
||||
}
|
||||
// Shatter Strike: AoE stun vs 3+ enemies with armor break
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name HV Unified
|
||||
// @namespace hvunified
|
||||
// @version 0.14.28
|
||||
// @version 0.14.29
|
||||
// @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.28';
|
||||
const VERSION = '0.14.29';
|
||||
|
||||
const CFG = {
|
||||
// — Battle automation
|
||||
|
|
@ -1477,7 +1477,8 @@ function strategyVeteran() {
|
|||
const isHighThreatEarly = hasHighThreat(THREAT_PX);
|
||||
if ((isHighThreatEarly || anyImminent) && STATE.oc >= 20) {
|
||||
if (STATE.monsters.length >= 3 && STATE.skillsKnown.includes('Rending Blow')) {
|
||||
const t = findDangerousMonster();
|
||||
// Use findOptimalDominoTarget for max AoE coverage (target + 2 left + 2 right)
|
||||
const t = findOptimalDominoTarget();
|
||||
if (t >= 0) return { type: 'skill', name: 'Rending Blow', target: t, _reason: 'threat_early' };
|
||||
}
|
||||
if (STATE.monsters.length >= 3 && STATE.skillsKnown.includes('Shatter Strike')) {
|
||||
|
|
@ -1505,12 +1506,13 @@ function strategyVeteran() {
|
|||
|
||||
// 2c. OC-building priority: when 5+ monsters, OC < 60, and AoE skills ready,
|
||||
// skip debuffs/non-essential buffs and basic attack to build OC fast.
|
||||
const needsOC = STATE.monsters && STATE.monsters.length >= 5
|
||||
const needsOC = STATE.monsters && STATE.monsters.length >= 4
|
||||
&& STATE.oc < (CFG.skillOC || 60)
|
||||
&& STATE.skillsKnown.includes('Rending Blow')
|
||||
&& document.querySelector(`.btqs[onmouseover*="set_infopane_spell('Rending Blow'"], .btsd[onmouseover*="set_infopane_spell('Rending Blow'"]`)
|
||||
?.hasAttribute('onclick');
|
||||
if (needsOC && STATE.hp > 0.40 && STATE.mp > 0.20) {
|
||||
if (needsOC) {
|
||||
// No hp/mp guard — if Spark procced, hp=0 but we still need OC
|
||||
const t = hasHighThreat(THREAT_PX) ? findDangerousMonster() : findOptimalDominoTarget();
|
||||
if (t >= 0 && STATE.monsters[t] && STATE.monsters[t].hasAttribute('onclick'))
|
||||
return { type: 'attack', target: t, _reason: 'oc_build' };
|
||||
|
|
@ -1591,9 +1593,9 @@ function strategyVeteran() {
|
|||
if (STATE.oc >= askillOC3 || isHighThreat) {
|
||||
if (isHighThreat && STATE.oc < askillOC3) console.log('%c[HV] ⚠ emergency: using skill at OC=' + STATE.oc.toFixed(0), 'color:#f80');
|
||||
// Emergency: 2+ monsters about to special — spend OC to kill them fast
|
||||
// Rending Blow: AoE armor pen vs 3+ enemies (reduced from 5 for IWBTH survivability)
|
||||
// Rending Blow: AoE armor pen vs 3+ enemies. Target center monster for max 5-target splash.
|
||||
if (STATE.monsters.length >= 3 && STATE.skillsKnown.includes('Rending Blow')) {
|
||||
const t = isHighThreat ? findDangerousMonster() : findStrongestMonster();
|
||||
const t = isHighThreat ? findDangerousMonster() : findOptimalDominoTarget();
|
||||
if (t >= 0) return { type: 'skill', name: 'Rending Blow', target: t, _reason: isHighThreat ? 'threat' : 'oc' };
|
||||
}
|
||||
// Shatter Strike: AoE stun vs 3+ enemies with armor break
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// CONFIG — default settings
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
|
||||
const VERSION = '0.14.28';
|
||||
const VERSION = '0.14.29';
|
||||
|
||||
const CFG = {
|
||||
// — Battle automation
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name HV Unified
|
||||
// @namespace hvunified
|
||||
// @version 0.14.28
|
||||
// @version 0.14.29
|
||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||
// @author GaboGG + Hermes
|
||||
// @match *://*.hentaiverse.org/*
|
||||
|
|
|
|||
|
|
@ -751,7 +751,8 @@ function strategyVeteran() {
|
|||
const isHighThreatEarly = hasHighThreat(THREAT_PX);
|
||||
if ((isHighThreatEarly || anyImminent) && STATE.oc >= 20) {
|
||||
if (STATE.monsters.length >= 3 && STATE.skillsKnown.includes('Rending Blow')) {
|
||||
const t = findDangerousMonster();
|
||||
// Use findOptimalDominoTarget for max AoE coverage (target + 2 left + 2 right)
|
||||
const t = findOptimalDominoTarget();
|
||||
if (t >= 0) return { type: 'skill', name: 'Rending Blow', target: t, _reason: 'threat_early' };
|
||||
}
|
||||
if (STATE.monsters.length >= 3 && STATE.skillsKnown.includes('Shatter Strike')) {
|
||||
|
|
@ -779,12 +780,13 @@ function strategyVeteran() {
|
|||
|
||||
// 2c. OC-building priority: when 5+ monsters, OC < 60, and AoE skills ready,
|
||||
// skip debuffs/non-essential buffs and basic attack to build OC fast.
|
||||
const needsOC = STATE.monsters && STATE.monsters.length >= 5
|
||||
const needsOC = STATE.monsters && STATE.monsters.length >= 4
|
||||
&& STATE.oc < (CFG.skillOC || 60)
|
||||
&& STATE.skillsKnown.includes('Rending Blow')
|
||||
&& document.querySelector(`.btqs[onmouseover*="set_infopane_spell('Rending Blow'"], .btsd[onmouseover*="set_infopane_spell('Rending Blow'"]`)
|
||||
?.hasAttribute('onclick');
|
||||
if (needsOC && STATE.hp > 0.40 && STATE.mp > 0.20) {
|
||||
if (needsOC) {
|
||||
// No hp/mp guard — if Spark procced, hp=0 but we still need OC
|
||||
const t = hasHighThreat(THREAT_PX) ? findDangerousMonster() : findOptimalDominoTarget();
|
||||
if (t >= 0 && STATE.monsters[t] && STATE.monsters[t].hasAttribute('onclick'))
|
||||
return { type: 'attack', target: t, _reason: 'oc_build' };
|
||||
|
|
@ -865,9 +867,9 @@ function strategyVeteran() {
|
|||
if (STATE.oc >= askillOC3 || isHighThreat) {
|
||||
if (isHighThreat && STATE.oc < askillOC3) console.log('%c[HV] ⚠ emergency: using skill at OC=' + STATE.oc.toFixed(0), 'color:#f80');
|
||||
// Emergency: 2+ monsters about to special — spend OC to kill them fast
|
||||
// Rending Blow: AoE armor pen vs 3+ enemies (reduced from 5 for IWBTH survivability)
|
||||
// Rending Blow: AoE armor pen vs 3+ enemies. Target center monster for max 5-target splash.
|
||||
if (STATE.monsters.length >= 3 && STATE.skillsKnown.includes('Rending Blow')) {
|
||||
const t = isHighThreat ? findDangerousMonster() : findStrongestMonster();
|
||||
const t = isHighThreat ? findDangerousMonster() : findOptimalDominoTarget();
|
||||
if (t >= 0) return { type: 'skill', name: 'Rending Blow', target: t, _reason: isHighThreat ? 'threat' : 'oc' };
|
||||
}
|
||||
// Shatter Strike: AoE stun vs 3+ enemies with armor break
|
||||
|
|
|
|||
Loading…
Reference in a new issue