// ==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 += 'One Hit Kill!
'; } else if (enemyHP/ownDmg <= ownHP/enemyDmg) { elm.innerHTML += 'You will win!
'; } else { elm.innerHTML += 'You will fail or need to heal!
'; } } } } //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;