NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Grepolis Spielerprofil mit Zurück-Button
// @namespace Menidan/Grepolis
// @include http://de*.grepolis.com/game*
// @version 2.2.0.4
// @grant none
// @oujs:author Menidan
// @oujs:collaborator Maltokor
// ==/UserScript==
// @grant none -> window == unsafeWindow
var w = window, $ = w.jQuery;
function Analysieren (Objekt, Text, Erbe, auch_versteckte, kein_alert, kein_log, Stapel_ausgeben) {
if (typeof Text != "string")
Text = "<unbekannt>";
Text = "Analysiere " + Text + " (Typ: ";
var Typ;
Text += Typ = typeof Objekt;
Text += ")\n";
if (Typ == "string" || Typ == "number" || Typ == "boolean" || Typ == "date")
Text += "Wert: " + Objekt + "\n";
else if (Typ == "function")
Text += "Definition:\n" + Objekt.toString () + "\n";
var str = "";
var str2;
var Elemente;
if (auch_versteckte) {
Elemente = {};
var Namen = Object.getOwnPropertyNames (Objekt);
for (var i = 0; i < Namen.length; ++i)
Elemente [Namen [i]] = Objekt [Namen [i]];
} else
Elemente = Objekt;
for (var E in Elemente) {
if (Erbe || typeof Objekt.hasOwnProperty != "function" || Objekt.hasOwnProperty (E)) {
str2 = "";
if (typeof Objekt [E] == "string")
str2 = ": \"" + Objekt [E] + "\"";
else if (typeof Objekt [E] == "number" || typeof Objekt [E] == "boolean" || Typ == "date")
str2 = ": " + Objekt [E];
str += " - " + E + " (" + typeof Objekt [E] + ")" + str2 + "\n";
}
}
Text += str;
if (Stapel_ausgeben) {
str = "\naktueller Stapel:\n";
var aktuell = Analysieren;
while (aktuell.caller) {
str += " - " + aktuell.name + " (Argumente: " + aktuell.arguments.length + ")\n";
aktuell = aktuell.caller;
}
Text += str += " - " + aktuell.name + " (Argumente: " + aktuell.arguments.length + ")\n\n";
}
if (! kein_log)
console.log (Text);
if (! kein_alert)
alert (Text);
return Text;
}
function Fehler_analysieren (Fehler, Text) {
if (typeof Text != "string")
Text = "";
Analysieren (Fehler, Text + " - " + Fehler.name + " - " + Fehler.message, true);
}
function Fehlerblock (This, Funktion) {
var Ergebnis;
try {
Ergebnis = Funktion.apply (This);
} catch (ex) {
Fehler_analysieren (ex);
}
return Ergebnis;
}
function WndHandlerHistory (wndhandle) {
this.wnd = wndhandle;
}
w.Function.prototype.inherits.call (WndHandlerHistory, w.WndHandlerDefault);
WndHandlerHistory.prototype.getDefaultWindowOptions = function () {
var ret = {
position: ["center", "center"],
maxHeight: 500,
maxWidth: 820,
height: 500,
width: 820,
minimizable: true,
title: "History"
};
return ret;
};
WndHandlerHistory.prototype.onInit = function (title, UIopts) {
return true;
};
WndHandlerHistory.prototype.onClose = function () {
return true;
};
WndHandlerHistory.prototype.refresh = function () {
var html = '\
<div class=\"game_border\">\n\
<div class=\"game_border_top\"></div>\n\
<div class=\"game_border_bottom\"></div>\n\
<div class=\"game_border_left\"></div>\n\
<div class=\"game_border_right\"></div>\n\
<div class=\"game_border_corner corner1\"></div>\n\
<div class=\"game_border_corner corner2\"></div>\n\
<div class=\"game_border_corner corner3\"></div>\n\
<div class=\"game_border_corner corner4\"></div>\n\
<div class=\"game_inner_box ranking_table bold\">\n\
<div class=\"ranking_table_body global_ranking\">\n\
<table class=\"game_header bold\" style=\"border-bottom: 1px solid #D0BE97; color: white; text-align: center; width: 100%;\">\n\
<thead>\n\
<th class=\"r_rank\">Rang</th>\n\
<th class=\"r_name\">Name</th>\n\
<th class=\"r_points\">Punkte</th>\n\
<th class=\"r_ally\">Allianz</th>\n\
<th class=\"r_towns\">Städte</th>\n\
<th class=\"r_avg_points\">Punkteschnitt</th>\n\
</thead>\n\
</table>\n\
<div style=\"max-height: 345px; overflow-y: auto; overflow-x: hidden;\">\n\
<table style=\"text-align: center;\" class=\"game_table\" cellspacing=\"0\" style=\"overflow-y: auto; overflow-x: hidden;\">\n\
<tbody>';
var gerade = true;
for (var i = 0; i < w.besuchte_Spieler.length; ++i) {
html += '\
<tr class=\" ' + ((i == w.besuchte_Spieler_aktuell) ? 'color_highlight' : '') + ' game_table_' + (gerade ? 'even' : 'odd') + '\">\n\
<td class=\"r_rank\">' + w.besuchte_Spieler [i].Rang + '</td>\n\
<td class=\"r_name\">\n\
<a href=\"#\" class=\"gp_player_link\" onclick=\"besuchte_Spieler_Button = true;besuchte_Spieler_aktuell=' + i + ';Layout.playerProfile.open(\'' + w.besuchte_Spieler [i].Name + '\',' + w.besuchte_Spieler [i].id + ')\">' + w.besuchte_Spieler [i].Name + '</a></td>\n\
<td class=\"r_points\">' + w.besuchte_Spieler [i].Punkte + '</td>\n\
<td class=\"r_ally\"><a href=\"javascript:void(0)\" onclick=\"Layout.allianceProfile.open(\'' + w.besuchte_Spieler [i].Allianz + '\',' + w.besuchte_Spieler [i].Allianz_id + ')\">' + w.besuchte_Spieler [i].Allianz + '</a></td>\n\
<td class=\"r_towns\">' + w.besuchte_Spieler [i].Stadtanzahl + '</td>\n\
<td class=\"r_avg_points\">' + w.besuchte_Spieler [i].Stadtpunktedurchschnitt + '</td>\n\
</tr>\n';
gerade = ! gerade;
}
html += '\
</tbody>\n\
<tr style=\"height: 100%\">\n\
<td></td>\n\
</tr>\n\
</table>\n\
</div>\n\
</div>\n\
</div>\n\
</div>';
this.wnd.setContent (html);
};
//dem GPWindowMgr den Typ HISTORY hinzufügen
$ (function () {
w.GPWindowMgr.addWndType ("HISTORY", "link_history", WndHandlerHistory, 1);
});
/* Eigenschaften: besuchte_Spieler[i].id, .Name, .Rang, .Punkte, .Allianz, .Allianz_id, .Stadtanzahl, Stadtpunktedurchschnitt (aufgerundet) */
w.besuchte_Spieler = [];
w.besuchte_Spieler_aktuell = -1;
w.besuchte_Spieler_Button = false;
function geheZuLetztemSpieler () {
if ((w.besuchte_Spieler.length > 1) && (w.besuchte_Spieler_aktuell > 0)) {
var Fenster = w.Layout.wnd.getOpen (w.Layout.wnd.TYPE_PLAYER_PROFILE);
if (Fenster.length == 0)
return false;
var wnd = Fenster [Fenster.length - 1];
wnd.toTop ();
w.besuchte_Spieler_Button = true;
--w.besuchte_Spieler_aktuell;
wnd.requestContentGet ("player", "get_profile_html", {
player_id: w.besuchte_Spieler [w.besuchte_Spieler_aktuell].id
});
wnd.setTitle ("Benutzerprofil - " + w.besuchte_Spieler [w.besuchte_Spieler_aktuell].Name);
return true;
}
return false;
}
function geheZuNaechstemSpieler () {
if (w.besuchte_Spieler_aktuell + 1 < w.besuchte_Spieler.length) {
var Fenster = w.Layout.wnd.getOpen (w.Layout.wnd.TYPE_PLAYER_PROFILE);
if (Fenster.length == 0)
return false;
var wnd = Fenster [Fenster.length - 1];
wnd.toTop ();
w.besuchte_Spieler_Button = true;
++w.besuchte_Spieler_aktuell;
wnd.requestContentGet ("player", "get_profile_html", {
player_id: w.besuchte_Spieler [w.besuchte_Spieler_aktuell].id
});
wnd.setTitle ("Benutzerprofil - " + w.besuchte_Spieler [w.besuchte_Spieler_aktuell].Name);
return true;
}
return false;
}
function ChronikAnzeigenSpieler () {
var Fenster = w.Layout.wnd.getAllOpen ();
var i = Fenster.length;
while (i--)
if (Fenster [i].getTitle () == "Chronik") {
Fenster [i].getHandler ().refresh ();
return;
}
var wnd = w.Layout.wnd.Create (w.Layout.wnd.TYPE_HISTORY, "Chronik");
wnd.getHandler ().refresh ();
wnd.getHandler ().refresh.call (wnd.getHandler ());
}
function ChronikAktualisierenSpieler () {
var Fenster = w.Layout.wnd.getAllOpen ();
var i = Fenster.length;
while (i--)
if (Fenster [i].getTitle () == "Chronik") {
Fenster [i].getHandler ().refresh ();
return true;
}
return false;
}
function Spieler_auslesen (html, Spielerid) {
var Spieler = {id: Spielerid};
var i = 0, j = 0;
i = html.indexOf ("<h3>") + 4;
j = html.indexOf ("</h3>");
Spieler.Name = html.substring (i, j);
var Ausdruck = /Layout\.allianceProfile\.open\(\'([^\']*)\'\,([^\)]*)\)/;
if (Ausdruck.test (html)) {
if (html.indexOf (Ausdruck.source) < html.indexOf ('<div id=\"player_points\">')) {
Spieler.Allianz = RegExp.$1;
Spieler.Allianz_id = parseInt (RegExp.$2, 10);
} else {
Spieler.Allianz = '';
Spieler.Allianz_id = 0;
}
} else {
Spieler.Allianz = '';
Spieler.Allianz_id = 0;
}
Ausdruck = new RegExp ('(?:<)div id=\"player_points\"(?:>)(?:\n|.)*?(?:<)div(?:>)((?:\n|.)+?)\.(?:<)\/div(?:>)(?:\n|.)*?(?:<)div(?:>)((?:\n|.)+?)(?:<)\/div(?:>)');
Ausdruck.exec (html);
Spieler.Rang = RegExp.$1;
Spieler.Punkte = RegExp.$2;
var Stadtanzahl = 0;
var Kopie = html;
Ausdruck = /class=\"gp_town_link\">[^<]*<\/a>[^<]/;
while (Ausdruck.test (Kopie)) {
Kopie = Kopie.replace (Ausdruck, "");
++Stadtanzahl;
}
Spieler.Stadtanzahl = Stadtanzahl;
Spieler.Stadtpunktedurchschnitt = Math.round (Spieler.Punkte / Stadtanzahl);
return Spieler;
}
function Allianz_auslesen (html, Allianzid) {
var str = ""; //Protokollvariable
var Allianz = {id: Allianzid};
Ausdruck = new RegExp ('(?:<)div id=\"player_info\" class=\"bold\"(?:>)(?:\n|.)*?(?:<)h3(?:>)((?:\n|.)+?)(?:<)\/h3(?:>)(?:\n|.)*?(?:<)ul(?:>)(?:\n|.)*?(?:<)li(?:>)((?:\n|.)+?) Mitglieder(?:<)\/li(?:>)(?:\n|.)*?(?:<)li(?:>)((?:\n|.)+?) Punkte');
Ausdruck.exec (html);
Allianz.Name = RegExp.$1;
Allianz.Mitglieder = RegExp.$2;
Allianz.Punkte = RegExp.$3;
Allianz.Spielerpunktedurchschnitt = Math.round (Allianz.Punkte / Allianz.Mitglieder);
for (E in Allianz)
str += "Allianz." + E + ": " + Allianz [E] + "\n";
return Allianz;
}
function Funktion_erweitern (Objekt, Name, neue_Funktion) {
var Orginal = Objekt [Name];
Objekt [Name] = function () {
var Ergebnis = Orginal.apply (this, arguments);
try {
neue_Funktion.apply (this, arguments);
} catch (ex) {}
return Ergebnis;
}
}
//Methoden von WndHandlerPlayerProfile erweitern
(function () {
w.geheZuLetztemSpieler = geheZuLetztemSpieler;
w.geheZuNaechstemSpieler = geheZuNaechstemSpieler;
w.ChronikAnzeigenSpieler = ChronikAnzeigenSpieler;
w.ChronikAktualisierenSpieler = ChronikAktualisierenSpieler;
Funktion_erweitern (w.WndHandlerPlayerProfile.prototype, "onRcvData", function (data) {
w.besuchte_Spieler [w.besuchte_Spieler_aktuell] = Spieler_auslesen (data.html, w.besuchte_Spieler [w.besuchte_Spieler_aktuell].id) || w.besuchte_Spieler [w.besuchte_Spieler_aktuell];
var str = '<div id="player_info" class="bold">\n\t<h3>';
var str2 = "<a href=\"#\" onclick=\"geheZuLetztemSpieler ();\" class=\"gehe_zu_letzter_seite\" />";
var str3 = "<a href=\"#\" onclick=\"geheZuNaechstemSpieler ();\" class=\"gehe_zu_naechster_seite\" />";
var str4 = "<a href=\"#\" onclick=\"ChronikAnzeigenSpieler ();\" class=\"chronik_anzeigen\" />";
var ziel = data.html.indexOf ("<h3>"),
ziel2 = data.html.indexOf ("</h3>"),
Name = data.html.substring (ziel + 4, ziel2);
var str5 = '<a href="http://de.grepostats.com/home/search?search=' + Name + '&type=player" target="_blank" style="position: relative; left: 65px">';
$ ("div#player_info h3").html (str2 + str3 + str4 + str5 + Name + "</a>");
$ ("<style>").html ([
".gehe_zu_letzter_seite, .gehe_zu_naechster_seite, .chronik_anzeigen {",
" position: absolute;",
" height: 22px;",
" width: 22px;",
" top: 10px;",
" background-image: url(\"http://gpde.innogamescdn.com/images/game/layout/bigbutton_2.53.png\");",
"}",
".gehe_zu_letzter_seite {",
" background-position: -828px 0px;",
" left: 20px;",
"}",
".gehe_zu_naechster_seite {",
" background-position: -849px 0px;",
" left: 41px;",
"}",
".chronik_anzeigen {",
" background-position: -331px 0px;",
" left: 65px;",
"}",
".gehe_zu_letzter_seite:hover {",
" background-position: -828px -23px;",
"}",
".gehe_zu_naechster_seite:hover {",
" background-position: -849px -23px;",
"}",
".chronik_anzeigen:hover {",
" background-position: -331px -23px;",
"}",
].join ("\n")).appendTo (document.head);
$ ("a.gehe_zu_letzter_seite") .mousePopup (new w.MousePopup (unescape ("Zur%FCck zum letzten Profil")));
$ ("a.gehe_zu_naechster_seite").mousePopup (new w.MousePopup (unescape ("Vorw%E4rts zum n%E4chsten Profil")));
$ ("a.chronik_anzeigen") .mousePopup (new w.MousePopup (unescape ("Chronik anzeigen")));
ChronikAktualisierenSpieler ();
return true;
});
Funktion_erweitern (w.WndHandlerPlayerProfile.prototype, "onInit", function (title, UIopts) {
if (! w.besuchte_Spieler_Button) {
while (w.besuchte_Spieler_aktuell + 1 < w.besuchte_Spieler.length) {
w.besuchte_Spieler.pop ();
}
w.besuchte_Spieler.push ({id: UIopts.player_id});
w.besuchte_Spieler [w.besuchte_Spieler.length - 1].Name = "«unbekannt»";
++w.besuchte_Spieler_aktuell;
} else
w.besuchte_Spieler_Button = false;
Funktion_erweitern (this.wnd, "requestContentGet", function (controller, action, params, callback_success, external_reload) {
if (controller == "player" && action == "get_profile_html")
if (! w.besuchte_Spieler_Button) {
while (w.besuchte_Spieler_aktuell + 1 < w.besuchte_Spieler.length) {
w.besuchte_Spieler.pop ();
}
w.besuchte_Spieler.push ({id: params.player_id});
w.besuchte_Spieler [w.besuchte_Spieler.length - 1].Name = "«unbekannt»";
++w.besuchte_Spieler_aktuell;
} else
w.besuchte_Spieler_Button = false;
});
return true;
});
}) ();