// ==UserScript==
// @name OGame: Moon Spy and Recycler
// @namespace https://greasyfork.org/users/4668-black-cat
// @description OGame: directly spy a moon and send recyclers from galaxy view
// @version 5.4
// @creator Black Cat
// @include http://*.ogame.gameforge.com/game/index.php?page=galaxy*
// @require https://greasyfork.org/scripts/4442-ogame-localization/code/OGame:%20Localization.js
// @run-at document-end
// @include *
// ==/UserScript==
var strFunc = (function(){
var language = document.querySelector("meta[name=ogame-language]").getAttribute("content");
var messages = {
"600_1": "Send espionage probe to:",
"600_2": "Send recycler to:",
"601": "An error has occurred",
"602": "Error, there is no moon",
"603": "Error, player can't be approached because of newbie protection",
"604": "Player is too strong to be attacked",
"605": "Error, player is in vacation mode",
"606": "No fleets can be sent from vacation mode!",
"610": "Error, not enough ships available, send maximum number:",
"611": "Error, no ships available",
"612": "Error, no free fleet slots available",
"613": "Error, you don't have enough deuterium",
"614": "Error, there is no planet there",
"615": "Error, not enough cargo capacity",
"616": "Multi-alarm",
"617": "Admin or GM",
"618": "Attack ban until 01.01.1970 01:00:00"
};
switch (language) {
case "de":
messages["600_1"] = "Sende Spionagesonden nach:";
messages["600_2"] = "Sende Recycler nach:";
messages["601"] = "Ein Fehler ist aufgetreten.";
messages["611"] = "Fehler, keine Schiffe vorhanden";
messages["612"] = "Fehler, keine freien Flottenslots";
messages["613"] = "Fehler, du hast nicht genug Deuterium.";
messages["615"] = "Fehler, die Ladekapazität reicht nicht aus.";
break;
case "es":
messages["600_1"] = "Enviar sonda de espionaje a:";
messages["600_2"] = "Enviar reciclador a:";
messages["601"] = "Ha ocurrido un error";
messages["611"] = "Error, no hay naves disponibles";
messages["612"] = "Error, no hay espacio para más flotas";
messages["613"] = "Error, no tienes suficiente deuterio";
messages["615"] = "Error, no hay suficiente espacio de carga";
break;
case "fr":
messages["600_1"] = "Expédier des sondes d'espionnage vers:";
messages["600_2"] = "Expédier des recycleurs vers:";
messages["601"] = "Une erreur s'est produite";
messages["611"] = "Erreur! pas de vaisseaux disponibles";
messages["612"] = "Erreur! pas de slots de flotte libre";
messages["613"] = "Erreur! pas assez de deutérium disponible";
messages["615"] = "Erreur! La capacité de chargement n'est pas suffisante";
break;
default:
break;
}
var sendFleet = function() {
var step = 0;
var shipSent = 0;
var recyclerSent = 0;
var probeSent = 0;
var recyclerValue = 0;
var probeValue = 0;
var slotUsed = 0;
var slotTotal = 0;
this.data;
var that = this;
this.canStart = function() {
return (shipsendingDone == 1);
}
this.reset = function() {
shipsendingDone = 1;
step = 0;
shipSent = 0;
recyclerSent = 0;
probeSent = 0;
delete this.data;
}
var displayOk = function() {
slotUsed++;
recyclerValue -= recyclerSent;
probeValue -= probeSent;
var missileValue = document.getElementById("missileValue").textContent;
var type = 0;
if (that.data.mission == 6) {
type = 1;
} else if (that.data.mission == 8) {
type = 2;
}
var response = {
message:messages["600_"+type],
type:type,
slots:slotUsed,
probes:probeValue,
recyclers:recyclerValue,
missiles:missileValue,
shipsSent:shipSent,
coordinates:{galaxy:that.data.galaxy, system:that.data.system, position:that.data.position},
planetType:that.data.type,
success:true
};
displayMiniFleetMessage(response);
}
var displayKo = function(code) {
if (!code) {
code = "601";
}
var response = {
message:messages[code],
coordinates:{galaxy:that.data.galaxy, system:that.data.system, position:that.data.position},
success:false
};
displayMiniFleetMessage(response);
}
this.process = function(html,id) {
if (shipsendingDone == 1) return;
step++;
var page;
var method = "POST";
var pData = {};
switch (step) {
case 1:
page = document.querySelector("#menuTable a[href*='fleet1']").href;
method = "GET";
break;
case 2:
if (id != "fleet1") {
displayKo();
this.reset();
return;
}
var fleets = $(html).find("#slots span.advice").eq(0).text();
/(\d*)\/(\d*)/.exec(fleets);
slotUsed = parseInt(RegExp.$1);
slotTotal = parseInt(RegExp.$2);
recyclerValue = parseInt($(html).find("#button209 span.level").eq(0).text().replace(/\D/g, ""));
if (isNaN(recyclerValue)) recyclerValue = 0;
probeValue = parseInt($(html).find("#button210 span.level").eq(0).text().replace(/\D/g, ""));
if (isNaN(probeValue)) probeValue = 0;
$("#slotUsed").html(tsdpkt(slotUsed));
setShips("probeValue", tsdpkt(probeValue));
setShips("recyclerValue", tsdpkt(recyclerValue));
if ((this.data.mission == 6 && probeValue == 0)
|| (this.data.mission == 8 && recyclerValue == 0)) {
displayKo("611");
this.reset();
return;
} else if (slotUsed == slotTotal) {
displayKo("612");
this.reset();
return;
}
var form = $(html).find("form[name='shipsChosen']");
page = form.attr("action");
form.find("input,select").each(function(){
if (this.name) pData[this.name] = this.value;
});
for (var i in this.data) {
if (/^am\d{3}$/.test(i)) {
pData[i] = this.data[i];
}
}
break;
case 3:
if (id != "fleet2") {
displayKo();
this.reset();
return;
}
var form = $(html).find("form[name='details']");
page = form.attr("action");
form.find("input,select").each(function(){
if (this.name) pData[this.name] = this.value;
if (/^am\d{3}$/.test(this.name)) {
shipSent += parseInt(this.value);
if (this.name == "am209") {
recyclerSent = parseInt(this.value);
} else if (this.name == "am210") {
probeSent = parseInt(this.value);
}
}
});
pData.galaxy = this.data.galaxy;
pData.system = this.data.system;
pData.position = this.data.position;
pData.type = this.data.type;
break;
case 4:
if (id != "fleet3") {
displayKo();
this.reset();
return;
}
var consumption = parseInt($(html).find("#consumption").text().replace(/\D/g, ""));
var deuterium = parseInt($(html).find("#resources_deuterium").text().replace(/\D/g, ""));
if (consumption > deuterium) {
displayKo("613");
this.reset();
return;
}
var maxresources = parseInt($(html).find("#maxresources").text().replace(/[^0-9-]/g, ""));
if (maxresources < 0) {
displayKo("615");
this.reset();
return;
}
var form = $(html).find("form[name='sendForm']");
page = form.attr("action");
form.find("input,select").each(function(){
if (this.name) pData[this.name] = this.value;
});
pData.mission = this.data.mission;
break;
default:
if (id == "movement") {
displayOk();
} else {
displayKo();
}
this.reset();
return;
break;
}
$.ajax({
dataType:"html",
url:page,
data:pData,
type:method,
timeout:5000,
success: function (html) {
/<body id="([^"]*)"/.exec(html);
var id = RegExp.$1;
that.process($.parseHTML(html),id);
},
error: function (xhr,status,exception) {
addToTable(exception, "error");
that.reset();
}
});
}
this.start = function() {
if (typeof this.data != 'undefined') {
shipsendingDone = 0;
this.process();
}
}
}
var fleetSender = new sendFleet();
var sendProbes = function(e) {
if (fleetSender.canStart()) {
fleetSender.data = $(e.target).data();
fleetSender.data.mission = "6";
fleetSender.data.type = "3";
fleetSender.start();
}
}
var sendRecyclers = function(e) {
if (fleetSender.canStart()) {
fleetSender.data = $(e.target).data();
fleetSender.data.mission = "8";
fleetSender.data.type = "2";
fleetSender.start();
}
}
var espionageName = "Espionage";
var locData = localStorage.getItem("localization.data");
if (locData) {
locData = JSON.parse(locData);
espionageName = locData.missions["6"];
}
$(document).ajaxSuccess(function(e,xhr,settings){
if (settings.url.indexOf("page=galaxyContent") == -1) return;
var rows = document.querySelectorAll("#galaxytable tr.row");
for (var i = 0; i < rows.length; i++) {
var moon = rows[i].querySelector("td.moon");
if (moon) {
if (isMobile) {
if (!($(moon).hasClass("js_no_action"))) {
var links = rows[i].querySelector("td.action").getElementsByTagName("a");
for (var j = 0; j < links.length; j++) {
var clickAttr = links[j].getAttribute("onclick") || "";
clickAttr = clickAttr.replace(/\s*([(,)])\s*/g,"$1");
if (clickAttr.indexOf("(6,") > -1) {
var content = document.getElementsByClassName("js_detailRowMoon" + (i+1))[0].getElementsByClassName("active_row_details_content")[0];
var nodes = content.childNodes;
for (var k = nodes.length-1; k >= 0; k--) {
if (nodes[k].nodeType == 3) {
content.removeChild(nodes[k]);
}
}
var spy_link = document.createElement("a");
var expression = /\(\d*,(\d*),(\d*),(\d*),\d*,(\d*)\)/;
expression.exec(clickAttr);
$(spy_link).data("galaxy",RegExp.$1);
$(spy_link).data("system",RegExp.$2);
$(spy_link).data("position",RegExp.$3);
$(spy_link).data("am210",RegExp.$4);
spy_link.className = "dark_highlight_tablet";
spy_link.onclick = sendProbes;
spy_link.href = "javascript:void(0);";
spy_link.innerHTML = "<span class='icon icon_espionage float_left'></span>" + espionageName;
content.appendChild(spy_link);
break;
}
}
}
} else {
var ul = moon.getElementsByClassName("ListLinks")[0];
if (ul) {
var items = rows[i].querySelectorAll(".ListLinks>li");
for (var j = 0; j < items.length; j++) {
if (items[j].innerHTML.indexOf("(6,") > -1) {
var li = items[j].cloneNode(true);
var spy_link = li.getElementsByTagName("a")[0];
var expression = /\(\d*,(\d*),(\d*),(\d*),\d*,(\d*)\)/;
expression.exec(spy_link.getAttribute("onclick"));
$(spy_link).data("galaxy",RegExp.$1);
$(spy_link).data("system",RegExp.$2);
$(spy_link).data("position",RegExp.$3);
$(spy_link).data("am210",RegExp.$4);
spy_link.onclick = sendProbes;
spy_link.href = "javascript:void(0);";
if (moon.getElementsByClassName("activity").length > 0) {
ul.insertBefore(li,ul.getElementsByTagName("li")[0].nextSibling);
} else {
ul.insertBefore(li,ul.firstChild);
}
break;
}
}
}
}
}
var debris = rows[i].querySelector("td.debris");
if (debris) {
if (isMobile) {
if (!($(debris).hasClass("js_no_action"))) {
var content = document.getElementsByClassName("js_detailRowDebris" + (i+1))[0].getElementsByClassName("active_row_details_content")[0];
var link = content.getElementsByTagName("a")[0];
if (link) {
var pos = content.getElementsByClassName("coords")[0];
var expression = /(\d*):(\d*):(\d*)/;
expression.exec(pos.textContent);
$(link).data("galaxy",RegExp.$1);
$(link).data("system",RegExp.$2);
$(link).data("position",RegExp.$3);
var total = 0;
var res = content.getElementsByClassName("debris_res");
for (var j = 0; j < res.length; j++) {
total += parseInt(res[j].textContent.replace(/\D/g, ""));
}
$(link).data("am209",Math.ceil(total/20000));
link.onclick = sendRecyclers;
link.href = "javascript:void(0);";
}
}
} else {
var pos = debris.querySelector("#pos-debris");
if (pos) {
var recyclers = debris.getElementsByClassName("debris-recyclers")[0];
var link = debris.querySelector(".ListLinks>li>a");
if (recyclers && link) {
var expression = /(\d*):(\d*):(\d*)/;
expression.exec(pos.textContent);
$(link).data("galaxy",RegExp.$1);
$(link).data("system",RegExp.$2);
$(link).data("position",RegExp.$3);
$(link).data("am209",recyclers.textContent.replace(/\D/g, ""));
link.onclick = sendRecyclers;
link.href = "javascript:void(0);";
}
}
}
}
}
});
}).toString();
var script = document.createElement("script");
script.setAttribute("type","text/javascript");
script.text = "(" + strFunc + ")();";
document.body.appendChild(script);
Donate for the site OpenUserJS
Are you sure you want to go to an external site to donate a monetary value?
WARNING: Some countries laws may supersede the payment processors policy such as the GDPR and PayPal. While it is highly appreciated to donate, please check with your countries privacy and identity laws regarding privacy of information first. Use at your utmost discretion.