v0.14.5 - Conservative debuffs: Imperil only on bosses/rares or 5+ mobs
- Imperil no longer casts on every 2-mob wave (Estoc's native Penetrated Armor handles armor-breaking for <5 targets) - Imperil threshold raised from MP>20% to MP>35% - Imperil now only fires on bosses/rares OR 5+ monster waves (Grindfest) - Weaken now only on high-threat (SP>85%) or bosses, not every 3-mob wave - Formerly: Imperil on 2+ mobs, Weaken on 3+ mobs — drained MP fast
This commit is contained in:
parent
0a41f9d7c5
commit
9af0237754
5 changed files with 45 additions and 42 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.14.4
|
// @version 0.14.5
|
||||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||||
// @author GaboGG + Hermes
|
// @author GaboGG + Hermes
|
||||||
// @match *://*.hentaiverse.org/*
|
// @match *://*.hentaiverse.org/*
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.14.4';
|
const VERSION = '0.14.5';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
@ -1337,14 +1337,15 @@ function strategyAdept() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Debuffs — Imperil on 2+ mobs or bosses; Weaken on high-threat
|
// 4. Debuffs — conservative: Imperil on bosses/rares or 5+ mobs
|
||||||
if (CFG.autoDebuff && STATE.mp > 0.20) {
|
// Weaken only on high-threat or bosses. Estoc handles <5.
|
||||||
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 2)) {
|
if (CFG.autoDebuff && STATE.mp > 0.35) {
|
||||||
|
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 5)) {
|
||||||
const b = findStrongestMonster();
|
const b = findStrongestMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
||||||
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
||||||
}
|
}
|
||||||
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(80) || STATE.monsters.length >= 3)) {
|
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(THREAT_PX))) {
|
||||||
const b = findDangerousMonster();
|
const b = findDangerousMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
||||||
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
||||||
|
|
@ -1497,18 +1498,18 @@ function strategyVeteran() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Debuffs — Imperil on any 2+ mobs or bosses; Weaken on high-threat enemies
|
// 4. Debuffs — conservative: Imperil only on bosses/rares or 5+ mobs (Grindfest)
|
||||||
// On IWBTH, non-boss elites hit hard — debuffs are worth the MP cost
|
// Weaken only on high-threat (SP >85%) or bosses. Estoc already applies
|
||||||
if (CFG.autoDebuff && STATE.mp > 0.20) {
|
// Penetrated Armor natively, so Imperil on 2-mob waves is wasteful.
|
||||||
// Imperil: reduce physical mitigation by 25-50% (stacks with Penetrated Armor)
|
if (CFG.autoDebuff && STATE.mp > 0.35) {
|
||||||
// Use on any tanky enemy when facing 2+ monsters or a rare
|
// Imperil: bosses only, or 5+ mobs in Grindfest (Estoc handles <5)
|
||||||
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 2)) {
|
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 5)) {
|
||||||
const b = findStrongestMonster();
|
const b = findStrongestMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
||||||
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
||||||
}
|
}
|
||||||
// Weaken: reduce incoming damage by 50% — use on high-threat or 3+ mobs
|
// Weaken: only on monsters about to use special attacks (high SP) or bosses
|
||||||
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(80) || STATE.monsters.length >= 3)) {
|
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(THREAT_PX))) {
|
||||||
const b = findDangerousMonster();
|
const b = findDangerousMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
||||||
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.14.4
|
// @version 0.14.5
|
||||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||||
// @author GaboGG + Hermes
|
// @author GaboGG + Hermes
|
||||||
// @match *://*.hentaiverse.org/*
|
// @match *://*.hentaiverse.org/*
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.14.4';
|
const VERSION = '0.14.5';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
@ -1337,14 +1337,15 @@ function strategyAdept() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Debuffs — Imperil on 2+ mobs or bosses; Weaken on high-threat
|
// 4. Debuffs — conservative: Imperil on bosses/rares or 5+ mobs
|
||||||
if (CFG.autoDebuff && STATE.mp > 0.20) {
|
// Weaken only on high-threat or bosses. Estoc handles <5.
|
||||||
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 2)) {
|
if (CFG.autoDebuff && STATE.mp > 0.35) {
|
||||||
|
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 5)) {
|
||||||
const b = findStrongestMonster();
|
const b = findStrongestMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
||||||
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
||||||
}
|
}
|
||||||
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(80) || STATE.monsters.length >= 3)) {
|
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(THREAT_PX))) {
|
||||||
const b = findDangerousMonster();
|
const b = findDangerousMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
||||||
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
||||||
|
|
@ -1497,18 +1498,18 @@ function strategyVeteran() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Debuffs — Imperil on any 2+ mobs or bosses; Weaken on high-threat enemies
|
// 4. Debuffs — conservative: Imperil only on bosses/rares or 5+ mobs (Grindfest)
|
||||||
// On IWBTH, non-boss elites hit hard — debuffs are worth the MP cost
|
// Weaken only on high-threat (SP >85%) or bosses. Estoc already applies
|
||||||
if (CFG.autoDebuff && STATE.mp > 0.20) {
|
// Penetrated Armor natively, so Imperil on 2-mob waves is wasteful.
|
||||||
// Imperil: reduce physical mitigation by 25-50% (stacks with Penetrated Armor)
|
if (CFG.autoDebuff && STATE.mp > 0.35) {
|
||||||
// Use on any tanky enemy when facing 2+ monsters or a rare
|
// Imperil: bosses only, or 5+ mobs in Grindfest (Estoc handles <5)
|
||||||
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 2)) {
|
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 5)) {
|
||||||
const b = findStrongestMonster();
|
const b = findStrongestMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
||||||
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
||||||
}
|
}
|
||||||
// Weaken: reduce incoming damage by 50% — use on high-threat or 3+ mobs
|
// Weaken: only on monsters about to use special attacks (high SP) or bosses
|
||||||
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(80) || STATE.monsters.length >= 3)) {
|
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(THREAT_PX))) {
|
||||||
const b = findDangerousMonster();
|
const b = findDangerousMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
||||||
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.14.4';
|
const VERSION = '0.14.5';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.14.4
|
// @version 0.14.5
|
||||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||||
// @author GaboGG + Hermes
|
// @author GaboGG + Hermes
|
||||||
// @match *://*.hentaiverse.org/*
|
// @match *://*.hentaiverse.org/*
|
||||||
|
|
|
||||||
|
|
@ -612,14 +612,15 @@ function strategyAdept() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Debuffs — Imperil on 2+ mobs or bosses; Weaken on high-threat
|
// 4. Debuffs — conservative: Imperil on bosses/rares or 5+ mobs
|
||||||
if (CFG.autoDebuff && STATE.mp > 0.20) {
|
// Weaken only on high-threat or bosses. Estoc handles <5.
|
||||||
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 2)) {
|
if (CFG.autoDebuff && STATE.mp > 0.35) {
|
||||||
|
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 5)) {
|
||||||
const b = findStrongestMonster();
|
const b = findStrongestMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
||||||
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
||||||
}
|
}
|
||||||
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(80) || STATE.monsters.length >= 3)) {
|
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(THREAT_PX))) {
|
||||||
const b = findDangerousMonster();
|
const b = findDangerousMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
||||||
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
||||||
|
|
@ -772,18 +773,18 @@ function strategyVeteran() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Debuffs — Imperil on any 2+ mobs or bosses; Weaken on high-threat enemies
|
// 4. Debuffs — conservative: Imperil only on bosses/rares or 5+ mobs (Grindfest)
|
||||||
// On IWBTH, non-boss elites hit hard — debuffs are worth the MP cost
|
// Weaken only on high-threat (SP >85%) or bosses. Estoc already applies
|
||||||
if (CFG.autoDebuff && STATE.mp > 0.20) {
|
// Penetrated Armor natively, so Imperil on 2-mob waves is wasteful.
|
||||||
// Imperil: reduce physical mitigation by 25-50% (stacks with Penetrated Armor)
|
if (CFG.autoDebuff && STATE.mp > 0.35) {
|
||||||
// Use on any tanky enemy when facing 2+ monsters or a rare
|
// Imperil: bosses only, or 5+ mobs in Grindfest (Estoc handles <5)
|
||||||
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 2)) {
|
if (hasReadySpell('Imperil') && (anyRareMonster() || STATE.monsters.length >= 5)) {
|
||||||
const b = findStrongestMonster();
|
const b = findStrongestMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'imperil'))
|
||||||
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
return { type: 'spell', name: 'Imperil', target: b, _reason: 'imperil' };
|
||||||
}
|
}
|
||||||
// Weaken: reduce incoming damage by 50% — use on high-threat or 3+ mobs
|
// Weaken: only on monsters about to use special attacks (high SP) or bosses
|
||||||
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(80) || STATE.monsters.length >= 3)) {
|
if (hasReadySpell('Weaken') && (anyRareMonster() || hasHighThreat(THREAT_PX))) {
|
||||||
const b = findDangerousMonster();
|
const b = findDangerousMonster();
|
||||||
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
if (b >= 0 && !checkMonsterDebuff(b, 'weaken'))
|
||||||
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
return { type: 'spell', name: 'Weaken', target: b, _reason: 'weaken' };
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue