// Simple translation updates by Whiskers, plus font size change. Whiskers takes NO CREDITS towards this script, this is just a simple comment.
//
// version 1.4.2 (lite)
// 2008-05-21
// author - immortalnights
// contributions by - wphilipw and ecamanaut
//
// homepage - http://www.ikaraimlibrary.com/
// for up to date details and version, please check the home page.
//
// Please do not remove the above details; it is impossible to ensure
// all copys of this script are kept upto date, people need to know
// where they can go to get the most up to date version.
//
// For full version history please see, http://www.ikariamlibrary.com/
//
// ==UserScript==
// @name IkariamInlineScore_v1_4_2
// @namespace ikariamScript
// @description Displays a selected players score in the Info section when either their town is selected on the map, or you are viewing their town.
// @include http://*.ikariam.*/*
// @exclude http://board.ikariam.*/*
// ==/UserScript==
var baseDivCreated = false;
var gameServer = top.location.host;
var gameServerParts = gameServer.split(".");
var subDomain = gameServerParts[1];
var domain = gameServerParts[2];
var post = {
score: "score",
military: "army_score_main",
gold: "trader_score_secondary" };
var updateCounter =0;
var scoreTypes = {
0: "score",
1: "military",
2: "gold",
3: "allyscore"};
var scoreShown = false;
getElementsByClass = function(inElement, className, findIn) {
var all = inElement.getElementsByTagName('*');
var elements = [];
for (var e = 0; e < all.length; e++) {
if (findIn == true) {
if (all[e].className.indexOf(className) > 0) {
elements[elements.length] = all[e];
}
} else {
if (all[e].className == className) {
elements[elements.length] = all[e];
}
}
}
return elements;
};
// called using player name, score type,
function requestScore(playerName, type, onload) {
GM_xmlhttpRequest({
method:'POST',
url:'http://' + gameServer + '/index.php',
data:"view=highscore&highscoreType=" + post[type] + "&searchUser=" + playerName,
headers: {
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
'Content-type': 'application/x-www-form-urlencoded',
'Accept': 'application/atom+xml,application/xml,text/xml',
'Referer': 'http://' + gameServer + '/index.php',
'Cookie': document.cookie
},
onload:onload
});
}
function requestAlliance(allyId, onload) {
GM_xmlhttpRequest({
method:'POST',
url:'http://' + gameServer + '/index.php',
data:"view=allyPage&allyId=" + allyId,
headers: {
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
'Content-type': 'application/x-www-form-urlencoded',
'Accept': 'application/atom+xml,application/xml,text/xml',
'Referer': 'http://' + gameServer + '/index.php',
'Cookie': document.cookie
},
onload:onload
});
}
function fmtNumber(n) {
n += "";
for (var i = (n.length - 3); i > 0; i -= 3) {
n = n.slice(0, i) +","+ n.slice(i);
}
return n;
}
function createBaseDiv() {
baseDivCreated = true;
scoreElement = document.createElement("div");
scoreElement.setAttribute("id", "inlinescore");
var scoreDiv = <>
<li style="margin: 2px 10px;font-size:11px" id="ally_members" class="ally">
<span style="float:left;" class="textLabel">{lang['allyscore']}:</span>
<div id="allyscore">{lang['unknown']}</div>
</li>
<li style="margin: 2px 10px;font-size:11px" id="total_score" class="ally">
<span style="float:left;" class="textLabel">{lang['score']}:</span>
<div id="score">{lang['unknown']}</div>
</li>
<li style="margin: 2px 10px;font-size:11px" id="army_score_main" class="ally">
<span style="float:left;" class="textLabel">{lang['military']}:</span>
<div id="military">{lang['unknown']}</div>
</li>
<li style="margin: 2px 10px;font-size:11px" id="trader_score_secondary" class="ally">
<span style="float:left;" class="textLabel">{lang['gold']}:</span>
<div id="gold">{lang['unknown']}</div>
</li>
</>;
scoreElement.innerHTML = scoreDiv;
// get container for Island view
var informationContainer = document.getElementById('infocontainer');
if (!informationContainer) {
informationContainer = document.getElementById('information');
}
var allyClass = getElementsByClass(informationContainer, "ally")
insertAfter(scoreElement, allyClass[0]);
scoreShown = true;
}
function insertAfter(newElement,targetElement) {
//target is what you want it to go after. Look for this elements parent.
var parent = targetElement.parentNode;
//if the parents lastchild is the targetElement...
if(parent.lastchild == targetElement) {
//add the newElement after the target element.
parent.appendChild(newElement);
} else {
// else the target has siblings, insert the new element between the target and it's next sibling.
parent.insertBefore(newElement, targetElement.nextSibling);
}
}
function updateScore(type, score) {
document.getElementById(type).innerHTML = score;
}
function updateDetails(type, playerName, townLevel, responseText) {
var hiddenDiv = document.createElement("div");
hiddenDiv.setAttribute("style", "display: hidden;");
document.body.appendChild(hiddenDiv);
hiddenDiv.innerHTML = responseText;
var score = getElementsByClass(hiddenDiv, "score", false);
var pname = getElementsByClass(hiddenDiv, "name", false);
for (var e = 0; e < pname.length; e++) {
if (pname[e].innerHTML == playerName) {
var totalScore = score[e].innerHTML;
}
}
document.body.removeChild(hiddenDiv);
if (type == "gold") {
if (totalScore) {
if (totalScore.indexOf(",") != -1) {
gold = parseInt(totalScore.replace(/,/g, ""),10);
} else {
gold = parseInt(totalScore.replace(/[.]/g, ""),10);
}
lootable = Math.round(townLevel * (townLevel - 1) / 10000 * gold);
totalScore += " (" + fmtNumber(lootable) + ")";
} else {
totalScore = "0";
}
}
GM_setValue(type, totalScore);
document.getElementById(type).innerHTML = totalScore;
}
function updateAllyDetails(divId, responseText) {
var hiddenDiv = document.createElement("div");
hiddenDiv.setAttribute("style", "display: none;");
document.body.appendChild(hiddenDiv);
hiddenDiv.innerHTML = responseText;
var allyTable = getElementsByClass(hiddenDiv, 'content', false);
var members = parseInt(allyTable[1].childNodes[1].childNodes[1].childNodes[2].childNodes[2].innerHTML, 10);
var posScore = allyTable[1].childNodes[1].childNodes[1].childNodes[6].childNodes[2].innerHTML;
posScore = posScore.split("(")[1];
posScore = posScore.split(")")[0];
document.body.removeChild(hiddenDiv);
GM_setValue(divId, (posScore + " (" + members + ")"));
document.getElementById(divId).innerHTML = (posScore + " (" + members + ")");
}
function cityInformation() {
if (!document.getElementById("inlinescore")) {
createBaseDiv();
}
// Get the lanugage
lang = defineLanguage(domain);
var playerScore = -1;
// Remove the "points" information (as of 0.2.8), and get the value for later
var infoContainer = document.getElementById("infocontainer");
if (infoContainer) {
var pointsLi = getElementsByClass(infoContainer, "name", false);
if (pointsLi[1]) {
playerScore = parseInt(pointsLi[1].innerHTML.split(/>/)[2].replace(/,/g, ""),10);
pointsLi[1].style.display = "none";
}
}
// Remove the disabled actions... looks messy when it happens
var actions = document.getElementById("actions");
if (actions) {
textSpans = getElementsByClass(actions, "disabled", true);
for (var cnt = 0; cnt < textSpans.length;cnt++) {
//textSpans[cnt].style.display = "none";
}
}
// Removes the report player link, again causes a fliker
var reportPlayer = getElementsByClass(document, "reportPlayer");
//reportPlayer[0].style.display = "none";
updateScore("score", lang.fetch); updateScore("military", lang.fetch); updateScore("gold", lang.fetch); updateScore("allyscore", lang.fetch);
var listParts = "";
// Get the players name
listParts = getElementsByClass(document,"owner", false)[0].innerHTML.split(">");
listParts[2] = listParts[2].split("<")[0];
var playerName = listParts[2].replace(/^\s+|\s+$/g, ''); // trim up the Player Name// get the players name
playerName = playerName.replace(/ /g, " "); // replace any silly nubspaces!
// Get the players town level for gold pillage data
listParts = getElementsByClass(document,"citylevel", false)[0].innerHTML.split(">");
listParts[2] = listParts[2].split("<")[0];
var townLevel = parseInt(listParts[2].replace(/^\s+|\s+$/g, ''), 10); // trim up the town level
// Get the players alliance id for alliance check
listParts = getElementsByClass(document,"ally", false)[0].innerHTML.split(">");
if (listParts.length == 5 || listParts.length == 8) {
listParts = listParts[2].split("&")[1];
var allyId = parseInt(listParts.split("=")[1].replace(/^\s+|\s+$/g, ''), 10); // trim up the ally id
} else {
var allyId = -1;
GM_setValue("allyscore", "-");
}
var checkedTime = (new Date().getTime() - (1000*60*10));
if (playerName != GM_getValue("lastPlayerCheck") || GM_getValue("lastCheckedTimestamp") < checkedTime || GM_getValue("lastServerCheck") != gameServer) {
if (playerScore > -1) {
updateScore('score', fmtNumber(playerScore));
} else {
requestScore(playerName, 'score', function(responseDetails) {
updateDetails('score', playerName, townLevel, responseDetails.responseText);
});
}
requestScore(playerName, 'military', function(responseDetails) {
updateDetails('military', playerName, townLevel, responseDetails.responseText);
});
requestScore(playerName, 'gold', function(responseDetails) {
updateDetails('gold', playerName, townLevel, responseDetails.responseText);
});
if (allyId != -1) {
requestAlliance(allyId, function(responseDetails) {
updateAllyDetails('allyscore', responseDetails.responseText);
});
} else {
updateScore("allyscore", "-")
document.getElementById('ally_members').style.display = "none";
}
GM_setValue("lastCheckedTimestamp", new Date().getTime() + "");
GM_setValue("lastPlayerCheck", playerName);
GM_setValue("lastServerCheck", gameServer);
} else {
for (var interation = 0;interation < 4; interation++) {
var type = scoreTypes[interation];
if (type == "allyscore" && GM_getValue(type) == "-") {
document.getElementById(type).innerHTML = GM_getValue(type);
document.getElementById('ally_members').style.display = "none";
} else {
document.getElementById(type).innerHTML = GM_getValue(type);
}
}
}
}
function defineLanguage(langTDL) {
switch (langTDL) {
case "ru":
language = { inline:"Inline Score",
fetch:"Ищем",
unknown:"Нету",
allyscore:"Счет Альянса",
score:"Счет Общий",
military:"Счет Военный",
gold:"Счет Золото" };
break;
case "fr":
language = { inline:"Inline Score",
fetch:"cargando...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Points",
military:"Troupes",
gold:"Oro" };
break;
case "gr":
language = { inline:"Inline Score",
fetch:"ανάκτηση...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Βαθμολογία",
military:"Στρατεύματα",
gold:"Χρυσός" };
break;
case "de":
language = { inline:"Inline Score",
fetch:"Laden...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Gesamtpunkte",
military:"Generäle",
gold:"Goldbestand" }
break;
case "tr":
language = { inline:"Inline Score",
fetch:"Yukleniyor...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Toplam Puan",
military:"Askeri Puan",
gold:"Altin Puani" };
break;
case "cz":
language = { inline:"Inline Score",
fetch: "nahrávam...",
unknown:"Unknown",
allyscore:"Ally Score",
score: "Celkové skóre",
military: "Vojenské skóre",
gold: "Zlatá zásoba" };
break;
case "sk":
language = { inline:"Inline Score",
fetch:"nahrávam...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Celkové Skóre",
military:"Vojenské skóre",
gold:"Zlatá zásoba" };
break;
case "tw":
language = { inline:"分數顯示",
fetch:"讀取中...喵喵喵",
unknown:"Unknown",
allyscore:"聯盟分數",
score:"總積分",
military:"戰爭將軍",
gold:"黃金存量" };
break;
case "hu":
language = { inline:"Inline Score",
fetch:"Töltés...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Összpontszám",
military:"Katonai pont",
gold:"Arany" };
break;
case "se":
language = { inline:"Inline Score",
fetch:"hämtar...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Totalpoäng",
military:"Generalspoäng",
gold:"Guldmängd" }
break;
case "pl":
language = { inline:"Inline Score",
fetch:"Ładowanie...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Całkowity Wynik",
military:"Generałowie",
gold:"Zapas Złota" };
break;
case "ro":
language = { inline:"Inline Score",
fetch:"Incarc...",
unknown:"Necunoscut",
allyscore:"Scor Alianta",
score:"Scor Total",
military:"Scor Armata",
gold:"Scor Aur" };
break;
case "il":
language = { inline:"Inline Score",
fetch:"טוען...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"ניקוד",
military:"כח צבאי",
gold:"זהב" };
break;
case "ikariam":
if (subDomain == "fi") {
language = { inline:"Inline Score",
fetch:"haetaan...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Kokonaispisteet",
military:"Sotilaspisteet",
gold:"Kulta" };
}
if (subDomain == "ae") {
language = { inline:"Inline Score",
fetch:"يجلب...",
unknown:"Unknown",
allyscore:"نقاط التحالف",
score:"المجموع الكلي",
military:"النقاط العسكريه",
gold:"الذهب" };
}
if (subDomain == "ba") {
language = { inline:"Inline Score",
fetch:"dohvati...",
unknown:"nemoguce",
allyscore:"Bodovi Saveza",
score:"Ukupni Rezultat",
military:"Vojska",
gold:"Zlato" };
}
break;
default:
language = { inline:"Inline Score",
fetch:"Fetching...",
unknown:"Unknown",
allyscore:"Ally Score",
score:"Total Score",
military:"Military Score",
gold:"Gold Score" };
break;
}
return language;
}
function init() {
lang = defineLanguage(domain);
var linkElements = document.getElementsByTagName('a');
for (var i = 0; i < linkElements.length; i++) {
if (linkElements[i].id.search(/city_[0-9]*/) != -1) {
linkElements[i].addEventListener('click', function() { window.setTimeout(cityInformation, 1); }, false);
}
}
var informationDiv = document.getElementById('information');
if (informationDiv) {
var listElements = informationDiv.getElementsByTagName('li');
if (listElements.length > 0) {
cityInformation();
}
}
}
init();