// ==UserScript== // @name VillageRenamer // @namespace @DaHaiz // @description (v 1.2.5) Setzt alle umbenennen-Inputs auf sichtbar und gibt die Benennung nach dem unter Einstellungen->Einstellungen bestimmten Muster vor. // @include
http://de*.die-staemme.de/game.php?*village=*&screen=overview_villages* // @include
http://de*.die-staemme.de/game.php?*village=*&screen=settings&mode=settings* // ==/UserScript== // Modifikation oder Weiterverbreitung ausserhalb des ############ // Die Staemme-Forums (
http://forum.die-staemme.de/) beduerfen der // Einwilligung des Skriptautors (DaHaiz im DS-Forum) ############ eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29
c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('3(!e.p){e.p={}}(5(){5 f(n){7 n<10?\'0\'+n:n}3(6 1a.z.q!==\'5\'){1a.z.q=5(l){7 1b(e.19())?e.1D()+\'-\'+f(e.1T()+1)+\'-\'+f(e.1V())+\'T\'+f(e.1G())+\':\'+f(e.1I())+\':\'+f(e.1Q())+\'Z\':B};X.z.q=1M.z.q=1E.z.q=5(l){7 e.19()}}y L=/[\\1W\\15\\1q-\\1l\\1m\\1n\\1j\\1s-\\1t\\1r-\\1k\\1g-\\1h\\13\\14-\\18]/g,M=/[\\\\\\"\\1C-\\1A\\1x-\\1z\\15\\1q-\\1l\\1m\\1n\\1j\\1s-\\1t\\1r-\\1k\\1g-\\1h\\13\\14-\\18]/g,8,H,1e={\'\\b\':\'\\\\b\',\'\\t\':\'\\\\t\',\'\\n\':\'\\\\n\',\'\\f\':\'\\\\f\',\'\\r\':\'\\\\r\',\'"\':\'\\\\"\',\'\\\\\':\'\\\\\\\\\'},m;5 N(o){M.1i=0;7 M.11(o)?\'"\'+o.D(M,5(a){y c=1e[a];7 6 c===\'o\'?c:\'\\\\u\'+(\'1o\'+a.1v(0).12(16)).17(-4)})+\'"\':\'"\'+o+\'"\'}5 E(l,w){y i,k,v,h,K=8,9,2=w[l];3(2&&6 2===\'x\'&&6 2.q===\'5\'){2=2.q(l)}3(6 m===\'5\'){2=m.P(w,l,2)}1w(6 2){J\'o\':7 N(2);J\'S\':7 1b(2)?X(2
\'B\';J\'1y\':J\'B\':7 X(2);J\'x\':3(!2){7\'B\'}8+=H;9=[];3(Q.z.12.1S(2)===\'[x 1R]\'){h=2.h;G(i=0;i 3, bei 23|456 => 3, bei 3|456 => 3)", "&XZ":"Enthält die Zehner-Stelle der X-Koordinate, falls die X-Koordinate >= 10, andernfall wird dieser Platzhalter ignoriert und mit der Zeichenfolge der Einstellung '"+optionsDefault["missingCoordDefault"]["label"]+"' ersetzt (bei 123|456 => 2, bei 23|456 => 2, bei 3|456 => '"+missingCoordDefault+"')", "&XH":"Enthält die Hunderter-Stelle der X-Koordinate, falls die X-Koordinate >= 100, andernfall wird dieser Platzhalter ignoriert und mit der Zeichenfolge der Einstellung '"+optionsDefault["missingCoordDefault"]["label"]+"' ersetzt (bei 123|456 => 1, bei 23|456 => '"+missingCoordDefault+"', bei 3|456 => "+missingCoordDefault+")", "&Y":"Enthält die komplette Y-Koordinate", "&YE":"Enthält die Einer-Stelle der Y-Koordinate (bei 123|456 => 6, bei 123|45 => 5, bei 123|4 => 4)", "&YZ":"Enthält die Zehner-Stelle der Y-Koordinate, falls die Y-Koordinate >= 10, andernfall wird dieser Platzhalter ignoriert und mit der Zeichenfolge der Einstellung '"+optionsDefault["missingCoordDefault"]["label"]+"' ersetzt (bei 123|456 => 5, bei 123|45 => 4, bei 123|4 => '"+missingCoordDefault+"')", "&YH":"Enthält die Hunderter-Stelle der Y-Koordinate, falls die Y-Koordinate >= 100, andernfall wird dieser Platzhalter ignoriert und mit der Zeichenfolge der Einstellung '"+optionsDefault["missingCoordDefault"]["label"]+"' ersetzt (bei 123|456 => 4, bei 123|45 => '"+missingCoordDefault+"', bei 123|4 => "+missingCoordDefault+")" }; var renamePattern = getSingleSetting("renamePattern"); if(document.location.href.match(/village=[0-9]+&screen=settings\&mode=settings(&t=[0-9]+)?$/)) { settingsInit(); } else if(document.location.href.match(/village=[0-9]+&screen=overview_villages(&t=[0-9]+)?$/)) { overviewInit(); } else if(document.location.href.match(/village=[0-9]+&screen=overview_villages(&t=[0-9]+)?&mode=combined$/)) { overviewInit(); } else { } //#################################################################################### //######################## ########################### //######################## E I N S T E L L U N G E N ########################### //######################## ########################### //#################################################################################### function settingsInit() { //Tabelle mit den Einstellungen ermitteln var tableXP = document.evaluate('/html/body/table[3]/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td[2]/form/table', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); //Fall die Tabelle nicht gefunden wurde, Skript abbrechen if(!tableXP.singleNodeValue) return false; //Html Element extrahieren var table = tableXP.singleNodeValue; var vrtable = document.createElement("table"); vrtable.setAttribute("class","vis"); vrtable.style.width = "100%"; //Einstellungen des VillageRenamers anzeigen var vrSettingsHeadTr = document.createElement("tr"); var vrSettingsHeadTh = document.createElement("th"); vrSettingsHeadTh.setAttribute("colspan","2"); vrSettingsHeadTh.appendChild(document.createTextNode("VillageRenamer "+version+" - allgemeine Einstellungen")); vrSettingsHeadTr.appendChild(vrSettingsHeadTh); vrtable.appendChild(vrSettingsHeadTr); for(var option in optionsDefault) { var optionTr = document.createElement("tr"); var keyTd = document.createElement("td"); keyTd.innerHTML = optionsDefault[option]["label"]+": "; keyTd.setAttribute("width","250"); optionTr.appendChild(keyTd); var valueTd = document.createElement("td"); var input = document.createElement("input"); input.setAttribute("id","vr_"+option); switch(optionsDefault[option]["htmlElement"]) { case "input": input.setAttribute("value",getSingleSetting(option)); break; case "checkbox": input.setAttribute("type","checkbox"); input.checked = getSingleSetting(option); break; } for(var property in optionsDefault[option]["htmlElementProperties"]) { input.setAttribute(property,optionsDefault[option]["htmlElementProperties"][property]); } valueTd.appendChild(input); optionTr.appendChild(valueTd); vrtable.appendChild(optionTr); } var saveTr = document.createElement("tr"); var saveTd = document.createElement("td"); saveTd.setAttribute("colspan","2"); saveTd.setAttribute("align","center"); var saveButton = document.createElement("input"); saveButton.setAttribute("type","button"); saveButton.setAttribute("value","Speichern!"); saveButton.addEventListener("click",function(){saveSettings();},false); saveTd.appendChild(saveButton); saveTr.appendChild(saveTd); vrtable.appendChild(saveTr); table.parentNode.insertBefore(vrtable,table.nextSibling); var phDescTable = document.createElement("table"); phDescTable.setAttribute("class","vis"); phDescTable.setAttribute("widht","100%"); var vrPhDescHeadTr = document.createElement("tr"); var vrPhDescHeadTh = document.createElement("th"); vrPhDescHeadTh.setAttribute("colspan","2"); vrPhDescHeadTh.appendChild(document.createTextNode("VillageRenamer "+version+" - vordefinierte Platzhalter")); vrPhDescHeadTr.appendChild(vrPhDescHeadTh); phDescTable.appendChild(vrPhDescHeadTr); for(var ph in PHDescriptions) { var phDescTr = document.createElement("tr"); var phTd = document.createElement("td"); phTd.appendChild(document.createTextNode(ph)); phTd.setAttribute("width","100"); phTd.addEventListener("click",function(){insertPh(this.innerHTML.replace(/\&/g,'&'),document.getElementById("vr_renamePattern"));},false) phTd.style.cursor = "pointer"; phDescTr.appendChild(phTd); var descTd = document.createElement("td"); descTd.appendChild(document.createTextNode(PHDescriptions[ph])); phDescTr.appendChild(descTd); phDescTable.appendChild(phDescTr); } vrtable.parentNode.insertBefore(phDescTable,vrtable.nextSibling); } function insertPh(ph,input) { var start = input.selectionStart; var end = input.selectionEnd; input.value = input.value.substr(0, start) + ph + input.value.substr(end); var pos = start + ph.length; input.selectionStart = pos; input.selectionEnd = pos; input.focus(); } function getSettings() { if(win.localStorage && win.localStorage["vr_settings_"+player_id]) { return eval("("+win.localStorage["vr_settings_"+player_id]+")"); } else if(win.localStorage && win.localStorage.vr_settings) { return eval("("+win.localStorage.vr_settings+")"); } else { return; } } function saveSettings() { var passedSettings = {}; for(var option in optionsDefault) { if(checkSettingValue(option)) { passedSettings[option] = convertTo(getSettingValue(option),optionsDefault[option]["allow"]); } else { alert(options[option]["label"]+" enthält einen ungültigen Wert!"); } } //alert(JSON.stringify(passedSettings)); //GM_setValue("vr_settings",JSON.stringify(passedSettings)); win.localStorage["vr_settings_"+player_id] = JSON.stringify(passedSettings); alert("VillageRenamer - Einstellungen wurden gespeichert!"); document.location.href = document.location.href; } function convertTo(value,type) { switch(type) { case "string": return String(value); break; case "integer": if(isNaN(value)==false) { return Number(value); } else { return; } break; case "boolean": if(value == true || value == false) { return value; } else { return; } break; } } function getSettingValue(option) { var el = document.getElementById("vr_"+option); var value; switch(optionsDefault[option]["htmlElement"]) { case "input": value = el.value; break; case "checkbox": value = el.checked; break; } return value; } function checkSettingValue(option) { var value = getSettingValue(option); switch(optionsDefault[option]["allow"]) { case "string": return true; break; case "integer": if(isNaN(value)==false) { return true; } else { return false; } break; case "boolean": if(value == true || value == false) { return true; } else { return false; } break; } } function getSingleSetting(setting) { if(options != null) { if(options[setting] != null) { return options[setting]; } else if(optionsDefault[setting] != null) { return optionsDefault[setting]["default"]; } else { var redirect = confirm("Unbekannte Einstellung '"+setting+"'. Bitte teilen Sie dies dem Entwickler mit. Drücken Sie OK, um zum DS-Forum-Thread weitergeleitet zu werden."); if(redirect == true) { document.location.href = forumThread; } } } else { return optionsDefault[setting]["default"]; } } //#################################################################################### //######################## E-N-D-E ########################### //######################## E I N S T E L L U N G E N ########################### //######################## E-N-D-E ########################### //#################################################################################### //#################################################################################### //######################## ########################### //######################## Ü B E R S I C H T ########################### //######################## ########################### //#################################################################################### //F�gt das Skript-spezifische HTML ins DOM ein und initialisiert die n�tigen Ereignisse auf der Kombinier-Übersicht function overviewInit() { //Das "Dorf"-TH ermitteln var tdXP = document.evaluate('//table[@id="combined_table"]/tbody/tr/th', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); //Falls das TH nicht gefunden wurde, Skript abbrechen if(!tdXP.singleNodeValue) return false; //Html Element extrahieren var td = tdXP.singleNodeValue; //Bild erstellen, das sp�ter das umbenennen-Icon enthalten wird var img = document.createElement("img"); //Source des Bildes auf das umbennnen-Icon setzen img.setAttribute("src","graphic/rename.png"); //Falls das Bild nicht geladen werden kann, den Alternativtext "D�rfer umbenennen" setzen img.setAttribute("alt","D�rfer umbenennen"); //Infotext der beim Hover angezeigt wird, ebenfalls auf "D�rfer umbenennen" setzem img.setAttribute("title",unescape("D%F6rfer%20umbenennen")); //Cursor soll beim Hover eine Hand werden img.style.cursor = 'pointer'; //Beim Klick auf das Icon, soll die rename()-Funktion aufgerufen werden img.addEventListener('click',rename,false); //Leerzeichen an das TH anh�ngen td.appendChild(document.createTextNode(" ")); //Das Bild ans TH anh�ngen td.appendChild(img); } //Setzt die umbenennen-Felder auf sichtbar und f�llt sie mit den neuen Namen function rename() { //Startzeitpunkt des Umebenennens bestimmen var start = new Date(); //Links zum umbenennen ermitteln var aXP = document.evaluate('//table[@id="combined_table"]/tbody/tr[position()>1]/td/span/a[2]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var continents = new Object; var COUNT = aXP.snapshotLength; //Alle Links durchgehen for(var i = 0;i< strCOUNT.length){COUNTER0 = "0"+COUNTER0;} var CURRENT = currentName; var K = k; var X = x; if(X.length == 3) { var XE = x[2]; var XZ = x[1]; var XH = x[0]; } else if(X.length == 2) { var XE = x[1]; var XZ = x[0]; var XH = missingCoordDefault; } else if(X.length == 1) { var XE = x[0]; var XZ = missingCoordDefault; var XH = missingCoordDefault; } var Y= y; if(Y.length == 3) { var YE = y[2]; var YZ = y[1]; var YH = y[0]; } else if(Y.length == 2) { var YE = y[1]; var YZ = y[0]; var YH = missingCoordDefault; } else if(Y.length == 1) { var YE = y[0]; var YZ = missingCoordDefault; var YH = missingCoordDefault; } //#### !! REIHENFOLGE DER EINZELNEN PLATZHALTER DARF NICHT VERÄNDERT WERDEN !! ### var predefinedPlaceholders = {'&ID':ID, '&COUNTER0':COUNTER0, '&COUNTER':COUNTER, '&COUNT':COUNT, '&CURRENT':CURRENT, '&K':K, '&XE':XE, '&XZ':XZ, '&XH':XH, '&X':X, '&YE':YE, '&YZ':YZ, '&YH':YH, '&Y':Y }; for (var ph in predefinedPlaceholders){ if(checkPlaceholderExistence(predefinedPlaceholders[ph],predefinedPlaceholders) == true) { phContent = replacePlaceholders(predefinedPlaceholders[ph],predefinedPlaceholders); try { // alert(phContent); // phContent = eval(phContent); } catch(ex) { } predefinedPlaceholders[ph] = phContent; //alert(predefinedPlaceholders[ph]); } } var newName = replacePlaceholders(renamePattern,predefinedPlaceholders); return newName; } function checkPlaceholderExistence(checkString,placeholders) { checkString = String(checkString); for (var ph in placeholders){ try { var found = checkString.search(ph); } catch(ex) { alert(">"+ph+"< funzt nicht bei >"+checkString+"<"); } if(found) { return true; } } return false; } function replacePlaceholders(string,placeholders) { string = String(string); //Alle Platzhalter mit ihren entsprechenden Werten ersetzen for (var ph in placeholders){ //if(checkPlaceholderExistence(placeholders[placeholder],placeholders) == true) // { //placeholders[placeholder] = replacePlaceholders(placeholders[placeholder],placeholders); //alert(placeholders[placeholder]); // } string = string.replace(ph,placeholders[ph]); } return string; } //#################################################################################### //######################## E-N-D-E ########################### //######################## Ü B E R S I C H T ########################### //######################## E-N-D-E ########################### //####################################################################################