您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Grepolis: List all researches of all towns
// ==UserScript== // @name Grepolis Academy Overview // @name:de Grepolis Akademie Übersicht // @name:en Grepolis Academy Overview // @namespace grepolis // @description Grepolis: List all researches of all towns // @description:de Grepolis: Eine Übersicht über alle Forschungen aller Städte. // @description:en Grepolis: 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.15 // @grant GM_listValues // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_info // @grant GM_xmlhttpRequest // ==/UserScript== /************************************************************************ * Main Script ***********************************************************************/ function XR_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(); }); /************************************************************************ * 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 if (XR.Lang.en !== undefined && XR.Lang.en[a] !== undefined && XR.Lang.en[a][b] !== undefined) { return XR.Lang.en[a][b]; } else { return XR.Lang.en[a]; } }, de : { meta : { lang : 'deutsch' }, academyoverview :"Akademie-Übersicht", research_technology :"Technologie erforschen", reset_technology :"Forschung zurücksetzen", confirm_reset_technology :"Bestätigungsabfrage beim Zurücksetzen einer Forschung", save :"Speichern" }, en : { meta : { lang : 'english' }, academyoverview :"Academy Overview", research_technology :"Research technology", reset_technology :"Reset technology", confirm_reset_technology :"Confirmation prompt when reset a technology", save :"Save" } }; /************************************************************************ * Ajax Call functions ***********************************************************************/ XR.CallAjaxFunction = { player : { index : function () { XR.Functions.SettingsWindow(); }, }, notify : { fetch : function () { console.log("fetch"); console.log(document.URL); }, } }; /************************************************************************ * Functions ***********************************************************************/ XR.Functions = { academyOverview : function () { var wnd = GPWindowMgr.Create(GPWindowMgr.TYPE_XR_ACADEMYOVERVIEW) || GPWindowMgr.getOpenFirst(GPWindowMgr.TYPE_XR_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 = '\ <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); position:relative; }\ .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); position:relative; }\ .XRresearchgrey { float:left; width:38px; height:24px; background:url(http://gpde.innogamescdn.com/images/game/survey/survey_sprite.png) no-repeat scroll -2px 0 / auto 36px rgba(0, 0, 0, 0); opacity:0.8; position:relative; }\ .XRresearchUp { position:absolute; bottom:2px; right:0px; cursor:pointer; width:15px; height:15px; background:url(http://gpde.innogamescdn.com/images/game/academy/up.png) no-repeat scroll 0 0 rgba(0, 0, 0, 0); background-size:15px auto; }\ .XRresearchUp:hover { background-position:0 -15px; }\ .XRresearchDown { position:absolute; bottom:2px; right:0px; cursor:pointer; width:15px; height:15px; background:url(http://gpde.innogamescdn.com/images/game/academy/down.png) no-repeat scroll 0 0 rgba(0, 0, 0, 0); background-size:15px auto; }\ .XRresearchDown:hover { background-position:0 -15px; }\ </style>\ <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()); 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.');*/ $("#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].buildings().attributes.academy < GameData.researches[research_ids[j]].building_dependencies.academy) { $("#researches_"+XRtownid).append('\ <div class="XRresearch">\ <div class="XRresearchleft"></div>\ <div class="XRresearchgrey"></div>\ <div class="XRresearchright"></div>\ </div>\ '); } else if (ITowns.towns[XRtownid].researches().attributes[research_ids[j]]===true) { XR_researchDown = (DATA.XR_reset_technology!=="checked") ? '' : '<div id="DOWN_'+XRtownid+'_'+research_ids[j]+'" class="XRresearchDown"></div>'; $("#researches_"+XRtownid).append('\ <div class="XRresearch">\ <div class="XRresearchleft"></div>\ <div class="XRresearchtrue">'+XR_researchDown+'</div>\ <div class="XRresearchright"></div>\ </div>\ '); } else { XR_researchUp = (DATA.XR_research_technology!=="checked" || XRacademypoints < GameData.researches[research_ids[j]].research_points) ? '' : '<div id="UP_'+XRtownid+'_'+research_ids[j]+'" class="XRresearchUp"></div>'; $("#researches_"+XRtownid).append('\ <div class="XRresearch">\ <div class="XRresearchleft"></div>\ <div class="XRresearchfalse">'+XR_researchUp+'</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"); $(".XRresearchUp").click(function() { console.log($(this).attr("id")+" Up"); splitid = $(this).attr("id").split("_"); for (i=0; i<splitid.length; i++) { console.log(splitid[i]); } thistownid = splitid[1]; thisresearchid = ''; for (i=2; i<splitid.length; i++) { if (i>2) { thisresearchid += '_'+splitid[i]; } else { thisresearchid += splitid[i]; } } $.ajax({ type: "POST", url: "/game/frontend_bridge?town_id="+ thistownid + "&action=execute&h="+ Game.csrfToken, data: 'json=%7B%22model_url%22%3A%22ResearchOrder%22%2C%22action_name%22%3A%22research%22%2C%22arguments%22%3A%7B%22id%22%3A%22'+thisresearchid+'%22%7D%2C%22town_id%22%3A'+thistownid+'%2C%22nl_init%22%3Atrue%7D' }).done(function (data) { console.log(data); $("#UP_"+thistownid+"_"+thisresearchid).parent().removeClass("XRresearchfalse").addClass("XRresearchtrue"); $("#UP_"+thistownid+"_"+thisresearchid).remove(); }); console.log($(this).attr("id")+" Up"); }); $(".XRresearchDown").click(function() { console.log($(this).attr("id")+" Down"); }); }, SettingsWindow : function () { if ($(".XR_settings").length===0) { $("DIV.settings-menu ul:last").append('\ <li class="with-icon">\ <img class="support-menu-item-icon XR_settings" src="http://gpde.innogamescdn.com/images/game/academy/points_25x25.png" style="width:20px; height:15px; vertical-align:bottom;">\ <a href="#" class="XR_settings">'+XR.Lang.get("academyoverview")+'</a>\ </li>\ '); $(".XR_settings").click(function() { console.log("XR_settings"); if ($("#settings_form").length === 0) { $(".settings-container").html('\ <div id="player_settings">\ <form id="settings_form" method="post" action="javascript:void(0)">\ <div id="s_academy_overview" class="section" style="display: block;">\ <div class="game_header bold">'+XR.Lang.get("academyoverview")+'</div>\ <div class="checkbox_new research_technology '+DATA.XR_research_technology+'">\ <div class="cbx_icon XR_cbox"></div><div class="cbx_caption">'+XR.Lang.get("research_technology")+'</div>\ </div>\ <div class="checkbox_new reset_technology '+DATA.XR_reset_technology+'">\ <div class="cbx_icon XR_cbox"></div><div class="cbx_caption">'+XR.Lang.get("reset_technology")+'</div>\ </div>\ <div style="margin-left:20px;" class="checkbox_new confirm_reset_technology '+DATA.XR_confirm_reset_technology+'">\ <div class="cbx_icon XR_cbox"></div><div class="cbx_caption">'+XR.Lang.get("confirm_reset_technology")+'</div>\ </div>\ </div>\ </form>\ </div>\ '); } else { $("#s_email_notifications").hide(); $("#s_notifications").hide(); $("#s_windows_mgr").hide(); $("#s_buffering").hide(); $("#s_map").hide(); $("#s_timezone").hide(); $("#s_city_preview").hide(); $("#s_confirmations").hide(); $("#s_sound_config").hide(); $("#settings_form").append('\ <div id="s_academy_overview" class="section" style="display: block;">\ <div class="game_header bold">'+XR.Lang.get("academyoverview")+'</div>\ <div class="checkbox_new research_technology '+DATA.XR_research_technology+'">\ <div class="cbx_icon XR_cbox"></div><div class="cbx_caption">'+XR.Lang.get("research_technology")+'</div>\ </div>\ <div class="checkbox_new reset_technology '+DATA.XR_reset_technology+'">\ <div class="cbx_icon XR_cbox"></div><div class="cbx_caption">'+XR.Lang.get("reset_technology")+'</div>\ </div>\ <div style="margin-left:20px;" class="checkbox_new confirm_reset_technology '+DATA.XR_confirm_reset_technology+'">\ <div class="cbx_icon XR_cbox"></div><div class="cbx_caption">'+XR.Lang.get("confirm_reset_technology")+'</div>\ </div>\ </div>\ '); } $(".research_technology").click(function() { if ($(this).hasClass("checked")) { $(this).removeClass("checked"); DATA.XR_research_technology = ""; XR_setValue("XR_research_technology", ""); } else { $(this).addClass("checked"); DATA.XR_research_technology = "checked"; XR_setValue("XR_research_technology", "checked"); } }); $(".reset_technology").click(function() { if ($(this).hasClass("checked")) { $(this).removeClass("checked"); DATA.XR_reset_technology = ""; XR_setValue("XR_reset_technology", ""); } else { $(this).addClass("checked"); DATA.XR_reset_technology = "checked"; XR_setValue("XR_reset_technology", "checked"); } }); $(".confirm_reset_technology").click(function() { if ($(this).hasClass("checked")) { $(this).removeClass("checked"); DATA.XR_confirm_reset_technology = ""; XR_setValue("XR_confirm_reset_technology", ""); } else { $(this).addClass("checked"); DATA.XR_confirm_reset_technology = "checked"; XR_setValue("XR_confirm_reset_technology", "checked"); } }); }); } }, 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 : XR.Lang.get("academyoverview") }; }; 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]) { XR.CallAjaxFunction[b][c](event, xhr, settings); } }); }); } /************************************************************************ * Start Method ***********************************************************************/ var DATA = { script_version : GM_info.script.version, XR_research_technology : (GM_getValue("XR_research_technology") !== undefined ? GM_getValue("XR_research_technology") : "checked"), XR_reset_technology : (GM_getValue("XR_reset_technology") !== undefined ? GM_getValue("XR_reset_technology") : ""), XR_confirm_reset_technology : (GM_getValue("XR_confirm_reset_technology") !== undefined ? GM_getValue("XR_confirm_reset_technology") : "checked") }; unsafeWindow.XR_setValue = function (name, val) { setTimeout(function () { GM_setValue(name, val); }, 0); }; if (typeof exportFunction == 'function') { exportFunction(unsafeWindow.XR_setValue, unsafeWindow, { defineAs : "XR_setValue" }); } function appendScript() { if (unsafeWindow.Game) { var XR_script = document.createElement('script'); XR_script.type = 'text/javascript'; XR_script.id ="XR_script"; XR_script.textContent = XR_main_script.toString() +"\n XR_main_script(" + JSON.stringify(DATA) +");"; document.body.appendChild(XR_script); } else if (mID==="") { setTimeout(function () { appendScript(); }, 100); } } appendScript();