Greasemonkey/VDex_Project_Dungeon_Enemy_Indicator.user.js

117 lines
4.4 KiB
JavaScript
Raw Permalink Normal View History

2014-01-05 19:14:05 +01:00
// ==UserScript==
// @name VDex Project Dungeon Enemy Indicator
// @namespace http://www.enbewe.de/vdex
// @description Indicates whether an enemy is killable or not
// @include http://vdexproject.net/dungeon.php?mode=navigate*
// @version 0.1
// ==/UserScript==
function handleResponse(response) {
var rege;
var room = document.getElementById("thisroom");
// Prepare user stats
var playdata = document.getElementById('yourdata').innerHTML;
rege = /HP.(\d+)/;
rege.exec(playdata);
var ownHP = parseInt(RegExp.$1);
rege = /ATTACK:.(\d+).\(.(\d+)\)/;
rege.exec(playdata);
var ownAtt = parseInt(RegExp.$1)+parseInt(RegExp.$2);
rege = /DEFENSE:\s(\d+)\s\(.(\d+)/;
rege.exec(playdata);
var ownDef = parseInt(RegExp.$1)+parseInt(RegExp.$2);
// Test for enemies
rege = /There\sare\sENEMIES\sroaming\sthe\sroom/;
if (rege.test(room.innerHTML)) {
var snapResults = document.evaluate('//span[starts-with(@id,"enemyinfo")]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = snapResults.snapshotLength - 1; i >= 0; i--) {
var elm = snapResults.snapshotItem(i);
rege = /HP:.(\d+);.ATTACK:.(\d+);.DEFENSE:.(\d+)/;
rege.exec(elm.innerHTML);
var enemyHP = parseInt(RegExp.$1);
var enemyAtt = parseInt(RegExp.$2);
var enemyDef = parseInt(RegExp.$3);
var ownDmg = ownAtt - enemyDef;
if (ownDmg < 1) { ownDmg = 1; }
var enemyDmg = enemyAtt - ownDef;
if (enemyDmg < 1) { enemyDmg = 1; }
if (ownDmg >= enemyHP) {
elm.innerHTML += '<b>One Hit Kill!</b><br>';
} else if (enemyHP/ownDmg <= ownHP/enemyDmg) {
elm.innerHTML += '<b>You will win!</b><br>';
} else {
elm.innerHTML += '<b>You will fail or need to heal!</b><br>';
}
}
}
}
//Setting up ajax capture
var OldXHR = unsafeWindow.XMLHttpRequest;
var NewXHR = function() {
var self = this;
var actualXHR = new OldXHR();
this.ononreadystatechange = function() {
if (self.readyState == 4) {
setTimeout(function() {
handleResponse(self.responseText)
},1);
}
}
this.requestHeaders = "";
this.requestBody = "";
// emulate methods from regular XMLHttpRequest object
this.open = function(a, b, c, d, e) {
self.openMethod = a.toUpperCase();
self.openURL = b;
if (self.onopen != null && typeof(self.onopen) == "function") { self.onopen(a,b,c,d,e); }
return actualXHR.open(a,b,c,d,e);
}
this.send = function(a) {
if (self.onsend != null && typeof(this.onsend) == "function") { self.onsend(a); }
self.requestBody += a;
return actualXHR.send(a);
}
this.setRequestHeader = function(a, b) {
if (self.onsetrequestheader != null && typeof(self.onsetrequestheader) == "function") { self.onsetrequestheader(a, b); }
self.requestHeaders += a + ":" + b + "\r\n";
return actualXHR.setRequestHeader(a, b);
}
this.getRequestHeader = function() { return actualXHR.getRequestHeader(); }
this.getResponseHeader = function(a) { return actualXHR.getResponseHeader(a); }
this.getAllResponseHeaders = function() { return actualXHR.getAllResponseHeaders(); }
this.abort = function() { return actualXHR.abort(); }
this.addEventListener = function(a, b, c) { alert("not implemented yet"); }
this.dispatchEvent = function(e) { alert("not implemented yet"); }
this.openRequest = function(a, b, c, d, e) { alert("not implemented yet"); }
this.overrideMimeType = function(e) { alert("not implemented yet"); }
this.removeEventListener = function(a, b, c) { alert("not implemented yet"); }
// emulate callbacks from regular XMLHttpRequest object
actualXHR.onreadystatechange = function() {
// copy properties back from the actual XHR to the wrapper
self.readyState = actualXHR.readyState;
try { self.status = actualXHR.status; } catch (e) {}
try { self.responseText = actualXHR.responseText; } catch (e) {}
try { self.statusText = actualXHR.statusText; } catch (e) {}
try { self.responseXML = actualXHR.responseXML; } catch (e) {}
try { if (self.ononreadystatechange != null && typeof(self.ononreadystatechange) == "function") { self.ononreadystatechange(); } } catch (e) {}
if (self.onreadystatechange != null && typeof(self.onreadystatechange) == "function") { return self.onreadystatechange(); }
}
actualXHR.onerror = function(e) { if (self.onerror != null) { return self.onerror(e); } }
actualXHR.onload = function(e) { if (self.onload != null) { return self.onload(e); } }
actualXHR.onprogress = function(e) { if (self.onprogress != null) { return self.onprogress(e); } }
}
unsafeWindow.XMLHttpRequest = NewXHR;