 |
 |
 |
The .85 Hovering Script crowdfunding/discussion, Part 2: the crowdfunding/discussion thread - script finished |
|
Jun 29 2017, 07:49
|
friggo
Group: Gold Star Club
Posts: 2,134
Joined: 9-October 14

|
QUOTE(sickentide @ Jun 28 2017, 20:40)  Loving this so far. Thanks (IMG:[ invalid] style_emoticons/default/smile.gif) Just a question: were these features deemed illegal or just too tricky to implement? QUOTE Stop on HP/MP/SP thresholds, Spark triggering and buffs expiring (buffs from scrolls/draughts included, preferably with an icon
space bar to solve a hovering stop Also: * BUG: Riddlemaster buff expiring causes hover to stop. Any way to ignore the Riddlemaster buff expiring? It's not like we can re-cast it (IMG:[ invalid] style_emoticons/default/rolleyes.gif) * BUG: Channeling gem drop causes hover to stop even with stopOnUsableGem set to false. Shouldn't it stop hover only when you actually use the gem and get the Channeling effect? EDIT: I assume at least the channeling bug is related to the bits of Sapo's script that I still have kicking around. Changing the .png file that's displayed for the gem fixes the issue. As for Riddlemaster, I've just disabled the "stop on buff expriring" feature altogether since without the CC-like hoverable icons, and having to toggle hover, it just slows gameplay down too much. This post has been edited by friggo: Jun 29 2017, 09:22
|
|
|
|
 |
|
Jun 29 2017, 08:29
|
AnonDarkMage7
Group: Gold Star Club
Posts: 925
Joined: 1-June 12

|
QUOTE(sickentide @ Jun 29 2017, 04:41)  would it be good enough to set minMP to a value where you always want to use a potion?
Only problem with minMP is ( at least for my dark mage) it uses mana faster than mp pots can restore (which means hoverplay effectively stops as soon as I hit that value for the second time), which kinda sucks since I have to constantly focus on the mana pot icon to make sure to use it as soon as it shows up or risk having to chug elixirs. Really love the script though, should be able to play close to my pre .85 speed as soon as i get used to spamming the toggle hover. This post has been edited by abc12345678901: Jun 29 2017, 08:32
|
|
|
|
 |
|
Jun 29 2017, 08:46
|
Superlatanium
Group: Gold Star Club
Posts: 7,617
Joined: 27-November 13

|
QUOTE(abc12345678901 @ Jun 29 2017, 06:29)  Only problem with minMP is ( at least for my dark mage) it uses mana faster than mp pots can restore (which means hoverplay effectively stops as soon as I hit that value for the second time), which kinda sucks since I have to constantly focus on the mana pot icon to make sure to use it as soon as it shows up or risk having to chug elixirs. From a profit/gameplay perspective, mages generally shouldn't be at all afraid to use elixirs, especially those high level or with more than incidental Capacitor on gears. See my posts in Ask the Experts on the subject; elixirs are generally more or less as good as potions in terms of net profit/turn.
|
|
|
|
 |
|
Jun 29 2017, 10:48
|
tonyi
Group: Members
Posts: 195
Joined: 5-October 10

|
QUOTE(sickentide @ Jun 29 2017, 01:13)  it's even simpler: it first tries to select Smite as the active spell, then Banish and overrides Smite if it succeeds, and finally the same with Paradise Lost overriding the previous spells if it is available
I like your code, and I think you may get some reward....Can I ask for this 2 lines? var obs = new MutationObserver(Observe); obs.observe(log, {childList: true}); Could you explane why this two line make this code run repeatly? For example, if I used var monster = document.getElementById('mkey_1'); monster.click(); It would stop after 1 time runing in new version hantaiverse....
|
|
|
|
 |
|
Jun 29 2017, 11:05
|
Sapo84
Group: Gold Star Club
Posts: 3,332
Joined: 14-June 09

|
QUOTE(tonyi @ Jun 29 2017, 10:48)  var obs = new MutationObserver(Observe); obs.observe(log, {childList: true});
Could you explane why this two line make this code run repeatly? For example, if I used
They run the function Observe() every time a child (in this case a log entry) is inserted in the log DOM Element. [ developer.mozilla.org] https://developer.mozilla.org/en-US/docs/We...utationObserver
|
|
|
|
 |
|
Jun 29 2017, 13:52
|
EsotericSatire
Group: Catgirl Camarilla
Posts: 12,648
Joined: 31-July 10

|
QUOTE(Scremaz @ Jun 25 2017, 12:13)  [*]Stop on HP/MP/SP thresholds, Spark triggering and buffs expiring (buffs from scrolls/draughts included, preferably with an icon)
Last time we checked a very long time ago, stop on HP/MP/SP was allowed but had to be very careful with Buffs, I think it wasn't allowed to have stop on Buffs due to parsing required for that, also bots tend to focus on rebuffing. Scrolls and items can be spammed when available on item slots, innate arcana covers most of the spell buffs, but checking buff state was too smart. Spark Triggering wasn't allowed (long time ago) but your HP goes below the HP threshold so it stops it for the dumb value. We could check in with the Moderator auditors to see? This post has been edited by EsotericSatire: Jun 29 2017, 13:53
|
|
|
|
 |
|
Jun 29 2017, 14:12
|
Cleavs
Group: Gold Star Club
Posts: 24,313
Joined: 18-January 07

|
QUOTE(EsotericSatire @ Jun 29 2017, 13:52)  Last time we checked a very long time ago, stop on HP/MP/SP was allowed but had to be very careful with Buffs, I think it wasn't allowed to have stop on Buffs due to parsing required for that, also bots tend to focus on rebuffing.
hmm... QUOTE(EsotericSatire @ Jun 29 2017, 13:52)  Scrolls and items can be spammed when available on item slots
well, for those the problem is quite limited since you could even think about starting a timer whenever one of them is casted and then throwing in a new one when the current one is going to expire. so i'd say that's the easy part. though this way it'll be sort of an all-or-nothing thing. QUOTE(EsotericSatire @ Jun 29 2017, 13:52)  innate arcana covers most of the spell buffs
not everyone can afford IA perks. and even for those who can, two of the most useful buffs (Regen and Heartseeker/Arcane Focus) are left outside. QUOTE(EsotericSatire @ Jun 29 2017, 13:52)  but checking buff state was too smart.
Spark Triggering wasn't allowed (long time ago) but your HP goes below the HP threshold so it stops it for the dumb value.
which is what i stated as well a few posts ago. QUOTE(EsotericSatire @ Jun 29 2017, 13:52)  We could check in with the Moderator auditors to see?
well, tbh i'm already doing it. especially since it's quite obvious that my knowledge isn't enough (IMG:[ invalid] style_emoticons/default/laugh.gif) it's for this reason that i suggest people to go on doing something that they know it's safe - to buy me enough time to show up with an answer. but it's not like there are many mods who are fond of coding AND how hentaiverse works (IMG:[ invalid] style_emoticons/default/heh.gif) plus, i'm also waiting for a couple of answers from tenboro. guess i'll have to poke him again and i'll take the chance to add this spark triggering/buff state thing. anything else, while i'm at it?
|
|
|
|
 |
|
Jun 29 2017, 14:49
|
ThunderAlways
Group: Gold Star Club
Posts: 463
Joined: 7-June 13

|
Trying to write a script that auto detects skills and items one has and can bind keys or mouse buttons in a visual interface(or even dynamicly create buttons on screen for shortcuts, but I doubt I can do this), maybe half or less was complete. Anyone had already made same scripts or working on with more progress? If yes, I'll terminate this project and try some others.
|
|
|
|
 |
|
Jun 29 2017, 17:28
|
sickentide
Group: Catgirl Camarilla
Posts: 1,355
Joined: 31-August 10

|
QUOTE(friggo @ Jun 29 2017, 07:49)  Just a question: were these features deemed illegal or just too tricky to implement?
since you can put scrolls an infusions on the quickbar and you already clearly see which one is expiring by it flashing, an extra icon seems unnecessary i think a single button to fix everything would be too much automation QUOTE(friggo @ Jun 29 2017, 07:49)  * BUG: Riddlemaster buff expiring causes hover to stop. Any way to ignore the Riddlemaster buff expiring? It's not like we can re-cast it (IMG:[ invalid] style_emoticons/default/rolleyes.gif) riddlemaster should be ignored by the expiration alert, unless you have Enigma Energizer and there's a separate icon for that. in that case, could you link me to the icon? in situations like this, you can override any stop condition by holding down the ToggleHover key QUOTE(tonyi @ Jun 29 2017, 10:48)  I like your code, and I think you may get some reward....Can I ask for this 2 lines?
var obs = new MutationObserver(Observe); obs.observe(log, {childList: true});
Could you explane why this two line make this code run repeatly? For example, if I used
var monster = document.getElementById('mkey_1'); monster.click();
It would stop after 1 time runing in new version hantaiverse....
it reacts to any change to the battle log, which occurs at every new turn, allowing code to be run without the need to refresh the page
|
|
|
|
 |
|
Jun 29 2017, 17:44
|
Cleavs
Group: Gold Star Club
Posts: 24,313
Joined: 18-January 07

|
QUOTE(sickentide @ Jun 29 2017, 17:28)  i think a single button to fix everything would be too much automation
quite a bit, yep. btw, seems there are a round counter and a turn counter as well. ED/Flee confirmer has been demoted to lower priority. not that clickable riddlemaster is so useful on its own but people wants it, so... probably drops tracker may need to be done in another script though, uh?
|
|
|
Jun 29 2017, 18:02
|
sickentide
Group: Catgirl Camarilla
Posts: 1,355
Joined: 31-August 10

|
QUOTE(Scremaz @ Jun 29 2017, 17:44)  probably drops tracker may need to be done in another script though, uh?
i suppose i can add this sort of thing, but it will take me a while
|
|
|
|
 |
|
Jun 29 2017, 18:15
|
friggo
Group: Gold Star Club
Posts: 2,134
Joined: 9-October 14

|
QUOTE(sickentide @ Jun 29 2017, 18:28)  riddlemaster should be ignored by the expiration alert, unless you have Enigma Energizer and there's a separate icon for that.
Yes, I have Energizer. Never even knew that they have separate icons. I'll try to link it the next time it pops up. QUOTE(sickentide @ Jun 29 2017, 19:02)  i suppose i can add this sort of thing, but it will take me a while
For what it's worth, here's the script in its 0.84 form: CODE // ==UserScript== // @name HV - Track Drop in Battle // @version 0.0.0.1 // @author NerfThis,gianfrix94 // @namespace hentaiverse/trackdropinbattle // @description fork of Track Drops in Battle 0.0.0.4 by NerfThis // @match http://*.hentaiverse.org/* // @run-at document-end // ==/UserScript==
var settings = { reset : 2, // 0:never reset, 1:reset when visit non-battle page, 2:reset when end of final round use_reloader : true, // set to true if you're using a Reloader font_size : 10, // drop list font-size cut_off : 2 // 0 = Peerless , 1 = Legendary, 2 = Magnificent, 3 = Exquisite, 4 = Superior };
if (document.getElementById('togpane_log')) { if (settings.use_reloader) { window.addEventListener('Reloader_reloaded', checkDrop); } addButton(); checkDrop();
function checkDrop() { if (document.getElementsByClassName('btcp').length > 0) { if (localStorage.getItem('hvTrackDrop') == null) { localStorage.setItem('hvTrackDrop', JSON.stringify({})); }
var hvTrackDrop = JSON.parse(localStorage.getItem('hvTrackDrop'));
var log = Array.prototype.slice.call(document.querySelectorAll('#togpane_log > table > tbody > tr'), 0) .map(function (x) { return [x.cells[0].textContent, x.cells[1].textContent, x.cells[2].textContent, x]; });
for (var i = 0; i < log.length; i++) { if (log[0][0] != log[i][0]) break;
var name = null; var count = 0; var color = '#000000'; var span = log[i][3].querySelector('span');
var tokens; if (tokens = log[i][2].match(/ obtained (.+ )?\[(.+)\]$/)) { if (tokens.length == 3) { name = tokens[2]; count = 1; if (tokens[1]) { var digit = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']; var idx = digit.indexOf(tokens[1].trim().toLowerCase()); if (idx > -1) { count = idx + 1; } else if (!isNaN(parseInt(tokens[1]))) { count = parseInt(tokens[1]); } } } } else if ((tokens = log[i][2].match(/ (Bonus!|dropped) \[(\d+x? )?(.+)\]$/)) || (tokens = log[i][2].match(/^You (gain) (\d+) (EXP|Credits)!$/))) { if (tokens.length == 4) { name = tokens[3]; count = tokens[2] ? parseInt(tokens[2]) : 1; if (span) { var match = span.outerHTML.match(/"color:(#.+)"/); color = match[1] ? match[1] : color;
if (color.toUpperCase() == '#FF0000') { if( settings.cut_off == 0 && !/^(Peerless)/.test(name)) name = 'Trash Gear'; if( settings.cut_off == 1 && !/^(Peerless|Legendary)/.test(name)) name = 'Trash Gear'; if( settings.cut_off == 2 && !/^(Peerless|Legendary|Magnificent)/.test(name)) name = 'Trash Gear'; if( settings.cut_off == 3 && !/^(Peerless|Legendary|Magnificent|Exquisite)/.test(name)) name = 'Trash Gear'; if( settings.cut_off == 4 && !/^(Peerless|Legendary|Magnificent|Exquisite|Superior)/.test(name)) name = 'Trash Gear'; } } } }
if (name && count > 0) { if (hvTrackDrop.hasOwnProperty(name)) { hvTrackDrop[name].count += count; } else { hvTrackDrop[name] = { count : count, color : color }; } } }
localStorage.setItem('hvTrackDrop', JSON.stringify(hvTrackDrop));
if (document.getElementById('navbar')) { var img = document.querySelector('[title^="Stamina"]'); if (img && img.click) { img.click(); } if (settings.reset > 1) { localStorage.removeItem('hvTrackDrop'); } } } } } else if (document.getElementById('navbar')) { if (settings.reset == 0) { addButton(); } else { localStorage.removeItem('hvTrackDrop'); } }
function addButton() { var img = document.querySelector('[title^="Stamina"]'); if (img) { img.style.cursor = 'pointer';
img.addEventListener('click', function (e) { if (e.which != 1) return;
if (document.getElementById("messagebox")) { var msg = document.getElementById("messagebox"); msg.parentNode.removeChild(msg); return; }
if (localStorage.getItem('hvTrackDrop') == null) { localStorage.setItem('hvTrackDrop', JSON.stringify({})); }
var hvTrackDrop = JSON.parse(localStorage.getItem('hvTrackDrop'));
var dropArray = []; var crystals = 0; for (var i in hvTrackDrop) { var item = { name : i, count : hvTrackDrop[i].count, color : hvTrackDrop[i].color }; if (item.color == '#BA05B4' && /^Crystal of /.test(item.name)) { crystals += item.count; } dropArray.push(item); }
// Credits: #A89000 Potions: #00B000 Crystals: #BA05B4 Equipment: #FF0000 Food: #489EFF Rare Drops: #0000FF Tokens: #254117 Trophies: #461B7E // Order: EXP, Credits, Equipments, Artifacts, Tokens, Trophies, Crystals function order(x) { var min = -1000; var quality; if(settings.cut_off == 0) quality = ['Peerless', 'Trash']; if(settings.cut_off == 1) quality = ['Peerless', 'Legendary', 'Trash']; if(settings.cut_off == 2) quality = ['Peerless', 'Legendary', 'Magnificent', 'Trash']; if(settings.cut_off == 3) quality = ['Peerless', 'Legendary', 'Magnificent', 'Exquisite', 'Trash']; if(settings.cut_off == 4) quality = ['Peerless', 'Legendary', 'Magnificent', 'Exquisite', 'Superior', 'Trash']; if (x.name == 'EXP') { return min; } else if (x.name == 'Credits') { return min + 1; } else if (x.color == '#FF0000') { return min + 2 + quality.indexOf(x.name.split(' ')[0]); } else if (x.color == '#0000FF') { return min + 3 + quality.length - 1; } else if (x.color == '#254117') { return min + 4 + quality.length - 1; } else if (x.color == '#461B7E') { return min + 5 + quality.length - 1; } else if (x.color == '#BA05B4') { return min + 6 + quality.length - 1; }
return parseInt(x.color.substring(1), 16); }
dropArray.sort(function (a, b) { var x = order(a); var y = order(b); if (x == y) { return a.name.localeCompare(b.name); } return x - y; });
function numberWithCommas(x) { return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); }
var drop = '<div id="messagebox" style="overflow:auto; height:660px; width:450px; font-size:' + settings.font_size + 'pt; position:absolute; top:40px; left:780px">'; if (crystals > 0) { drop += '<span style="color:#BA05B4">' + numberWithCommas(crystals) + 'x Crystals (' + numberWithCommas((crystals / 12000).toFixed(2)) + ' packs)</span><br />' } for (var i = 0; i < dropArray.length; i++) { drop += '<span style="color:' + dropArray[i].color + '">' + numberWithCommas(dropArray[i].count) + 'x ' + dropArray[i].name + '</span><br />' } drop += ' </div>'; var mb = document.getElementById("messagebox"); if (mb == null) { mb = document.createElement("div"); document.body.appendChild(mb); } mb.outerHTML = drop;
if (mb = document.getElementById("messagebox")) { var buttons = mb.insertBefore(document.createElement('div'), mb.firstChild); var reset = buttons.appendChild(document.createElement('a')), close = buttons.appendChild(document.createElement('a')); reset.innerHTML = 'Reset'; close.innerHTML = 'Close'; buttons.style.cssText = 'text-align: right'; reset.style.cssText = close.style.cssText = 'cursor: pointer; text-decoration: underline; margin: 5px;';
function closeReport(e) { if (e.which != 1) return; if (e.target.textContent == 'Reset') { if (!confirm('Are you sure?')) return; localStorage.removeItem('hvTrackDrop'); } e.target.parentNode.parentNode.parentNode.removeChild(e.target.parentNode.parentNode); }
close.addEventListener('click', closeReport, false); reset.addEventListener('click', closeReport, false); } }, false); } }
|
|
|
|
 |
|
Jun 29 2017, 18:17
|
Cleavs
Group: Gold Star Club
Posts: 24,313
Joined: 18-January 07

|
QUOTE(sickentide @ Jun 29 2017, 18:02)  i suppose i can add this sort of thing, but it will take me a while
there was a .84 tracker ready somewhere, you may start from there... also, i may need to know the original scripts you eventually inspired yourself from. meanwhile, let's hope in tenb's feedbacks...
|
|
|
|
 |
|
Jun 29 2017, 18:40
|
sickentide
Group: Catgirl Camarilla
Posts: 1,355
Joined: 31-August 10

|
QUOTE(friggo @ Jun 29 2017, 18:15)  Yes, I have Energizer. Never even knew that they have separate icons. I'll try to link it the next time it pops up. For what it's worth, here's the script in its 0.84 form:
thanks, i'll have a look at it to see if i'm accounting for all the cases, but for my implementation i want to start from scratch for it to fit with my existing code QUOTE(Scremaz @ Jun 29 2017, 18:17)  there was a .84 tracker ready somewhere, you may start from there... also, i may need to know the original scripts you eventually inspired yourself from. meanwhile, let's hope in tenb's feedbacks...
HV Keybind 2.5.0Reloader Shim
|
|
|
|
 |
|
Jun 29 2017, 19:01
|
KitsuneAbby
Group: Catgirl Camarilla
Posts: 7,572
Joined: 12-July 14

|
No, I don't want to roll the mouse wheel nor press a single key to resume after emergency. X( I hover, I get low on HP, I keep my mouse pointer over the monsters, I press Alt+2 (I basically call the "heal" shortcut) or G (the health gem shortcut), and then my attacks resume straight away. All I'm expecting, and what I've given hath for, is a script that allows me to play just like I used to. Is it asking too much?
And scripts requiring to use a custom font... blah. Is there at least some font somewhere that actually looks like the original "font"? I do understand that custom fonts make it easier for scripters, and I'll grant that, but all the fonts I've tried so far just look ugly in HV.
This post has been edited by decondelite: Jun 29 2017, 19:05
|
|
|
|
 |
|
Jun 29 2017, 19:07
|
sickentide
Group: Catgirl Camarilla
Posts: 1,355
Joined: 31-August 10

|
QUOTE(decondelite @ Jun 29 2017, 19:01)  Is it asking too much?
no, it will be in the next version QUOTE(decondelite @ Jun 29 2017, 19:01)  And scripts requiring to use a custom font... blah.
the current version already supports the default font
|
|
|
|
 |
|
Jun 29 2017, 19:13
|
SleepDealer
Group: Gold Star Club
Posts: 3,020
Joined: 6-February 12

|
QUOTE(decondelite @ Jun 29 2017, 22:01)  No, I don't want to roll the mouse wheel nor press a single key to resume after emergency. X( I hover, I get low on HP, I keep my mouse pointer over the monsters, I press Alt+2 (I basically call the "heal" shortcut) or G (the health gem shortcut), and then my attacks resume straight away.
QUOTE(sickentide @ Jun 28 2017, 23:22)  i feel that this would be too much automation
I dont know whether that function is prohibited currently but I will wait anyway (IMG:[ invalid] style_emoticons/default/smile.gif)
|
|
|
|
 |
|
Jun 29 2017, 19:30
|
Cleavs
Group: Gold Star Club
Posts: 24,313
Joined: 18-January 07

|
QUOTE(SleepDealer @ Jun 29 2017, 19:13)  I dont know whether that function is prohibited currently but I will wait anyway (IMG:[ invalid] style_emoticons/default/smile.gif) got answer from tenboro. script doesn't need to be manually re-armed each time. and answers on other things, i'll add to the first post. just the time to sort them out a bit...
|
|
|
Jun 29 2017, 19:49
|
sickentide
Group: Catgirl Camarilla
Posts: 1,355
Joined: 31-August 10

|
QUOTE(Scremaz @ Jun 29 2017, 19:30)  script doesn't need to be manually re-armed each time.
all right, the latest version does away with that
|
|
|
|
 |
|
Jun 29 2017, 20:30
|
simrock87
Group: Members
Posts: 647
Joined: 12-June 11

|
QUOTE(Scremaz @ Jun 29 2017, 17:30)  got answer from tenboro. script doesn't need to be manually re-armed each time. and answers on other things, i'll add to the first post. just the time to sort them out a bit...
Love the last answer (IMG:[ invalid] style_emoticons/default/laugh.gif) Short version (regarding combat): - "action" is any one thing you do to advance a turn
- Parsing only allowed for: Player HP/MP/SP
- "Blind clicking" is alright, you just can't check if it did the right thing (and auto execution is obv still bad, coz you know, automation)
- Stopping and then resuming is generally allowed, if you can acquire the criteria "legally"
- If you want more, do it without reading the page.
Hope i got this right, at least that was my take-away. Thanks for asking @Scremaz. PS: CC internals are quite dead with this (can't check if spells are available and didn't check what happens when you send spells on cooldown, but sure it's not good) and no buff checking through any information gained from the page, so for now no "pause on expiration" i guess. PPS: forgot to ask the question when tenboro was reading here, but guess we are allowed to hook into on-site scripts? The rules don't forbid it and some (don't know anymore which one, i think it was HoverPlay predecessor?) hover script did the hover by overriding the on-site hover function.
|
|
|
|
 |
|
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:
|
 |
 |
 |
|