// ==UserScript== // @name Asylamba's Oracle // @namespace asylamba // @description Userscript dédié à l'amélioration de l'UI d'Asylamba // @include http://s14.asylamba.com/* // @match http://s14.asylamba.com/* // @grant GM_xmlhttpRequest // @updateURL https://github.com/Genroa/asylambasoracle/raw/master/Asylambas_Oracle.user.js // @version 1.7.2 // @author Genroa & Naji // @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js // ==/UserScript== //################# UTILITIES ################ function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { createCookie(name,"",-1); } function getPosition(str, m, i) { return str.split(m, i).join(m).length; } function addCss(newCss) { if(!$('#custom-css').length) { $("head").append(''); } $('#custom-css').append(newCss); } /* Factions: Rebelle/vide: 0 Ordre Impérial: 1 Marche de Cardan: 2 Ligue: 3 Province de Nerve: 4 */ var mapPicsOfFactions = [0, 1, 4, 8, 9]; //############################################ //############# ORACLES MAP ################## var optionToggleBestMerchWays_pic = "http://img11.hostingpics.net/pics/170120merchways.png"; var bestMerchWays_pic = "http://img15.hostingpics.net/pics/203023merchWay.png"; var bestOtherFactionsMerchWays_pic = "http://img15.hostingpics.net/pics/615926merchWayOtherFaction.png"; var merchWayMinDistance_pic = "http://img11.hostingpics.net/pics/506805merchwaysmin.png"; var merchWayMaxDistance_pic = "http://img11.hostingpics.net/pics/373043merchwaysmax.png"; function OraclesMap(){ this.myX = undefined; this.myY = undefined; this.myFactionSpriteNumber = undefined; this.displayFilter = true; this.sectorFilter = "all"; this.factionFilter = "all"; this.merchWayMinDistance = 95; this.merchWayMaxDistance = 100; } OraclesMap.prototype.initialize = function(){ var infos = $("div#map"); this.myX = infos.attr("data-begin-x-position"); this.myY = infos.attr("data-begin-y-position"); var selectedPlanet = $('.loadSystem[data-x-position="'+this.myX+'"][data-y-position="'+this.myY+'"]'); var image = selectedPlanet.children().first(); this.myFactionSpriteNumber = getFactionSpriteNumberFromImageSrc(image.attr("src")); //alert(this.myFactionSpriteNumber); } OraclesMap.prototype.loadConfig = function(){ var strData = readCookie("oraclesmap.data"); if(strData){ var jsonData = eval("(" + strData + ")"); this.sectorFilter = jsonData.sectorFilter; this.factionFilter= jsonData.factionFilter; this.displayFilter= jsonData.displayFilter; this.merchWayMinDistance = jsonData.merchWayMinDistance; this.merchWayMaxDistance = jsonData.merchWayMaxDistance; } } OraclesMap.prototype.saveConfig = function(){ var save = {}; save.sectorFilter = this.sectorFilter; save.factionFilter= this.factionFilter; save.displayFilter= this.displayFilter; save.merchWayMinDistance = this.merchWayMinDistance; save.merchWayMaxDistance = this.merchWayMaxDistance; createCookie("oraclesmap.data", JSON.stringify(save), 365); } OraclesMap.prototype.checkDistance = function(x1, y1, x2, y2){ var distance = Math.floor(Math.sqrt( Math.pow((x2-x1), 2) + Math.pow((y2-y1), 2) )); if(distance <= this.merchWayMaxDistance && distance >= this.merchWayMinDistance) { return true; } return false; } OraclesMap.prototype.matchFilters = function(planet){ //Check distance if(!this.displayFilter) return false; if(!this.checkDistance(this.myX, this.myY, planet.attr('data-x-position'), planet.attr('data-y-position'))){ return false; } return true; } OraclesMap.prototype.refresh = function(){ var map = this; $.each($('.loadSystem'), function(){ if( map.matchFilters($(this)) ){ $(this).children().closest("span").find(".oraclesMapBestMerchWay").show(); } else{ $(this).children().closest("span").find(".oraclesMapBestMerchWay").hide(); } }); } OraclesMap.prototype.toggleDisplayBestMerchWays = function(){ this.displayFilter = !this.displayFilter; if(this.displayFilter){ this.refresh(); } else{ $('.oraclesMapBestMerchWay').each(function(){ $(this).hide(); }); } this.saveConfig(); } OraclesMap.prototype.displayUI = function(){ //If no UI, generate it if(!$('.oraclesMapFilter').length){ //Générer l'UI var active = ""; if(this.displayFilter){ active = " active"; } //Custom CSS addCss("#map-option{ max-width: 186px; background-repeat: initial; height:70px; }"); addCss("#map-option::before{ height: 76px; }"); addCss("#map-option::after{ height: 76px; }"); addCss("#map-option a{ margin-top: 2px; }"); addCss("#map-content{ top: 135px; }"); //Options $('#map-option > a.sh.hb.lb.moveTo.switch-class').after(''); document.getElementById('optionMerchWayMinDistance').addEventListener('click', chooseMerchWayMinDistance, false); $('#optionMerchWayMinDistance').after(''); document.getElementById('optionMerchWayMaxDistance').addEventListener('click', chooseMerchWayMaxDistance, false); $('#optionMerchWayMaxDistance').after(''); document.getElementById('optionToggleBestMerchWays').addEventListener('click', toggleDisplay, false); //$('a.switch-class:nth-child(1)').before(''); //Générer les points var map = this; $.each($('.loadSystem'), function(){ var iconsList = ''; var fc = getFactionSpriteNumberFromImageSrc( $(this).children().first().attr('src')); if(fc != "0") { if(map.myFactionSpriteNumber == fc) { iconsList += ''; } else { iconsList += ''; } } //+ ' ' iconsList += ''; $(this).children().first().after(iconsList); }); } this.refresh(); } //### function getFactionSpriteNumberFromImageSrc(src){ return src.substring(src.length-5, src.length).charAt(0); } function toggleDisplay(){ oraclesMap.toggleDisplayBestMerchWays(); if(oraclesMap.displayFilter) { $("#optionToggleBestMerchWays").addClass("active"); } else { $("#optionToggleBestMerchWays").removeClass("active"); } } function chooseMerchWayMinDistance() { var newVal = prompt("Définissez la borne inférieure", oraclesMap.merchWayMinDistance); if(newVal != null) { oraclesMap.merchWayMinDistance = newVal; oraclesMap.saveConfig(); oraclesMap.refresh(); } } function chooseMerchWayMaxDistance() { var newVal = prompt("Définissez la borne supérieure", oraclesMap.merchWayMaxDistance); if(newVal != null) { oraclesMap.merchWayMaxDistance = newVal; oraclesMap.saveConfig(); oraclesMap.refresh(); } } //### function loadOraclesMap(){ window.oraclesMap = new OraclesMap(); var map = window.oraclesMap; //read page for data map.initialize(); //load filter config map.loadConfig(); //display/create UI and icons. Will call refresh map.displayUI(); } //############################################ //########### REMAINING TIME ################# var currentRessources = 0; // ressources currently in warehouse var production = 0; // current ressources production // zero padding function function pad(n, width, z) { z = z || '0'; n = n + ''; return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n; } // Format time based on remaining tick function beautifulTime(remainingTick, d) { var time = "", padding = 1; if (remainingTick > 24) { time += (Math.floor(remainingTick / 24)) + 'j '; remainingTick = remainingTick - (Math.floor(remainingTick / 24) * 24); padding = 2; } if ((remainingTick-1) > 0) { time += pad(remainingTick-1, padding) + 'h'; } if (d.getMinutes() !== 0) { time += pad(60 - d.getMinutes(), 2) + 'm'; } return time; } // Display the remaining time before the warehouse is full function remainingWarehouseTime() { currentRessources = parseInt($("#tools-refinery > div.overflow > div.number-box.grey span.value").text().replace(/ /g, "")); var fillingPercent = parseInt($("#tools-refinery > div.overflow > div.number-box.grey span.progress-bar > span").css('width')) / 100; if (fillingPercent < 1) { var remainingTick = Math.ceil((currentRessources / fillingPercent - currentRessources) / production); var remainingTime = beautifulTime(remainingTick, new Date()); $("#tools-refinery > div.overflow > div.number-box.grey span.value").append(' ' + remainingTick + 'r (' + remainingTime + ')'); } } function remainingGeneratorTime() { var missingRessourceRegex = /il manque ([0-9 ]+) ressource/i; var d = new Date(); var match; $('div.build-item > span.button.disable.hb.lt').each(function() { if ((match = missingRessourceRegex.exec($(this).attr('title'))) !== null) { match = parseInt(match[1].replace(/ /g, "")); var remainingTick = Math.ceil(match / production); var remainingTime = beautifulTime(remainingTick, d); $(this).attr('title', $(this).attr('title') + ', ' + remainingTick + ' releves restantes (' + remainingTime + ')'); } }); } function remainingTechnosphereTime() { var d = new Date(); $('div.build-item:not(.disable) > span.button.disable').each(function() { if ($(this).text().indexOf('pas assez de ressources') > -1) { var remainingTick = Math.ceil((parseInt($(this).children('span.final-cost:eq(0)').text().replace(/ /g, ''))-currentRessources)/production); var remainingTime = beautifulTime(remainingTick, d); $(this).children('br').before(', ' + remainingTick + 'r (' + remainingTime + ')'); } }); } function loadRemainingTimes() { production = $("#tools-refinery > div.overflow > div.number-box:first-child span.value").text().replace(/ /g, "").split("+"); if (production.length > 1) production = parseInt(production[0]) + parseInt(production[1]); else production = parseInt(production[0]); // Display the remaining time before the warehouse is full remainingWarehouseTime(); // Display the remaining time before being able to build every building if (location.href.indexOf('bases/view-generator') > -1) { remainingGeneratorTime(); } // Display the remaining time before being able to research a technology if (location.href.indexOf('bases/view-technosphere') > -1) { remainingTechnosphereTime(); } } //############################################ //############## QUICK MENUS ################# function addQuickMenus() { var basePath = window.location.href; var pos = getPosition(basePath, '/', 4) ; basePath = basePath.substring(0, pos+1); addMoneyMenu(basePath); addLeagueMenu(basePath); addAdmiralyMenu(basePath); } function addMoneyMenu(basePath) { var moneyMenu = ' '; $('.square[title=finances] > img').first().after(moneyMenu); $('.square[title=finances]').mouseenter(function(){ clearTimeout($(this).data('timeoutId')); $('#moneyMenu').stop(true); $('#moneyMenu').fadeIn(); }); $('#moneyMenu, .square[title=finances]').mouseleave(function(){ var elem = $('#moneyMenu'); timeoutId = setTimeout(function(){ elem.stop(true); elem.fadeOut(); }, 800); $('.square[title=finances]').data('timeoutId', timeoutId); }); $('.square[title=finances]').removeClass("hb"); } function addLeagueMenu(basePath) { var leagueMenu =' '; $('.square[title=faction] > img').first().after(leagueMenu); $('.square[title=faction]').mouseenter(function(){ clearTimeout($(this).data('timeoutId')); $('#leagueMenu').stop(true); $('#leagueMenu').fadeIn(); }); $('#leagueMenu, .square[title=faction]').mouseleave(function(){ var elem = $('#leagueMenu'); timeoutId = setTimeout(function(){ elem.stop(true); elem.fadeOut(); }, 800); $('.square[title=faction]').data('timeoutId', timeoutId); }); $('.square[title=faction]').removeClass("hb"); } function addAdmiralyMenu(basePath) { var admiraltyMenu = ' '; $('.square[title=amirauté] > img').first().after(admiraltyMenu); $('.square[title=amirauté]').mouseenter(function(){ clearTimeout($(this).data('timeoutId')); $('#admiraltyMenu').stop(true); $('#admiraltyMenu').fadeIn(); }); $('#admiraltyMenu, .square[title=amirauté]').mouseleave(function(){ var elem = $('#admiraltyMenu'); timeoutId = setTimeout(function(){ elem.stop(true); elem.fadeOut(); }, 800); $('.square[title=amirauté]').data('timeoutId', timeoutId); }); $('.square[title=amirauté]').removeClass("hb"); } //############################################ //################ AOConfig ################## function AOConfig() { this.config = {}; } AOConfig.prototype.getValue = function(key) { return this.config[key]; } AOConfig.prototype.setValue = function(key, val) { if(typeof val === "function"){} else { this.config[key] = val; this.saveConfig(); } } AOConfig.prototype.loadConfig = function() { var strData = readCookie("AOconfig"); if(strData){ var jsonData = eval("(" + strData + ")"); this.config = jsonData; } } AOConfig.prototype.saveConfig = function() { var saveData = {}; for(variable in this.config) { if(typeof variable === "function"){} else { saveData[variable] = this.config[variable]; } } createCookie("AOconfig", JSON.stringify(saveData), 365); } var aoConfig = new AOConfig(); //############################################ function addConfigPanel() { var config = '