NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @version 1.1.9.7
// @name OGI
// @autor Ouraios
// @oujs:autor mgn
// @date 2016-01-26
// @namespace OGamemo
// @downloadURL https://openuserjs.org/install/Ouraios/OGI.user.js
// @description imperio
// @include *.ogame.gameforge.*/game/*
// @require http://userscripts-mirror.org/scripts/source/118453.user.js
// @require http://openuserjs.org/src/libs/mrgenis/OGame_5_Formulas.js
// @icon https://i.gyazo.com/e0824021d422e08da5ffd0ee3b821136.png
// @grant none
// ==/UserScript==
var VERSION = '1.1.9.5n';
var UPDATE = '2016-01-26';
/**
* changelog : 1.1.9.5bis (2016-02-08)
* Page detection was resolved to include in OGAME
*
* changelog : 1.1.9.5 (2016-01-26)
* Correction of the size of icons on planets and moons.
*
* changelog : 1.1.9.4 (2016-01-19)
* Now the planets are ordered based on the coordinates
*
* changelog : 1.1.9.3 (2015-09-23)
* Fixed error recognition "Tampermonkey" (Chrome)
* Correction to detect flights not target own planets.
*/
if(!String.prototype.format){String.prototype.format=function(){var c=arguments;if(c.length==1&&Array.isArray(c[0]))c=c[0];return this.replace(/{(\d+)}/g,function(a,b){return(typeof c[b]!='undefined')?c[b]:a;});};}
if(!String.format){String.format=function(c){var d=Array.prototype.slice.call(arguments,1);if(c.length==1&&Array.isArray(c[0]))c=c[0];var e=function(a,b){return(b in d)?d[b]:a;};var f=/\{(\d+)\}/g;return c.replace(f,e);};}
if(!Number.prototype.trunc) {Number.prototype.trunc = function(digits) {var re = RegExp("(\\d+\\.\\d{" + digits + "})(\\d)"),m = this.toString().match(re);return m ? parseFloat(m[1]) : this.valueOf();};}
var win = (typeof unsafeWindow) == 'undefined' ? window : unsafeWindow;
function OG_parseNum(v){var n=v+'';if(n.indexOf(win.LocalizationStrings.unitMilliard)!=-1){n=n.replace(win.LocalizationStrings.unitMilliard,'').replace(/\,/g,'.');n=parseFloat(n);n*=1000000000}else if(n.indexOf(win.LocalizationStrings.unitMega)!=-1){n=n.replace(win.LocalizationStrings.unitMega,'').replace(/\,/g,'.');n=parseFloat(n);n*=1000000}else n=n.replace(/\./g,'').replace(/\,/g,'');return parseInt(n)}
function getNum(s){return jQuery.trim( s.replace(/\D/g,'') );}
function formatDateFuture(date){
var _ceros = function(n){return (n === 0) ? '00' : ((n < 10) ? '0'+n : n ); };
var _now = new Date(),
M = _ceros(date.getMonth()+1),
d = _ceros(date.getDate()),
h = _ceros(date.getHours()),
m = _ceros(date.getMinutes()),
s = _ceros(date.getSeconds());
var w = "";
if ( _now.getTime() > (date.getTime()-86400000) ){
// solo faltan horas
w += "{0}:{1}:{2}".format(h,m,s);
} else {
w += "{0}.{1} {2}:{3}:{4}".format(d,M,h,m,s);
}
return w;
}
function stellarSort(stellars) {
var sortable = [];
for(var s in stellars) sortable.push(stellars[s]);
sortable.sort(function(a, b){
// Primera implementación unicamente basado en coordenadas
//if(__GLOBALS__.stellarOrder == 0) { // ordenado por coordenadas
var c = a.coords[0] - b.coords[0]; // galaxia ?
if(c === 0) c = a.coords[1] - b.coords[1]; // misma galaxia, sistema
if(c === 0) c = a.coords[2] - b.coords[2]; // mismo sistema, radio
return c;
//} else { // alfabeto
// var an = a.name.toLocaleLowerCase(),
// bn = b.name.toLocaleLowerCase();
// return an.localeCompare(bn);
//}
});
return sortable;
}
// http://s110-mx.ogame.gameforge.com/nocdn/5.8.5/img/small/small_408.jpg
if ('function' != typeof(Object.assign)) { Object.assign = jQuery.extend; }
/**
* Define propiedades en la raiz del objeto _fnOGame (root)
* @param key Nombre de la propiedad a definir
* @param value valor asignado a la propiedad
* @param e indica si es enumerable (def : true)
* @param w indica si se puede escribir (def : false)
* @param c indica si puede ser reconfigurable (def : false)
* @returns Propiedad creada
*/
function _define(o, key, value, e, w, c) {
var config = {};
config.enumerable = ('undefined' === typeof(e)) ? true : e;
config.writable = ('undefined' === typeof(w)) ? false : w;
config.configurable = ('undefined' === typeof(c)) ? false : c;
if('undefined' !== typeof(value) || null !== value) config.value = value;
return Object.defineProperty(o, key, config);
}
function _fnImperium() {
var root = this;
/* ====================================================================== */
/* ============== Objeto para el almacenamiento de datos ================ */
/* ====================================================================== */
function _storage() {
var skey = $OGame.meta('ogame-universe').split('.')[0];
var uid = $OGame.meta('ogame-player-id');
Object.defineProperty(this, 'mask', {
value : 'OG.' + skey + '@' + uid + ':',
enumerable : true,
configurable : false,
writable : false
});
}
_storage.prototype.item = function(key, value) {
if ('undefined' === typeof(value) ) {
var raw = localStorage.getItem(this.mask + key) || 0;
return JSON.parse( raw );
} else {
value = JSON.stringify( value );
return localStorage.setItem(this.mask + key, value);
}
};
_storage.prototype.objectUpdate = function(key, name, value){
var d = this.item( key );
d[name] = value;
return this.item(key, d);
};
_storage.prototype.remove = function (key) {
localStorage.removeItem(this.mask + key);
};
_storage.prototype.has = function (key) {
return (this.option(key) !== 0);
};
_storage.prototype.construction = function(planet, val) {
return this.item(planet + '_construction', val);
};
_storage.prototype.production = function(planet, val) {
return this.item(planet + '_production', val);
};
_define(root, 'Storage', new _storage(), false);
/* ###################################################################### */
function oMoon( data ) {
var rootMoon = this;
Object.assign(this, data);
var r = root.resources[rootMoon.id];
if ( 'undefined' == typeof(r) ) return null;
this.resources = r.input;
this.imageName = r.imageFileName + '_1.gif';
this.isMoon = true;
var tech = root.Storage.item(rootMoon.id);
this.techs = tech;
}
oMoon.prototype.toJSON = function() {
return JSON.stringify({
id : this.id,
name : this.name,
coords : this.coords,
diametre : this.diametre,
space : this.space,
temp : this.temp,
moon : this.moon
});
};
oMoon.prototype.toString = function() {
return this.toJSON();
};
oMoon.prototype.update = function() {
return root.updates[this.id];
};
function oPlanet( data ) {
oMoon.call(this, data);
var r = root.resources[ this.id ];
this.imageName = r.imageFileName + '_1.png';
this.isMoon = false;
}
oPlanet.prototype = Object.create(oMoon.prototype);
oPlanet.prototype.constructor = oPlanet;
oPlanet.prototype.getStorage = function() {
return {
metal : $OGame.fnStorage(this.techs[22]),
crystal : $OGame.fnStorage(this.techs[23]),
deuterium :$OGame.fnStorage(this.techs[24])
};
};
oPlanet.prototype.getProduction = function() {
return root.Storage.production( this.id );
};
oPlanet.prototype.getMoon = function() {
if (!this.moon) return null;
return root.moons[this.moon];
};
/**
* root.planets (enumerable)
* root.moons (enumerable)
* root.resources (enumerable)
*/
function _loader() {
var rootLoader = this;
/**
* root.planets (enumerable)
* root.moons (enumerable)
*/
function readPlanets() {
var aPlanetas = {}, aMoons = {};
jQuery("#planetList a.planetlink").each(function() {
var $this = jQuery(this),
planet = new Object(),
titledata = $OGame.fnTitle(this).match(/([\d-:\.]+)/ig),
coords = titledata[0].split(':');
coords.forEach( function(d,i){
coords[i] = parseInt(d);
});
planet.id = parseInt($this.parent()[0].id.split('-')[1]);
planet.name = $this.find('span.planet-name').text();
planet.coords = coords;
planet.diametre = parseInt(titledata[1].replace('.',''));
planet.space = [parseInt(titledata[2]), parseInt(titledata[3])];
planet.temp = [parseInt(titledata[4]), parseInt(titledata[5])];
var moon = $this.parent().find('a.moonlink');
if (moon.length > 0) {
moon = _readMoon(moon[0]);
planet.moon = moon.id;
aMoons[moon.id] = new oMoon(moon);
} else {
planet.moon = null;
}
aPlanetas[planet.id] = new oPlanet(planet);
});
function fnTotal(){
var result = {
metal : 0,
crystal : 0,
deuterium : 0
};
for (var z in this )
root.fnSumResources(result, this[z].resources);
return result;
}
_define(aPlanetas, 'fnResourcesTotal', fnTotal, false);
_define(aMoons, 'fnResourcesTotal', fnTotal, false);
function fnLength(){
var i = 0;
for(var z in this ) i++;
return i;
}
_define(aPlanetas, 'length', fnLength, false);
_define(aMoons, 'length', fnLength, false);
_define(root, 'planets', aPlanetas);
_define(root, 'moons', aMoons);
}
function _readMoon(thiz) {
var $this = jQuery(thiz),
m = new Object(),
titledata = $OGame.fnTitle(thiz).match(/([\d-:\.]+)/ig),
coords = titledata[0].split(':');
coords.forEach( function(d,i){
coords[i] = parseInt(d);
});
m.id = parseInt(thiz.href.match(/cp=(\d+)/ig)[0].slice(3));
m.name = thiz.title.match(/([\w]+) \[/ig)[0].slice(0,-2);
m.coords = coords;
m.diametre = parseInt(titledata[1].replace('.',''));
m.space = [ parseInt(titledata[2]), parseInt(titledata[3]) ];
return m;
}
/**
* root.resources (enumerabe)
*/
function loadResourcesAjax() {
return jQuery.post('/game/index.php?page=traderOverview', {
ajax : 1,
show : 'importexport'
}, function(data, textStatus, jqXHR) {
var script_re = /<script\b[^>]*>([\s\S]*?)<\/script>/gm,
planet_re = /planetResources=({[\s\S]*?});/gm,
script = script_re.exec(data)[1],
impResources = planet_re.exec(script)[1];
impResources = JSON.parse(impResources);
_define(impResources, 'fnTotal', function(){
var result = {
metal : 0,
crystal : 0,
deuterium : 0
};
for (var z in this )
root.fnSumResources(result, this[z].input);
return result;
}, false);
_define(root, 'resources', impResources);
});
}
/**
* Lee las tecnologias del planeta actual
*
* Storage.researchs
* Storage.*currentPlanetId*
*
*/
function loadTechsAjax() {
var ajax = null;
if ( root.Storage.item($OGame.currentPlanetId) === 0
|| win.location.href.indexOf('OGImperium=lTechs' != -1)
|| $OGame.currentPage == 'resourceSettings') {
// lectura de recursos por primera carga
// "/game/index.php?page=fetchTechs&ajax=1"
ajax = jQuery.ajax({
url : "/game/index.php?page=fetchTechs&ajax=1",
dataType : 'json'
}).done( function(data) {
// se eliminan las investigaciones y se actualizan
var idResearch = [113, 120, 121, 114, 122, 115, 117, 118,
106, 108, 124, 123, 199, 109, 110, 111],
aResearch = {};
for(var z in idResearch){
aResearch[ idResearch[z] ] = data[ idResearch[z] ];
delete data[ idResearch[z] ];
}
root.Storage.item('researchs', aResearch);
root.Storage.item($OGame.currentPlanetId, data);
});
} else {
var d = jQuery.Deferred();
d.resolve('planetTechs');
ajax = d.promise();
}
return ajax;
}
/**
* Lee la produccion de recursos del planeta actual
*
* Storage.*currentPlanetId* _production
*
*/
function loadProduction() {
var ajax = null;
if ( root.Storage.production($OGame.currentPlanetId) === 0
|| win.location.href.indexOf('OGImperium=lProduction') != -1
|| $OGame.currentPage == 'resourceSettings') {
// lectura de produccion cuando no existen los datos
// o se solicita una recarga mediante url
// o se visita la pagina "resourceSettings"
ajax = jQuery.ajax({
url : '/game/index.php?page=fetchResources&ajax=1',
dataType : 'json'
}).done( function(data) {
var result = {
metal : data.metal.resources.production,
crystal : data.crystal.resources.production,
deuterium : data.deuterium.resources.production,
energy : data.energy.resources.actual
};
root.Storage.production($OGame.currentPlanetId, result);
});
} else {
var d = jQuery.Deferred();
d.resolve('planetProduction');
ajax = d.promise();
}
return ajax;
}
function loadPlayer() {
// code ...
}
var _defered = jQuery.when(
loadResourcesAjax(),
loadTechsAjax(),
loadProduction()
).done(function(){
readPlanets();
});
_define(this, 'defered', function() {
return _defered;
});
}
var oLoader = new _loader();
/* ###################################################################### */
/**
* Objeto encargado de detectar actualizaciones de edificios,
* investigaciones y del hangar.
*
* this.init()
* this.tokenCancel (no-enumerable)
*
* root.updates (enumerable) (this)
* root.hasTokenCancel (enumerable) (boolean)
*/
function _updates() {
var rootUpdates = this;
function oUpdate(data) {
for (var n in data) {
_define( this, n, data[n] );
}
}
oUpdate.prototype.fnEndDate = function() {
var time = this.timeDown,
read = this.timeRead,
now = $OGame.server_time,
addTime = (time * 1000) - (now - read);
now = new Date(now + addTime);
return now;
};
oUpdate.prototype.fnTimeLeft = function() {
var time = this.timeDown,
read = this.timeRead,
now = $OGame.server_time,
left = ((time * 1000) - (now - read)) / 1000;
return left;
};
oUpdate.prototype.getName = function() {
return $OGame.Localization.names(this.build);
};
var script = jQuery("script:not([src]):contains('session')").eq(0).text(),
// Exprecion para buscar la funcion que cancela
// la construccion de edificios
rexProductionFn = /cancelProductionStart\(\)\n{.+\(".+token=(.+)&techid/i,
// Exprecion para encontrar la funcion que cancela la investigación
rexResearchFn = /cancelResearch\(.+\)\n{.+\(".+token=(.+)"\+"/i;
var tokenCancel = script.match(rexProductionFn);
if (null !== tokenCancel) {
tokenCancel = tokenCancel[1];
} else {
tokenCancel = script.match(rexResearchFn);
if (null !== tokenCancel) {
tokenCancel = tokenCancel[1];
}
}
_define(this, 'tokenCancel', tokenCancel);
_define(this, 'urlCancel', '/game/index.php?page={0}&modus=2&token='
+ tokenCancel + '&techid={1}&listid={2}');
_define(root, 'hasTokenCancel', (tokenCancel !== null));
function readCurrentBuild() {
var rexCountdown = /baulisteCountdown\([\w]+\("Countdown"\)[, ]+([-\d]+)/i,
rexResearch = /baulisteCountdown\([\w]+\("researchCountdown"\)[, ]+([-\d]+)/i;
var countdown = script.match(rexCountdown),
research = script.match(rexResearch);
function _build(table) {
var data = false;
if (!table.find('.idle').length) {
var level = jQuery.trim( table.find('.level').text() ),
title = $OGame.fnTitle(table.find('a.abortNow')[0]),
click = table.find('a.abortNow')[0].onclick;
if ('function' === typeof(click))
click = click.toString();
click = click.match(/cancel[\w]+\((\d+)[ ,]*(\d+)/i);
// [build, nivel, lista, planeta]
data = {
build : parseInt( click[1] ),
level : parseInt( level.replace(/\D+/i, '') ),
list : parseInt( click[2] ),
planet : $OGame.currentPlanetId,
timeRead : $OGame.server_time,
title : title
};
}
return data;
}
var c = jQuery('table.construction'), data = false;
if (null !== countdown) {
var t = c.eq(0);
data = _build(t);
data.timeDown = parseInt(countdown[1]);
root.updates[ data.planet ] = new oUpdate( data );
}
root.Storage.construction($OGame.currentPlanetId, data);
data = false;
if (null !== research) {
var t = $OGame.isPage('overview') ? c.eq(1) : c.eq(0);
data = _build(t);
data.timeDown = parseInt(research[1]);
root.Storage.construction('researchs', data);
root.updates.researchs = new oUpdate( data );
}
}
/**
* Lee las construcciones actuales y guardadas anteriormente
*
* root.updates (enumerable)
*
* Storage.*planet* _production "dinamica según termina la construcción"
* "o se detecta una construccion nueva "
*/
function chargeBuilds() {
var aUpdates = {}, update = false;
function auxUpdateStorage(planet, build, level){
// elementos que afectan a la produccion
var elmsProduction = [1, 2, 3, 4, 12 ,212];
if (elmsProduction.indexOf(build) != -1) {
root.Storage.production(planet, 0);
}
root.Storage.objectUpdate(planet, build, level );
}
// buscando construcciones en planetas
for(var z in root.planets) {
update = root.Storage.construction(z);
if (!update) continue;
update = new oUpdate(update);
if ( update.fnTimeLeft() <= 0 ) {
auxUpdateStorage(z, update.build, update.level );
root.Storage.construction(z, false);
continue;
}
aUpdates[ z ] = update;
}
// buscando construcciones en lunas
for (var y in root.moons) {
update = root.Storage.construction(y);
if (!update) continue;
update = new oUpdate(update);
if ( update.fnTimeLeft() <= 0 ) {
auxUpdateStorage(y, update.build, update.level );
root.Storage.construction(y, false);
continue;
}
aUpdates[ y ] = update;
}
// buscando actualización de investigación
update = root.Storage.construction('researchs');
if ( update ) {
update = new oUpdate(update);
if (update.fnTimeLeft() <= 0) {
root.Storage.objectUpdate('researchs', update.build, update.level);
root.Storage.construction('researchs', false);
} else {
aUpdates.researchs = update;
}
}
_define(aUpdates, 'length', function(){
var keys = Object.keys(this),
n = keys.length;
if (keys.indexOf('researchs') >= 0) n--;
return n;
}, false);
_define(root, 'updates', aUpdates);
}
/* ATENCION!!
*
* La siguientes funciones re-escriben los procesos para cancelar una
* construcion en progreso en el planeta actual.
*
* Tambien se sobre escribe la funcion para cancelar una investigacion
* que se encuentra en progreso.
*/
function __cancelProductionStart() {
root.Storage.construction($OGame.currentPlanetId, false);
var url = rootUpdates.urlCancel.format($OGame.currentPage,
win.cancelProduction_id, win.production_listid );
win.location.replace(url);
}
if (typeof(win.cancelProductionStart) === 'function') {
win.cancelProductionStart = __cancelProductionStart;
}
function __cancelResearch(id, listId, question) {
win.errorBoxDecision($OGame.Localization.attention, question,
$OGame.Localization.yes, $OGame.Localization.no, function() {
root.Storage.construction('researchs', false);
var url = rootUpdates.urlCancel.format($OGame.currentPage, id, listId );
win.location.replace(url);
});
}
if (typeof(win.cancelResearch) === 'function') {
win.cancelResearch = __cancelResearch;
}
_define(this, 'init', function() {
chargeBuilds();
readCurrentBuild();
});
}
var oUpdates = new _updates();
/* ###################################################################### */
function oFlyPack() {
this.directs = [];
this.returns = [];
this.hasReturn = false;
this.hasDirect = false;
}
oFlyPack.prototype.addFly = function(data, isReturn) {
var ships = {};
for(var z in data.ships ) {
var n = data.ships[ z ];
var k = root.flying.configuration.ShipsNameKey[ z ];
ships[ k ] = n;
}
data.ships = ships;
if (isReturn) {
this.hasReturn = true;
this.returns.push( new oFly(data) );
} else {
this.hasDirect = true;
this.directs.push( new oFly(data) );
}
};
oFlyPack.prototype.fnTotalResources = function() {
var result = {
metal : 0,
crystal : 0,
deuterium : 0
};
for(var z in this.directs)
root.fnSumResources(result, this.directs[ z ].resources);
for( z in this.returns)
root.fnSumResources(result, this.returns[ z ].resources);
return result;
}
// obtiene el total de los vuelos en direccion
oFlyPack.prototype.fnTotalDirects = function() {
if (!this.hasDirect) return null;
var data = {
resources: {metal:0, crystal:0, deuterium:0},
ships : {},
id : NaN,
timeArrival : NaN
}, array = this.directs;
for(var z in array) {
root.fnSumResources(data.resources, array[ z ].resources);
for(var a in array[ z ].ships ){
if ( !data.ships[ a ] ) data.ships[ a ] = 0;
data.ships[ a ] += array[ z ].ships[ a ];
}
}
return new oFly( data );
}
// obtiene el total de los vuelos en retorno
oFlyPack.prototype.fnTotalReturns = function() {
if (!this.hasReturn) return null;
var data = {
resources: {metal:0, crystal:0, deuterium:0},
ships : {},
id : NaN,
timeArrival : NaN
}, array = this.returns;
for(var z in array) {
root.fnSumResources(data.resources, array[ z ].resources);
for(var a in array[ z ].ships ){
if ( !data.ships[ a ] ) data.ships[ a ] = 0;
data.ships[ a ] += array[ z ].ships[ a ];
}
}
return new oFly( data );
};
function oFly(data) {
// id, resources, ships
Object.assign(this, data);
}
oFly.prototype.countShips = function () {
var n = 0;
for (var z in this.ships) n++;
return n;
};
/**
* Lectura de los vuleos en progreso
*/
function _flys() {
var config = {};
_define(config, 'ShipsTypes', {
/* Cazador ligero */ 204 : 1,
/* Cazador pesado */ 205 : 1,
/* Crucero */ 206 : 1,
/* Nave de batalla */ 207 : 1,
/* Acorazado */ 215 : 1,
/* Bombardero */ 211 : 1,
/* Destructor */ 213 : 1,
/* EDL Muerte */ 214 : 1,
/* NP de carga */ 202 : 2,
/* NG de carga */ 203 : 2,
/* Nave de colonia */ 208 : 2,
/* Reciclador */ 209 : 2,
/* Sonda espionaje */ 210 : 2,
/* Satelite solar */ 212 : 1
});
Object.freeze( config.ShipsTypes );
_define(config, 'ShipsNameKey', {});
for(var s in config.ShipsTypes ) {
config.ShipsNameKey[ $OGame.Localization.names(s) ] = parseInt(s);
}
Object.freeze( config.ShipsNameKey );
_define(config, 'TYPE_MILITAR', 2);
_define(config, 'TYPE_CIVIL', 1);
function flyData(data) {
var pre = data.replace(/\n/g, '').split("<th"),
result = {
ships : {},
resources : {metal : 0, crystal : 0, deuterium : 0}
};
if (!pre[1] && !pre[2]) return;
// naves
var part = pre[1].split("<td");
for (var i = 1; i < part.length - 2; i += 2) {
var n = jQuery.trim(part[i]).slice(1, -6),
c = part[i + 1].match(/>([\d.]+)</)[1].replace(/\./g, "");
result.ships[n] = parseInt(c);
}
// recursos
if ('undefined' != typeof(pre[2]) ) {
part = pre[2].split("<td");
var flyMetal = part[2].match(/>([\d.]+)</)[1].replace(/\./g, ""),
flyCrystal = part[4].match(/>([\d.]+)</)[1].replace(/\./g, ""),
flyDeuterium = part[6].match(/>([\d.]+)</)[1].replace(/\./g, "");
result.resources = {
metal : parseInt(flyMetal),
crystal : parseInt(flyCrystal),
deuterium : parseInt(flyDeuterium)
};
}
return result;
}
var planetsCoords = {};
var _aFly = {};
_define(root, 'flying', _aFly);
_define( _aFly, 'configuration', config, false);
// funcion para obtener el total de recursos en vuelo
_define( _aFly, 'fnResourcesTotal', function() {
var result = { metal:0, crystal:0, deuterium:0 };
for (var z in this) {
var pack = this[z].fnTotalResources();
root.fnSumResources(result, pack);
}
return result;
}, false);
for (var x in root.planets)
planetsCoords [ root.planets[x].coords.join(':') ] = x;
function _planetid(coords, isMoon) {
var planet = planetsCoords[coords];
if('undefined' === typeof(planet)) return 0;
planet = root.planets[planet];
if (isMoon) {
planet = planet.moon;
}
return planet.id;
}
var ignore_flight = [];
// mision type 3 : transporte
// mision type 4 : despliege
jQuery("#eventContent .eventFleet").each(function () {
var $this = jQuery(this),
isDeploy = $this.data('missionType') == 4,
timeArrival = $this.data('arrivalTime'),
isReserve = $this.find('td.icon_movement_reserve').length > 0,
flightId = parseInt(this.id.replace(/[\D]+-/g, ''));
var id = null,
title = null,
name = '';
if (ignore_flight.indexOf(flightId) > -1) return;
if (isReserve) {
var coords = jQuery.trim($this.find('.coordsOrigin').text()).slice(1, -1),
isMoon = $this.find('.originFleet .moon').length > 0;
id = _planetid(coords, isMoon);
title = $OGame.fnTitle( $this.find('td.icon_movement_reserve span')[0] );
} else if (isDeploy || !isReserve) {
var coords = jQuery.trim($this.find('.destCoords').text()).slice(1, -1),
isMoon = $this.find('.destFleet .moon').length > 0;
id = _planetid(coords, isMoon);
title = $OGame.fnTitle( $this.find('td.icon_movement span')[0] );
ignore_flight.push(flightId + 1);
}
if(id === 0) return;
var fData = flyData(title);
fData.id = flightId;
fData.timeArrival = timeArrival;
if ('undefined' === typeof(_aFly[id])) {
_aFly[id] = new oFlyPack();
}
_aFly[id].addFly(fData, isReserve);
});
}
var rootDefered = jQuery.when(
oLoader.defered()
).done( function() {
oUpdates.init();
_flys();
});
/** en este se encapsulan todos los ajax del sistema */
_define(root, 'defered', function(){
return rootDefered;
});
// procesos init...
}
_fnImperium.prototype.fnCancelUpdate = function(idUpdate) {
var update = this.updates[idUpdate];
if (!update) return;
var url = this.oUpdates.urlCancel,
storage = this.Storage;
win.errorBoxDecision( $OGame.Localization.attention, // Titulo del mensaje
update.title, // mensaje que muestra el cuadro
$OGame.Localization.yes, $OGame.Localization.no, function() {
storage.construction(idUpdate, false);
url = url.format($OGame.currentPage, update.build, update.list);
win.location.replace( url );
});
};
_fnImperium.prototype.fnSumResources = function(to, data ) {
if ('undefined' == typeof(to.metal)) to.metal = 0;
if ('undefined' == typeof(to.crystal)) to.crystal = 0;
if ('undefined' == typeof(to.deuterium)) to.deuterium = 0;
to.metal += data.metal;
to.crystal += data.crystal;
to.deuterium += data.deuterium;
};
function _fnImperiumUI(imperium, c) {
var root = this;
// Colocando el boton del imperio en el menu de navegación y agregando
// el contenedor principal para la información.
var ui_menu = jQuery('<ul>',{
id : "menuTableImperium",
class : 'leftmenu',
}).append(
jQuery('<li class="btnImperium">').append(
"<span class='menu_icon'><div class='menuImage empire'></div></span>",
"<a class='menubutton' href='javascript:void(0);'>"
+ "<span class='textLabel'>OG Imperium</span></a>" )
);
jQuery("#links #menuTable").after( ui_menu );
var ui_fastmenu = jQuery('<ul>',{
id: 'OGI_fastmenu',
class : 'OGI-horizontal'
}).append(
jQuery('<li>').append(
jQuery('<a>', {class:'dark_highlight',
href : '#OGICurrentProduction',
html:"<span class='img-main menu-icon32' ref='production'></span>"} )
),
jQuery('<li>').append(
jQuery('<a>', {class:'dark_highlight',
href : '#OGICurrentConstruction',
html:"<span class='img-main menu-icon32' ref='construction'></span>"} )
)
);
jQuery('#rechts').append( ui_fastmenu );
function __language() {
var lang_es = {};
var lang_en = {
menu_link : 'OG Imperium',
investigacion : "Researchs",
recursos : "Resources",
metal : "Metal",
cristal : "Crystal",
deuterio : "Deuterium",
total : "Total:",
production_hour : "Production per hour:",
production_day : "Daily production:",
production_week : "Weekly production:",
production_month : "Monthly production:",
researchs_noData : "No research data!",
production : "Production",
produccion_no : "No production data!",
construction : 'Construction',
title_produccion : "Production of the whole empire",
title_recursos : "Resources per Planet",
title_currentcostruction : "Constructions in progress",
title_builds : 'Buildings per planets',
fly_resources : "Flying resources",
moon_resources : "Moon resources",
planet_resources : "Planet resources",
tooltip_fleet : "Fleet details:",
tooltip_fleet_ships : "Ships:",
tooltip_fleet_resources : "Resources:",
sent : "Sent:",
returning : "Returning:",
research_basic : 'Basic research',
research_drives : 'Drive research',
research_advanced : 'Advanced researchs',
research_combat : 'Combat researchs',
research_noprogress : 'No research in progress',
resource_buildings : 'Resource buildings',
station_buildings : 'Station buildings',
nivel : 'Level',
cancel : 'cancel',
nbsp:' '
};
var current = lang_en;
if (location.href.indexOf('-es.ogame.gameforge.com') != -1)
Object.assign(current, lang_es);
else if (location.href.indexOf('-ar.ogame.gameforge.com') != -1)
Object.assign(current, lang_es);
else if (location.href.indexOf('-mx.ogame.gameforge.com') != -1)
Object.assign(current, lang_es);
_define(this, 'current', current);
}
__language.prototype.get = function(key) {
if ( 'undefined' == typeof this.current[key] ) return key;
return this.current[key];
}
__language.prototype.format = function(text) {
jQuery.each(this.current, function(k, v) {
var reg = new RegExp("\{" + k + "\}", 'ig');
text = text.replace(reg, v);
});
return text;
};
_define(root, 'Language', new __language() );
/* ###################################################################### */
/* ############## Objeto contenedor de los estilos CSS ################## */
/* ###################################################################### */
function __style() {
_define(this, 'links', [
]);
Object.freeze(this.links);
_define(this, 'directives', [
".OGI-boxz {background: none repeat scroll 0px center transparent;margin: 0px auto 25px;width: 670px;}",
".OGI-boxz .header{background: url('http://i.imgur.com/jTM9eXK.gif') no-repeat scroll 0% 0% transparent;height: 28px;}",
".OGI-boxz .content{background: url('http://i.imgur.com/YwOTxxH.gif') repeat-y scroll 0% 0% transparent;padding: 5px 20px;position: relative;}",
".OGI-boxz .footer{background: url('http://i.imgur.com/9bbGcQb.png') no-repeat scroll 0% 0% transparent;bottom: -13px;height: 50px;left: 0px;position: absolute;width: 667px;z-index: -1;}",
".OGI-boxz .OG-layer{margin-top:0;}",
".OGI-boxz .header h2{cursor:default;text-align:center;color: #6F9FC8;font: 700 12px/28px Verdana,Arial,Helvetica,sans-serif;}",
".OGI-boxz .header>.tabOpenClose { float:right; position:relative; top:7px; right:35px; }",
".OGI-layer {margin: 5px 0 0 5px;position:relative;float:left;}",
".OGI-layer > .overlayer{background-color:rgb(20, 30, 38);}",
".OGI-layer > .information h2{cursor:default;text-align: center; background-color: rgb(35, 40, 45); box-shadow: 0px 0px 3px 1px rgb(0, 5, 10) inset; padding: 0.1em; border:1px solid black; margin-bottom: 1px;}",
".OGI-layer > .information td, .OG-layer > .information th{padding:3px 0 0 0;}",
".OGI-layer .rigth{text-align:right}",
".OGI-layer .bar_container{width:auto !important;}",
".research-icon { width:50px; height:50px; }",
".resources00-icon, .resources01-icon, .resources02-icon, .defence-icon, .station-icon,"
+ ".shipyard-icon { width:30px !important; height:30px !important;}",
/* (icons) metal, crystal, deuterium, energy, dark */
".resources00-icon { background-repeat:no-repeat; background-image: url('http://i.imgur.com/2Klisqo.png'); }",
/* fusion, metal, solar, deuterium, crystal, satellite */
".resources01-icon { background-repeat:no-repeat; background-image: url('http://i.imgur.com/Ij3fpwv.png'); }", // update 30
/* metal storage, crystal storage, deuterium storage
metal hiden, crystal hiden, deuterium hiden */
".resources02-icon { background-repeat:no-repeat; background-image: url('http://i.imgur.com/7Mavk31.jpg'); }", // update 30
".station-icon { background-repeat:no-repeat; background-image: url('http://i.imgur.com/kbgzBaR.png'); }", // update 50
".research-icon { background-repeat:no-repeat; background-image: url('http://i.imgur.com/RBgBQKX.png'); }", // update 50
".shipyard-icon { background-repeat:no-repeat; background-image: url('http://i.imgur.com/OB38ylT.png'); }",
".defence-icon { background-repeat:no-repeat; background-image: url('http://i.imgur.com/k5dUBS9.png'); }",
".menu-icon32 { background: url('http://i.imgur.com/WuayUF0.png') no-repeat; width:24px; height:24px; display:inline-block;}",
".menu-icon32[ref='construction'] { background-position: 0 0; }",
".menu-icon32[ref='production'] { background-position: -24px 0; }",
".research-icon[ref='106'] { background-position: 0 0; }",
".research-icon[ref='108'] { background-position: -50px 0; }",
".research-icon[ref='109'] { background-position: -100px 0; }",
".research-icon[ref='110'] { background-position: -150px 0; }",
".research-icon[ref='111'] { background-position: -200px 0; }",
".research-icon[ref='113'] { background-position: -250px 0; }",
".research-icon[ref='114'] { background-position: -300px 0; }",
".research-icon[ref='115'] { background-position: -350px 0; }",
".research-icon[ref='117'] { background-position: -400px 0; }",
".research-icon[ref='118'] { background-position: -450px 0; }",
".research-icon[ref='120'] { background-position: -500px 0; }",
".research-icon[ref='121'] { background-position: -550px 0; }",
".research-icon[ref='122'] { background-position: -600px 0; }",
".research-icon[ref='123'] { background-position: -650px 0; }",
".research-icon[ref='199'] { background-position: -700px 0; }",
".research-icon[ref='124'] { background-position: -750px 0; }",
".resources01-icon[ref='12']{ background-position: 0px 0 }",
".resources01-icon[ref='1']{ background-position: -30px 0 }",
".resources01-icon[ref='4']{ background-position: -60px 0 }",
".resources01-icon[ref='3']{ background-position: -90px 0 }",
".resources01-icon[ref='2']{ background-position: -120px 0 }",
".resources01-icon[ref='212']{ background-position: -150px 0 }",
".resources02-icon[ref='22']{ background-position: 0 0 }",
".resources02-icon[ref='23']{ background-position: -30px 0 }",
".resources02-icon[ref='24']{ background-position: -60px 0 }",
".resources02-icon[ref='25']{ background-position: -90px 0 }",
".resources02-icon[ref='26']{ background-position: -120px 0 }",
".resources02-icon[ref='27']{ background-position: -150px 0 }",
".station-icon[ref='14'] { background-position: 0 0 }",
".station-icon[ref='31'] { background-position: -30px 0 }",
".station-icon[ref='34'] { background-position: -60px 0 }",
".station-icon[ref='21'] { background-position: -90px 0 }",
".station-icon[ref='15'] { background-position: -120px 0 }",
".station-icon[ref='33'] { background-position: -150px 0 }",
".station-icon[ref='44'] { background-position: -180px 0 }",
".station-icon[ref='41'] { background-position: -210px 0 }",
".station-icon[ref='42'] { background-position: -240px 0 }",
".station-icon[ref='43'] { background-position: -270px 0 }"
]);
this.add('.icon30', {
height: '30px !important',
width: '30px !important'
});
this.add('.iconH24', {
height: '24px !important',
width: '40px !important'
});
this.addArray([
['#OGImperium', {
width: '670px',
overflow: 'visible',
position: 'relative',
padding: '0px',
float: 'left',
margin: '10px 0',
"font-size" :'11px' }],
["#OGImperium .bar_container, .fixbar_container", {
width : 'auto !important' }]
]);
this.addArray([
["ul.OGI-horizontal, #OGImperium ul.horizontal", {
'text-align':'center' }],
["ul.OGI-horizontal li, #OGImperium ul.horizontal li", {
display:'inline-block',
margin:'1px 0px',
position:'relative',
top:'auto'}],
[".tabOpenClose", {
cursor:'pointer',
background:"url('http://i.imgur.com/yCUsTvZ.gif') no-repeat",
width:'18px',
height:'16px',
'background-position': '0 0',
display:'block'}],
[".tabOpenClose.tabClose", {
'background-position': '0 -16px' }],
[".overlayer", {
'z-index':1,
opacity:0.5,
width:'100%',
height:'100%',
position:'absolute',
background:'none repeat scroll 0% 0%',
'border-radius':'7px',
'-webkit-border-radius':'7px',
'-moz-border-radius':'7px' }],
[".information", {
'z-index':2,
position:'relative',
padding:'2px 0px'}]
]);
this.addArray([
["table.OGItable-fix tr td:last-child, table.OGItable-fix tr th:last-child", {
'padding-right':'10px'
}],
["table.OGItable-fix td, table.OGItable-fix th", {
'text-align' : 'right', height : '25px'
}],
["table.OGItable-fix th", {
'font-weight' : 700, 'padding-bottom' : 0, 'vertical-align' : 'middle'
}],
["table.OGItable-fix td.label" ,{
color : '#808080', 'text-align':'left', 'padding-left':'5px'
}],
["table.OGItable-fix tr.summary td", {
'border-top':'1px dotted #848484'
}]
]);
this.addArray([
["#menuTableImperium .btnShorts", {
height : '35px !important' }],
["#OGI_fastmenu a", {
display:'inline-block', padding:'3px',
width:'24px', height:'24px',
'margin-right':'3px'
}]
]);
}
__style.prototype.add = function(selector, data) {
tx = '';
for(var keyName in data )
tx += "\t" + keyName + ":" + data[keyName] + "; \n";
tx = selector + ' {\n' + tx + '}';
this.directives.push(tx);
};
__style.prototype.addArray = function ( group ) {
for(var z in group ) {
this.add( group[z][0], group[z][1] );
}
};
__style.prototype.toString = function() {
return this.directives.join("\n");
};
__style.prototype.links = function() {
};
_define(root, 'style', new __style());
/* ###################################################################### */
/* ################ Objeto de renderisado para imagenes ################# */
/* ###################################################################### */
root.style.addArray([
['div.img-tech', { cursor:'default',
border : '2px double black',
margin : '0.35em', position : 'relative' }],
['div.img-tech.update', {
'border-color' : 'rgb(231, 166, 26)' }],
['div.layer',{
position:'absolute', "text-align" : 'center',
top : '-0.45em', left : '-0.45em' }],
['div.layer .overlayer', {
"background-color" : 'black', opacity:'0.8', border : "1px solid gray" }],
['div.layer .information', {
margin : 0, padding : '1px 5px' }],
['div.layer.update',{
top : 'inherit', left : 'inherit', right : '-0.35em', bottom : '-0.35em'}],
['div.layer.update .overlayer', {
"background-color" : '#55AA1A',
border : '1px solid #75890c', opacity : 1}]
]);
function __image( group, id, options) {
if ('undefined' === typeof(options)) options = {};
Object.assign({level:null, update:null}, options);
_define(this, 'options', options, false);
var main = jQuery('<div>', {
class : 'img-tech ' + group,
ref : id
});
_define(this, 'main', main, false);
if ('undefined' != typeof(options.title)) {
if ('undefined' === typeof(options.tooltip)) options.tooltip = 'tooltip';
main.attr('title', options.title).addClass(options.tooltip);
}
var level = jQuery('<div>' , {
class : 'layer level'
}).append(
"<div class='overlayer'></div>",
jQuery("<div> <b>").addClass('information')
);
_define(this, 'level', level.find('b'), false);
this.setLevel(options.level);
var update = jQuery('<div>', {
class : 'layer update',
style : 'display:none'
}).append (
"<div class='overlayer'></div>",
jQuery("<div> <b>").addClass('information')
);
_define(this, 'update', update.find('b'), false);
this.setUpdate(options.update);
main.append(level, update);
}
__image.prototype.setLevel = function(l) {
var layer = this.level.closest('.layer'),
options = this.options;
this.level.text( $OGame.fnNumberHumanReadable(l) );
if ( 'undefined' == typeof(l) || null === l ) {
layer.hide();
} else {
layer.show();
if(l >= 1000000 && options.title) {
var title = options.title + " (" + win.number_format(l) + ")";
win.changeTooltip(this.main, title);
}
}
};
__image.prototype.setUpdate = function(l) {
var layer = this.update.closest('.layer');
this.update.text(l);
if ( 'undefined' == typeof(l) || null === l || '' === l ) {
if ( layer.is(':visible') ) layer.hide();
layer.parent().removeClass('update');
} else {
if ( !layer.is(':visible') ) layer.show();
layer.parent().addClass('update');
}
};
__image.prototype.objectHTML = function() {
return this.main[0];
};
/* ###################################################################### */
_define(root, 'container', c);
_define(root, 'imperium', imperium, false);
root.style.addArray([
["#main_navigation",{
'margin-bottom' : '5px' }],
["#main_navigation > li",{
margin:'0 3px !important' }],
["#main_navigation a",{
position : 'relative', padding:'3px 3px' }],
["#main_navigation a > .menu-icon32",{
'vertical-align':'middle', margin:'3px' }]
]);
function _renderTopbar() {
var ul = jQuery('<ul>', {
id : 'main_navigation',
class : 'horizontal'
});
jQuery('<li>').append( jQuery('<a>', {
class : 'dark_highlight',
href : '#OGICurrentProduction',
ref : 'dialog'
}).append(
"<span class='img-main menu-icon32' ref='production'></span>",
"<p>" + root.Language.get('production') + "</p>"
)).appendTo(ul);
jQuery('<li>').append( jQuery('<a>', {
class : 'dark_highlight',
href : '#OGICurrentConstruction',
ref : 'dialog'
}).append(
"<span class='img-main menu-icon32' ref='construction'></span>",
"<p>" + root.Language.get('construction') + "</p>"
)).appendTo(ul);
return ul;
}
root.style.addArray([
['#OGImperium .boxCurrentUpdate',{
width : '120px', float : 'right', 'padding-bottom':'1em'}],
["#OGImperium .boxCurrentUpdate .information h2",{
color: "#E7AE46" }],
["#OGIResearchs .boxCurrentUpdate div.image",{
width:'78px', height:'78px', display:'inline-block' }],
["#OGIResearchs .boxCurrentUpdate div.image > a:first-child",{
width:'76px', height:'76px', display:'inline-block',
border:'1px solid rgb(1, 81, 0)', 'border-radius':"5px" }],
["#OGIResearchs div.techWrapper a.abortNow", {
bottom:'3px', right:0}],
["#OGIResearchs .basics, #OGIResearchs .advanced", {}]
]);
function _renderResearchs() {
var box = root.makeBoxZ(root.Language.get('investigacion'));
box.root.attr('id','OGIResearchs');
var info = root.imperium.Storage.item('researchs');
var update = root.imperium.updates.researchs;
function ulTech(index, data) {
var ul = jQuery('<ul>',{
width : '100%',
class : 'horizontal'
});
for(var z in index ) {
var idResearch = index[ z ],
img = new __image('research-icon', idResearch, {
title : $OGame.Localization.names( idResearch ),
level : data[ idResearch ],
});
if ( update && (idResearch == update.build) ) {
img.setUpdate(update.level);
}
ul.append( jQuery('<li>').append(img.objectHTML()) );
}
return ul;
}
function boxCurrentUpdate(data) {
var table = jQuery('<div>', {
width : '100%',
style : 'text-align:center'
}),
ulImg = "<div class='techWrapper' style='display:inline-block;position:relative;' >\n";
if (null !== root.imperium.hasTokenCancel) {
ulImg += "\t<a class='tooltip abortNow' href='javascript:void(0);' title='" + data.title
+ "' onclick=\"cancelResearch(" +data.build+", " +data.list+ ", '" +data.title+ "');return false;\"></a> \n";
}
ulImg += "\t<div class='techImage research tech"+data.build+" image' ><a></a></div>\n</div>";
table.append( ulImg );
var timedown = jQuery('<p>').append( $OGame.Localization.loading );
table.append(
jQuery('<p>', {style:'margin-bottom:10px'}).append(
"<b style='color:#9C0'>" + root.Language.get('Level') + ' ' + data.level + "</b>"
),
timedown,
jQuery('<p>', { style:'color:green;font-size:80%' }).append(
formatDateFuture( update.fnEndDate() )
)
);
new win.baulisteCountdown( timedown[0], update.fnTimeLeft(), null );
return table;
}
var basic = [113, 120, 121, 114, 122],
drives = [115, 117, 118],
advanced = [106, 108, 124, 123, 199],
combat = [109, 110, 111];
box.appendLayer( ulTech(basic, info), {
class:'basics',
title: root.Language.get('research_basic'),
});
box.appendLayer( ulTech(drives, info), {
class:'drives',
title: root.Language.get('research_drives')
});
// box update
if ( update ) {
box.appendLayer( boxCurrentUpdate(update) ,{
class : 'boxCurrentUpdate',
title : $OGame.Localization.names(update.build),
overlayer : true
} );
} else {
box.appendLayer( '<p style="text-align:center">'
+ root.Language.get('research_noprogress') + '</p>' ,{
class : 'boxCurrentUpdate'
} );
}
box.appendLayer( ulTech(advanced, info),{
class:'advanced',
title: root.Language.get('research_advanced')
});
box.appendLayer( ulTech(combat, info), {
class:'combat',
title: root.Language.get('research_combat')
});
return box.root;
}
root.style.addArray([
["#OGIResources table img.planet", {'vertical-align':'middle', 'margin-right':'5px' }],
["#OGIResources table tr.moon td", {color:'#9F4A4A'}],
["#OGIResources table tr.moon img.planet", {'margin-left':'20px'}],
["#OGIResources table tr.fly td", {color:'#75BAB0'}],
["#OGIResources table tr td:not(:first-child)", { padding:'2px 4px' }],
["#OGIResources table .bar_container", {height:'3px'}],
["#OGIResources table .em-storage", {'font-size':'8px'}],
["#OGIResources tr.planet-details",{ 'display':'none'}],
["#OGIResources tr.planet-details .resources",{ width:'200px' }]
]);
function _renderResources() {
var box = root.makeBoxZ( root.Language.get('title_recursos') );
box.root.attr('id','OGIResources');
var planet_img = "/cdn/img/planets/{0}",
table = jQuery('<table>', {
width : '100%',
cellspacing : 0,
class : 'OGItable-fix'
}),
thead = jQuery('<thead>'),
tbody = jQuery('<tbody>'),
tfoot = jQuery('<tfoot>');
table.append(thead, tbody, tfoot);
var HEAD = [
'', // planeta
[root.Language.get('metal'), { width : 120 }],
[root.Language.get('crystal'), { width : 120 }],
[root.Language.get('deuterium'), { width : 120 }]
];
var tr_head = jQuery('<tr>');
thead.append(tr_head);
for (var z in HEAD) {
var elm = HEAD[ z ], th;
if ('object' === typeof(elm)) {
th = jQuery('<th>', elm[1]);
elm = elm[0];
} else {
th = jQuery('<th>');
}
th.append(elm).appendTo(tr_head);
}
function __row(data , trConfig) {
var ROW = [
[_planet,{ class : 'label' }],
_resourceMetal,
_resourceCryst,
_resourceDeute
], tr = jQuery('<tr>', trConfig);
for (var z in ROW) {
var elm = ROW[ z ], td;
if ('object' === typeof(elm)) {
td = jQuery('<td>', elm[1]);
elm = elm[0];
} else {
td = jQuery('<td>');
}
if('string' === typeof(elm)) {
var str = elm;
elm = function(p){ return str; };
}
td.append( elm(planet) ).appendTo(tr);
}
/* celda del nombre del planeta */
function _planet(data) {
return [
jQuery('<img>', {
height : '16px',
width : '16px',
class : 'planet',
src : planet_img.format(data.imageName)
}),
" " + data.name
];
}
/* celda de recursos en planeta */
function __resources(data, keyResource) {
var resources = data.resources;
function color(current, storage) {
var c = '';
if (current >= storage)
c = 'overmark';
else if (current >= storage * 0.9)
c = 'middlemark';
return c;
}
var div = jQuery('<div>').append(
win.number_format( resources[keyResource] )
);
if (data.isMoon) {
return div;
}
var storage = data.getStorage(), emStorage;
if ( isNaN(storage[keyResource]) ) {
storage[keyResource] = undefined;
emStorage = " <em class='em-storage'>/#</em>";
} else {
emStorage = " <em class='em-storage'>/" + win.gfNumberGetHumanReadable(storage[keyResource], 3) + "</em>";
}
div.append(
emStorage,
root.progressbar(null, resources[keyResource], storage[keyResource])
).addClass( color(resources[keyResource], storage[keyResource]) );
return div;
}
function _resourceMetal(data){ return __resources(data, 'metal'); }
function _resourceCryst(data){ return __resources(data, 'crystal'); }
function _resourceDeute(data){ return __resources(data, 'deuterium'); }
function _aDetails(data) {
var a = jQuery('<a>',{
class : 'tabOpenClose tabClose showDetails',
href : "javascript:void("+ data.id +");",
'data-planet' : data.id
})
return a;
}
return tr;
}
var fill = 1;
var planets = stellarSort(root.imperium.planets);
for (var pid in planets) {
var planet = planets[pid];
__row(planet, {
class: (fill ? 'alt' : '')
}).appendTo(tbody);
fill = !fill;
if (planet.moon) {
planet = planet.getMoon();
__row(planet, {
class : 'moon' + (fill ? 'alt' : '')
}).appendTo(tbody);
fill = !fill;
}
}
var totalPlayer = {metal:0, crystal:0, deuterium:0};
var totalEnd = root.imperium.planets.fnResourcesTotal();
root.imperium.fnSumResources(totalPlayer, totalEnd);
jQuery('<tr>', { class : 'summary '+ (fill ? 'alt' : '') })
.append(
jQuery('<td>', {class:'label'}).append(root.Language.get('planet_resources')+":"),
jQuery('<td>').append( win.number_format(totalEnd.metal, 0) ),
jQuery('<td>').append( win.number_format(totalEnd.crystal, 0) ),
jQuery('<td>').append( win.number_format(totalEnd.deuterium, 0) ),
'<td></td>'
).appendTo(tfoot);
fill = !fill;
totalEnd = root.imperium.moons.fnResourcesTotal();
root.imperium.fnSumResources(totalPlayer, totalEnd);
jQuery('<tr>', { class : 'moon ' + (fill ? 'alt' : '') })
.append(
jQuery('<td>', {class:'label'}).append(root.Language.get('moon_resources')+":"),
jQuery('<td>').append( win.number_format(totalEnd.metal, 0) ),
jQuery('<td>').append( win.number_format(totalEnd.crystal, 0) ),
jQuery('<td>').append( win.number_format(totalEnd.deuterium, 0) ),
'<td></td>'
).appendTo(tfoot);
fill = !fill;
totalEnd = root.imperium.flying.fnResourcesTotal();
root.imperium.fnSumResources(totalPlayer, totalEnd);
jQuery('<tr>', { class : 'fly ' + (fill ? 'alt' : '') })
.append(
jQuery('<td>', {class:'label'}).append(root.Language.get('fly_resources')+":"),
jQuery('<td>').append( win.number_format(totalEnd.metal, 0) ),
jQuery('<td>').append( win.number_format(totalEnd.crystal, 0) ),
jQuery('<td>').append( win.number_format(totalEnd.deuterium, 0) ),
'<td></td>'
).appendTo(tfoot);
fill = !fill;
jQuery('<tr>', { class : 'summary ' + (fill ? 'alt' : '') })
.append(
jQuery('<td>', {class:'label'}).append("<b>"+root.Language.get('total')+"</b>"),
jQuery('<td>').append( "<b>"+win.number_format(totalPlayer.metal, 0) + "</b>"),
jQuery('<td>').append( "<b>"+win.number_format(totalPlayer.crystal, 0) + "</b>"),
jQuery('<td>').append( "<b>"+win.number_format(totalPlayer.deuterium, 0) +"</b>" ),
'<td></td>'
).appendTo(tfoot);
fill = !fill;
box.append(table);
return box.root;
}
root.style.addArray([
["#OGIGlobalView .table-responsive", {
"margin-bottom" : '15px', "overflow-x": 'auto',
"overflow-y": "hidden", width: '610px'
}],
["#OGIGlobalView .table-responsive table", { "margin-bottom" : '15px'}],
["#OGIGlobalView .table-responsive table .lock-col", {
position:'absolute', left:0, top:'auto',
"border-right" : '1px dotted #848484',
"border-top-width":'0px', /*only relevant for first row*/
"margin-top":'0px' /*compensate for top border*/ }],
["#OGIGlobalView table div.img-tech", {
margin : '-2px 0px 0px 0px', border:'0px'
}],
["#OGIGlobalView table td", {
"vertical-align" : 'middle', "text-align" : 'center', 'height':'30px'
}],
["#OGIGlobalView table td:nth-child(2)",{
'padding-left' : '32px'
}],
["#OGIGlobalView .planet-name", {
'vertical-align':'super'
}],
["#OGIGlobalView .planet-name :first-child", {
display:'block', "word-wrap":'break-word',
"text-align":'center', "min-width":'70px'
}],
['#OGIGlobalView table tr.head', {
"text-align":'center', "background-color":'rgb(35, 40, 45)', "box-shadow": '0px 0px 3px 1px rgb(0, 5, 10) inset',
"padding": '0.1em', border:'1px solid black', "margin-bottom": '1px'
}],
['#OGIGlobalView table tr.head td', {
"height" : '19px', "vertical-align":'top'
}],
['#OGIGlobalView table tr.head :first-child', {
"border-right":'0px'
}],
['#OGIGlobalView table tr.head .head-closer', {
"display": 'inline-block', "padding-top" : '1px'
}]
]);
function _renderGlobalView() {
var box = root.makeBoxZ(root.Language.get('title_builds'));
box.root.attr('id','OGIGlobalView');
var responsive = jQuery('<div>', {class:'table-responsive'} ),
oT = root.tableFix();
responsive.append( oT.table );
box.appendLayer( responsive );
function cell(lv) {
props = {};
if ( 'undefined' === typeof(lv) ) {
lv = 0;
props.style = "color:#292929";
}
return [ $OGame.fnNumberHumanReadable( lv ) , props ];
}
function head(title, section) {
var trhead = oT.appendRowBody([
[ "<div class='head-closer'><a class='tabOpenClose'></a></div>", {class:'lock-col', width:'30px'} ],
[ "<b>"+ root.Language.get( title ) +"<b>", {colspan: root.imperium.planets.length()}]
]);
trhead.addClass('head');
trhead.attr('data-section', section);
}
// var techs = planet.techs;
var resources = [ // ((Edificios de recursos))
[1, 'resources01-icon'],
[2, 'resources01-icon'],
[3, 'resources01-icon'],
[4, 'resources01-icon'],
[12, 'resources01-icon'],
[212, 'resources01-icon'],
[22, 'resources02-icon'],
[23, 'resources02-icon'],
[24, 'resources02-icon']
];
var stations = [ // ((Estacion))
[14, 'station-icon'],
[21, 'station-icon'],
[31, 'station-icon'],
[34, 'station-icon'],
[44, 'station-icon'],
[15, 'station-icon'],
[33, 'station-icon']
];
var row = [ ' ' ], // Columna inical donde va la imagen del edificio
tr, pid;
for(var pid in root.imperium.planets) {
var planet = root.imperium.planets[ pid ];
row.push(
["<b>"+planet.name+"</b><i class='planet-coords'>["+ planet.coords.join(':') +"]</i>", { class:'planet-name' }]
);
}
oT.appendRowBody( row );
// ===== Encabezados para los edificios de recursos
// =================================================
head('resource_buildings', "resources-details");
var fill = 1;
for(var r in resources) {
var resource = resources[ r ],
img = new __image(resource[1], resource[0], {
title : $OGame.Localization.names( resource[0] ),
tooltip : 'tooltipLeft'
});
row = [ [img.objectHTML(), {class:'lock-col', height:'30px'}] ];
for(pid in root.imperium.planets ){
var planet = root.imperium.planets[ pid ];
var lv = planet.techs[ resource[0] ];
row.push( cell(lv) );
}
tr = oT.appendRowBody( row );
tr.addClass( (fill ? 'alt' : '')+ ' resources-details' );
fill = !fill;
}
// ===== Encabezados para los edificios de la estación
// ===================================================
head('station_buildings', 'stations-details');
for(var s in stations ) {
var station = stations[ s ],
img = new __image(station[1], station[0], {
title : $OGame.Localization.names( station[0] ),
tooltip : 'tooltipLeft'
});
row = [ [img.objectHTML(), {class:'lock-col', height:'30px'}] ];
for(pid in root.imperium.planets ){
var planet = root.imperium.planets[ pid ];
var lv = planet.techs[ station[0] ];
row.push( cell(lv) );
}
tr = oT.appendRowBody( row );
tr.addClass( (fill ? 'alt' : '')+ ' stations-details' );
fill = !fill;
}
jQuery(box.root).on('click', '.head a.tabOpenClose', function(e) {
var section = jQuery(this).closest('tr').data('section');
var obj = jQuery(box.root).find('tr.'+section);
var open = jQuery(this).hasClass('tabClose');
if ( open ) {
obj.show('slow');
jQuery(this).removeClass('tabClose');
} else {
obj.hide('slow');
jQuery(this).addClass('tabClose');
}
});
box.appendLayer('<p> Working to show defenses and ships. </p>');
return box.root;
}
c.append(
_renderResearchs(),
_renderResources(),
_renderGlobalView()
);
// dialogos
// #OGICurrentConstruction
root.style.addArray([
['#OGICurrentConstruction', {
display:'none' }],
['#OGICurrentConstruction .OGI-layer',{
width : '32.5%', 'margin-bottom':'5px'}],
['#OGICurrentConstruction .OGI-layer .img-tech ',{
float: 'left', margin:'2px 10px 5px 0.35em', color:'#f1f1f1'}],
['#OGICurrentConstruction .OGI-layer .information .text-information ', {
display: 'table'}],
['#OGICurrentConstruction .OGI-layer .information .planet-name ', {
color : '#6F9FC8', 'font-size': '9px'}],
['#OGICurrentConstruction .OGI-layer .information .timedown ', {
'margin-top': '2px'}],
['#OGICurrentConstruction .OGI-layer .information .timeend ', {
color : 'green' , 'font-size' : '80%'}]
]);
function _dialogCurrentBuild() {
var box = root.makeBoxZ( '' );
function layer(planet) {
var ul = jQuery('<div>');
var update = planet.update();
// buscamos la calse para la imagen de la costruccion
var classIconGroup = '';
if ([1,2,3,4,12].indexOf(update.build) != -1) {
// fusion, metal, solar, deuterium, crystal
classIconGroup = 'resources01-icon';
} else if ([22,23,24,25,26,27].indexOf(update.build) != -1) {
// metal storage, crystal storage, deuterium storage,
// metal hiden, crystal hiden, deuterium hiden
classIconGroup = 'resources02-icon';
} else if ([14,21,31,34,44,15,33,41,42,43].indexOf(update.build) != -1) {
// station
classIconGroup = 'station-icon';
}
var img = new __image(classIconGroup, update.build, {
update : update.level
});
var iconMoon = planet.isMoon ? "<figure class='planetIcon moon'></figure> " : '',
namePlanet = "[" + planet.coords.join(':') + "] " + iconMoon + planet.name,
nameUpdate = $OGame.Localization.names( update.build ),
timedown = jQuery('<p>',{
class : 'timedown'
}).append( $OGame.Localization.loading );
new win.baulisteCountdown( timedown[0], update.fnTimeLeft(), null );
return [
img.objectHTML(),
jQuery('<div>',{ class:'text-information'}).append(
'<span class="planet-name">'+namePlanet+'</span>',
'<p>' + nameUpdate + '</p>',
timedown,
'<p class="timeend">' + formatDateFuture(update.fnEndDate()) + "</p>"
)
];
}
var i = 0;
for(var z in root.imperium.updates ) {
if (z === 'researchs') continue;
var planet = root.imperium.planets[ z ];
if ('undefined' === typeof(planet) )
planet = root.imperium.moons[ z ];
var items = layer(planet);
if (i%3 === 0)
box.append('<div class="clearfloat"></div>');
box.appendLayer( items , {
overlayer : true
});
i++;
}
box.container.parent()
.attr('id', 'OGICurrentConstruction')
.dialog({
autoOpen : false,
title :root.Language.get('title_currentcostruction')
+ " ({0})".format(root.imperium.updates.length()),
width : '670px',
resizable : false
});
}
// #OGICurrentProduction
root.style.addArray([
["#OGICurrentProduction", {
display : 'none'
}],
["#OGICurrentProduction .planet-coords", {
'text-align': 'center', color : 'rgb(111, 159, 200)'
}],
["#OGICurrentProduction .no-production", {
'text-align': 'center', color : '#d43635 !important'
}],
["#OGICurrentProduction .no-production a", {
color : '#d43635 !important'
}],
["#OGICurrentProduction .em-level", {
color : 'lightyellow', 'font-size' : '9px', 'font-style' : 'normal',
display : 'block', width : '30px'
}]
]);
function _dialogProduction() {
var box = root.makeBoxZ( '' );
var oT = root.tableFix();
box.appendLayer( oT.table );
var productionTotal = {};
function row( planet ) {
var columns = [];
// coordenadas y nombre
var current = ($OGame.currentPlanetId == planet.id) ? 'overmark' : '';
columns.push([ "[" + planet.coords.join(':') + "]", {
class : 'label planet-coords ' + current, width: 90
}]);
columns.push([ "<b>"+ planet.name +"</b>", { class : 'label' }]);
// produccion
var production = planet.getProduction();
if (!production) {
columns.push([
root.Language.get("produccion_no")
+ " - <a href='/game/index.php?cp=" + planet.id + "&OGIDialog=production' >"
+ root.Language.get('update') + "...</a>" , {
colspan : 7, class : 'no-production'
}]);
} else {
root.imperium.fnSumResources(productionTotal, production);
// la produccion esta guardada en segundos por lo que se
// multiplica por 3600 para obtener la produccion por hora.
var metal = Math.round( production.metal * 3600 );
var crystal = Math.round( production.crystal * 3600 );
var deuterium = Math.round( production.deuterium * 3600 );
columns.push(
[ win.number_format(metal) ,{
class : 'undermark', width:110
}],
"<em class='em-level'>["+ planet.techs[1] + "]<em>"
);
columns.push(
[ win.number_format(crystal) ,{
class : 'undermark', width:110
}],
"<em class='em-level'>["+ planet.techs[2] + "]<em>"
);
columns.push(
[ win.number_format(deuterium) ,{
class : 'undermark', width:110
}],
"<em class='em-level'>["+ planet.techs[3] + "]<em>"
);
columns.push([ win.number_format(production.energy) ,{
class : 'undermark', width:110
}]);
}
return columns;
}
oT.appendRowHead([
[root.Language.get('planet') , { colspan : 2 }],
[root.Language.get('metal'), { colspan : 2 }],
[root.Language.get('crystal'), { colspan : 2 }],
[root.Language.get('deuterium'), { colspan : 2 }],
root.Language.get('energy')
]);
var fill = true;
var planets = stellarSort(root.imperium.planets);
for (var p in planets) {
var planet = planets[ p ];
var items = row ( planet );
var tr = oT.appendRowBody( items );
if (fill) tr.addClass('alt');
fill = !fill;
}
// la produccion esta guardada en segundos por lo que se
// multiplica por 3600 para obtener la produccion por hora.
var tMetal = productionTotal.metal * 3600;
var tCrystal = productionTotal.crystal * 3600;
var tDeuterium = productionTotal.deuterium * 3600;
var times = [
{label : 'production_hour', time : 1},
{label : 'production_day', time : 24},
{label : 'production_week', time : 168},
{label : 'production_month', time : 720}
];
for (var o in times) {
var footTime = times[ o ];
var tr = oT.appendRowFoot([
[root.Language.get(footTime.label),
{ class : 'label', colspan:2}],
[win.number_format( Math.round(tMetal * footTime.time) ),
{ class : 'undermark'}], '',
[win.number_format( Math.round(tCrystal * footTime.time) ),
{ class : 'undermark'}], '',
[win.number_format( Math.round(tDeuterium* footTime.time) ),
{ class : 'undermark'}], '',
''
]);
if ( o === 0) tr.addClass('summary');
if (fill) tr.addClass('alt');
fill = !fill;
}
box.container.parent()
.attr('id', 'OGICurrentProduction')
.dialog({
autoOpen : false,
title : root.Language.get('title_produccion'),
width : '670px',
resizable : false
});
}
// #OGIFleet
function _seendFleed(){
var box = root.makeBoxZ( '' );
box = box.container.parent();
var fleet1 = "/game/index.php?page=fleet1&cp=";
function proccessFleet(rootPlanet){
// primero se obtiene el fomulario principal de la naves,
// mediante un GET.
box.load( fleet1+rootPlanet + " #" );
}
box.attr('id', 'OGISendfleet')
.dialog({
autoOpen : false,
width : '670px',
resizable : false
});
}
_dialogCurrentBuild();
_dialogProduction();
}
_fnImperiumUI.prototype.makeBoxZ = function( title , ops ) {
function __BoxZ(t) {
var _box = this;
var root = jQuery('<div>',{
class : 'OGI-boxz'
}),
name = jQuery('<div> <h2>').addClass('header'),
body = jQuery('<div>',{class:'body'}),
container = jQuery('<div>',{
class : 'content'
});
container.append(
body.append('<div class="clearfloat"></div>'), '<div class="footer"></div>'
);
root.append(name, container);
if('undefined' != typeof(t))
name.children().append(t);
_define(this, 'name', name, false);
_define(this, 'container', body, false);
_define(this, 'root', root, false);
if ('undefined' === typeof(ops)) ops = {};
var _options = {
isClosable : false,
isContentOpen : true
};
Object.assign(_options, ops);
if (_options.isClosable) {
var action = jQuery('<a>', { class : 'tabOpenClose'});
name.prepend( action ).on('click', 'h2, a.tabOpenClose', function() {
_box.toggleShow();
});
if (!_options.isContentOpen) {
_box.toggleShow();
}
}
}
__BoxZ.prototype.setTitle = function(t) {
this.name.children().empty().append(t).end();
};
__BoxZ.prototype.appendLayer = function(content, layerConfig) {
var titleLayer = '', overlayer = '';
if ('undefined' === typeof(layerConfig))
layerConfig = {};
if ( 'undefined' != typeof(layerConfig.title) ) {
titleLayer = jQuery('<h2>').text(layerConfig.title);
delete layerConfig.title;
}
if ( 'undefined' != layerConfig.overlayer && layerConfig.overlayer) {
overlayer = '<div class="overlayer"></div>';
delete layerConfig.overlayer;
}
var layer = jQuery('<div>', layerConfig).addClass('OGI-layer');
layer.append( overlayer, jQuery('<div>',{
class : 'information'
}).append(titleLayer, content)
);
this.append(layer);
//this.container.append(layer);
return this;
};
__BoxZ.prototype.append = function(content) {
this.container.find('>:last-child').before(content);
return this;
};
__BoxZ.prototype.getRoot = function() {
return this.root;
};
__BoxZ.prototype.toString = function() {
return this.root.outerHTML;
};
__BoxZ.prototype.toggleShow = function( ) {
var isClose = this.name.find('.tabOpenClose').is('.tabClose');
// var efect = {duration:400, easing : 'blind'};
if ( !isClose ) {
this.name.find('.tabOpenClose').addClass('tabClose');
this.container.hide('blind');
} else {
this.name.find('.tabOpenClose').removeClass('tabClose');
this.container.show('blind');
}
return !isClose;
};
return new __BoxZ( title );
};
_fnImperiumUI.prototype.progressbar = function(id, current, capacity) {
if (!capacity) {
capacity = 10;
current = 0;
} else if (!current) {
current = 0;
}
var progress = current / capacity * 100;
color = 'filllevel_undermark'; // progreso menor al 90%
if (progress >= 90 && progress < 100) {
color = 'filllevel_middlemark';
} else if (progress >= 100) {
color = 'filllevel_overmark';
progress = 100;
}
var HTMLProgress = jQuery('<div>', {
id : id,
class : 'filllevel_bar ' + color,
css : { width : progress + "%" }
});
return jQuery('<div>', {class:'bar_container'})
.attr('data-current-amount', current)
.attr('data-capacity', capacity)
.append(HTMLProgress, "<div class='premium_bar tooltipPremium'></div>");
};
_fnImperiumUI.prototype.tableFix = function(options) {
function __UITableFix( options ) {
var opts = {
width : '100%',
cellspacing : 0,
class : ''
};
Object.assign(opts, options);
opts.class += 'OGItable-fix';
var table = jQuery('<table>', opts),
thead = jQuery('<thead>'),
tbody = jQuery('<tbody>'),
tfoot = jQuery('<tfoot>');
table.append(thead, tbody, tfoot);
_define(this, 'table', table);
_define(this, 'tbody', tbody);
_define(this, 'thead', thead);
_define(this, 'tfoot', tfoot);
}
__UITableFix.prototype._fixArguments = function(args) {
var colums = [], i = 0;
for ( ; i < args.length; i++ ){
if (args[i] instanceof Array) colums = colums.concat(args[i]);
else colums.push ( args[i] );
}
return colums;
};
__UITableFix.prototype._appendTo = function(typeColumn, columns) {
var tr = jQuery('<tr>'), e = 0;
for ( ; e < columns.length; e++) {
var data = columns[e], props = {};
if ( columns[e] instanceof Array){
data = columns[e][0];
props = columns[e][1];
}
jQuery(typeColumn, props).append( data ).appendTo( tr );
}
return tr;
};
__UITableFix.prototype.appendRowBody = function() {
var columns = this._fixArguments(arguments), e = 0;
var tr = this._appendTo('<td>', columns);
this.tbody.append(tr);
return tr;
};
__UITableFix.prototype.appendRowHead = function() {
var columns = this._fixArguments(arguments), e = 0;
var tr = this._appendTo('<th>', columns);
this.thead.append(tr);
return tr;
};
__UITableFix.prototype.appendRowFoot = function() {
var columns = this._fixArguments(arguments), e = 0;
var tr = this._appendTo('<td>', columns);
this.tfoot.append(tr);
return tr;
};
return new __UITableFix( options );
};
try{
var $Imperium = new _fnImperium();
win.$OGImperium = $Imperium;
jQuery.when(
$OGame.defered(),
$Imperium.defered()
).then(function() {
console.info( $Imperium );
var container = jQuery('<div>', {
id : 'OGImperium' , style:'display:none'
});
jQuery("#contentWrapper").prepend( container );
var $UI = new _fnImperiumUI($Imperium, container );
jQuery('<style>',{ type:'text/css', name:'OGI-UI' })
.append( $UI.style.toString() ).appendTo('head');
// evento de click para ver el imperio
jQuery('body').on('click', "#menuTableImperium .btnImperium a", function(e) {
var inhalt = jQuery("#contentWrapper #inhalt");
if (container.is(':visible')) {
container.hide();
inhalt.show();
} else {
container.show();
inhalt.hide();
}
});
// evento de click para el menu de opciones rapidos (dialogos)
jQuery('body').on('click', "#OGI_fastmenu a, #main_navigation a[ref='dialog']", function(e) {
e.preventDefault();
var href = this.getAttribute('href');
console.info(href, e);
jQuery(href).dialog('open');
return false;
});
if (win.location.href.indexOf('OGIView') != -1) {
jQuery("#menuTableImperium .btnImperium a").trigger('click');
}
if (win.location.href.indexOf('OGIDialog') != -1) {
var dialog = win.location.href.match(/OGIDialog=(\w+);*/ig)[0];
dialog = dialog.split('=')[1];
var o;
if (dialog == 'production') {
o = "#OGICurrentProduction";
}
o = jQuery("#OGI_fastmenu a[href='" + o + "'], #main_navigation a[href='" + o + "']");
o.trigger('click');
}
});
} catch(err) {
console.error("OGame5:Imperium "+VERSION, err);
}