Welcome Guest ( Log In | Register )

47 Pages V « < 44 45 46 47 >  
Reply to this topicStart new topic
> [Script] Monsterbation 1.4.1.2, A comprehensive hovering script for HentaiVerse and ISK. Including CrunkJuice 1.3.0, an out-of-battle script

 
post Nov 1 2025, 12:57
Post #900
OnceForAll



Fluffy Tail Fox
*******
Group: Catgirl Camarilla
Posts: 1,646
Joined: 3-January 21
Level 500 (Ponyslayer)


The new isekai (new version of the HV) brokes the "duration" feature, here is how you can fix this:

In your script manager, open the editor, find

CODE
/(x(\d))*[^(]*, (\d+)/


and replace it with

CODE
/(x(\d))*[^(]*,\s?(\d+)/


My new regex works for both existing persistent and new isekai.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 1 2025, 19:19
Post #901
hydoc



Newcomer
**
Group: Members
Posts: 72
Joined: 26-March 12
Level 335 (Dovahkiin)


QUOTE(OnceForAll @ Nov 1 2025, 10:57) *
The new isekai (new version of the HV) brokes the "duration" feature, here is how you can fix this:

In your script manager, open the editor, find

CODE
/(x(\d))*[^(]*, (\d+)/


and replace it with

CODE
/(x(\d))*[^(]*,\s?(\d+)/


My new regex works for both existing persistent and new isekai.

Thanks!

However, the code for me was
CODE
/(x(\d))*[^\(]*, (\d+)/
and was on line 754. The difference was a \ in the brackets.

So the code I used was
CODE
/(x(\d))*[^\(]*,\s?(\d+)/
and this worked in both persistent and isekai.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 2 2025, 07:28
Post #902
Basara Nekki



A poor man with a star.
**********
Group: Gold Star Club
Posts: 7,901
Joined: 13-September 12
Level 500 (Ponyslayer)


Apparently the script is also not correctly recording damage data (dealt and taken). Can anyone confirm this?

EDIT:

(IMG:[i.imgur.com] https://i.imgur.com/OpNXhrg.jpeg)

0 damage taken???

Low damage dealt??

No crits??

This post has been edited by Basara Nekki: Nov 3 2025, 03:40
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 4 2025, 02:51
Post #903
Maharid



The Lord Of Dreams
*******
Group: Catgirl Camarilla
Posts: 2,431
Joined: 27-April 10
Level 500 (Ponyslayer)


QUOTE(hydoc @ Nov 1 2025, 18:19) *

Thanks!

However, the code for me was
CODE
/(x(\d))*[^\(]*, (\d+)/
and was on line 754. The difference was a \ in the brackets.

So the code I used was
CODE
/(x(\d))*[^\(]*,\s?(\d+)/
and this worked in both persistent and isekai.

This worked for me, thanks.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 4 2025, 12:37
Post #904
Ramaki



Regular Poster
*****
Group: Gold Star Club
Posts: 597
Joined: 18-June 15
Level 440 (Dovahkiin)


Take care, Monsterbation is not displaying the drops correctly.

Attached Image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 5 2025, 03:51
Post #905
Maharid



The Lord Of Dreams
*******
Group: Catgirl Camarilla
Posts: 2,431
Joined: 27-April 10
Level 500 (Ponyslayer)


Today i found out that i dn't have fun anymore with the new system so i decided to retire from Hentaiverse apart from RE.

I cleansed all old scripts that will not work anymore in few months and kpet the minimum, this included a previous version of Monsterbation, i reactivated the last one that i had here alreasy set.

It was all broke for some unknown reason.

I reset and readded the setting panfully and now everything work... with a sinlge exception.

Lefft Mose Click and Right Mouse Click are reversed, i have to pute the

Cast('Imperil') on the left to use it with right click and

Strongest([Cast('Orbital Friendship Cannon'), Cast('Vital Strike')]) on right to cast it with left click.

I don't know why.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 5 2025, 05:06
Post #906
time_of_flower



Newcomer
*
Group: Gold Star Club
Posts: 12
Joined: 19-July 21
Level 421 (Dovahkiin)


QUOTE(Ramaki @ Nov 4 2025, 18:37) *

Take care, Monsterbation is not displaying the drops correctly.

Attached Image


CODE
Add
else if ( drop[3].indexOf('Seed') > -1 ) { droplog.Seed = (droplog.Seed ? droplog.Seed : 0) + (parseInt(drop[1]) || 1); }
after
            else if ( drop[3].indexOf('Soul') > -1 ) {
                droplog.Soul = (droplog.Soul ? droplog.Soul : 0) + (drop[1] == 'five' ? 5 : (parseInt(drop[1]) || 1)); }


This post has been edited by time_of_flower: Nov 7 2025, 03:27
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 5 2025, 22:36
Post #907
King Vulture



Newcomer
**
Group: Members
Posts: 58
Joined: 3-December 13
Level 352 (Dovahkiin)


wow, thanks!
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 6 2025, 06:23
Post #908
l13763824039



Active Poster
*******
Group: Gold Star Club
Posts: 1,497
Joined: 6-July 21
Level 500 (Ponyslayer)


QUOTE(Basara Nekki @ Nov 2 2025, 00:28) *

Apparently the script is also not correctly recording damage data (dealt and taken). Can anyone confirm this?
...

This work for both persistent and isekai (but too redundant)
changed the some of regexp to,
CODE

type:/for (\d+) (\w+) damage/,
to
type:/(?:for|causing|take)\s+(\d+)(?:\s+(?:additional\s+)?points\s+of)?\s+(\w+)\s+damage/,

and
CODE

                    if ( dmg[i].indexOf('its you for') > -1 ) {
to
                    data[2] = data[2].toLowerCase();
                    if ( (dmg[i].indexOf('its you') > -1) || (dmg[i].indexOf('glances you') > -1) ) {

Some data are still not recorded independently, like partial parry, block, and glance.
They all belong to physical/magical damage/taken

This post has been edited by l13763824039: Nov 6 2025, 06:56
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 6 2025, 19:25
Post #909
Basara Nekki



A poor man with a star.
**********
Group: Gold Star Club
Posts: 7,901
Joined: 13-September 12
Level 500 (Ponyslayer)


QUOTE(l13763824039 @ Nov 6 2025, 01:23) *

This work for both persistent and isekai (but too redundant)
changed the some of regexp to,
CODE

type:/for (\d+) (\w+) damage/,
to
type:/(?:for|causing|take)\s+(\d+)(?:\s+(?:additional\s+)?points\s+of)?\s+(\w+)\s+damage/,

and
CODE

                    if ( dmg[i].indexOf('its you for') > -1 ) {
to
                    data[2] = data[2].toLowerCase();
                    if ( (dmg[i].indexOf('its you') > -1) || (dmg[i].indexOf('glances you') > -1) ) {

Some data are still not recorded independently, like partial parry, block, and glance.
They all belong to physical/magical damage/taken


Thank you very much.

But,... now something strange has appeared: "magical void damage dealt". (IMG:[invalid] style_emoticons/default/ohmy.gif) This value has always been 0 and now some appears.

User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 6 2025, 23:46
Post #910
l13763824039



Active Poster
*******
Group: Gold Star Club
Posts: 1,497
Joined: 6-July 21
Level 500 (Ponyslayer)


QUOTE(Basara Nekki @ Nov 6 2025, 12:25) *

Thank you very much.

But,... now something strange has appeared: "magical void damage dealt". :o This value has always been 0 and now some appears.

I notice that, too. Will take a look next week. Busy until next week.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 7 2025, 00:24
Post #911
sigo8



Clover Sprite
********
Group: Gold Star Club
Posts: 3,792
Joined: 9-November 11
Level 500 (Ponyslayer)


Magic void damage is done by Sprites' T3 skill, if it's always been zero before then that should be a bug in the old code.
User is online!Profile CardPM
Go to the top of the page
+Quote Post

 
post Nov 7 2025, 01:05
Post #912
Basara Nekki



A poor man with a star.
**********
Group: Gold Star Club
Posts: 7,901
Joined: 13-September 12
Level 500 (Ponyslayer)


QUOTE(sigo8 @ Nov 6 2025, 19:24) *

Magic void damage is done by Sprites' T3 skill, if it's always been zero before then that should be a bug in the old code.


I referred to the damage I do. Obviously it has to be 0 in the "magical" column (being 1H, only the spike shield causes magical damage).
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 7 2025, 05:45
Post #913
l13763824039



Active Poster
*******
Group: Gold Star Club
Posts: 1,497
Joined: 6-July 21
Level 500 (Ponyslayer)


You can skip to solutions. Not all figured issues are solved
Any part other than solutions means to provide info for other scripters who are interested in solving the issue.

Figured issue: 123 should be solved now
1. Monster attack wording becomes richer. In the old version, if monster h"its you", then they hits you. Otherwise, the damage comes from the player.
Now there is, h'its you', y"ou partially" block/parry, g"lances you", y"ou take". So, some of the monster damage are counted as your damage in previous changes (You attack yourself).

2. There are two type of damage wording for non-dot damage.
for x type dmg: old version: melee attack, strike, magic | new version: magic
for x points of type dmg. old version: spike, counter | new version: melee attack, strike, spike, counter
My modified type regexp captured all of them... which was not right. But I don't want to change the naming format. I'm lazy

3. If y"ou cast" in that turn, any non-monster damage is considered as magic damage.
So, once you cast non-offensive, any non h"its you" damage from 1 and 2 would be magic damage

TODO
4.
Any miss-record becomes inaccurate because of the wording. Need to run the arena and record the wording
Counter# is accurate, but block# and parry# will be less than the real number. I already notice if the wording is not "you block" or "you parry", then it will not be recorded.

5. dot damage might be inaccurate. Physical dot damage is accurate. I did not test magical dot damage

6. Resist record seems to be missing. I never see r50, r75, r90 in ISK

7. Maybe MB should record # of partially parry and block from damage dealt and damage taken now. And they also have p50, p25, b50, b25. Also, partially parry and block at the same time (I have no idea how to name this one).

SOLUTION:
change
CODE

    if ( cfg.trackDamage ) {
        var dmg;
        if ( (dmg = turn.match(regexp.damage)) ) {
            var cast = action.indexOf('You cast') > -1, data, shield;
            for ( var i = 0; i < dmg.length; i++ ) {
                if ( (data = dmg[i].match(regexp.type)) ) {
                    data[2] = data[2].toLowerCase();
                    if ( (dmg[i].indexOf('its you') > -1) || (dmg[i].indexOf('glances you') > -1) ) {
                        var crit = dmg[i].indexOf(' crits ') > -1;
                        if ( dmg[i].indexOf(' casts ') > -1 ) {
                            combatlog.mtaken.hit++;
                            if ( crit ) combatlog.mtaken.crit++;
                            combatlog.mtaken[data[2]] = (combatlog.mtaken[data[2]] ? combatlog.mtaken[data[2]] : 0) + parseInt(data[1]);
                            if ( (shield = dmg[i].match(regexp.shield)) ) {
                                combatlog.mtaken.shit++;
                                if ( crit ) combatlog.mtaken.scrit++;
                                combatlog.mtaken['s'+data[2]] = (combatlog.mtaken['s'+data[2]] ? combatlog.mtaken['s'+data[2]] : 0) + parseInt(shield[1]); }}
                        else {
                            combatlog.ptaken.hit++;
                            if ( crit ) combatlog.ptaken.crit++;
                            combatlog.ptaken[data[2]] = (combatlog.ptaken[data[2]] ? combatlog.ptaken[data[2]] : 0) + parseInt(data[1]);
                            if ( (shield = dmg[i].match(regexp.shield)) ) {
                                combatlog.ptaken.shit++;
                                if ( crit ) combatlog.ptaken.scrit++;
                                combatlog.ptaken['s'+data[2]] = (combatlog.ptaken['s'+data[2]] ? combatlog.ptaken['s'+data[2]] : 0) + parseInt(shield[1]); }}}
                    else {
                        if ( cast ) {
                            if ( dmg[i].indexOf(' explodes ') < 0 ) {
                                combatlog.mdealt.hit++;
                                if ( dmg[i].indexOf(' blasts ') > -1 ) combatlog.mdealt.crit++; }
                            combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]); }
                        else {
                            if ( !regexp.strike.test(dmg[i]) ) {
                                combatlog.pdealt.hit++;
                                if ( regexp.crit.test(dmg[i]) ) combatlog.pdealt.crit++; }
                            combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]); }}}
                else if ( (data = dmg[i].match(regexp.dot)) ) {
                    if ( regexp.pdot.test(dmg[i]) ) combatlog.pdealt.dot = (combatlog.pdealt.dot ? combatlog.pdealt.dot : 0) + parseInt(data[1]);
                    else combatlog.mdealt.dot = (combatlog.mdealt.dot ? combatlog.mdealt.dot : 0) + parseInt(data[1]); }
                else if ( (data = dmg[i].match(regexp.points)) ) {
                    data[2] = data[2].toLowerCase();
                    if ( dmg[i].indexOf('You counter') > -1 ) {
                        combatlog.pdealt.hit++;
                        combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]); }
                    else {
                        combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]); }}}}

to
CODE

    if ( cfg.trackDamage ) {
        var dmg;
        if ( (dmg = turn.match(regexp.damage)) ) {
            var cast = action.indexOf('You cast') > -1, data, shield;
            for ( var i = 0; i < dmg.length; i++ ) {
                if ( (data = dmg[i].match(regexp.type))) {
                    let spike = dmg[i].indexOf("spike shield") > -1;
                    let cnter = dmg[i].indexOf("You counter") > -1;
                    data[2] = data[2].toLowerCase();
                    if ( (dmg[i].indexOf('its you') > -1) || (dmg[i].indexOf("ou partially") > -1) || (dmg[i].indexOf("lances you") > -1) || (dmg[i].indexOf("ou take") > -1) ) {
                        var crit = dmg[i].indexOf(' crits ') > -1;
                        if ( dmg[i].indexOf(' casts ') > -1 ) {
                            combatlog.mtaken.hit++;
                            if ( crit ) combatlog.mtaken.crit++;
                            combatlog.mtaken[data[2]] = (combatlog.mtaken[data[2]] ? combatlog.mtaken[data[2]] : 0) + parseInt(data[1]);
                            if ( (shield = dmg[i].match(regexp.shield)) ) {
                                combatlog.mtaken.shit++;
                                if ( crit ) combatlog.mtaken.scrit++;
                                combatlog.mtaken['s'+data[2]] = (combatlog.mtaken['s'+data[2]] ? combatlog.mtaken['s'+data[2]] : 0) + parseInt(shield[1]); }}
                        else {
                            combatlog.ptaken.hit++;
                            if ( crit ) combatlog.ptaken.crit++;
                            combatlog.ptaken[data[2]] = (combatlog.ptaken[data[2]] ? combatlog.ptaken[data[2]] : 0) + parseInt(data[1]);
                            if ( (shield = dmg[i].match(regexp.shield)) ) {
                                combatlog.ptaken.shit++;
                                if ( crit ) combatlog.ptaken.scrit++;
                                combatlog.ptaken['s'+data[2]] = (combatlog.ptaken['s'+data[2]] ? combatlog.ptaken['s'+data[2]] : 0) + parseInt(shield[1]); }}}
                    else if (spike) {
                        combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]);
                    }
                    else if (cnter) {
                        combatlog.pdealt.hit++;
                        combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]);
                    }
                    else {
                        if ( cast ) {
                            if ( dmg[i].indexOf(' explodes ') < 0 ) {
                                combatlog.mdealt.hit++;
                                if ( dmg[i].indexOf(' blasts ') > -1 ) combatlog.mdealt.crit++; }
                            combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]); }
                        else {
                            if ( !regexp.strike.test(dmg[i]) ) {
                                combatlog.pdealt.hit++;
                                if ( regexp.crit.test(dmg[i]) ) combatlog.pdealt.crit++; }
                            combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]); }}}
                else if ( (data = dmg[i].match(regexp.dot)) ) {
                    if ( regexp.pdot.test(dmg[i]) ) combatlog.pdealt.dot = (combatlog.pdealt.dot ? combatlog.pdealt.dot : 0) + parseInt(data[1]);
                    else combatlog.mdealt.dot = (combatlog.mdealt.dot ? combatlog.mdealt.dot : 0) + parseInt(data[1]); }
                else if ( (data = dmg[i].match(regexp.points)) ) {
                    data[2] = data[2].toLowerCase();
                    if ( dmg[i].indexOf('You counter') > -1 ) {
                        combatlog.pdealt.hit++;
                        combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]); }
                    else {

                        combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]); }}}}

The branch " (data = dmg[i].match(regexp.points)) " should be unreachable but I'd like to keep because I don't want to test it.

This post has been edited by l13763824039: Nov 7 2025, 05:57
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 7 2025, 14:29
Post #914
闯关弟子



Newcomer
*
Group: Catgirl Camarilla
Posts: 47
Joined: 17-July 19
Level 500 (Ponyslayer)


I extracted some code from Monsterbation and Battle Stats and rewrote it to support the new Isekai. Now jpx correctly displays remaining effect durations and logs combat data and gains (Monsterbation's tracking settings can be temporarily disabled). Press “Z” to open Battle Stats.

Other minor features include:
- Encounter timer
- Double-clicking to open the weapon interface
- Filtering Armory-Purchase weapons (click the panel in the bottom-right corner to toggle between enable and disable)

Update20251108:
The default value of cfg.recordBattleLog has been changed from true to false.
It’s used to verify that the Isekai CombatLog is recorded correctly.
However, if you play GrindFest, it may cause the localStorage to exceed its storage limit.
Attached File  jpx.txt ( 157.82k ) Number of downloads: 109


Update20251119:
New Stats: critStack and debuffResist
Fixed an issue where offhand damage was not being calculated.
Attached File  jpx20251119.txt ( 165.36k ) Number of downloads: 76


Attached Image Attached Image

This post has been edited by 闯关弟子: Nov 19 2025, 18:11
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 25 2025, 16:57
Post #915
Ramaki



Regular Poster
*****
Group: Gold Star Club
Posts: 597
Joined: 18-June 15
Level 440 (Dovahkiin)


QUOTE(闯关弟子 @ Nov 7 2025, 13:29) *

...


Greetings, thank you for your contribution! Is there a way to make your script work in Firefox? As, at least in my case, it displays a syntax error there.

Attached Image

This post has been edited by Ramaki: Nov 25 2025, 16:58
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 25 2025, 17:07
Post #916
闯关弟子



Newcomer
*
Group: Catgirl Camarilla
Posts: 47
Joined: 17-July 19
Level 500 (Ponyslayer)


My Firefox version is 146.0b6, and the script runs correctly.
You can try opening Firefox in Private Mode with only jpx installed.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 25 2025, 17:27
Post #917
Ramaki



Regular Poster
*****
Group: Gold Star Club
Posts: 597
Joined: 18-June 15
Level 440 (Dovahkiin)


QUOTE(闯关弟子 @ Nov 25 2025, 16:07) *

My Firefox version is 146.0b6, and the script runs correctly.
You can try opening Firefox in Private Mode with only jpx installed.


Hmm. The issue is clearly on my side then. This is what happens using a private Firefox window. I have installed the script from the URL using Violentmonkey. No changes.
Although, my version is this "Version 115.30.0esr (64-bit)". And it is displayed as "up to date" (last update was on the 12th of November 2025).

Attached Image

This post has been edited by Ramaki: Nov 25 2025, 17:41
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 25 2025, 17:43
Post #918
闯关弟子



Newcomer
*
Group: Catgirl Camarilla
Posts: 47
Joined: 17-July 19
Level 500 (Ponyslayer)


try using TamperMonkey in firefox private mode
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
post Nov 25 2025, 17:51
Post #919
Ramaki



Regular Poster
*****
Group: Gold Star Club
Posts: 597
Joined: 18-June 15
Level 440 (Dovahkiin)


QUOTE(闯关弟子 @ Nov 25 2025, 16:43) *

try using TamperMonkey in firefox private mode


Thank you for your patience!

I have tried that. Disabled Violentmonkey and installed jpx from URL. No changes. Script does not load whatsoever. It displays some errors and highlights quite a few places in the code in red.

Here is one of them.

Attached Image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post


47 Pages V « < 44 45 46 47 >
Reply to this topicStart new topic
4 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
3 Members: Wivers, icelcc, Neeshers

 


Lo-Fi Version Time is now: 7th December 2025 - 18:00