// ==UserScript==
// @name academyoverview
// @name:de AcademyÜbersicht
// @name:en academyoverview
// @namespace grepolis
// @description List all researches of all towns
// @description:de Eine Übersicht über alle Forschungen aller Städte.
// @description:en List all researches of all towns
// @include http://*.grepolis.*
// @exclude http://forum.*.grepolis.*
// @exclude http://wiki.*.grepolis.*
// @icon http://s3.amazonaws.com/uso_ss/icon/185038/large.png?1385676234
// @version 2
// @grant GM_listValues
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_deleteValue
// @grant GM_info
// @grant GM_xmlhttpRequest
// ==/UserScript==
/************************************************************************
* Main Script
***********************************************************************/
function main_script(DATA) {
/************************************************************************
* Global variables
***********************************************************************/
var XR = {};
var wID = Game.world_id;
var mID = Game.market_id;
var aID = Game.alliance_id;
var sID = Game.player_id;
var pName = Game.player_name;
$(".tb_activities").css("left","227px");
$(".toolbar_buttons").append('\
<div class="toolbar_button academy">\
<div id="BTN_academyoverview" class="icon" style="background:url(http://gpde.innogamescdn.com/images/game/academy/points_25x25.png) no-repeat scroll 0 0 rgba(0, 0, 0, 0); margin:2px;">\
<div class="js-caption"></div>\
</div>\
</div>\
');
$("#BTN_academyoverview").click(function() {
XR.Functions.academyOverview();
});
/************************************************************************
* Templates
***********************************************************************/
XR.Templates = {
academyoverview : {
styles : '\
<style type="text/css">\
.fleft { float:left; }\
.cleft { clear:left; }\
.XRresearchHeader { float:left; border: 1px solid #000000; margin: 0 2px; }\
.XRresearch { float:left; margin: 0 2px; }\
.XRresearchleft { float:left; width:2px; height:24px; background:url(http://gpde.innogamescdn.com/images/game/survey/survey_sprite.png) no-repeat scroll 0px -39px rgba(0, 0, 0, 0); }\
.XRresearchright { float:left; width:2px; height:24px; background:url(http://gpde.innogamescdn.com/images/game/survey/survey_sprite.png) no-repeat scroll -360px -39px rgba(0, 0, 0, 0); }\
.XRresearchtrue { float:left; width:38px; height:24px; background:url(http://gpde.innogamescdn.com/images/game/survey/survey_sprite.png) no-repeat scroll -321px -39px rgba(0, 0, 0, 0); }\
.XRresearchfalse { float:left; width:38px; height:24px; background:url(http://gpde.innogamescdn.com/images/game/survey/survey_sprite.png) no-repeat scroll -2px -39px rgba(0, 0, 0, 0); }\
</style>'
}
};
/************************************************************************
* Languages
***********************************************************************/
XR.Lang = {
get : function (a, b) {
if (XR.Lang[mID] != undefined && XR.Lang[mID][a] != undefined && XR.Lang[mID][a][b] != undefined) {
return XR.Lang[mID][a][b]
} else if (XR.Lang[mID] != undefined && XR.Lang[mID][a] != undefined) {
return XR.Lang[mID][a]
} else {
return XR.Lang.en[a][b]
}
},
de : {
meta : {
lang : 'deutsch'
},
academyoverview :"Akademie-Übersicht"
},
en : {
meta : {
lang : 'english'
},
academyoverview :"Academy Overview"
}
};
/************************************************************************
* Ajax Call functions
***********************************************************************/
XR.CallAjaxFunction = {
town_overviews : {
culture_overview : function () {
//XR.Functions.cultureOverview();
},
start_celebration : function () {
//XR.Functions.cultureOverview();
},
start_all_celebrations : function () {
//XR.Functions.cultureOverview();
},
},
building_place : {
culture : function () {
console.log("Agora");
},
}
};
/************************************************************************
* Functions
***********************************************************************/
XR.Functions = {
academyOverview : function () {
console.log("-> AcademyOverview");
var wnd = GPWindowMgr.Create(GPWindowMgr.TYPE_XR_ACADEMYOVERVIEW) || GPWindowMgr.getOpenFirst(GPWindowMgr.TYPE_XR_ACADEMYOVERVIEW);
wnd.setTitle(XR.Lang.get("academyoverview"));
var research_ids = [];
for (i=1; i<=34; i=i+3) {
$.each(GameData.researches, function () {
if ($(this)[0].building_dependencies.academy==i) {
research_ids.push($(this)[0].id);
}
});
}
var factor = Math.min(Math.max(Math.ceil(research_ids.length/3), 10), 13);
wincontent = XR.Templates.academyoverview.styles + '\
<div style="margin-bottom:5px">\
<div style="width:850px; height:440px; overflow:hidden; background:url(http://gpde.innogamescdn.com/images/game/overviews/fixed_table_header_bg.jpg) repeat-x scroll 0 0 rgba(0, 0, 0, 0)">\
<div id="header">\
<div class="townlist_width" style="width:200px; height:40px; float:left;"></div>\
</div>\
<div id="datalist" style="width:850px; height:400px; overflow:auto;">\
<ul id="academyoverview_townlist" class="game_list">\
</ul>\
</div>\
</div>\
</div>';
wnd.setContent(wincontent);
if (research_ids.length>0) {
$("#header").append('<a href="#" id="moveleft" class="game_arrow_left" style="margin:11px 4px 0 0;"></a><div id="academyoverview_container" style="float:left; width:'+Math.round(factor*46).toString()+'px; height:42px; overflow:hidden;"><div id="academyoverview_header" class="academyoverview_movetab" style="width:'+Math.round(research_ids.length*46).toString()+'px; height:42px; position:relative; left:0px;"></div></div><a href="#" id="moveright" class="game_arrow_right" style="margin:11px 0 0 4px;"></a>');
$("#moveleft").click(function(){
if (parseInt($("#academyoverview_header").css("left"))<0) {
$(".academyoverview_movetab").animate({left:'+='+factor*46+'px'},"slow");
} else {
$(".academyoverview_movetab").animate({left:'-'+(Math.ceil(research_ids.length/factor)-1)*factor*46+'px'},"slow");
}
});
$("#moveright").click(function(){
if (parseInt($("#academyoverview_header").css("left"))<=(Math.ceil(research_ids.length/factor)-1)*factor*-46) {
$(".academyoverview_movetab").animate({left:'0px'},"slow");
} else {
$(".academyoverview_movetab").animate({left:'-='+factor*46+'px'},"slow");
}
});
}
$.each(research_ids, function(i, val) {
if (research_ids[i]=="take_over") {
$("#academyoverview_header").append('<div class="research_box XRresearchHeader"><div class="research_icon research40x40 '+research_ids[i]+'_old"></div></div>');
} else {
$("#academyoverview_header").append('\
<div class="research_box XRresearchHeader">\
<div class="research_icon research40x40 '+research_ids[i]+'" style="position:relative;">\
<div style="position:absolute; bottom:0px; right:2px; color:#FFF; text-shadow:1px 1px 0 #000; font-family:Verdana; font-size:14px; font-weight:700;">'+GameData.researches[research_ids[i]].research_points+'</div>\
</div>\
</div>\
');
}
});
for (i=research_ids.length; i<=Math.floor(research_ids.length/factor+1)*factor; i++) {
$("#academyoverview_header").append('<div class="research_box XRresearchHeader" style="border-color:transparent;"><div class="research_icon research40x40" style="background-position:-580px -580px;"></div></div>');
}
XRTownNames = [];
for (i=0; i<ITowns.towns_collection.length; i++) {
XRTownNames.push(ITowns.towns_collection.models[i].attributes.name);
}
XRTownNames.sort();
var liclass = "even";
for (k=0; k<XRTownNames.length; k++) {
for (i=0; i<ITowns.towns_collection.length; i++) {
if (XRTownNames[k] == ITowns.towns_collection.models[i].attributes.name) {
XRtownid = ITowns.towns_collection.models[i].attributes.id;
XRtownname = ITowns.towns_collection.models[i].attributes.name;
XRtownlink = ITowns.towns_collection.models[i].attributes.link_fragment;
XRacademypoints = (ITowns.getTown(XRtownid).getBuildings().attributes.academy * GameDataResearches.getResearchPointsPerAcademyLevel()) + (ITowns.getTown(XRtownid).getBuildings().attributes.library * GameDataResearches.getResearchPointsPerLibraryLevel());
$("#academyoverview_townlist").append('\
<li class="'+liclass+'">\
<div class="townlist_width" style="width:200px; float:left; margin-top:2px;">\
<a href="#'+XRtownlink+'" class="gp_town_link">'+XRtownname+'</a>\
<div id="XRpoints'+XRtownid+'" style="float:right; width:40px; height:20px; font-size:12px; line-height:20px;">'+XRacademypoints+' P.</div>\
<div style="clear: both;"></div>\
</div>\
<div style="float:left; width:20px; height:20px; background:url(http://gpde.innogamescdn.com/images/game/academy/points_25x25.png) no-repeat;"></div>\
<div style="float:left; width:'+Math.round(factor*46).toString()+'px; height:24px; overflow:hidden;">\
<div id="researches_'+XRtownid+'" class="academyoverview_movetab" style="width:'+Math.round(research_ids.length*46).toString()+'px; height:24px; position:relative; left:0px;">\
</div>\
</div>\
<div style="clear:left;"></div>\
</li>\
');
for (j=0; j<research_ids.length; j++) {
if (ITowns.towns[XRtownid].researches().attributes[research_ids[j]]==true) {
XRacademypoints -= GameData.researches[research_ids[j]].research_points;
$("#XRpoints"+XRtownid).html(XRacademypoints+' P.');
$("#researches_"+XRtownid).append('<div class="XRresearch"><div class="XRresearchleft"></div><div class="XRresearchtrue"></div><div class="XRresearchright"></div></div>');
} else {
$("#researches_"+XRtownid).append('<div class="XRresearch"><div class="XRresearchleft"></div><div class="XRresearchfalse"></div><div class="XRresearchright"></div></div>');
}
}
if (liclass=="even") { liclass = "odd"; } else { liclass = "even"; }
break;
}
}
}
$(".research40x40").css("background-repeat","no-repeat");
$(".townlist_width").css("width",Math.round(200+((13-factor)*46)).toString()+"px");
},
mutationobserver : function () {
var observer = new MutationObserver(function (mutations) {
});
observer.observe($('body').get(0), {
attributes : false,
childList : true,
characterData : false
});
},
windowmanager : function () {
//Academyoverview
function WndHandlerXRacademyoverview(wndhandle) {
this.wnd = wndhandle;
}
Function.prototype.inherits.call(WndHandlerXRacademyoverview, WndHandlerDefault);
WndHandlerXRacademyoverview.prototype.getDefaultWindowOptions = function () {
return {
position : ["center","center"],
width : 850,
height : 500,
minimizable : true,
title :"Academy Overview"
};
};
GPWindowMgr.addWndType("XR_ACADEMYOVERVIEW","xracademyoverview", WndHandlerXRacademyoverview, 1);
}
};
/************************************************************************
* Observer
***********************************************************************/
$.Observer(GameEvents.game.load).subscribe('XR', function (e, data) {
XR.Functions.mutationobserver();
XR.Functions.windowmanager();
$(document).ajaxComplete(function (event, xhr, settings) {
var a = settings.url.split("?");
var b = a[0].substr(6);
var c = a[1].split("&")[1].substr(7);
console.log(b+" "+c);
if (b in XR.CallAjaxFunction && c in XR.CallAjaxFunction[b]) {
console.log("Function found");
XR.CallAjaxFunction[b][c](event, xhr, settings);
}
});
});
}
/************************************************************************
* Start Method
***********************************************************************/
var DATA = {
script_version : GM_info.script.version
};
function appendScript() {
if (unsafeWindow.Game) {
var XR_script = document.createElement('script');
XR_script.type = 'text/javascript';
XR_script.id ="XR_script";
XR_script.textContent = main_script.toString() +"\n main_script(" + JSON.stringify(DATA) +");";
document.body.appendChild(XR_script);
} else if (mID=="") {
setTimeout(function () {
appendScript();
}, 100);
}
}
appendScript();