v0.14.23 - OC conservation: save weapon skills for 3+ mob groups

- Raised heal threshold from 60%@7+ to 65%@5+ (earlier healing in big groups)
- Cure threshold also dynamic: 65% when 5+ mobs, normal otherwise
- Secondary weapon skill dump restricted to 3+ enemies (no OC waste on cleanup)
- Great Cleave already limited to rares — kept as-is
- Simulation confirmed +7 rounds deeper (R30->R37 avg) from OC conservation
- Source: agy_oc_output.txt
This commit is contained in:
GaboGG 2026-07-28 09:12:01 -04:00
parent 93c0f85acd
commit f42e44db34
5 changed files with 24 additions and 21 deletions

View file

@ -1,7 +1,7 @@
// ==UserScript==
// @name HV Unified
// @namespace hvunified
// @version 0.14.22
// @version 0.14.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.14.22';
const VERSION = '0.14.23';
const CFG = {
// — Battle automation
@ -1409,7 +1409,7 @@ function strategyAdept() {
function strategyVeteran() {
// 1. Health items — ALWAYS BEFORE ATTACKING OR SKILLS!
const reqHpItem = (STATE.monsters && STATE.monsters.length >= 7) ? 0.60 : CFG.cureItemHP;
const reqHpItem = (STATE.monsters && STATE.monsters.length >= 5) ? 0.65 : CFG.cureItemHP;
if (STATE.hp < reqHpItem) {
const gem = hasUsableGem('heal');
if (gem) return { type: 'item', id: gem.id, selfTarget: true, _reason: `hp${(STATE.hp*100).toFixed(0)}` };
@ -1421,8 +1421,9 @@ function strategyVeteran() {
}
}
// 2. Cure / Full-Cure spell
if (STATE.hp < Math.max(0.55, CFG.cureHP)) {
// 2. Cure / Full-Cure spell — higher threshold when many mobs
const cureThresh = (STATE.monsters && STATE.monsters.length >= 5) ? 0.65 : Math.max(0.55, CFG.cureHP);
if (STATE.hp < cureThresh) {
const c = hasReadySpell('Full-Cure') ? 'Full-Cure' : hasReadySpell('Cure') ? 'Cure' : null;
if (c) return { type: 'spell', name: c, selfTarget: true, _reason: `hp${(STATE.hp*100).toFixed(0)}` };
}
@ -1590,8 +1591,8 @@ function strategyVeteran() {
const t = isHighThreat ? findDangerousMonster() : findStrongestMonster();
if (t >= 0) return { type: 'skill', name: 'Great Cleave', target: t, _reason: isHighThreat ? 'threat' : 'boss' };
}
// If high threat and no AoE skill available, use any weapon skill on the most dangerous
if (isHighThreat && STATE.oc >= (CFG.skillOC || 80)) {
// If high threat and 3+ enemies, use single-target skills on the most dangerous
if (isHighThreat && STATE.oc >= (CFG.skillOC || 60) && STATE.monsters.length >= 3) {
const ps = ['Frenzied Blows', 'Skyward Sword', 'Iris Strike', 'Merciful Blow',
'Vital Strike', 'Shield Bash', 'Concussive Strike'];
for (const sk of ps) {

View file

@ -1,7 +1,7 @@
// ==UserScript==
// @name HV Unified
// @namespace hvunified
// @version 0.14.22
// @version 0.14.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.14.22';
const VERSION = '0.14.23';
const CFG = {
// — Battle automation
@ -1409,7 +1409,7 @@ function strategyAdept() {
function strategyVeteran() {
// 1. Health items — ALWAYS BEFORE ATTACKING OR SKILLS!
const reqHpItem = (STATE.monsters && STATE.monsters.length >= 7) ? 0.60 : CFG.cureItemHP;
const reqHpItem = (STATE.monsters && STATE.monsters.length >= 5) ? 0.65 : CFG.cureItemHP;
if (STATE.hp < reqHpItem) {
const gem = hasUsableGem('heal');
if (gem) return { type: 'item', id: gem.id, selfTarget: true, _reason: `hp${(STATE.hp*100).toFixed(0)}` };
@ -1421,8 +1421,9 @@ function strategyVeteran() {
}
}
// 2. Cure / Full-Cure spell
if (STATE.hp < Math.max(0.55, CFG.cureHP)) {
// 2. Cure / Full-Cure spell — higher threshold when many mobs
const cureThresh = (STATE.monsters && STATE.monsters.length >= 5) ? 0.65 : Math.max(0.55, CFG.cureHP);
if (STATE.hp < cureThresh) {
const c = hasReadySpell('Full-Cure') ? 'Full-Cure' : hasReadySpell('Cure') ? 'Cure' : null;
if (c) return { type: 'spell', name: c, selfTarget: true, _reason: `hp${(STATE.hp*100).toFixed(0)}` };
}
@ -1590,8 +1591,8 @@ function strategyVeteran() {
const t = isHighThreat ? findDangerousMonster() : findStrongestMonster();
if (t >= 0) return { type: 'skill', name: 'Great Cleave', target: t, _reason: isHighThreat ? 'threat' : 'boss' };
}
// If high threat and no AoE skill available, use any weapon skill on the most dangerous
if (isHighThreat && STATE.oc >= (CFG.skillOC || 80)) {
// If high threat and 3+ enemies, use single-target skills on the most dangerous
if (isHighThreat && STATE.oc >= (CFG.skillOC || 60) && STATE.monsters.length >= 3) {
const ps = ['Frenzied Blows', 'Skyward Sword', 'Iris Strike', 'Merciful Blow',
'Vital Strike', 'Shield Bash', 'Concussive Strike'];
for (const sk of ps) {

View file

@ -2,7 +2,7 @@
// CONFIG — default settings
// ═══════════════════════════════════════════════════════════════════════
const VERSION = '0.14.22';
const VERSION = '0.14.23';
const CFG = {
// — Battle automation

View file

@ -1,7 +1,7 @@
// ==UserScript==
// @name HV Unified
// @namespace hvunified
// @version 0.14.22
// @version 0.14.23
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
// @author GaboGG + Hermes
// @match *://*.hentaiverse.org/*

View file

@ -683,7 +683,7 @@ function strategyAdept() {
function strategyVeteran() {
// 1. Health items — ALWAYS BEFORE ATTACKING OR SKILLS!
const reqHpItem = (STATE.monsters && STATE.monsters.length >= 7) ? 0.60 : CFG.cureItemHP;
const reqHpItem = (STATE.monsters && STATE.monsters.length >= 5) ? 0.65 : CFG.cureItemHP;
if (STATE.hp < reqHpItem) {
const gem = hasUsableGem('heal');
if (gem) return { type: 'item', id: gem.id, selfTarget: true, _reason: `hp${(STATE.hp*100).toFixed(0)}` };
@ -695,8 +695,9 @@ function strategyVeteran() {
}
}
// 2. Cure / Full-Cure spell
if (STATE.hp < Math.max(0.55, CFG.cureHP)) {
// 2. Cure / Full-Cure spell — higher threshold when many mobs
const cureThresh = (STATE.monsters && STATE.monsters.length >= 5) ? 0.65 : Math.max(0.55, CFG.cureHP);
if (STATE.hp < cureThresh) {
const c = hasReadySpell('Full-Cure') ? 'Full-Cure' : hasReadySpell('Cure') ? 'Cure' : null;
if (c) return { type: 'spell', name: c, selfTarget: true, _reason: `hp${(STATE.hp*100).toFixed(0)}` };
}
@ -864,8 +865,8 @@ function strategyVeteran() {
const t = isHighThreat ? findDangerousMonster() : findStrongestMonster();
if (t >= 0) return { type: 'skill', name: 'Great Cleave', target: t, _reason: isHighThreat ? 'threat' : 'boss' };
}
// If high threat and no AoE skill available, use any weapon skill on the most dangerous
if (isHighThreat && STATE.oc >= (CFG.skillOC || 80)) {
// If high threat and 3+ enemies, use single-target skills on the most dangerous
if (isHighThreat && STATE.oc >= (CFG.skillOC || 60) && STATE.monsters.length >= 3) {
const ps = ['Frenzied Blows', 'Skyward Sword', 'Iris Strike', 'Merciful Blow',
'Vital Strike', 'Shield Bash', 'Concussive Strike'];
for (const sk of ps) {