Ogame Suche Player& kordis modified by Fleety

By fleety Last update Aug 10, 2011 — Installed 495 times.

There are 1 previous version of this script.

// ==UserScript==
// @name OGame Redesign : Suche Player& kordis modified by Fleety
// @description OGame : Suche Player& kordis modified by Fleety
// @date 2011-08-10
// @creator Black Cat/ modified by Fleety
// @include http://*.ogame.*/game/index.php?page=galaxy*
// @include http://*.ogame.*/game/index.php?page=search*
// ==/UserScript==

(function(){

	var hostname = window.location.hostname;

	var default_player = {
			status: "",
			planets: [] //coords, planet_name, moon_size
		};

	function safeWrap(f) {
		return function() {
			setTimeout.apply(window, [f, 0].concat([].slice.call(arguments)));
		};
	}

	if (typeof uneval === 'undefined') {
		uneval = function(obj) {
			return JSON.stringify(obj);
		}
	}
	
	if (typeof GM_getValue === 'undefined') {
		GM_getValue = function(key, defaultValue) {
			var retValue = localStorage.getItem(key);
			if (!retValue) {
				retValue = defaultValue;
			}
			return retValue;
		}
	}
	
	if (typeof GM_setValue === 'undefined') {
		GM_setValue = function(key, value) {
			localStorage.setItem(key, value);
		}
	}

	if (typeof GM_deleteValue === 'undefined') {
		GM_deleteValue = function(key) {
			localStorage.removeItem(key);
		}
	}

	if (typeof unsafeWindow === 'undefined') {
		unsafeWindow = window;
	}

	if (document.location.href.indexOf("page=galaxy") != -1) {
		function cloneObject(what) {
			if (!what) return;
			if (typeof(what) != "object") return what;
			var clone;
			if ((what.constructor+'') == (Date+'')) return what;
			else if ((what.constructor+'') == (Array+'')) clone=[];
			else clone={};
			for (var i in what) {
				if (typeof(what[i]) != "object") clone[i]=what[i];
				else clone[i]=cloneObject(what[i]);
			}
			return clone;
		}

		var default_record = {
				planet: {name: ""},
				moon: {size: 0},
				player: {id: 0, status: ""}
			};

		unsafeWindow.$("#galaxyContent").ajaxSuccess(safeWrap(function(e,xhr,settings){
			if (settings.url.indexOf("page=galaxyContent") == -1) return;

			var ngalaxy = settings.data.replace(/^.*galaxy=(\d*).*$/,"$1");
			var nsystem = settings.data.replace(/^.*system=(\d*).*$/,"$1");

			var record = new Object();
			var rows = document.querySelectorAll("#galaxytable tr.row");
			for (var i = 0; i < rows.length; i++) {
				var pos = rows[i].querySelector("td.position").textContent;
				var planet = document.getElementById("planet" + pos);
				if (!planet) continue;
				record[pos] = cloneObject(default_record);
				record[pos].planet.name = planet.getElementsByClassName("spacing")[0].getElementsByClassName("textNormal")[0].textContent;
				var moon = document.getElementById("moon" + pos);
				if (moon) {
					var spans = moon.getElementsByTagName("span");
					var ms_span;
					var j = 0;
					do {
						ms_span = spans[j];
						j++;
					}while(ms_span && ms_span.id != "moonsize");
					if (ms_span) { record[pos].moon.size = parseInt(ms_span.innerHTML.replace(/\D/g, '')); }
				}
				var playername = rows[i].querySelector("td.playername");
				var link = playername.getElementsByTagName("a")[0];
				if (link) { record[pos].player.id = parseInt(link.getAttribute("rel").replace(/\D/g, '')); }
				var status = playername.getElementsByClassName("status")[0];
				if (status) {
					var spans = status.getElementsByTagName("span");
					for (var j = 0; j < spans.length; j++) {
						if (spans[j].childNodes[0].nodeType == 3) {
							if (record[pos].player.status != "") { record[pos].player.status += " "; }
							record[pos].player.status += spans[j].childNodes[0].nodeValue;
						}
					}
				}
			}

			var system = new Object();
			var isEmpty = true;
			for (var i in record) {
				system[i] = record[i].player.id;
				isEmpty = false;
			}

			var str_system = uneval(system);
			var str_old_system = GM_getValue(hostname + ".systems." + ngalaxy + "." + nsystem, uneval(new Object()));
			
			if (str_system != str_old_system) {
				if (isEmpty) {
					GM_deleteValue(hostname + ".systems." + ngalaxy + "." + nsystem);
				} else {
					GM_setValue(hostname + ".systems." + ngalaxy + "." + nsystem, str_system);
				}
				var old_system;
				eval("old_system = " + str_old_system);
				for (var i in old_system) {
					if (system[i] != old_system[i]) {
						//Suppression des planètes abandonnées
						var player;
						eval("player = " + GM_getValue(hostname + ".players." + old_system[i], uneval(default_player)));
						var coords = ngalaxy + ":" + nsystem + ":" + i;
						var j = 0;
						var shift = 0;
						var length = player.planets.length;
						while (j < length) {
							if (player.planets[j][0] == coords) {
								shift++;
								length--;
							}
							if (shift != 0 && j < length) {
								player.planets[j][0] = player.planets[j+shift][0];
								player.planets[j][1] = player.planets[j+shift][1];
								player.planets[j][2] = player.planets[j+shift][2];
							}
							j++;
						}
						if (length > 0) {
							player.planets.length = length;
							GM_setValue(hostname + ".players." + old_system[i], uneval(player));
						} else {
							GM_deleteValue(hostname + ".players." + old_system[i]);
						}
					}
				}
			}

			for (var i in record) {
				//Ajout et mise à jour des planètes
				var str_old_player = GM_getValue(hostname + ".players." + record[i].player.id, uneval(default_player));
				var player;
				eval("player = " + str_old_player);
				player.status = record[i].player.status;
				var coords = ngalaxy + ":" + nsystem + ":" + i;
				var index = player.planets.length;
				var j = 0;
				while (j < index) {
					if (player.planets[j][0] == coords) { index = j; }
					j++;
				}
				if (!player.planets[index]) { player.planets[index] = new Array(); }
				player.planets[index][0] = coords;
				player.planets[index][1] = record[i].planet.name;
				player.planets[index][2] = record[i].moon.size;
				var str_player = uneval(player);
				if (str_player != str_old_player) { GM_setValue(hostname + ".players." + record[i].player.id, str_player); }
			}
		}));
	}
	
	if (document.location.href.indexOf("page=search") != -1) {
		var session = window.location.href.replace(/^.*session=([^&]*).*$/,"$1");
		
		// fonction format sur http://www.toutjavascript.com
		function format(valeur,decimal,separateur) {
		// formate un chiffre avec 'decimal' chiffres après la virgule et un separateur
			var deci=Math.round( Math.pow(10,decimal)*(Math.abs(valeur)-Math.floor(Math.abs(valeur)))) ; 
			var val=Math.floor(Math.abs(valeur));
			if ((decimal==0)||(deci==Math.pow(10,decimal))) {val=Math.floor(Math.abs(valeur)); deci=0;}
			var val_format=val+"";
			var nb=val_format.length;
			for (var i=1;i<4;i++) {
				if (val>=Math.pow(10,(3*i))) {
					val_format=val_format.substring(0,nb-(3*i))+separateur+val_format.substring(nb-(3*i));
				}
			}
			if (decimal>0) {
				var decim=""; 
				for (var j=0;j<(decimal-deci.toString().length);j++) {decim+="0";}
				deci=decim+deci.toString();
				val_format=val_format+"."+deci;
			}
			if (parseFloat(valeur)<0) {val_format="-"+val_format;}
			return val_format;
		}
		
		function sort_planets(a,b) {
			/(\d*):(\d*):(\d*)/.exec(a[0]);
			var galaxy1 = parseInt(RegExp.$1);
			var system1 = parseInt(RegExp.$2);
			var planet1 = parseInt(RegExp.$3);
			/(\d*):(\d*):(\d*)/.exec(b[0]);
			var galaxy2 = parseInt(RegExp.$1);
			var system2 = parseInt(RegExp.$2);
			var planet2 = parseInt(RegExp.$3);
			if (galaxy1 > galaxy2) return 1;
			else if (galaxy1 < galaxy2) return -1;
			if (system1 > system2) return 1;
			else if (system1 < system2) return -1;
			if (planet1 > planet2) return 1;
			else if (planet1 < planet2) return -1;
			return 0;
		}
		
		unsafeWindow.$("#ajaxContent").ajaxSuccess(safeWrap(function(e,xhr,settings){
			if (settings.url.indexOf("page=search") == -1) return;
			var method = settings.data.replace(/^.*method=([\d-]*).*$/,"$1");
			if (method != "2") return;

			var ajaxContent = document.getElementById("ajaxContent");
			var table = ajaxContent.getElementsByTagName("table")[0];
			ajaxContent.style.overflow = "auto";
			var rows = table.getElementsByTagName("tr");
			for (var i = 1; i < rows.length; i++) {
				var cells = rows[i].getElementsByTagName("td");
				if (!cells[6]) continue;
				var player_id;
				var link = cells[6].getElementsByTagName("a")[0];
				if (!link) {
					player_id = 0;
				} else {
					/to=(\d*)/.exec(link.getAttribute("onclick"));
					player_id = parseInt(RegExp.$1);
				}
				var player;
				eval("player = " + GM_getValue(hostname + ".players." + player_id, uneval(default_player)));
				if (player.status != "") { cells[1].innerHTML += " (" + player.status + ")"; }
				var coords = cells[4].getElementsByTagName("a")[0].innerHTML.replace(/[^:\d]/g,'');
				
				//Ajout de la planète mère à la liste des planètes
				var index = player.planets.length;
				var j = 0;
				while (j < index) {
					if (player.planets[j][0] == coords) { index = j; }
					j++;
				}
				if (!player.planets[index]) { player.planets[index] = new Array(); }
				player.planets[index][0] = coords;
				player.planets[index][1] = cells[3].innerHTML;
				
				//Tri des planètes par ordre croissant des coordonnées
				player.planets.sort(sort_planets);
				
				cells[3].innerHTML = "";
				cells[4].innerHTML = "";
				for (var j = 0; j < player.planets.length; j++) {
					/(\d*):(\d*):(\d*)/.exec(player.planets[j][0]);
					var galaxy = RegExp.$1;
					var system = RegExp.$2;
					var planet = RegExp.$3;
					cells[3].innerHTML += (player.planets[j][0]==coords?"<span style='color:#55788F;'>":"") + player.planets[j][1] + (player.planets[j][0]==coords?"</span>":"") + "<br />";
					cells[4].innerHTML += "<a target='_parent' href='index.php?page=galaxy&no_header=1&galaxy=" + galaxy + "&system=" + system + "&planet=" + planet + "&session=" + session + "'>" + (player.planets[j][0]==coords?"<span style='color:#55788F;'>":"") + "[" + player.planets[j][0] + "]" + (player.planets[j][0]==coords?"</span>":"") + "</a>";
					if (player.planets[j][2] > 0) { cells[4].innerHTML += " <a href='#' title='Size: " + format(player.planets[j][2], 0, '.') + "'>M</a>"; }
					cells[4].innerHTML += "<br />";
				}
			}
		}));
	}
})();