v0.13.29 - Aggressive SP management for Spark of Life survival
- Raised spiritPotionSP threshold from 30% to 60% - Added Spirit item check at step 2b in Adept and Veteran tiers: if SP < 55%, consume Spirit Draught/Potion immediately - Spark of Life costs 50% max SP when triggered. If SP is too low, Spark fails and you die. Keeping SP above 55% ensures Spark always has enough fuel to save you from a killing blow on IWBTH
This commit is contained in:
parent
e1269cd3fe
commit
b6d78067ce
5 changed files with 69 additions and 9 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.13.28
|
// @version 0.13.29
|
||||||
// @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.13.28';
|
const VERSION = '0.13.29';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
@ -35,7 +35,7 @@ const CFG = {
|
||||||
cureRegenHP: 0.65, // Cast Regen below this HP
|
cureRegenHP: 0.65, // Cast Regen below this HP
|
||||||
manaGemMP: 0.45, // Use mana gems below this MP
|
manaGemMP: 0.45, // Use mana gems below this MP
|
||||||
manaPotionMP: 0.25, // Use mana potions at this MP
|
manaPotionMP: 0.25, // Use mana potions at this MP
|
||||||
spiritPotionSP: 0.30, // Use spirit gems/potions below this SP
|
spiritPotionSP: 0.60, // Use spirit gems/potions below this SP (Spark costs 50%)
|
||||||
spiritStanceOC: 80, // Manual spirit stance only (auto-disable at 65% SP for Spark)
|
spiritStanceOC: 80, // Manual spirit stance only (auto-disable at 65% SP for Spark)
|
||||||
skillOC: 75, // Use weapon skills at this OC
|
skillOC: 75, // Use weapon skills at this OC
|
||||||
useAttackSpells: false, // Don't use attack spells (let channel proc naturally)
|
useAttackSpells: false, // Don't use attack spells (let channel proc naturally)
|
||||||
|
|
@ -1150,6 +1150,16 @@ function strategyAdept() {
|
||||||
if (c) return { type: 'spell', name: c, selfTarget: true };
|
if (c) return { type: 'spell', name: c, selfTarget: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2b. Spirit items — Spark of Life costs 50% SP. Keep SP above 55% so
|
||||||
|
// Spark can actually save us.
|
||||||
|
if (STATE.sp < 0.55) {
|
||||||
|
for (const [slot, info] of Object.entries(STATE.itemsKnown)) {
|
||||||
|
if (slot === 'p') continue;
|
||||||
|
const def = ITEMS[parseInt(info)];
|
||||||
|
if (def && def.t === 'spirit') return { type: 'item', id: slot, selfTarget: true };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 3. Buffs
|
// 3. Buffs
|
||||||
// On first round, cast cheapest-first to proc channeling
|
// On first round, cast cheapest-first to proc channeling
|
||||||
{
|
{
|
||||||
|
|
@ -1275,6 +1285,16 @@ function strategyVeteran() {
|
||||||
if (c) return { type: 'spell', name: c, selfTarget: true };
|
if (c) return { type: 'spell', name: c, selfTarget: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2b. Spirit items — Spark of Life costs 50% SP. Keep SP above 55% so
|
||||||
|
// Spark can actually save us. Use spirit draughts/potions proactively.
|
||||||
|
if (STATE.sp < 0.55) {
|
||||||
|
for (const [slot, info] of Object.entries(STATE.itemsKnown)) {
|
||||||
|
if (slot === 'p') continue;
|
||||||
|
const def = ITEMS[parseInt(info)];
|
||||||
|
if (def && def.t === 'spirit') return { type: 'item', id: slot, selfTarget: true };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 3. Buffs
|
// 3. Buffs
|
||||||
// On first round, cast cheapest-first to proc channeling
|
// On first round, cast cheapest-first to proc channeling
|
||||||
if (CFG.autoBuff) {
|
if (CFG.autoBuff) {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.13.28
|
// @version 0.13.29
|
||||||
// @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.13.28';
|
const VERSION = '0.13.29';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
@ -35,7 +35,7 @@ const CFG = {
|
||||||
cureRegenHP: 0.65, // Cast Regen below this HP
|
cureRegenHP: 0.65, // Cast Regen below this HP
|
||||||
manaGemMP: 0.45, // Use mana gems below this MP
|
manaGemMP: 0.45, // Use mana gems below this MP
|
||||||
manaPotionMP: 0.25, // Use mana potions at this MP
|
manaPotionMP: 0.25, // Use mana potions at this MP
|
||||||
spiritPotionSP: 0.30, // Use spirit gems/potions below this SP
|
spiritPotionSP: 0.60, // Use spirit gems/potions below this SP (Spark costs 50%)
|
||||||
spiritStanceOC: 80, // Manual spirit stance only (auto-disable at 65% SP for Spark)
|
spiritStanceOC: 80, // Manual spirit stance only (auto-disable at 65% SP for Spark)
|
||||||
skillOC: 75, // Use weapon skills at this OC
|
skillOC: 75, // Use weapon skills at this OC
|
||||||
useAttackSpells: false, // Don't use attack spells (let channel proc naturally)
|
useAttackSpells: false, // Don't use attack spells (let channel proc naturally)
|
||||||
|
|
@ -1150,6 +1150,16 @@ function strategyAdept() {
|
||||||
if (c) return { type: 'spell', name: c, selfTarget: true };
|
if (c) return { type: 'spell', name: c, selfTarget: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2b. Spirit items — Spark of Life costs 50% SP. Keep SP above 55% so
|
||||||
|
// Spark can actually save us.
|
||||||
|
if (STATE.sp < 0.55) {
|
||||||
|
for (const [slot, info] of Object.entries(STATE.itemsKnown)) {
|
||||||
|
if (slot === 'p') continue;
|
||||||
|
const def = ITEMS[parseInt(info)];
|
||||||
|
if (def && def.t === 'spirit') return { type: 'item', id: slot, selfTarget: true };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 3. Buffs
|
// 3. Buffs
|
||||||
// On first round, cast cheapest-first to proc channeling
|
// On first round, cast cheapest-first to proc channeling
|
||||||
{
|
{
|
||||||
|
|
@ -1275,6 +1285,16 @@ function strategyVeteran() {
|
||||||
if (c) return { type: 'spell', name: c, selfTarget: true };
|
if (c) return { type: 'spell', name: c, selfTarget: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2b. Spirit items — Spark of Life costs 50% SP. Keep SP above 55% so
|
||||||
|
// Spark can actually save us. Use spirit draughts/potions proactively.
|
||||||
|
if (STATE.sp < 0.55) {
|
||||||
|
for (const [slot, info] of Object.entries(STATE.itemsKnown)) {
|
||||||
|
if (slot === 'p') continue;
|
||||||
|
const def = ITEMS[parseInt(info)];
|
||||||
|
if (def && def.t === 'spirit') return { type: 'item', id: slot, selfTarget: true };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 3. Buffs
|
// 3. Buffs
|
||||||
// On first round, cast cheapest-first to proc channeling
|
// On first round, cast cheapest-first to proc channeling
|
||||||
if (CFG.autoBuff) {
|
if (CFG.autoBuff) {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.13.28';
|
const VERSION = '0.13.29';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
@ -20,7 +20,7 @@ const CFG = {
|
||||||
cureRegenHP: 0.65, // Cast Regen below this HP
|
cureRegenHP: 0.65, // Cast Regen below this HP
|
||||||
manaGemMP: 0.45, // Use mana gems below this MP
|
manaGemMP: 0.45, // Use mana gems below this MP
|
||||||
manaPotionMP: 0.25, // Use mana potions at this MP
|
manaPotionMP: 0.25, // Use mana potions at this MP
|
||||||
spiritPotionSP: 0.30, // Use spirit gems/potions below this SP
|
spiritPotionSP: 0.60, // Use spirit gems/potions below this SP (Spark costs 50%)
|
||||||
spiritStanceOC: 80, // Manual spirit stance only (auto-disable at 65% SP for Spark)
|
spiritStanceOC: 80, // Manual spirit stance only (auto-disable at 65% SP for Spark)
|
||||||
skillOC: 75, // Use weapon skills at this OC
|
skillOC: 75, // Use weapon skills at this OC
|
||||||
useAttackSpells: false, // Don't use attack spells (let channel proc naturally)
|
useAttackSpells: false, // Don't use attack spells (let channel proc naturally)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.13.28
|
// @version 0.13.29
|
||||||
// @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/*
|
||||||
|
|
|
||||||
|
|
@ -464,6 +464,16 @@ function strategyAdept() {
|
||||||
if (c) return { type: 'spell', name: c, selfTarget: true };
|
if (c) return { type: 'spell', name: c, selfTarget: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2b. Spirit items — Spark of Life costs 50% SP. Keep SP above 55% so
|
||||||
|
// Spark can actually save us.
|
||||||
|
if (STATE.sp < 0.55) {
|
||||||
|
for (const [slot, info] of Object.entries(STATE.itemsKnown)) {
|
||||||
|
if (slot === 'p') continue;
|
||||||
|
const def = ITEMS[parseInt(info)];
|
||||||
|
if (def && def.t === 'spirit') return { type: 'item', id: slot, selfTarget: true };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 3. Buffs
|
// 3. Buffs
|
||||||
// On first round, cast cheapest-first to proc channeling
|
// On first round, cast cheapest-first to proc channeling
|
||||||
{
|
{
|
||||||
|
|
@ -589,6 +599,16 @@ function strategyVeteran() {
|
||||||
if (c) return { type: 'spell', name: c, selfTarget: true };
|
if (c) return { type: 'spell', name: c, selfTarget: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2b. Spirit items — Spark of Life costs 50% SP. Keep SP above 55% so
|
||||||
|
// Spark can actually save us. Use spirit draughts/potions proactively.
|
||||||
|
if (STATE.sp < 0.55) {
|
||||||
|
for (const [slot, info] of Object.entries(STATE.itemsKnown)) {
|
||||||
|
if (slot === 'p') continue;
|
||||||
|
const def = ITEMS[parseInt(info)];
|
||||||
|
if (def && def.t === 'spirit') return { type: 'item', id: slot, selfTarget: true };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 3. Buffs
|
// 3. Buffs
|
||||||
// On first round, cast cheapest-first to proc channeling
|
// On first round, cast cheapest-first to proc channeling
|
||||||
if (CFG.autoBuff) {
|
if (CFG.autoBuff) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue