Pushing Scripts to GitLab

This commit is contained in:
Nis Börge Wechselberg 2014-01-05 19:14:05 +01:00
commit 047edb0035
9 changed files with 954 additions and 0 deletions

302
VDex_Project_Ajax_Cature.user.js Executable file
View file

@ -0,0 +1,302 @@
// ==UserScript==
// @name VDex Project Ajax capture
// @namespace Http://www.enbewe.de/vdex
// @description Tries to capture Ajax events
// @include http://vdexproject.net/dungeon.php?mode=navigate*
// @version 0.1
// ==/UserScript==
// Control flags
var maincontrol = false;
var travel = false;
var take_skills = false;
var autobattle = false;
// Status variables
var mode = 'unknown';
var room = '';
var lastDirection = 'east';
// Create control window
// TODO: create option to minimize
var controlWindow = document.createElement('div');
controlWindow.setAttribute('style','width:180px; height:180px; position: fixed; top: 10px; left: 10px; background: #232323; border: 3px solid grey; padding: 10px;');
document.getElementById('login').parentNode.appendChild(controlWindow);
refreshControlWindow();
function handleSend(send) {
var rege;
rege = /mode=changeroom&direction=(\w+)/;
if (rege.test(send)) {
rege.exec(send);
mode = 'roomchange';
// alert('Sending roomchange to '+RegExp.$1);
return 1;
}
rege = /mode=take&what=(\w+)/;
if (rege.test(send)) {
// alert('Taking skill disk');
return 1;
}
rege = /mode=enterbattle/;
if (rege.test(send)) {
mode = 'battle';
// alert('Entering battle');
return 1;
}
rege = /mode=battle/;
if (rege.test(send)) {
mode = 'battle';
// alert('Fighting');
return 1;
}
mode = 'unknown'
return -1;
}
function handleResponse(response) {
if (maincontrol) {
var rege;
room = document.getElementById("thisroom");
var roomname = document.evaluate('//div[@id="thisroom"]/b[1]',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.innerHTML;
// alert(roomname);
if (take_skills) {
rege = /There\sis\sa\sSKILL\sDISC/;
if (rege.test(room.innerHTML)) {
unsafeWindow.take('skill');
return 1;
}
}
if (autobattle) {
if (mode == 'battle') {
var btlog = document.evaluate('//td[@class="btlog"]',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.innerHTML;
rege = /defeated/
if (rege.test(btlog.toLowerCase())) {
mode = 'battledone';
unsafeWindow.endbattle();
setTimeout(function() {
handleResponse(response); }, 500+(Math.floor(Math.random()*800)));
return 1;
} else {
mode = 'battle';
unsafeWindow.battle('ATTACK');
return 1;
}
alert(btlog);
} else {
var playdata = document.getElementById('yourdata').innerHTML;
var playskills = document.getElementById('yourskills').innerHTML;
rege = /HP\s(\d+)\/(\d+)/
rege.exec(playdata);
var needHeal = (RegExp.$1 <= (RegExp.$2 / 3))
rege = /prayer/;
var hasPrayer = rege.test(playskills.toLowerCase());
rege = /rest/;
var hasRest = rege.test(playskills.toLowerCase());
if (needHeal && hasPrayer) {
unsafeWindow.rest(true);
} else if (needHeal && hasRest) {
unsafeWindow.rest(false);
} else {
rege = /There\sare\sENEMIES\sroaming\sthe\sroom/;
if (rege.test(room.innerHTML)) {
var enemy = document.evaluate('//span[starts-with(@id,"enemyicon")]',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
var enemyid = enemy.getAttribute('id');
rege = /enemyicon\d+(\w)/;
rege.exec(enemyid);
mode = 'battle';
unsafeWindow.enterbattle(RegExp.$1);
return 1;
}
}
}
}
if (travel && roomname != 'FINAL ROOM') {
if (document.getElementById('north') != null) {
unsafeWindow.go('north');
return 1;
}
if (document.getElementById(lastDirection) != null) {
unsafeWindow.go(lastDirection);
return 1;
}
if (lastDirection == 'east') {
lastDirection = 'west';
} else {
lastDirection = 'east';
}
if (document.getElementById(lastDirection) != null) {
unsafeWindow.go(lastDirection);
return 1;
}
}
} else {
return -1;
}
return 1;
}
//Setting up ajax capture
var OldXHR = unsafeWindow.XMLHttpRequest;
var NewXHR = function() {
var self = this;
var actualXHR = new OldXHR();
this.onopen = function(a,b,c,d,e) {
// alert('Open:\n'+a+'\n'+b+'\n'+c+'\n'+d+'\n'+e);
}
this.onsend = function(a) {
if (handleSend(a) != 1) {
// alert('Send:\n'+a);
}
}
this.ononreadystatechange = function() {
if (self.readyState == 4) {
setTimeout(function() {
if (handleResponse(self.responseText) != 1) {
// alert('onreadystatechange:\n'+self.responseText+'\n'+self.statusText+'\n'+self.responseXML);
}
}, 500+(Math.floor(Math.random()*800)));
}
}
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) {}
// onreadystatechange callback
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;
// Control window contents
function refreshControlWindow() {
controlWindow.innerHTML = '<div style="text-align: center;"><b>Dungeon Crawler</b><br /><br />';
// Loot skills
var controlWindow_skills = document.createElement('div');
controlWindow_skills.setAttribute('id','controlWindow_skills');
controlWindow_skills.setAttribute('style','text-align: center;');
controlWindow_skills.innerHTML = '<a>Auto take skills: ';
if (take_skills) {
controlWindow_skills.innerHTML += '<span style="color: #008000;">active</span>';
} else {
controlWindow_skills.innerHTML += '<span style="color: #BF0000;">inactive</span>';
}
controlWindow_skills.innerHTML += '</a>';
controlWindow_skills.addEventListener("click", function() { take_skills = !take_skills; refreshControlWindow();}, true);
controlWindow.appendChild(controlWindow_skills);
// Fight
var controlWindow_battle = document.createElement('div');
controlWindow_battle.setAttribute('id','controlWindow_battle');
controlWindow_battle.setAttribute('style','text-align: center;');
controlWindow_battle.innerHTML = '<a>Auto battle: ';
if (autobattle) {
controlWindow_battle.innerHTML += '<span style="color: #008000;">active</span>';
} else {
controlWindow_battle.innerHTML += '<span style="color: #BF0000;">inactive</span>';
}
controlWindow_battle.innerHTML += '</a>';
controlWindow_battle.addEventListener("click", function() { autobattle = !autobattle; refreshControlWindow();}, true);
controlWindow.appendChild(controlWindow_battle);
// Travel
var controlWindow_travel = document.createElement('div');
controlWindow_travel.setAttribute('id','controlWindow_travel');
controlWindow_travel.setAttribute('style','text-align: center;');
controlWindow_travel.innerHTML = '<a>Auto travel: ';
if (travel) {
controlWindow_travel.innerHTML += '<span style="color: #008000;">active</span>';
} else {
controlWindow_travel.innerHTML += '<span style="color: #BF0000;">inactive</span>';
}
controlWindow_travel.innerHTML += '</a>';
controlWindow_travel.addEventListener("click", function() { travel = !travel; refreshControlWindow();}, true);
controlWindow.appendChild(controlWindow_travel);
// Activate and deactivate
var controlWindow_main = document.createElement('div');
controlWindow_main.setAttribute('id','controlWindow_main');
controlWindow_main.setAttribute('style','text-align: center;');
controlWindow_main.innerHTML = '<br /><br /><a>Main control:<br />';
if (maincontrol) {
controlWindow_main.innerHTML += '<span style="color: #008000;">active</span>';
} else {
controlWindow_main.innerHTML += '<span style="color: #BF0000;">inactive</span>';
}
controlWindow_main.innerHTML += '</a>';
controlWindow_main.addEventListener("click", function() { maincontrol = !maincontrol; refreshControlWindow();}, true);
controlWindow.appendChild(controlWindow_main);
}

View file

@ -0,0 +1,82 @@
// ==UserScript==
// @name VDex Project Battle Tool
// @namespace http://www.enbewe.de/vdex/
// @description Removes Confirmation Dialog
// @include http://vdexproject.net/battle.php?*
// @include http://vdexproject.net/talk.php?npc=registeel
// @version 0.1
// ==/UserScript==
unsafeWindow.chspoke = function(what,pid) {
var params = "mode=registeel&pid="+pid;
var target = "ajax9.php";
var xmlhttp = unsafeWindow.createXmlhttp();
xmlhttp.onreadystatechange = function () {
if ( xmlhttp.readyState == 1 ) {
unsafeWindow.npctalktext.innerHTML = "Please stand by.<br /><img src=\"http://zangoose.vdexproject.net/loading.gif\" alt=\"Loading...\" />";
unsafeWindow.playertalktext.className = "hidden";
}
if ( xmlhttp.readyState == 4 ) {
unsafeWindow.hiddendiv.innerHTML = xmlhttp.responseText;
var anpc = document.getElementById("ajaxnpc");
if ( anpc ) {
unsafeWindow.npctalktext.innerHTML = anpc.innerHTML;
unsafeWindow.playertalktext.innerHTML = playertalkback.innerHTML;
}
else {
alert (xmlhttp.responseText);
unsafeWindow.npctalktext.innerHTML = "That seems to have been unsuccessful.";
unsafeWindow.playertalktext.innerHTML = playertalkback.innerHTML;
}
playertalktext.className = "";
}
}
unsafeWindow.sendRequest(xmlhttp, target, params);
}
unsafeWindow.usemove = function(bid, move, mname) {
if ( unsafeWindow.midajax ) { return; }
var loaddiv = document.getElementById("loading");
var maindiv = document.getElementById("stuff");
var blog = document.getElementById("battlelog");
var scr = blog.scrollTop;
var target = "bajax.php";
var params = "mode=move&bid="+bid+"&move="+move;
unsafeWindow.midajax = true;
var xmlhttp = unsafeWindow.createXmlhttp();
xmlhttp.onreadystatechange = function () {
if ( xmlhttp.readyState ==1 ) {
loaddiv.innerHTML = '<img src="http://zangoose.vdexproject.net/loading.gif" alt="Loading..." />';
}
if ( xmlhttp.readyState == 4 ) {
loaddiv.innerHTML = "";
maindiv.innerHTML = xmlhttp.responseText;
var blog = document.getElementById("battlelog");
blog.scrollTop = scr+1000;
unsafeWindow.midajax = false;
}
}
unsafeWindow.sendRequest(xmlhttp, target, params);
}
unsafeWindow.cancel = function(bid) {
if ( unsafeWindow.midajax ) { return; }
var loaddiv = document.getElementById("loading");
var maindiv = document.getElementById("stuff");
var target = "bajax.php";
var params = "mode=end&bid="+bid;
unsafeWindow.midajax = true;
var xmlhttp = unsafeWindow.createXmlhttp();
xmlhttp.onreadystatechange = function () {
if ( xmlhttp.readyState ==1 ) {
loaddiv.innerHTML = '<img src="http://zangoose.vdexproject.net/loading.gif" alt="Loading..." />';
maindiv.innerHTML = "";
}
if ( xmlhttp.readyState == 4 ) {
loaddiv.innerHTML = "";
maindiv.innerHTML = xmlhttp.responseText;
unsafeWindow.midajax = false;
}
}
unsafeWindow.sendRequest(xmlhttp, target, params);
}

View file

@ -0,0 +1,43 @@
// ==UserScript==
// @name VDex Project Berry Timer
// @namespace Http://www.enbewe.de/vdex
// @description Shows timers for Berries
// @include http://vdexproject.net/berries.php*
// @version 1
// ==/UserScript==
var oldFunction = unsafeWindow.sendRequest;
unsafeWindow.sendRequest = function(xmlhttp, target, params) {
// alert('Captured\n'+xmlhttp+' '+target+' '+params);
var regex = /berryplant&berry=\w+&slot=(\w+)/
if (regex.test(params)){
regex.exec(params);
var slot = RegExp.$1;
// alert('Planting'+slot);
setTimeout(function() {
var dat = new Date().getTime();
GM_setValue(slot, dat+'');
}, 0);
}
oldFunction(xmlhttp,target,params);
}
var anchor = document.getElementById('berrymsg');
var berryTimerDiv = document.createElement('div');
berryTimerDiv.setAttribute('id','berryTimer');
berryTimerDiv.setAttribute('style','text-align:center;');
anchor.parentNode.insertBefore(berryTimerDiv,anchor);
for (var i = 0; i < 4; i++) {
var timest = GM_getValue('slot'+i,'');
if (timest != '') {
timest = parseInt(timest);
var time = ((new Date().getTime() - timest)/1000)/60;
var text = Math.floor(time/60)+' Stunden und '+Math.floor(time%60)+' Minuten';
berryTimerDiv.innerHTML += 'Slot '+(i+1)+': '+text+'<br>';
} else {
berryTimerDiv.innerHTML += 'Slot '+(i+1)+': Nicht definiert<br>';
}
}

View file

@ -0,0 +1,116 @@
// ==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;

View file

@ -0,0 +1,45 @@
// ==UserScript==
// @name VDex Project Mark all pokemon as private
// @namespace http://www.enbewe.de/vdex/
// @include http://vdexproject.net/pc.php?&mode=sort
// @version 1
// ==/UserScript==
// Add private link
snapResults = document.evaluate('//table[@class="content"]//table[@class="pcnav"]//div[@class="pc"]/small', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = snapResults.snapshotLength - 1; i >= 0; i--) {
var elm = snapResults.snapshotItem(i);
var boxid = elm.parentNode.getAttribute('id');
var rege = /pc(\d+)/;
rege.exec(boxid);
boxid = RegExp.$1;
elm.innerHTML += '<br />[ <span id="bswitch'+boxid+'" class="hlclickable">Mark Public</span> ]';
document.getElementById('bswitch'+boxid).addEventListener("click",markPublic, true);
}
function markPublic() {
var active = document.evaluate('//table[@class="pcnav"]//div[@class="pc"][not(@style="display: none;")]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
var boxid = active.getAttribute('id');
var rege = /pc(\d+)/;
rege.exec(boxid);
boxid = RegExp.$1;
for (var i = 1; i<=42; i++) {
var text = document.evaluate('//td[@id="box'+boxid+'slot'+i+'"]/img', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.getAttribute('onmouseover');
if (text) {
rege = /(\d+)/;
rege.exec(text);
text = "mode=public&pid="+RegExp.$1;
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "kadabra/files/ajax/private.php", false);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", text.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send (text);
}
}
}

View file

@ -0,0 +1,213 @@
// ==UserScript==
// @name VDex Project Pokemon Tracker
// @namespace http://www.enbewe.de/vdex/
// @description Lets you track pokemon
// @include http://vdexproject.net/poke.php*
// @include http://vdexproject.net/pokegear.php*
// @copyright eNBeWe
// @version 0.3
// ==/UserScript==
(function (){
var page = window.location.pathname
if (page == "/pokegear.php" || page == "/pokegear.php#info") {
// Fetch anchor
var anchor = document.evaluate('//table[@class="content"]/tbody',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
// Create and place row for tracking plugin
var elmContentRow = document.createElement('tr');
anchor.appendChild(elmContentRow);
// Create and place cell with heading
var elmContentCell = document.createElement('td');
elmContentRow.appendChild(elmContentCell);
elmContentCell.setAttribute("id","trackingHeader");
elmContentCell.setAttribute("style","vertical-align: top;");
elmContentCell.setAttribute("colspan","2");
elmContentCell.innerHTML = '<b>Tracked Pokemon:</b><br>';
// Place link to load the tracked pokemon
var loadTrackedLink = document.createElement('small');
loadTrackedLink.setAttribute("id","trackerLinkSmall");
loadTrackedLink.innerHTML = '[ <span class="hlclickable">Load tracked Pokemon</span> ]';
loadTrackedLink.addEventListener("click", function(){loadTracked();}, true);
elmContentCell.appendChild(loadTrackedLink);
} else if (page == "/poke.php") {
// Get PokeID of active pokemon
var pokeID = getUrlParam('id');
// Fetch anchor
var anchor = document.getElementById('infopoke');
// Create and place link to toggle tracking
var elmTrackerLink = document.createElement('small');
elmTrackerLink.innerHTML = '[ <span class="hlclickable">Toggle pokemon tracking</span> ]';
elmTrackerLink.addEventListener("click", function(){toggleTracking(pokeID);}, true);
anchor.parentNode.insertBefore(elmTrackerLink, anchor.nextSibling);
}
// Load trcked pokemon
function loadTracked() {
// Fetch anchor
var trackedLink = document.getElementById('trackerLinkSmall');
var anchor = trackedLink.parentNode;
// Remove Link
anchor.removeChild(trackedLink);
// Get list of tracked pokemon
var pokelist = GM_getValue('track','');
if (pokelist == '' || pokelist == ' '){
// List is empty -> display message
var trackerMsg = document.createElement('small');
trackerMsg.innerHTML = 'No pokemon are being tracked';
anchor.appendChild(trackerMsg);
} else {
// Convert List to Array
var Pokemon = pokelist.split(' ');
// Prepare table
var trackedTable = document.createElement('table');
trackedTable.setAttribute('id','trackingTable');
anchor.appendChild(trackedTable);
// Load data for tracked pokemon
for (var i = 0; i < Pokemon.length; i++) {
GM_xmlhttpRequest({
method: "GET",
url: "http://vdexproject.net/poke.php?&id="+Pokemon[i],
onload: function(response){
addPokemonToView(response);
}
});
}
}
}
// Helper function to add a loaded Pokemon to the view
function addPokemonToView(response) {
// Fetch anchor
var anchor = document.getElementById('trackingTable');
var textToInsert;
var activeRow;
// Fetch pokemon id
var regex = /id=(\d*)/;
regex.exec(response.finalUrl);
var pokeid = RegExp.$1;
if (response.responseText.search(/does\snot\shave\san\sowner\scurrently/) == -1) {
// Pokemon has owner
// Parse response
var parser = new DOMParser();
var data = parser.parseFromString(response.responseText, "text/html");
// Store data for cell entry
var celldata = data.evaluate('//table[@id="infopoke"]/tbody/tr[1]',data, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
textToInsert = '<table><tr>'+celldata.innerHTML+'</tr></table><div style="text-align: center;"><small>( <a href="http://vdexproject.net/poke.php?&id='+pokeid+'">more info</a> )</small></div>';
} else {
textToInsert = '<div style="text-align: center;">Pokemon has currently no owner!</div>';
}
// Get number of existing cells
var existingCellsCount = document.evaluate('//table[@id="trackingTable"]/tr/td', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength;
// Determine side where to add the new cell
if (existingCellsCount % 2 == 1) {
activeRow = document.evaluate('//table[@id="trackingTable"]/tr[last()]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
} else {
activeRow = document.createElement('tr');
anchor.appendChild(activeRow);
}
// Create new cell
var elmNewCell = document.createElement('td');
elmNewCell.setAttribute('style','padding: 20px; border: 2px solid grey;');
elmNewCell.innerHTML = textToInsert;
// Add removal link
var elmRemovalLink = document.createElement('small');
elmRemovalLink.innerHTML = '[ <span class="hlclickable">Toggle pokemon tracking</span> ]';
elmRemovalLink.addEventListener("click", function(){toggleTracking(pokeid);}, true);
var elmRemovalDiv = document.createElement('div');
elmRemovalDiv.setAttribute('style','text-align: center;');
elmRemovalDiv.appendChild(elmRemovalLink);
elmNewCell.appendChild(elmRemovalDiv);
activeRow.appendChild(elmNewCell);
}
// Helper function to toggle tracking of pokemon
function toggleTracking(pokemonID) {
// Get list of tracked pokemon
var getter = GM_getValue('track','');
// If the list is empty set active pokemon as tracked
if (getter == '' || getter == ' ') {
GM_setValue('track', pokemonID);
alert('Tracking this pokemon');
return
}
// Parse list
var Pokemon = getter.split(' ');
// Check if pokemon is already tracked
if (contains(Pokemon, pokemonID)) {
// Remove pokemon from array
var Pokemon_neu = new Array();
for (var i = 0; i < Pokemon.length; i++) {
if (Pokemon[i] == pokemonID) Pokemon[i] = '';
}
// Strip double spaces
var trackString = Pokemon.join(' ');
trackString = trackString.replace(/\s\s/g,' ');
trackString = trackString.replace(/^\s/,'');
trackString = trackString.replace(/\s$/,'');
// Save new list
GM_setValue('track', trackString);
alert('Removed pokemon from tracking');
} else {
// Add pokemon to list
Pokemon.push(pokemonID);
var trackString = Pokemon.join(' ');
trackString = trackString.replace(/\s\s/g,' ');
trackString = trackString.replace(/^\s/,'');
trackString = trackString.replace(/\s$/,'');
// Save new list
GM_setValue('track', trackString);
alert('Tracking this pokemon');
}
}
// Helper function to check if an array contains a given element
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
}
// Helper function to parse url parameters
function getUrlParam(name) {
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.href);
if ( results == null ) {
return "";
} else {
return results[1];
}
}
})();

View file

@ -0,0 +1,56 @@
// ==UserScript==
// @name VDex Project Refresh Counter
// @namespace http://www.enbewe.de/vdex
// @include http://vdexproject.net/map.php*
// @version 0.1
// ==/UserScript==
var cnt = GM_getValue('refreshCnt',0);
var displayDiv = document.createElement('div');
displayDiv.setAttribute('id','displayDiv');
displayDiv.setAttribute('style','width:140px; height:50px; position: fixed; bottom: 10px; right: 10px; background: #232323; border: 3px solid grey; padding: 10px; text-align:center;');
document.getElementById('login').parentNode.appendChild(displayDiv);
refreshDisplay();
//Setting up refresh capture
var oldRefresh = unsafeWindow.refresh;
var newRefresh = function() {
cnt++;
setTimeout(function() {GM_setValue('refreshCnt',cnt);}, 1);
refreshDisplay();
oldRefresh();
}
unsafeWindow.refresh = newRefresh;
var oldFishRefresh = unsafeWindow.fishrefresh;
var newFishRefresh = function(item) {
cnt++;
setTimeout(function() {GM_setValue('refreshCnt',cnt);}, 1);
refreshDisplay();
oldFishRefresh(item);
}
unsafeWindow.fishrefresh = newFishRefresh;
function refreshDisplay() {
displayDiv.innerHTML = '<b>Refresh Counter:</b><br>';
displayDiv.innerHTML += cnt;
displayDiv.innerHTML += '<br>';
var resetSpan = document.createElement('a');
resetSpan.setAttribute('class','hlclickable');
resetSpan.innerHTML = '(Reset Counter)';
displayDiv.appendChild(resetSpan);
resetSpan.addEventListener("click", resetCounter, true);
}
function resetCounter() {
cnt = 0;
setTimeout(function() {GM_setValue('refreshCnt',cnt);}, 1);
refreshDisplay();
}

View file

@ -0,0 +1,23 @@
// ==UserScript==
// @name VDex Project Search for Pokemon
// @namespace http://www.enbewe.de/vdex
// @description Lets you search a Pokemon from its Pokedex page
// @include http://vdexproject.net/pokedex.php?n=*
// @version 0.3
// ==/UserScript==
var form = document.evaluate('//form[@action="mapdex.php"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
var btn = document.evaluate('//form[@action="mapdex.php"]/input[@type="submit"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (form) {
form.removeChild(btn);
var submitLink = document.createElement('a');
submitLink.setAttribute('class','hlclickable');
submitLink.innerHTML = '<img src="http://zangoose.vdexproject.net/dex.png" alt="Search this Pokemon in Mapdex">';
submitLink.addEventListener("click",function(){form.submit();}, true);
form.appendChild(submitLink);
var spriteBtn = document.evaluate('//a/input[@class="btn"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.parentNode;
spriteBtn.innerHTML = '<img src="http://zangoose.vdexproject.net/gallery.png" alt="View Sprite Gallery">'
}

View file

@ -0,0 +1,74 @@
// ==UserScript==
// @name VDex Project Timezone Changer
// @namespace Http://www.enbewe.de/vdex
// @description Lets you change your timezone from the map
// @include http://vdexproject.net/map.php*
// @version 0.3
// ==/UserScript==
var anchor = document.evaluate('//div[@id="footer"]/span',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
var timezoneDiv = document.createElement('div');
timezoneDiv.setAttribute('id','timezoneDiv');
timezoneDiv.innerHTML = 'Zeit: ';
anchor.parentNode.insertBefore(timezoneDiv,anchor);
var timezoneLinkm1 = document.createElement('a');
timezoneLinkm1.setAttribute('class','clickable');
timezoneLinkm1.innerHTML = '(-1)';
timezoneLinkm1.addEventListener("click",function(){changeTimezone(-1)}, true);
timezoneDiv.appendChild(timezoneLinkm1);
var timezoneLink1 = document.createElement('a');
timezoneLink1.setAttribute('class','clickable');
timezoneLink1.innerHTML = '(+1)';
timezoneLink1.addEventListener("click",function(){changeTimezone(1)}, true);
timezoneDiv.appendChild(timezoneLink1);
function changeTimezone(amount) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","/forum/ucp.php?i=165",false);
xmlhttp.send();
var parser = new DOMParser();
var data = parser.parseFromString(xmlhttp.responseText, "text/html");
var params = '';
var snapResults = data.evaluate("//form//input", data, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = snapResults.snapshotLength - 1; i >= 0; i--) {
var elm = snapResults.snapshotItem(i);
if (elm.getAttribute('type') != 'reset' && (elm.getAttribute('type') != 'radio' || elm.getAttribute('checked') == 'checked')) {
params += elm.getAttribute('name')+'='+elm.getAttribute('value')+'&';
}
}
var snapResult = data.evaluate('//form//select[@id="tz"]/option[@selected="selected"]', data, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
var timezone = parseInt(snapResult.getAttribute('value'));
params += 'tz='+(timezone+amount);
var url = "/forum/ucp.php?i=prefs&mode=personal";
var http = new XMLHttpRequest();
http.open("POST", url, false);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.send(params);
if (http.responseText.search(/preferences\shave\sbeen\supdated/)) {
window.location.reload();
} else {
alert('Fail:\n'+http.responseText);
}
}