116 lines
4.4 KiB
JavaScript
Executable file
116 lines
4.4 KiB
JavaScript
Executable file
// ==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;
|