NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name KondafExp
// @Author EL_PATRON
// @version 1.9.2
// @include *game/index.php?page=*ingame&component=*fleetdispatch*
// @include *game/index.php?page=*
// @exclude *game/index.php?*messages*
// @exclude *game/index.php?page=ingame&component=galaxy*
// @license MIT
// @grant GM_addStyle
// @run-at document-start
// ==/UserScript==
let redirect = localStorage.getItem('ogl-redirect');
if(redirect && redirect.indexOf('https') > -1)
{
localStorage.setItem('ogl-redirect', false);
window.location.href = redirect;
}
// goodbye tooltips
(function goodbyeTipped()
{
if(typeof Tipped !== 'undefined')
{
Tipped =
{
create:function() { return false; },
read:function() { return false; },
hide:function() { return false; },
remove:function() { return false; },
show:function() { return false; },
hideAll:function() { return false; },
visible:function() { return false; },
refresh:function() { return false; },
};
}
else requestAnimationFrame(() => goodbyeTipped());
})();
class OGLight
{
constructor()
{
this.rawURL = new URL(window.location.href);
this.page = this.rawURL.searchParams.get('component') || this.rawURL.searchParams.get('page');
this.mode = this.rawURL.searchParams.get('oglMode') || 0; // 0=default; 1=transpo; 2=lock; 3=autoHarvest; 4=raid;
this.ecoSpeed = document.querySelector('head meta[name="ogame-universe-speed"]').getAttribute('content');
this.planetList = document.querySelectorAll('.smallplanet');
this.language = window.location.host.indexOf('-fr.ogame.gameforge.com') > -1 ? 0 : 1; // 0=fr; 1=en;
this.isMobile = ('ontouchstart' in document.documentElement);
this.highlighted = false;
this.tooltipList = {};
// current planet
this.current = {};
this.current.planet = (document.querySelector('.smallplanet .active') || document.querySelector('.smallplanet .planetlink')).parentNode;
this.current.coords = this.current.planet.querySelector('.planet-koords').textContent.slice(1, -1);
this.current.hasMoon = this.current.planet.querySelector('.moonlink') ? true : false;
this.current.isMoon = this.current.hasMoon && this.current.planet.querySelector('.moonlink.active') ? true : false;
// get data & init default values
this.json = JSON.parse(localStorage.getItem('ogl-data')) || {};
this.json.tech114 = this.json.tech114 || 0;
this.json.ptFret = this.json.ptFret || 5000;
this.json.gtFret = this.json.gtFret || 25000;
this.json.pfFret = this.json.pfFret || 10000;
this.json.autoHarvest = this.json.autoHarvest || ['0:0:0', 3];
this.json.myMines = this.json.myMines || {};
this.json.myActivities = this.json.myActivities || {};
this.json.sideStalk = this.json.sideStalk || false;
this.json.markers = this.json.markers || {};
this.json.locked = this.json.locked || {};
this.json.targetTabs = this.json.targetTabs || {g:1, s:0};
this.json.spyProbes = this.json.spyProbes || 5;
// user options
this.json.options = this.json.options || {};
this.json.options.fret = this.json.options.fret || 202;
this.json.options.harvestMission = this.json.options.harvestMission || 3;
this.json.options.spyFilter = this.json.options.spyFilter || '$';
this.json.options.rvalLimit = this.json.options.rvalLimit || 400000 * this.ecoSpeed;
this.json.options.headerDisabled = this.json.options.headerDisabled || {};
this.json.options.spyTableEnable = this.json.options.spyTableEnable === false ? false : true;
this.json.options.compactViewEnable = this.json.options.compactViewEnable === false ? false : true;
this.json.options.autoDeleteEnable = this.json.options.autoDeleteEnable === true ? true : false;
this.json.options.kept = this.json.options.kept || [0,0,0];
this.json.options.hiddenTargets = this.json.options.hiddenTargets || {};
this.start();
}
start()
{
if(this.page == 'fleetdispatch')
{
fleetDispatcher.apiTechData.forEach(tech =>
{
if(tech[0] == 114) this.json.tech114 = tech[1];
if(tech[0] == 111) this.json.tech111 = tech[1];
});
this.json.ptFret = fleetDispatcher.fleetHelper.shipsData[202].baseCargoCapacity;
this.json.gtFret = fleetDispatcher.fleetHelper.shipsData[203].baseCargoCapacity;
this.json.pfFret = fleetDispatcher.fleetHelper.shipsData[219].baseCargoCapacity;
this.json.playerClass = fleetDispatcher.apiCommonData[1][1];
this.saveData();
this.current.resources =
{
metal: fleetDispatcher.metalOnPlanet,
crystal: fleetDispatcher.crystalOnPlanet,
deut: fleetDispatcher.deuteriumOnPlanet,
}
}
this.sideOptions();
this.neededCargo();
this.preselectShips();
this.keepResources();
this.harvest();
this.autoHarvest();
this.expedition();
this.quickPlanetList();
this.timers();
this.marker();
this.targetList();
this.sideStalk();
this.checkDebris();
this.spyTable();
this.lock();
this.sideLock();
this.flyingResources();
// util.
this.missingEnergy();
this.minesLevel();
this.highlightTarget();
this.toggleImage();
this.checkInputs();
this.keyboardActions();
this.betterTooltip();
this.utilities();
this.loopUtilities();
this.checkResources();
}
sideOptions()
{
let harvestOptions = this.createDOM('div', {'class':'ogl-harvestOptions'});
let container = document.querySelector('#myPlanets') || document.querySelector('#myWorlds');
container.prepend(harvestOptions);
let syncOption = harvestOptions.appendChild(this.createDOM('div', {'class':'ogl-option ogl-syncOption tooltipLeft', 'title':this.getTranslatedText(0)}, '{}'));
syncOption.addEventListener('click', () => this.importExport());
harvestOptions.appendChild(this.createDOM('a', {'class':'ogl-option ogl-targetIcon tooltipLeft', 'title':this.getTranslatedText(1)}));
// switch between PT/GT
// let cargo = harvestOptions.appendChild(this.createDOM('div', {'class':'ogl-option ogl-defaultCargo tooltipLeft', 'title':this.getTranslatedText(2)}, this.getTranslatedText(16)));
// if(this.json.options.fret == 202)
// {
// cargo.innerHTML = this.getTranslatedText(15);
// cargo.classList.add('ogl-smallCargo');
// }
// cargo.addEventListener('click', () =>
// {
// this.json.options.fret = this.json.options.fret == 202 ? 203 : 202;
// this.saveData();
// document.location.reload();
// });
//
// switch between statio/transpo
// let mission = harvestOptions.appendChild(this.createDOM('div', {'class':'ogl-option ogl-harvestMission tooltipLeft', 'title':this.getTranslatedText(3)}));
// if(this.json.options.harvestMission == 3) mission.classList.add('ogl-transpoIcon');
// mission.addEventListener('click', () =>
// {
// let oldMission = this.json.options.harvestMission;
// this.json.options.harvestMission = this.json.options.harvestMission == 3 ? 4 : 3;
//
// this.saveData();
// window.location.href = window.location.href.replace(`&mission=${oldMission}`, `&mission=${this.json.options.harvestMission}`);
// });
//
// harvest from planets
let autoHarvestPlanet = harvestOptions.appendChild(this.createDOM('div', {'class':'ogl-option ogl-autoHarvest ogl-autoHarvestPlanet tooltipLeft', 'title':this.getTranslatedText(4)}));
if(this.mode == 3) autoHarvestPlanet.classList.add('ogl-active');
autoHarvestPlanet.addEventListener('click', () =>
{
this.openPlanetList((planet) =>
{
this.json.autoHarvest = [planet.galaxy + ':' + planet.system + ':' + planet.position, planet.type];
this.saveData();
let link = `?page=ingame&component=fleetdispatch&galaxy=${planet.galaxy}&system=${planet.system
}&position=${planet.position}&type=${planet.type}&mission=${this.json.options.harvestMission}&oglMode=3`;
window.location.href = 'https://' + window.location.host + window.location.pathname + link;
});
});
}
neededCargo()
{
if(this.page == 'fleetdispatch')
{
shipsOnPlanet.forEach(ship =>
{
if(ship.id == 202 || ship.id == 203)
{
let min =
{
metal : Math.max(0, fleetDispatcher.metalOnPlanet - this.json.options.kept[0]),
crystal : Math.max(0, fleetDispatcher.crystalOnPlanet - this.json.options.kept[1]),
deut : Math.max(0, fleetDispatcher.deuteriumOnPlanet - this.json.options.kept[2])
}
let total = min.metal + min.crystal + min.deut;
let amount = this.calcNeededShips({'fret':ship.id, 'resources':total});
let span = this.createDOM('span', {class:'ogl-needed'}, amount.toLocaleString('de-DE'));
document.querySelector(`.technology[data-technology="${ship.id}"]`).appendChild(span);
// add needed buttons
span.addEventListener('click', event =>
{
event.stopPropagation();
document.querySelector('#resetall').click();
this.selectShips(ship.id, amount);
});
}
});
}
}
fillFret(params)
{
params = params || {};
if(params.resources)
{
let min =
{
metal: Math.min(params.resources.metal, this.current.resources.metal),
crystal: Math.min(params.resources.crystal, this.current.resources.crystal),
deut: Math.min(params.resources.deut, this.current.resources.deut - fleetDispatcher.getConsumption()),
}
let capacity = fleetDispatcher.getCargoCapacity();
fleetDispatcher.cargoDeuterium = Math.min(min.deut, capacity);
fleetDispatcher.cargoCrystal = Math.min(min.crystal, capacity - fleetDispatcher.cargoDeuterium);
fleetDispatcher.cargoMetal = Math.min(min.metal, capacity - fleetDispatcher.cargoDeuterium - fleetDispatcher.cargoCrystal);
}
}
harvest()
{
if(this.page == 'fleetdispatch')
{
if(this.mode == 1)
{
let total = fleetDispatcher.metalOnPlanet + fleetDispatcher.crystalOnPlanet + fleetDispatcher.deuteriumOnPlanet;
this.selectShips(this.json.options.fret, this.calcNeededShips({'resources':total}));
document.querySelector('#allresources').click();
}
}
// buttons action on click
let btnAction = (event, coords, type) =>
{
event.preventDefault();
event.stopPropagation();
let link = `?page=ingame&component=fleetdispatch&galaxy=${coords[0]}&system=${coords[1]
}&position=${coords[2]}&type=${type}&mission=${this.json.options.harvestMission
}&oglMode=1`;
window.location.href = 'https://' + window.location.host + window.location.pathname + link;
}
// planet & moon harvest icons
this.planetList.forEach(planet =>
{
let coords = planet.querySelector('.planet-koords').textContent.slice(1, -1).split(':');
if(this.current.coords != coords.join(':') || this.current.isMoon)
{
let btn = planet.querySelector('.planetlink').appendChild(this.createDOM('div', {'class':'ogl-harvest ogl-planet'}));
btn.addEventListener('click', event => btnAction(event, coords, 1));
}
let moon = planet.querySelector('.moonlink');
if(moon)
{
moon.classList.remove('tooltipLeft');
moon.classList.add('tooltipRight');
if(this.current.coords == coords.join(':') && this.current.isMoon) return;
let btn = planet.querySelector('.moonlink').appendChild(this.createDOM('button', {'class':'ogl-harvest ogl-moon'}));
btn.addEventListener('click', event => btnAction(event, coords, 3));
}
});
}
openPlanetList(callcback)
{
let container = this.createDOM('div', {'class':'ogl-dialogContainer ogl-quickLinks'}, '<h1>'+this.getTranslatedText(10)+'</h1>');
let buildButton = (planet, id, galaxy, system, position, type) =>
{
let data = {'id':id, 'galaxy':galaxy, 'system':system, 'position':position, 'type':type};
let div = container.appendChild(this.createDOM('div'));
if(type == 1) div.classList.add('ogl-quickPlanet');
else div.classList.add('ogl-quickMoon');
div.addEventListener('click', () => callcback(data));
if((planet == this.current.planet && !this.current.isMoon && type == 1)
|| (planet == this.current.planet && this.current.isMoon && type == 3))
{
div.classList.add('ogl-quickEmpty');
}
return div;
}
this.planetList.forEach(planet =>
{
let coords = planet.querySelector('.planet-koords').textContent.slice(1, -1).split(':');
// planet
let btn = buildButton(planet, new URL(planet.querySelector('.planetlink').href).searchParams.get('cp'),
coords[0], coords[1], coords[2], 1);
btn.innerHTML = `[${coords.join(':')}] ${planet.querySelector('.planet-name').textContent}`;
// moon
if(planet.querySelector('.moonlink'))
{
let btn = buildButton(planet, new URL(planet.querySelector('.moonlink').href).searchParams.get('cp'),
coords[0], coords[1], coords[2], 3);
btn.innerHTML = '<figure class="planetIcon moon"></figure>';
}
else container.appendChild(this.createDOM('div', {'class':'ogl-quickEmpty'}));
});
this.popup(false, container);
}
autoHarvest()
{
this.planetList.forEach((p, index) =>
{
p.setAttribute('data-redirect', index);
if(this.mode == 3)
{
if(p.querySelector('.planet-koords').textContent.slice(1, -1) == this.json.autoHarvest[0])
{
let target = this.json.autoHarvest[1] == 3 ? p.querySelector('.moonlink') : p.querySelector('.planetlink');
target.classList.add('ogl-target');
}
}
});
let currentIndex = parseInt(this.current.planet.getAttribute('data-redirect'));
let nextIndex = currentIndex + 1 >= this.planetList.length ? 0 : currentIndex + 1;
this.next = {};
this.next.planet = document.querySelector(`.smallplanet[data-redirect="${nextIndex}"]`);
this.next.coords = this.next.planet.querySelector('.planet-koords').textContent.slice(1, -1);
this.next.id = this.next.planet.getAttribute('id').replace('planet-', '');
this.next.hasMoon = this.next.planet.querySelector('.moonlink') ? true : false;
if(this.page == 'fleetdispatch')
{
if(this.mode == 3)
{
let coords = this.json.autoHarvest[0].split(':');
let type = this.json.autoHarvest[1];
let id = this.next.id;
if(this.current.isMoon && this.next.hasMoon)
{
let url = new URL(this.next.planet.querySelector('.moonlink').href);
id = url.searchParams.get('cp');
}
let link = `?page=ingame&component=fleetdispatch&galaxy=${coords[0]}&system=${coords[1]
}&position=${coords[2]}&type=${type}&mission=${this.json.options.harvestMission}&cp=${id}&oglMode=${this.mode}`;
link = 'https://' + window.location.host + window.location.pathname + link;
let skip = document.querySelector('#fleet1 #planet').appendChild(this.createDOM('button', {'class':'btn_blue ogl-skip'}, this.getTranslatedText(9)));
skip.addEventListener('click', () => window.location.href = link);
let needed = document.querySelector(`.technology[data-technology="${this.json.options.fret}"] .ogl-needed`);
if(needed) needed.click();
document.querySelector('#allresources').click();
document.querySelector('#sendFleet').addEventListener('click', () =>
{
localStorage.setItem('ogl-redirect', link);
});
document.addEventListener('keydown', event =>
{
if(event.keyCode === 13 && fleetDispatcher.currentPage == 'fleet3')
{
localStorage.setItem('ogl-redirect', link);
}
});
}
}
}
expedition()
{
if(this.page == 'fleetdispatch')
{
let parser = new DOMParser();
let http = new XMLHttpRequest();
http.open('GET', 'https://' + window.location.host + '/api/serverData.xml');
http.send();
http.onreadystatechange = () =>
{
if(http.readyState === XMLHttpRequest.DONE && http.status === 200)
{
let xml = parser.parseFromString(http.responseText, 'text/xml');
let topScore = parseInt(xml.querySelector('topScore').innerHTML);
// https://board.origin.ogame.gameforge.com/index.php/Thread/872-Guide-12-Expedition-guide/
let maxTotal = 0;
let minPT, minGT = 0;
if(topScore < 10000)
{
maxTotal = 40000;
minPT = 273;
minGT = 91;
}
else if(topScore < 100000)
{
maxTotal = 500000;
minPT = 423;
minGT = 141;
}
else if(topScore < 1000000)
{
maxTotal = 1200000;
minPT = 423;
minGT = 191;
}
else if(topScore < 5000000)
{
maxTotal = 1800000;
minPT = 423;
minGT = 91;
}
else if(topScore < 25000000)
{
maxTotal = 2400000;
minPT = 573;
minGT = 191;
}
else if(topScore < 50000000)
{
maxTotal = 3000000;
minPT = 723;
minGT = 241;
}
else if(topScore < 75000000)
{
maxTotal = 3600000;
minPT = 873;
minGT = 291;
}
else if(topScore < 100000000)
{
maxTotal = 4200000;
minPT = 1023;
minGT = 341;
}
else
{
maxTotal = 5000000;
minPT = 1223;
minGT = 417;
}
maxTotal = this.json.playerClass == 3 ? maxTotal * 3 * this.ecoSpeed : maxTotal * 2;
let maxPT = Math.max(minPT, this.calcNeededShips({'fret':202, 'resources':maxTotal}));
let maxGT = Math.max(minGT, this.calcNeededShips({'fret':203, 'resources':maxTotal}));
if(!document.querySelector('#allornone .allornonewrap')) return;
let ptExpe = document.querySelector('#allornone .secondcol').appendChild(this.createDOM('button', {class:'ogl-prefab ogl-ptexpe'}));
let gtExpe = document.querySelector('#allornone .secondcol').appendChild(this.createDOM('button', {class:'ogl-prefab ogl-gtexpe'}));
let coords = this.current.coords.split(':');
[ptExpe, gtExpe].forEach(btn =>
{
btn.addEventListener('click', () =>
{
document.querySelector('#resetall').click();
let type = btn == ptExpe ? 202 : 203;
let count = btn == ptExpe ? maxPT : maxGT;
let prio = [218, 213, 211, 215, 207];
let bigship = 0;
prio.forEach(shipID =>
{
if(bigship == 0 && document.querySelector(`.technology[data-technology="${shipID}"] .amount`).getAttribute('data-value') > 0)
{
bigship = shipID;
}
});
shipsOnPlanet.forEach(ship =>
{
if(ship.id == type) this.selectShips(ship.id, count);
else if(ship.id == bigship) this.selectShips(ship.id, 1);
else if(ship.id == 210) this.selectShips(ship.id, 1);
else if(ship.id == 219) this.selectShips(ship.id, 1);
});
fleetDispatcher.targetPlanet.galaxy = coords[0];
fleetDispatcher.targetPlanet.system = coords[1];
fleetDispatcher.targetPlanet.position = 16;
fleetDispatcher.targetPlanet.type = 1;
fleetDispatcher.targetPlanet.name = '-';
fleetDispatcher.mission = 15;
fleetDispatcher.refresh();
});
});
}
}
}
}
quickPlanetList()
{
if(this.page == 'fleetdispatch' && fleetDispatcher)
{
if(!document.querySelector("#shortcuts .dropdown")) return;
let btn = document.querySelector('#shortcuts span').appendChild(this.createDOM('btn', {'class':'ogl-quickBtn'}, '-'));
let container = this.createDOM('div', {'class':'ogl-dialogContainer ogl-quickLinks'});
container.addEventListener('click', event =>
{
if(!event.target.href)
{
event.stopPropagation();
event.preventDefault();
}
});
btn.addEventListener('click', () =>
{
this.openPlanetList((planet) =>
{
fleetDispatcher.targetPlanet = planet;
fleetDispatcher.refresh();
document.querySelector('.ogl-dialogOverlay').classList.remove('ogl-active');
document.querySelector('#continueToFleet3').focus();
});
});
}
}
timers()
{
let now = Date.now();
if(!this.json.myActivities[this.current.coords]) this.json.myActivities[this.current.coords] = [0, 0];
let planetActivity = this.json.myActivities[this.current.coords][0];
let moonActivity = this.json.myActivities[this.current.coords][1];
if(this.current.isMoon) moonActivity = now;
else planetActivity = now;
this.json.myActivities[this.current.coords] = [planetActivity, moonActivity];
this.saveData();
this.planetList.forEach(planet =>
{
let coords = planet.querySelector('.planet-koords').textContent.slice(1, -1);
let timers = this.json.myActivities[coords] || [0,0];
let pTimer = planet.querySelector('.planetlink').appendChild(this.createDOM('div', {'class':'ogl-timer ogl-short ogl-medium',
'data-timer':Math.min(Math.round((now - timers[0]) / 60000), 60)}));
this.updateTimer(pTimer);
setInterval(() => this.updateTimer(pTimer, true), 60000);
if(planet.querySelector('.moonlink'))
{
let mTimer = planet.querySelector('.moonlink').appendChild(this.createDOM('div', {'class':'ogl-timer ogl-short ogl-medium',
'data-timer':Math.min(Math.round((now - timers[1]) / 60000), 60)}));
this.updateTimer(mTimer);
setInterval(() => this.updateTimer(mTimer, true), 60000);
}
});
}
updateTimer(element, increment)
{
let time = parseInt(element.getAttribute('data-timer'));
if(time <= 61)
{
if(increment)
{
time++;
element.setAttribute('data-timer', time);
}
element.title = time;
if(time >= 30) { element.classList.remove('ogl-medium'); }
if(time >= 15) { element.classList.remove('ogl-short'); };
}
}
minesLevel()
{
if(this.page == 'supplies' && !this.current.isMoon)
{
let targetMetal = document.querySelector('.technology.metalMine .targetlevel');
let targetCrystal = document.querySelector('.technology.crystalMine .targetlevel');
let targetDeut = document.querySelector('.technology.deuteriumSynthesizer .targetlevel');
let metal = targetMetal ? '('+targetMetal.getAttribute('data-value')+')' : document.querySelector('.technology.metalMine .level').getAttribute('data-value');
let crystal = targetCrystal ? '('+targetCrystal.getAttribute('data-value')+')' : document.querySelector('.technology.crystalMine .level').getAttribute('data-value');
let deut = targetDeut ? '('+targetDeut.getAttribute('data-value')+')' : document.querySelector('.technology.deuteriumSynthesizer .level').getAttribute('data-value');
this.json.myMines[this.current.coords] = {'metal':metal, 'crystal':crystal, 'deut':deut};
this.saveData();
}
this.planetList.forEach(planet =>
{
let coords = planet.querySelector('.planet-koords').textContent.slice(1, -1);
if(!this.json.myMines[coords]) return;
let metal = this.json.myMines[coords].metal;
let crystal = this.json.myMines[coords].crystal;
let deut = this.json.myMines[coords].deut;
let div = this.createDOM('div', {'class':'ogl-mines'});
div.textContent = `${metal}-${crystal}-${deut}`;
planet.querySelector('.planetlink').appendChild(div);
});
}
marker()
{
if(this.page == 'galaxy')
{
this.FPSLoop('marker');
let galaxytable = document.querySelector('#galaxytable');
if(!galaxytable || galaxytable.classList.contains('ogl-markerReady')) return;
galaxytable.classList.add('ogl-markerReady');
// move planets
/*document.querySelectorAll('td.microplanet').forEach(planet =>
{
planet.parentNode.insertBefore(planet, planet.parentNode.querySelector('td.moon'));
});*/
let coords = document.querySelector('#galaxy_input').value;
coords += ':' + document.querySelector('#system_input').value;
document.querySelectorAll('#galaxytable tbody .allytag').forEach((element, index) =>
{
let id = coords + ':' + (parseInt(index) + 1);
let colors = this.createDOM('div', {'class':'ogl-colors', 'data-coords':id});
element.appendChild(colors);
this.addMarkerUI(id, colors);
});
document.querySelectorAll('#galaxytable tbody tr').forEach((element, index) =>
{
let id = coords + ':' + (parseInt(index) + 1);
if(this.json.markers[id])
{
element.classList.add('ogl-marked');
element.setAttribute('data-marked', this.json.markers[id]);
}
});
}
else if(this.page == 'messages')
{
document.querySelectorAll('.ogl-colors').forEach(element =>
{
this.addMarkerUI(element.getAttribute('data-coords'), element);
});
document.querySelectorAll('.ogl-spyTable tr').forEach((element, index) =>
{
if(index > 0)
{
let coords = element.querySelector('.ogl-colors').getAttribute('data-coords');
if(this.json.markers[coords])
{
element.classList.add('ogl-marked');
element.setAttribute('data-marked', this.json.markers[coords]);
}
}
});
}
}
targetList()
{
let targetIcon = document.querySelector('.ogl-harvestOptions .ogl-targetIcon');
if(!targetIcon.classList.contains('ogl-targetsReady'))
{
targetIcon.classList.add('ogl-targetsReady');
targetIcon.addEventListener('click', () => this.popup(header, content));
}
// popup header
let header = this.createDOM('div');
header.innerHTML = '<h1>'+this.getTranslatedText(13)+'</h1>';
['red', 'yellow', 'green', 'blue', 'violet', 'gray'].forEach(color =>
{
let toggle = this.createDOM('div', {'class':'tooltip ogl-toggle', 'title':this.getTranslatedText(5)});
toggle.setAttribute('data-toggle', color);
header.appendChild(toggle);
if(!this.json.options.hiddenTargets[color]) toggle.classList.add('ogl-active');
toggle.addEventListener('click', () =>
{
this.json.options.hiddenTargets[color] = this.json.options.hiddenTargets[color] ? false : true;
this.saveData();
if(this.json.options.hiddenTargets[color]) toggle.classList.remove('ogl-active');
else toggle.classList.add('ogl-active');
content.querySelectorAll(`.ogl-targetItem[data-marked="${color}"]`).forEach(planet =>
{
if(this.json.options.hiddenTargets[color]) planet.classList.add('ogl-colorHidden');
else planet.classList.remove('ogl-colorHidden');
});
checkEmpty();
});
});
header.appendChild(this.createDOM('hr'));
// popup content
let content = this.createDOM('div', {'class':'ogl-dialogContainer ogl-stalkContainer'});
let galaxyTabList = header.appendChild(this.createDOM('div', {'class':'ogl-tabList ogl-galaxyTabList'}));
let systemTabList = header.appendChild(this.createDOM('div', {'class':'ogl-tabList ogl-systemTabList'}));
let planetList = content.appendChild(this.createDOM('div', {'class':'ogl-stalkPlanets'}))
let checkEmpty = () =>
{
for(let g=1; g<=10; g++)
{
let childrenList = content.querySelectorAll(`.ogl-targetItem[data-galaxy="${g}"]:not(.ogl-colorHidden)`);
if(childrenList.length > 0)
{
header.querySelector(`.ogl-tab[data-galaxy="${g}"]`).classList.remove('ogl-isEmpty');
}
else
{
header.querySelector(`.ogl-tab[data-galaxy="${g}"]`).classList.add('ogl-isEmpty');
}
}
for(let s=0; s<step * 10; s+=step)
{
let childrenList = content.querySelectorAll(`.ogl-targetItem[data-galaxy="${this.json.targetTabs.g}"][data-system="${s}"]:not(.ogl-colorHidden)`);
if(childrenList.length > 0)
{
header.querySelector(`.ogl-tab[data-system="${s}"]`).classList.remove('ogl-isEmpty');
}
else
{
header.querySelector(`.ogl-tab[data-system="${s}"]`).classList.add('ogl-isEmpty');
}
}
}
// cleanup saved coords
for(let coords in this.json.markers)
{
if(this.json.markers[coords] == '')
{
delete this.json.markers[coords];
}
};
// sort coords
let keys = Object.keys(this.json.markers).sort((a, b) =>
{
let coordsA = a.split(':').map(x => x.padStart(3, '0')).join('');
let coordsB = b.split(':').map(x => x.padStart(3, '0')).join('');
return coordsA - coordsB;
});
let step = 50;
// system buttons
for(let i=0; i<step * 10; i+=step)
{
let sTab = systemTabList.appendChild(this.createDOM('div', {'class':'ogl-tab', 'data-system':i}, i));
if(this.json.targetTabs.s == i) sTab.classList.add('ogl-active');
sTab.addEventListener('click', event =>
{
header.querySelectorAll('.ogl-tab[data-system]').forEach(e => e.classList.remove('ogl-active'));
event.target.classList.add('ogl-active');
content.querySelectorAll(`.ogl-targetItem[data-system]`).forEach(planet =>
{
planet.classList.add('ogl-systemHidden');
if(planet.getAttribute('data-system') == i)
{
planet.classList.remove('ogl-systemHidden');
}
this.json.targetTabs.s = i;
this.saveData();
});
});
}
// galaxy buttons
for(let i=1; i<=10; i++)
{
let gTab = galaxyTabList.appendChild(this.createDOM('div', {'class':'ogl-tab', 'data-galaxy':i}, 'G'+i));
if(this.json.targetTabs.g == i) gTab.classList.add('ogl-active');
if(this.json.targetTabs.g == 0)
{
gTab.click();
}
gTab.addEventListener('click', event =>
{
header.querySelectorAll('.ogl-tab[data-galaxy]').forEach(e => e.classList.remove('ogl-active'));
event.target.classList.add('ogl-active');
content.querySelectorAll(`.ogl-targetItem[data-galaxy]`).forEach(planet =>
{
planet.classList.add('ogl-galaxyHidden');
if(planet.getAttribute('data-galaxy') == i)
{
planet.classList.remove('ogl-galaxyHidden');
}
});
this.json.targetTabs.g = i;
this.saveData();
checkEmpty();
});
}
// build ui
keys.forEach(coords =>
{
if(this.json.markers[coords])
{
let splitted = coords.split(':');
let a = this.createDOM('a', {'class':'ogl-marked ogl-targetItem'}, `${coords}`);
if(this.json.markers[coords])
{
a.setAttribute('data-marked', this.json.markers[coords]);
a.setAttribute('data-coords', coords);
a.setAttribute('data-galaxy', splitted[0]);
a.setAttribute('data-system', Math.floor(splitted[1] / step) * step);
}
let atk = a.appendChild(this.createDOM('div', {'class':'ogl-atk tooltip', 'title':this.getTranslatedText(22)}));
atk.addEventListener('click', () =>
{
event.preventDefault();
event.stopPropagation();
let needed = this.calcNeededShips({'resources':this.json.options.rvalLimit});
let link = `?page=ingame&component=fleetdispatch&galaxy=${splitted[0]}&system=${splitted[1]
}&position=${splitted[2]}&type=1&mission=1&am${this.json.options.fret}=${needed}`;
link = 'https://' + window.location.host + window.location.pathname + link;
if(event.ctrlKey) window.open(link, '_blank');
else
{
if(this.page == 'fleetdispatch')
{
this.selectShips(this.json.options.fret, needed);
fleetDispatcher.targetPlanet = {'galaxy':splitted[0], 'system':splitted[1], 'position':splitted[2], 'type':1, 'name':'-'};
fleetDispatcher.mission = 1;
fleetDispatcher.refresh();
document.querySelector('.ogl-dialogOverlay').classList.remove('ogl-active');
if(fleetDispatcher.currentPage == 'fleet1') document.querySelector('#continueToFleet2').focus();
else if(fleetDispatcher.currentPage == 'fleet2') document.querySelector('#continueToFleet3').focus();
else document.querySelector('#sendFleet').focus();
}
else window.location.href = link;
}
});
a.addEventListener('click', () =>
{
let link = `?page=ingame&component=galaxy&galaxy=${splitted[0]}&system=${splitted[1]
}&position=${splitted[2]}`;
link = 'https://' + window.location.host + window.location.pathname + link;
if(event.ctrlKey) window.open(link, '_blank');
else
{
if(this.page == 'galaxy')
{
document.querySelector('#galaxy_input').value = splitted[0];
document.querySelector('#system_input').value = splitted[1];
submitForm();
this.highlighted = coords.join(':');
}
else window.location.href = link;
}
});
if(this.json.options.hiddenTargets[this.json.markers[coords]])
{
a.classList.add('ogl-colorHidden');
}
if(this.json.targetTabs.g != splitted[0])
{
a.classList.add('ogl-galaxyHidden');
}
if(this.json.targetTabs.s != Math.floor(splitted[1] / step) * step)
{
a.classList.add('ogl-systemHidden');
}
planetList.appendChild(a);
}
});
checkEmpty();
}
addMarkerUI(coords, parent)
{
let div = this.createDOM('div', {'class':'ogl-colorChoice'});
['red', 'yellow', 'green', 'blue', 'violet', 'gray'].forEach(color =>
{
let circle = div.appendChild(this.createDOM('div', {'data-marker':color}));
div.appendChild(circle);
if(this.json.markers[coords] && this.json.markers[coords] == color)
{
circle.classList.add('ogl-active');
}
circle.addEventListener('click', () =>
{
div.querySelectorAll('div[data-marker]').forEach(e => e.classList.remove('ogl-active'));
if(this.json.markers[coords] && this.json.markers[coords] == color)
{
delete this.json.markers[coords];
parent.closest('tr').removeAttribute('data-marked');
}
else
{
this.json.markers[coords] = color;
circle.classList.add('ogl-active');
parent.closest('tr').setAttribute('data-marked', color);
}
document.querySelector('.ogl-tooltip').classList.remove('ogl-active');
this.saveData();
this.targetList();
this.sideStalk();
});
});
let eventAction = this.isMobile ? 'touchstart' : 'mouseenter';
parent.addEventListener(eventAction, () =>
{
this.tooltip(parent, div);
});
}
stalk(sender)
{
if(this.page == 'galaxy')
{
sender.classList.add('ogl-stalkReady');
let eventAction = this.isMobile ? 'touchstart' : 'mouseenter';
let galaxyPlayer = {};
galaxyPlayer.id = sender.getAttribute('rel');
let content = document.querySelector('#' + galaxyPlayer.id);
galaxyPlayer.name = content.querySelector('h1 span').textContent;
galaxyPlayer.rank = content.querySelector('.rank a') ? content.querySelector('.rank a').textContent : '0';
galaxyPlayer.links = {};
galaxyPlayer.planets = [];
galaxyPlayer.ready = false;
content.querySelectorAll('a').forEach(link =>
{
if(link.href.indexOf('page=highscore') > -1) galaxyPlayer.links.highscore = link.href;
else if(link.href.indexOf('page=chat') > -1) galaxyPlayer.links.chat = link.href;
else if(link.classList.contains('js_openChat')) galaxyPlayer.links.chat = link.href;
else if(link.href.indexOf('component=buddies') > -1) galaxyPlayer.links.buddy = link.href;
else if(link.href.indexOf('page=ignorelist') > -1) galaxyPlayer.links.ignore = link.href;
});
galaxyPlayer.content = this.createDOM('div');
galaxyPlayer.content.innerHTML =
`
<h1>${galaxyPlayer.name} <a href="${galaxyPlayer.links.highscore || ''}" class="ogl-ranking">#${galaxyPlayer.rank || 'b'}</a></h1>
<hr>
<a href="${galaxyPlayer.links.chat || ''}" class="icon icon_chat sendMail js_openChat" data-playerid="${galaxyPlayer.id}"></a>
<a href="${galaxyPlayer.links.buddy || ''}" class="icon icon_user overlay buddyrequest"></a>
<a href="${galaxyPlayer.links.ignore || ''}" class="icon icon_against"></a>
`;
sender.appendChild(this.createDOM('a', {'href':galaxyPlayer.links.highscore || '', 'class':'ogl-ranking'}, ('#' + galaxyPlayer.rank) || 'b'));
let count = galaxyPlayer.content.appendChild(this.createDOM('span', {'class':'ogl-right'}));
galaxyPlayer.content.appendChild(this.createDOM('hr'));
let list = galaxyPlayer.content.appendChild(this.createDOM('div', {'class':'ogl-stalkPlanets'}));
let date = galaxyPlayer.content.appendChild(this.createDOM('div', {'class':'ogl-fullGrid ogl-right ogl-date'}));
let sideStalk = galaxyPlayer.content.appendChild(this.createDOM('a', {'class':'ogl-pin'}));
sideStalk.addEventListener('click', () => this.sideStalk(galaxyPlayer));
sender.addEventListener(eventAction, () =>
{
this.tooltip(sender, galaxyPlayer.content, false, {}, 200);
if(galaxyPlayer.ready)
{
list.innerHTML = '';
this.updateStalk(galaxyPlayer).forEach(e => list.appendChild(e));
}
else
{
let http = this.callAPI('https://' + window.location.host + '/api/playerData.xml?id=' + galaxyPlayer.id.replace('player', ''));
http.onreadystatechange = () =>
{
if(http.readyState === XMLHttpRequest.DONE && http.status === 200)
{
let parser = new DOMParser();
let xml = parser.parseFromString(http.responseText, 'text/xml');
galaxyPlayer.planets = [];
Array.from(xml.querySelectorAll('planet')).forEach((planet, index) =>
{
let jsonPlanet = {};
jsonPlanet.name = planet.getAttribute('name');
jsonPlanet.coords = planet.getAttribute('coords');
jsonPlanet.hasMoon = planet.querySelector('moon') ? true : false;
jsonPlanet.isMain = index == 0 ? true : false;
galaxyPlayer.planets.push(jsonPlanet);
});
galaxyPlayer.planets.sort((a, b) =>
{
let coordsA = a.coords.split(':').map(x => x.padStart(3, '0')).join('');
let coordsB = b.coords.split(':').map(x => x.padStart(3, '0')).join('');
return coordsA - coordsB;
});
list.innerHTML = '';
this.updateStalk(galaxyPlayer).forEach(e => list.appendChild(e));
let timestamp = parseInt(xml.querySelector('playerData').getAttribute('timestamp'));
galaxyPlayer.date = date.innerHTML = new Date(timestamp * 1000).toLocaleDateString("fr-FR");
count.innerHTML = galaxyPlayer.planets.length + ' planet(s)';
galaxyPlayer.ready = true;
}
}
}
});
}
}
updateStalk(galaxyPlayer)
{
let domArr = [];
galaxyPlayer.planets.forEach(planet =>
{
let coords = planet.coords.split(':');
let a = this.createDOM('a');
a.appendChild(this.createDOM('span', {}, planet.coords));
a.setAttribute('data-coords', planet.coords);
if(planet.isMain)
{
a.classList.add('ogl-main');
a.appendChild(this.createDOM('i', {}, 'PM'));
}
let mIcon = a.appendChild(this.createDOM('div', {'class':'ogl-moon'}));
a.addEventListener('click', () =>
{
let link = `?page=ingame&component=galaxy&galaxy=${coords[0]}&system=${coords[1]
}&position=${coords[2]}`;
link = 'https://' + window.location.host + window.location.pathname + link;
if(event.ctrlKey) window.open(link, '_blank');
else
{
if(this.page == 'galaxy')
{
document.querySelector('#galaxy_input').value = coords[0];
document.querySelector('#system_input').value = coords[1];
submitForm();
this.highlighted = coords.join(':');
}
else window.location.href = link;
}
});
if(planet.hasMoon)
{
mIcon.classList.add('ogl-active');
}
let color = this.json.markers[planet.coords];
if(color)
{
a.classList.add('ogl-marked');
a.setAttribute('data-marked', color);
}
else
{
a.classList.remove('ogl-marked');
a.removeAttribute('data-marked');
}
domArr.push(a);
});
return domArr;
}
sideStalk(galaxyPlayer)
{
if(galaxyPlayer)
{
this.json.sideStalk = JSON.stringify(galaxyPlayer);
this.saveData();
}
if(this.json.sideStalk)
{
let sideStalk = document.querySelector('.ogl-sideStalk');
let sidePlayer = galaxyPlayer || JSON.parse(this.json.sideStalk);
if(!sideStalk)
{
sideStalk = document.querySelector('#rechts').appendChild(this.createDOM('div', {'class':'ogl-sideStalk'}));
}
sideStalk.innerHTML = `
${sidePlayer.name} #${sidePlayer.rank}
<hr>
`;
let btn = sideStalk.appendChild(this.createDOM('a', {'class':'close-tooltip'}));
btn.addEventListener('click', () =>
{
this.json.sideStalk = false;
this.saveData();
sideStalk.remove();
});
document.querySelector('.ogl-sideStalk > div') && document.querySelector('.ogl-sideStalk > div').remove();
let container = sideStalk.appendChild(this.createDOM('div', {'class':'ogl-stalkPlanets'}));
this.updateStalk(sidePlayer).forEach(dom => container.appendChild(dom));
container.appendChild(this.createDOM('div', {'class':'ogl-right ogl-date'}, sidePlayer.date));
}
}
checkDebris()
{
if(this.page == 'galaxy')
{
this.FPSLoop('checkDebris');
document.querySelectorAll('.debris').forEach(element =>
{
let debris = element.querySelector('.ListLinks');
if(debris && !debris.classList.contains('ogl-debrisReady'))
{
debris.classList.add('ogl-debrisReady');
let total = 0;
debris.querySelectorAll('.debris-content').forEach(resources =>
{
let value = this.removeNumSeparator(resources.innerText.replace(/(\D*)/, ''));
total += parseInt(value);
element.querySelector('.debrisField').innerHTML += this.formatToUnits(value) + '<br>';
});
if(total > this.json.options.rvalLimit)
{
element.classList.add('ogl-active');
}
}
});
let expeBox = document.querySelector('.expeditionDebrisSlotBox');
if(expeBox && !expeBox.classList.contains('ogl-done'))
{
let content = expeBox.querySelectorAll('.ListLinks li');
expeBox.classList.add('ogl-done');
let scouts = content[2];
let action = content[3];
let res =
[
content[0].textContent.replace(/(\D*)/, ''),
content[1].textContent.replace(/(\D*)/, '')
];
expeBox.innerHTML = `
<img src="https://gf1.geo.gfsrv.net/cdnc5/fa3e396b8af2ae31e28ef3b44eca91.gif">
<div>
<div class="ogl-metal">${res[0]}</div>
<div class="ogl-crystal">${res[1]}</div>
</div>
<div>
<div>${scouts.textContent}</div>
<div>${action.outerHTML}</div>
</div>
`;
}
}
}
spyTable()
{
if(this.page == 'fleetdispatch' && this.mode == 4)
{
let link = 'https://' + window.location.host + window.location.pathname + '?page=messages';
document.querySelector('#sendFleet').addEventListener('click', () =>
{
localStorage.setItem('ogl-redirect', link);
});
let sent = false;
document.addEventListener('keydown', event =>
{
if(!sent && event.keyCode === 13 && fleetDispatcher.currentPage == 'fleet3')
{
localStorage.setItem('ogl-redirect', link);
sent = true;
}
});
}
if(this.page != 'messages') return;
this.FPSLoop('spyTable');
let tab = document.querySelector('#subtabs-nfFleet20');
if(!tab || !tab.classList.contains('ui-tabs-active')
|| !document.querySelector('.pagination')
|| document.querySelector('.ogl-spyTable')) return;
tab.classList.add('ogl-spyTableReady');
let reportList = [];
document.querySelectorAll('.msg').forEach(msg =>
{
if(!msg.querySelector('.msg_title')
|| !msg.querySelector('.msg_content .resspan')
|| msg.classList.contains('ogl-reportReady')) return;
msg.classList.add('ogl-reportReady');
let data = msg.querySelectorAll('.compacting');
let rawDate = msg.querySelector('.msg_date').textContent.split(/\.| /g);
let cleanDate = new Date(`${rawDate[2]}-${rawDate[1]}-${rawDate[0]} ${rawDate[3]}`);
let deltaDate = Date.now() - cleanDate;
let mins = deltaDate / 60000;
let hours = mins / 60;
if(!parseInt(data[0].querySelectorAll('span.fright')[0].textContent.match(/\d+/))) return;
let report = {};
report.attacked = msg.querySelector('.icon_attack img');
report.type = msg.querySelector('figure.moon') ? 3 : 1;
report.name = data[0].querySelectorAll('span[class^="status"]')[0].textContent.replace(/ /g,'').trim();
report.status = data[0].querySelectorAll('span[class^="status"]')[1].textContent.replace(/ /g,'').trim();
report.spy = msg.querySelector('a[onclick*="sendShipsWithPopup"]').getAttribute('onclick');
report.activity = parseInt(data[0].querySelectorAll('span.fright')[0].textContent.match(/\d+/)[0]);
report.coords = (/\[.*\]/g).exec(msg.querySelector('.msg_title').innerHTML)[0].slice(1, -1);
report.coordsLink = msg.querySelector('.msg_title a').href;
report.detail = msg.querySelector('.msg_actions a.fright').href;
report.delete = msg.querySelector('.msg_head .fright a .icon_refuse');
report.fleet = data[4].querySelectorAll('span').length > 0 ? this.cleanValue(data[4].querySelectorAll('span')[0].textContent.replace(/(\D*)/, '').split(' ')[0]) : "No Data";
report.defense = data[4].querySelectorAll('span').length > 1 ? this.cleanValue(data[4].querySelectorAll('span')[1].textContent.replace(/(\D*)/, '').split(' ')[0]) : "No Data";
report.deltaDate = deltaDate;
report.cleanDate = cleanDate;
report.date = hours < 1 ? Math.floor(mins)+' min' : Math.floor(hours)+'h';
report.loot = data[3].querySelector('.ctn').textContent.replace(/(\D*)/, '').replace(/%/, '');
report.metal = this.cleanValue(data[2].querySelectorAll('.resspan')[0].textContent.replace(/(\D*)/, ''));
report.crystal = this.cleanValue(data[2].querySelectorAll('.resspan')[1].textContent.replace(/(\D*)/, ''));
report.deut = this.cleanValue(data[2].querySelectorAll('.resspan')[2].textContent.replace(/(\D*)/, ''));
report.total = report.metal + report.crystal + report.deut;
report.renta = Math.round(report.total * report.loot / 100);
report.pt = this.calcNeededShips({'moreFret':true, 'fret':202, 'resources':Math.ceil(report.total * report.loot / 100)});
report.gt = this.calcNeededShips({'moreFret':true, 'fret':203, 'resources':Math.ceil(report.total * report.loot / 100)});
report.pf = this.calcNeededShips({'moreFret':true, 'fret':219, 'resources':Math.ceil(report.total * report.loot / 100)});
let resRatio = [report.total/report.metal, report.total/report.crystal, report.total/report.deut];
report.resRatio = resRatio.map(x => Math.round(1/x*100));
report.tmpCoords = report.coords.split(':');
report.tmpCoords = report.tmpCoords.map(x => x.padStart(3, '0'));
report.tmpCoords = report.tmpCoords.join('');
reportList.push(report);
});
this.sortTable(reportList);
}
sortTable(arr)
{
arr.sort((a, b) =>
{
if(this.json.options.spyFilter == "$")
{
return b.renta - a.renta;
}
else if(this.json.options.spyFilter == "DATE")
{
return a.deltaDate - b.deltaDate;
}
else if(this.json.options.spyFilter == "COORDS")
{
return a.tmpCoords - b.tmpCoords;
}
else if(this.json.options.spyFilter == "FLEET")
{
return b.fleet - a.fleet;
}
else if(this.json.options.spyFilter == "DEF")
{
return b.defense - a.defense;
}
});
let pagination = document.querySelector('.pagination');
let tableOptions = this.createDOM('div', {'class':'ogl-tableOptions'});
pagination.parentNode.insertBefore(tableOptions, pagination);
// eye icon, toggle report table
let enableTable = tableOptions.appendChild(this.createDOM('button', {'class':'icon icon_eye ogl-enableTable tooltip', 'title':this.getTranslatedText(8)}));
if(this.json.options.spyTableEnable) enableTable.classList.add('ogl-active');
enableTable.addEventListener('click', () =>
{
this.json.options.spyTableEnable = this.json.options.spyTableEnable ? false : true;
this.saveData();
document.location.reload();
});
let compactView = tableOptions.appendChild(this.createDOM('button', {'class':'icon icon_maximize ogl-icon tooltip', 'title':this.getTranslatedText(11)}));
if(this.json.options.compactViewEnable) compactView.classList.add('ogl-active');
compactView.addEventListener('click', () =>
{
this.json.options.compactViewEnable = this.json.options.compactViewEnable ? false : true;
this.saveData();
document.location.reload();
});
// trash icon, toggle auto delete
let autoDelete = tableOptions.appendChild(this.createDOM('button', {'class':'icon icon_trash ogl-autoDelete tooltip', 'title':this.getTranslatedText(7)}));
if(this.json.options.autoDeleteEnable) autoDelete.classList.add('ogl-active');
autoDelete.addEventListener('click', () =>
{
this.json.options.autoDeleteEnable = this.json.options.autoDeleteEnable ? false : true;
this.saveData();
document.location.reload();
});
// separator
tableOptions.appendChild(this.createDOM('div', {'style':'height:1px;width:20px;'}));
// spy table
let table = this.createDOM('table', {'class':'ogl-spyTable'});
pagination.parentNode.insertBefore(table, pagination);
if(!this.json.options.spyTableEnable) table.classList.add('ogl-hidden');
// header
let header = this.createDOM('tr');
table.appendChild(header);
header.appendChild(this.createDOM('th', {}, '#'));
header.appendChild(this.createDOM('th', {'data-filter':'DATE'}, 'Date (*)'));
header.appendChild(this.createDOM('th', {'data-filter':'COORDS'}, 'Coords'));
header.appendChild(this.createDOM('th', {}, 'Name (+)'));
header.appendChild(this.createDOM('th', {'data-filter':'$'}, 'Renta'));
header.appendChild(this.createDOM('th', {'data-filter':'FLEET'}, 'Fleet'));
header.appendChild(this.createDOM('th', {'data-filter':'DEF'}, 'Def'));
if(this.json.options.compactViewEnable || this.json.options.fret == 202) header.appendChild(this.createDOM('th', {'class':'ogl-sc'}));
if(this.json.options.compactViewEnable || this.json.options.fret == 203) header.appendChild(this.createDOM('th', {'class':'ogl-lc'}));
if(this.json.options.compactViewEnable || this.json.options.fret == 219) header.appendChild(this.createDOM('th', {'class':'ogl-pf'}));
header.appendChild(this.createDOM('th', {'class':'ogl-headerColors'}, '-'));
header.appendChild(this.createDOM('th', {}, 'Actions'));
document.querySelectorAll('.ogl-spyTable th').forEach(th =>
{
let filter = th.getAttribute('data-filter');
if(this.json.options.spyFilter == filter) th.classList.add('ogl-active');
th.addEventListener('click', () =>
{
if(filter)
{
this.json.options.spyFilter = filter;
this.saveData();
document.location.reload();
}
});
});
// body
arr.forEach((report, index) =>
{
let line = this.createDOM('tr');
table.appendChild(line);
line.appendChild(this.createDOM('td', {}, index + 1));
let dateDetail = `
${report.cleanDate.toLocaleDateString()}<br>
${report.cleanDate.toLocaleTimeString()}<br>
Activity : ${report.activity}
`;
let dateText = `${report.cleanDate.toLocaleTimeString()}<br>`;
let date = line.appendChild(this.createDOM('td', {'class':'tooltipLeft ogl-date', 'title':dateDetail}, dateText));
if(report.activity <= 15) date.classList.add('ogl-danger');
else if(report.activity < 60) date.classList.add('ogl-care');
else date.classList.add('ogl-good');
let moonContent = report.type == 3 ? `<figure class="planetIcon moon"></figure>` : '';
let coords = line.appendChild(this.createDOM('td'));
coords.appendChild(this.createDOM('a', {'href':report.coordsLink}, report.coords + moonContent));
let name = line.appendChild(this.createDOM('td', {'class':'ogl-name'}));
name.appendChild(this.createDOM('a', {'class':'msg_action_link overlay', 'href':report.detail}, report.name + ' ' + report.status));
let totalDetail = `
<div class="ogl-metal">M: ${this.formatToUnits(report.metal)}</div>
<div class="ogl-crystal">C: ${this.formatToUnits(report.crystal)}</div>
<div class="ogl-deut">D: ${this.formatToUnits(report.deut)}</div>
<div class="splitLine"></div>
TOTAL: ${this.formatToUnits(report.total)}
`;
let total = line.appendChild(this.createDOM('td', {'class':'tooltipLeft ogl-lootable', 'title':totalDetail}, this.formatToUnits(report.renta)));
if(this.json.options.rvalLimit <= Math.round(report.total * report.loot / 100)) total.classList.add('ogl-good');
if(report.attacked) line.classList.add('ogl-attacked');
total.style.background = `linear-gradient(to right, #9c4949 ${report.resRatio[0]}%, #498d9c ${report.resRatio[0]}%
, #498d9c ${report.resRatio[0] + report.resRatio[1]}%, #abdeb4 ${report.resRatio[2]}%)`;
let fleet = line.appendChild(this.createDOM('td', {}, this.formatToUnits(report.fleet)));
if(report.fleet > 0 || report.fleet == 'No Data') fleet.classList.add('ogl-danger');
let defense = line.appendChild(this.createDOM('td', {}, this.formatToUnits(report.defense)));
if(report.defense > 0 || report.defense == 'No Data') defense.classList.add('ogl-danger');
let splittedCoords = report.coords.split(':');
if(this.json.options.compactViewEnable || this.json.options.fret == 202)
{
// sc
let ptlink = `?page=ingame&component=fleetdispatch&galaxy=${splittedCoords[0]}&system=${splittedCoords[1]
}&position=${splittedCoords[2]}&type=${report.type}&mission=1&am202=${report.pt}&oglMode=4`;
let pt = line.appendChild(this.createDOM('td'));
pt.appendChild(this.createDOM('a', {'href':'https://' + window.location.host + window.location.pathname + ptlink}, report.pt));
}
if(this.json.options.compactViewEnable || this.json.options.fret == 203)
{
// lc
let gtlink = `?page=ingame&component=fleetdispatch&galaxy=${splittedCoords[0]}&system=${splittedCoords[1]
}&position=${splittedCoords[2]}&type=${report.type}&mission=1&am203=${report.gt}&oglMode=4`;
let gt = line.appendChild(this.createDOM('td'));
gt.appendChild(this.createDOM('a', {'href':'https://' + window.location.host + window.location.pathname + gtlink}, report.gt));
}
if(this.json.options.compactViewEnable || this.json.options.fret == 219)
{
// pf
let pflink = `?page=ingame&component=fleetdispatch&galaxy=${splittedCoords[0]}&system=${splittedCoords[1]
}&position=${splittedCoords[2]}&type=${report.type}&mission=1&am219=${report.pf}&oglMode=4`;
let pf = line.appendChild(this.createDOM('td'));
pf.appendChild(this.createDOM('a', {'href':'https://' + window.location.host + window.location.pathname + pflink}, report.pf));
}
let colors = line.appendChild(this.createDOM('td'));
colors.appendChild(this.createDOM('div', {class:'ogl-colors', 'data-coords':report.coords}));
let opt = line.appendChild(this.createDOM('td', {'class':'ogl-spyOptions'}));
let moreBtn = opt.appendChild(this.createDOM('button', {'class':'icon icon_fastforward'}));
moreBtn.addEventListener('click', () =>
{
if(line.nextSibling && line.nextSibling.classList.contains('ogl-sub')) return;
for(let i=6; i>1; i--)
{
let newLine = this.createDOM('tr', {'class':'ogl-sub'});
line.after(newLine);
newLine.appendChild(this.createDOM('td', {}, '-'));
newLine.appendChild(this.createDOM('td', {}, '-'));
newLine.appendChild(this.createDOM('td', {}, '-'));
newLine.appendChild(this.createDOM('td', {}, '-'));
let newTotal = Math.ceil(report.total * report.loot / 100);
for(let j=1; j<i; j++)
{
newTotal -= (newTotal * report.loot / 100);
}
newLine.appendChild(this.createDOM('td', {}, this.formatToUnits(Math.ceil(newTotal))));
newLine.appendChild(this.createDOM('td', {}, '-'));
newLine.appendChild(this.createDOM('td', {}, '-'));
if(this.json.options.compactViewEnable || this.json.options.fret == 202)
{
let newPTFret = this.calcNeededShips({'moreFret':true, 'resources':newTotal, 'fret':202});
let newPTLink = `?page=ingame&component=fleetdispatch&galaxy=${splittedCoords[0]}&system=${splittedCoords[1]
}&position=${splittedCoords[2]}&type=${report.type}&mission=1&am202=${newPTFret}&oglMode=4`;
let newPT = newLine.appendChild(this.createDOM('td'));
newPT.appendChild(this.createDOM('a', {'href':'https://' + window.location.host + window.location.pathname + newPTLink}, newPTFret));
}
if(this.json.options.compactViewEnable || this.json.options.fret == 203)
{
let newGTFret = this.calcNeededShips({'moreFret':true, 'resources':newTotal, 'fret':203});
let newGTLink = `?page=ingame&component=fleetdispatch&galaxy=${splittedCoords[0]}&system=${splittedCoords[1]
}&position=${splittedCoords[2]}&type=${report.type}&mission=1&am203=${newGTFret}&oglMode=4`;
let newGT = newLine.appendChild(this.createDOM('td'));
newGT.appendChild(this.createDOM('a', {'href':'https://' + window.location.host + window.location.pathname + newGTLink}, newGTFret));
}
if(this.json.options.compactViewEnable || this.json.options.fret == 219)
{
let newPFFret = this.calcNeededShips({'moreFret':true, 'resources':newTotal, 'fret':219});
let newPFLink = `?page=ingame&component=fleetdispatch&galaxy=${splittedCoords[0]}&system=${splittedCoords[1]
}&position=${splittedCoords[2]}&type=${report.type}&mission=1&am219=${newPFFret}&oglMode=4`;
let newPF = newLine.appendChild(this.createDOM('td'));
newPF.appendChild(this.createDOM('a', {'href':'https://' + window.location.host + window.location.pathname + newPFLink}, newPFFret));
}
newLine.appendChild(this.createDOM('td', {}, '-'));
newLine.appendChild(this.createDOM('td', {}, '-'));
}
});
opt.appendChild(this.createDOM('button', {'class':'icon icon_eye', 'onclick':report.spy}));
let deleteBtn = opt.appendChild(this.createDOM('button', {'class':'icon icon_close'}));
deleteBtn.addEventListener('click', () =>
{
document.querySelectorAll('.ogl-sub').forEach(sub => sub.remove());
report.delete.click();
line.remove();
});
if(this.json.options.autoDeleteEnable && ((report.fleet == 0 && Math.round(report.total * report.loot / 100) < this.json.options.rvalLimit)))
{
deleteBtn.click();
}
});
this.marker();
}
lock()
{
if(this.page == 'supplies' || this.page == 'research' || this.page == 'facilities')
{
this.FPSLoop('lock');
let data;
let detail = document.querySelector('#technologydetails');
let tech = {};
tech.onMoon = this.current.isMoon;
if(this.json.locked[this.current.coords])
{
data = JSON.parse(this.json.locked[this.current.coords]);
if(data.onMoon == tech.onMoon)
{
let techDom = document.querySelector(`#technologies .technology[data-technology="${data.id}"]`);
if(techDom)
{
let finished = parseInt(techDom.querySelector('.level').getAttribute('data-value')) >= data.level;
let started = techDom.querySelector('.targetlevel') ? parseInt(techDom.querySelector('.targetlevel').getAttribute('data-value')) >= data.level : false;
if(started || finished)
{
this.json.locked[this.current.coords] = '';
this.saveData();
}
}
}
}
if(!detail || detail.classList.contains('ogl-detailReady')) return;
detail.classList.add('ogl-detailReady');
let m = detail.querySelector('.costs .metal');
let c = detail.querySelector('.costs .crystal');
let d = detail.querySelector('.costs .deuterium');
tech.id = detail.getAttribute('data-technology-id');
tech.metal = m ? parseInt(m.getAttribute('data-value')) + 1 : 0;
tech.crystal = c ? parseInt(c.getAttribute('data-value')) + 1 : 0;
tech.deut = d ? parseInt(d.getAttribute('data-value')) + 1 : 0;
tech.name = detail.querySelector('h3').textContent;
let btn = detail.querySelector('.sprite_large').appendChild(this.createDOM('button', {'class':'ogl-lock'}));
if(data)
{
btn.innerHTML = `<span>${data.name}</span> (${data.level})`;
btn.classList.add('ogl-active');
/*if(data.isShip)
{
detail.querySelector('.upgrade').addEventListener('click', () =>
{
});
}*/
}
btn.addEventListener('click', () =>
{
if(data && data.id == tech.id)
{
this.json.locked[this.current.coords] = '';
}
else
{
if(this.page != 'shipyard')
{
tech.level = parseInt(detail.querySelector('.level').getAttribute('data-value'));
tech.metal = Math.max(0, tech.metal - parseInt(this.removeNumSeparator(document.querySelector('#resources_metal').textContent)));
tech.crystal = Math.max(0, tech.crystal - parseInt(this.removeNumSeparator(document.querySelector('#resources_crystal').textContent)));
tech.deut = Math.max(0, tech.deut - parseInt(this.removeNumSeparator(document.querySelector('#resources_deuterium').textContent)));
}
else
{
let amount = prompt('Quantité');
if(!amount || isNaN(amount)) return;
tech.level = amount;
tech.metal = tech.metal * amount;
tech.crystal = tech.crystal * amount;
tech.deut = tech.deut * amount;
tech.isShip = true;
}
this.json.locked[this.current.coords] = JSON.stringify(tech);
}
detail.classList.remove('ogl-detailReady');
btn.remove();
this.saveData();
this.sideLock();
});
}
}
sideLock()
{
document.querySelectorAll('.ogl-sideLock').forEach(e => e.remove());
this.planetList.forEach(planet =>
{
let coords = planet.querySelector('.planet-koords').textContent.slice(1, -1);
let splittedCoords = coords.split(':');
if(this.json.locked[coords])
{
let data = JSON.parse(this.json.locked[coords]);
let btn = planet.appendChild(this.createDOM('button', {'class':'ogl-sideLock tooltip tooltipRight'}));
btn.title = `
${data.name} (${data.level})
<div class="splitLine"></div>
M: ${this.formatToUnits(Math.max(0, data.metal - 1))}<br>
C: ${this.formatToUnits(Math.max(0, data.crystal - 1))}<br>
D: ${this.formatToUnits(Math.max(0, data.deut - 1))}
`;
btn.addEventListener('click', () =>
{
let type = planet.querySelector('.moonlink') && !planet.querySelector('.moonlink.active') ? 3 : 1;
let link = `?page=ingame&component=fleetdispatch&galaxy=${splittedCoords[0]}&system=${splittedCoords[1]
}&position=${splittedCoords[2]}&type=${type}&mission=${this.json.options.harvestMission}&oglMode=2`;
window.location.href = 'https://' + window.location.host + window.location.pathname + link;
});
let destCoords =
[
this.rawURL.searchParams.get(`galaxy`) || 0,
this.rawURL.searchParams.get(`system`) || 0,
this.rawURL.searchParams.get(`position`) || 0,
].join(':');
if(this.mode == 2 && coords == destCoords)
{
btn.classList.add('ogl-sideLockFilled');
}
}
});
if(this.page == 'fleetdispatch' && this.mode == 2)
{
if(fleetDispatcher)
{
let coords = fleetDispatcher.targetPlanet.galaxy + ':' + fleetDispatcher.targetPlanet.system + ':' + fleetDispatcher.targetPlanet.position;
if(this.json.locked[coords])
{
let data = JSON.parse(this.json.locked[coords]);
let metal = Math.min(data.metal, fleetDispatcher.metalOnPlanet);
let crystal = Math.min(data.crystal, fleetDispatcher.crystalOnPlanet);
let deut = Math.min(data.deut, fleetDispatcher.deuteriumOnPlanet);
let total = metal + crystal + deut;
this.selectShips(this.json.options.fret, this.calcNeededShips({'resources':total}));
this.fillFret({'resources':{'metal':metal, 'crystal':crystal, 'deut':deut}});
let sent = false;
let sendAction = () =>
{
data.metal = Math.max(0, data.metal - fleetDispatcher.cargoMetal);
data.crystal = Math.max(0, data.crystal - fleetDispatcher.cargoCrystal);
data.deut = Math.max(0, data.deut - fleetDispatcher.cargoDeuterium);
this.json.locked[coords] = JSON.stringify(data);
this.saveData();
sent = true;
};
document.addEventListener('keydown', event =>
{
if(!sent && event.keyCode === 13 && fleetDispatcher.currentPage == 'fleet3')
{
sendAction();
}
});
document.querySelector('#sendFleet').addEventListener('click', () =>
{
if(!sent)
{
sendAction();
}
});
}
}
}
}
missingEnergy()
{
if(this.page == 'supplies' && !this.current.isMoon)
{
this.FPSLoop('missingEnergy');
let detail = document.querySelector('#technologydetails');
if(!detail || detail.classList.contains('ogl-energyReady') || !detail.querySelector('.level')
|| parseInt(detail.getAttribute('data-technology-id')) > 3) return;
detail.classList.add('ogl-energyReady');
let node = detail.querySelector('.additional_energy_consumption span.value');
let neededEnergy = parseInt(node.getAttribute('data-value'));
let currentEnergy = parseInt(this.removeNumSeparator(document.querySelector('#resources_energy').textContent));
let totalEnergy = currentEnergy - neededEnergy;
let span = node.appendChild(this.createDOM('span', {}, ` (${totalEnergy.toLocaleString('de-DE')})`));
totalEnergy > 0 ? span.classList.add('bonus') : span.classList.add('overmark');
}
}
flyingResources()
{
if(this.page == 'movement')
{
let container = this.createDOM('div', {'class':'ogl-dialogContainer ogl-flyingGrid'});
let div = container.appendChild(this.createDOM('div'));
let btn = document.querySelector('#planet').appendChild(this.createDOM('div', {'class':'btn_blue'}, this.getTranslatedText(18)));
btn.addEventListener('click', () => this.popup(false, container));
let resources = {};
let total = {'metal':0, 'crystal':0, 'deut':0};
document.querySelectorAll('.fleetDetails').forEach(line =>
{
let mission = line.getAttribute('data-mission-type');
let back = line.getAttribute('data-return-flight');
let route = line.querySelector('.route');
let tr = route.querySelectorAll('tr');
let destination;
if(back != 1 && (mission == 3 || mission == 4 || mission == 7))
{
destination = line.querySelector('.destinationCoords').textContent.slice(1, -1);
//destination = line.querySelector('.destinationData').innerHTML;
}
else
{
destination = line.querySelector('.originCoords').textContent.slice(1, -1);
//destination = line.querySelector('.originData').innerHTML;
}
let metal = parseInt(this.removeNumSeparator(tr[tr.length-3].querySelector('.value').textContent.trim()));
let crystal = parseInt(this.removeNumSeparator(tr[tr.length-2].querySelector('.value').textContent.trim()));
let deut = parseInt(this.removeNumSeparator(tr[tr.length-1].querySelector('.value').textContent.trim()));
resources[destination] = resources[destination] || {'metal':0, 'crystal':0, 'deut':0};
resources[destination].metal += metal;
resources[destination].crystal += crystal;
resources[destination].deut += deut;
total.metal += metal;
total.crystal += crystal;
total.deut += deut;
});
Object.keys(resources).sort((a, b) =>
{
let coordsA = a.split(':').map(x => x.padStart(3, '0')).join('');
let coordsB = b.split(':').map(x => x.padStart(3, '0')).join('');
return coordsA - coordsB;
}).forEach(target =>
{
div.innerHTML += `
<div>
<div class="ogl-destination">${target}</div>
<hr>
<div class="ogl-metal"><span>m:</span>${this.formatToUnits(resources[target].metal)}</div>
<div class="ogl-crystal"><span>c:</span>${this.formatToUnits(resources[target].crystal)}</div>
<div class="ogl-deut"><span>d:</span>${this.formatToUnits(resources[target].deut)}</div>
</div>
`;
});
div.innerHTML += `
<div class="ogl-fullGrid">
<div class="ogl-destination">TOTAL</div>
<hr>
<div class="ogl-metal"><span>m:</span>${total.metal.toLocaleString('de-DE')}</div>
<div class="ogl-crystal"><span>c:</span>${total.crystal.toLocaleString('de-DE')}</div>
<div class="ogl-deut"><span>d:</span>${total.deut.toLocaleString('de-DE')}</div>
</div>
`;
}
}
highlightTarget()
{
if(this.page == 'galaxy')
{
this.FPSLoop('highlightTarget');
if(document.querySelector('#galaxyLoading').style.display != 'none') return;
let coords;
if(this.highlighted)
{
coords = this.highlighted.split(':');
}
else
{
coords =
[
this.rawURL.searchParams.get(`galaxy`) || 0,
this.rawURL.searchParams.get(`system`) || 0,
this.rawURL.searchParams.get(`position`) || 0,
];
coords.join(':');
}
if(document.querySelector('#galaxy_input').value == coords[0]
&& document.querySelector('#system_input').value == coords[1])
{
let target = document.querySelectorAll('#galaxytable tbody tr')[parseInt(coords[2])-1];
if(target) target.classList.add('ogl-highlighted');
}
document.querySelectorAll('a[data-coords]').forEach(a =>
{
let hCoords = a.getAttribute('data-coords').split(':');
if(document.querySelector('#galaxy_input').value == hCoords[0]
&& document.querySelector('#system_input').value == hCoords[1])
{
a.classList.add('ogl-active');
}
else
{
a.classList.remove('ogl-active');
}
});
}
}
toggleImage()
{
let btn = this.createDOM('a', {'class':'toggleHeader'});
let wrapper = document.querySelector('#supplies header, #facilities header, #research header, #defense header, #shipyard header');
if(wrapper) wrapper.appendChild(btn);
btn.addEventListener('click', () =>
{
this.json.options.headerDisabled[this.page] = this.json.options.headerDisabled[this.page] ? false : true;
this.saveData();
if(this.json.options.headerDisabled[this.page])
{
document.querySelector('.maincontent header').classList.add('ogl-shortHeader');
}
else
{
document.querySelector('.maincontent header').classList.remove('ogl-shortHeader');
}
});
if(this.json.options.headerDisabled[this.page])
{
document.querySelector('.maincontent header').classList.add('ogl-shortHeader');
}
}
keepResources()
{
if(this.page == 'fleetdispatch')
{
fleetDispatcher.metalOnPlanet = Math.max(0, this.current.resources.metal - this.json.options.kept[0]);
fleetDispatcher.crystalOnPlanet = Math.max(0, this.current.resources.crystal - this.json.options.kept[1]);
fleetDispatcher.deuteriumOnPlanet = Math.max(0, this.current.resources.deut - this.json.options.kept[2]);
fleetDispatcher.refresh();
document.querySelectorAll('#resources .res').forEach((element, index) =>
{
let div = element.appendChild(this.createDOM('div', {'class':'ogl-keepRes tooltip', 'title':this.getTranslatedText(12)}, '-'));
let container = this.createDOM('div', {'class':'ogl-dialogContainer'});
container.appendChild(this.createDOM('h1', {}, this.getTranslatedText(25)));
container.appendChild(this.createDOM('hr'));
let input = container.appendChild(this.createDOM('input', {'type':'text', 'class':'ogl-formatInput'}));
container.appendChild(this.createDOM('hr'));
let button = container.appendChild(this.createDOM('button', {'class':'btn_blue'}, 'OK'));
if(this.json.options.kept[index]) div.classList.add('ogl-active');
container.addEventListener('click', event =>
{
event.preventDefault();
event.stopPropagation();
});
div.addEventListener('click', () =>
{
input.value = this.json.options.kept[index];
this.popup(false, container);
});
button.addEventListener('click', () =>
{
this.json.options.kept[index] = parseInt(this.removeNumSeparator(input.value));
this.saveData();
document.location.reload();
});
});
}
}
checkResources(params)
{
if(this.page != 'fleetdispatch') return;
params = params || {};
this.FPSLoop('checkResources', params);
if(fleetDispatcher.currentPage == 'fleet1')
{
if(fleetDispatcher.cargoMetal > 0 || fleetDispatcher.cargoCrystal > 0 || fleetDispatcher.cargoDeuterium > 0)
{
params.loop = true;
params.resources = {'metal':fleetDispatcher.cargoMetal, 'crystal':fleetDispatcher.cargoCrystal, 'deut':fleetDispatcher.cargoDeuterium};
}
}
else if(fleetDispatcher.currentPage == 'fleet2')
{
if(params.loop)
{
params.loop = false;
this.fillFret({'resources':params.resources});
}
}
else if(fleetDispatcher.currentPage == 'fleet3')
{
let max = this.current.resources.deut - this.json.options.kept[2] - fleetDispatcher.getConsumption();
if(fleetDispatcher.cargoDeuterium > max)
{
fleetDispatcher.cargoDeuterium = Math.max(0, max);
fleetDispatcher.refresh();
}
}
}
checkInputs()
{
this.FPSLoop('checkInputs');
if(this.page == 'fleetdispatch')
{
document.querySelectorAll('.technology input').forEach(i => i.classList.add('ogl-formatInput'));
}
document.querySelectorAll('input.ogl-formatInput').forEach(input =>
{
if(input.value) input.value = parseInt(this.removeNumSeparator(input.value, true)).toLocaleString('de-DE');
});
}
selectShips(shipID, amount)
{
if(this.page == 'fleetdispatch')
{
fleetDispatcher.shipsOnPlanet.forEach(ship =>
{
if(ship.id == shipID)
{
if(amount > ship.number) amount = ship.number;
fleetDispatcher.selectShip(shipID, amount);
fleetDispatcher.refresh();
document.querySelector('#continueToFleet2').focus();
}
});
}
return amount;
}
preselectShips()
{
if(this.page == 'fleetdispatch')
{
fleetDispatcher.shipsOnPlanet.forEach(ship =>
{
let param = this.rawURL.searchParams.get(`am${ship.id}`);
if(param)
{
this.selectShips(ship.id, param);
}
});
}
}
calcNeededShips(options)
{
options = options || {};
// get resources
let resources = [this.removeNumSeparator(document.querySelector('#resources_metal').textContent),
this.removeNumSeparator(document.querySelector('#resources_crystal').textContent),
this.removeNumSeparator(document.querySelector('#resources_deuterium').textContent)];
resources = resources.reduce((a, b) => parseInt(a) + parseInt(b));
if(options.resources || options.resources == 0) resources = options.resources;
let type = options.fret || this.json.options.fret;
let fret;
if(type == 202)
{
fret = this.json.ptFret;
}
else if(type == 203)
{
fret = this.json.gtFret;
}
else if(type == 219)
{
fret = this.json.pfFret;
}
let total = resources / fret;
if(options.moreFret) total *= 107 / 100;
return Math.ceil(total);
}
calcAvailableFret(shipAmount)
{
let fret = this.json.options.fret == 203 ? this.json.gtFret : this.json.ptFret;
return shipAmount * fret;
}
saveData()
{
localStorage.setItem('ogl-data', JSON.stringify(this.json));
}
createDOM(element, options, content)
{
let e = document.createElement(element);
for(var key in options)
{
e.setAttribute(key, options[key]);
}
if(content || content == 0) e.innerHTML = content;
return e;
}
formatToUnits(value)
{
let precision;
if(value == 0) precision = 0;
else if(value < 1000000) precision = 1;
else if(value < 1000000000) precision = 2;
else precision = 3;
if(isNaN(value)) return value;
const abbrev = ['', 'k', 'M', 'Md', 't'];
const unrangifiedOrder = Math.floor(Math.log10(Math.abs(value)) / 3);
const order = Math.max(0, Math.min(unrangifiedOrder, abbrev.length-1));
const suffix = abbrev[order];
return (value / Math.pow(10, order * 3)).toFixed(precision) + suffix;
}
cleanValue(value)
{
if(this.language == 0)
{
if(value.indexOf('Md') > -1)
{
if(value.indexOf(',') == -1)
{
value = value.replace('Md', '.000Md');
}
value = value.replace(/\Md/g, '').replace(/\,/g, '.');
value = value.split('.');
value[1] = value[1].padEnd(9, '0');
value = value.join();
value = value.replace(/\,/g, '');
}
else if(value.indexOf('M') > -1)
{
if(value.indexOf(',') == -1)
{
value = value.replace('M', '.000M');
}
value = value.replace(/\M/g, '').replace(/\,/g, '.');
value = value.split('.');
value[1] = value[1].padEnd(6, '0');
value = value.join();
value = value.replace(/\,/g, '');
}
else
{
value = value.replace(/\./g, '');
}
}
else
{
if(value.indexOf('Md') > -1)
{
if(value.indexOf('.') == -1)
{
value = value.replace('Md', '.000Md');
}
value = value.replace(/\Md/g, '').replace(/\,/g, '.');
value = value.split('.');
value[1] = value[1].padEnd(9, '0');
value = value.join();
value = value.replace(/\,/g, '');
}
else if(value.indexOf('Mn') > -1)
{
if(value.indexOf('.') == -1)
{
value = value.replace('Mn', '.000Mn');
}
value = value.replace(/\Mn/g, '').replace(/\,/g, '.');
value = value.split('.');
value[1] = value[1].padEnd(6, '0');
value = value.join();
value = value.replace(/\,/g, '');
}
else
{
value = value.replace(/\./g, '');
}
}
return parseInt(value);
}
addStyle(option, style)
{
if(option != 'disabled')
{
GM_addStyle(style);
}
}
callAPI(url)
{
let http = new XMLHttpRequest();
http.open('GET', url);
http.send();
return http;
}
removeNumSeparator(str, forced)
{
if(this.language == 0 || forced)
{
return str.replace(/\./g, '');
}
else
{
return str.replace(/\,/g, '');
}
}
keyboardActions()
{
if(this.page == 'fleetdispatch')
{
document.addEventListener('keydown', event =>
{
if((!document.querySelector('.ui-dialog') || document.querySelector('.ui-dialog').style.display == 'none')
&& !document.querySelector('.chat_box_textarea:focus'))
{
if(event.keyCode === 13 && fleetDispatcher.currentPage == 'fleet1')
{
if(fleetDispatcher.shipsToSend.length == 0)
{
document.querySelector(`.technology[data-technology="${this.json.options.fret}"] .ogl-needed`)
&& document.querySelector(`.technology[data-technology="${this.json.options.fret}"] .ogl-needed`).click();
}
}
if(event.keyCode === 65 && fleetDispatcher.currentPage == 'fleet1')
{
document.querySelector('#sendall').click();
}
if(event.keyCode === 65 && fleetDispatcher.currentPage == 'fleet3')
{
//this.fillFret({'once':true});
document.querySelector('#allresources').click();
}
}
});
}
}
FPSLoop(callbackAsString, params)
{
setTimeout(() =>
{
requestAnimationFrame(() => this[callbackAsString](params));
}, 1000 / 20);
}
tooltip(sender, content, autoHide, side, timer)
{
side = side || {};
timer = timer || 300;
let tooltip = document.querySelector('.ogl-tooltip');
document.querySelector('.ogl-tooltip > div') && document.querySelector('.ogl-tooltip > div').remove();
let close = document.querySelector('.close-tooltip');
if(!tooltip)
{
tooltip = document.body.appendChild(this.createDOM('div', {'class':'ogl-tooltip'}));
close = tooltip.appendChild(this.createDOM('a', {'class':'close-tooltip'}));
close.addEventListener('click', () => tooltip.classList.remove('ogl-active'));
document.body.addEventListener('click', event =>
{
if(!event.target.getAttribute('rel')
&& !event.target.closest('.tooltipRel')
&& !event.target.classList.contains('ogl-colors')
&& !tooltip.contains(event.target))
{
tooltip.classList.remove('ogl-active');
}
});
}
if(sender != this.oldSender) tooltip.classList.remove('ogl-active');
tooltip.classList.remove('ogl-autoHide');
tooltip.classList.remove('ogl-tooltipLeft');
tooltip.classList.remove('ogl-tooltipRight');
tooltip.classList.remove('ogl-tooltipBottom');
this.oldSender = sender;
let rect = sender.getBoundingClientRect();
let win = sender.ownerDocument.defaultView;
let position =
{
x:rect.left + win.pageXOffset,
y:rect.top + win.pageYOffset
};
if(side.left)
{
tooltip.classList.add('ogl-tooltipLeft');
position.y -= 20;
position.y += rect.height / 2;
}
else if(side.right)
{
tooltip.classList.add('ogl-tooltipRight');
position.x += rect.width;
position.y -= 20;
position.y += rect.height / 2;
}
else if(side.bottom)
{
tooltip.classList.add('ogl-tooltipBottom');
position.x += rect.width / 2;
position.y += rect.height;
}
else
{
position.x += rect.width / 2;
}
if(sender.classList.contains('tooltipOffsetX'))
{
position.x += 33;
}
if(autoHide)
{
tooltip.classList.add('ogl-autoHide');
}
tooltip.appendChild(content);
tooltip.style.top = position.y + 'px';
tooltip.style.left = position.x + 'px';
this.tooltipTimer = setTimeout(() => tooltip.classList.add('ogl-active'), timer);
if(!sender.classList.contains('ogl-tooltipInit'))
{
sender.classList.add('ogl-tooltipInit');
sender.addEventListener('mouseleave', event =>
{
if(autoHide)
{
tooltip.classList.remove('ogl-active');
}
clearTimeout(this.tooltipTimer);
});
}
return tooltip;
}
popup(header, content)
{
let overlay = document.querySelector('.ogl-dialogOverlay');
if(!overlay)
{
overlay = document.body.appendChild(this.createDOM('div', {'class':'ogl-dialogOverlay'}));
overlay.addEventListener('click', event => overlay.classList.remove('ogl-active'));
}
let dialog = overlay.querySelector('.ogl-dialog');
if(!dialog)
{
dialog = overlay.appendChild(this.createDOM('div', {'class':'ogl-dialog'}));
let close = dialog.appendChild(this.createDOM('div', {'class':'close-tooltip'}));
close.addEventListener('click', () => overlay.classList.remove('ogl-active'));
dialog.addEventListener('click', event =>
{
event.preventDefault();
event.stopPropagation();
});
}
let top = dialog.querySelector('header') || dialog.appendChild(this.createDOM('header'));
let body = dialog.querySelector('.ogl-dialogContent') || dialog.appendChild(this.createDOM('div', {'class':'ogl-dialogContent'}));
top.innerHTML = '';
body.innerHTML = '';
if(header)
{
top.appendChild(header);
}
if(content)
{
body.appendChild(content);
}
overlay.classList.add('ogl-active');
}
betterTooltip()
{
this.FPSLoop('betterTooltip');
let eventAction = this.isMobile ? 'touchstart' : 'mouseenter';
if(this.page == 'galaxy')
{
// tooltipRel galaxy
document.querySelectorAll('.tooltipRel').forEach(sender =>
{
if(sender.getAttribute('rel').indexOf('player') == 0)
{
if(!sender.classList.contains('ogl-stalkReady'))
{
this.stalk(sender);
}
}
});
if(document.querySelector('#galaxytable:not(.ogl-ready)'))
{
document.querySelector('#galaxytable').classList.add('ogl-ready');
document.querySelector('.ogl-tooltip') && document.querySelector('.ogl-tooltip').classList.remove('ogl-active');
this.tooltipList = {};
}
}
document.querySelectorAll('.tooltip, .tooltipLeft, .tooltipRight, .tooltipBottom, .tooltipClose, .tooltipHTML, .tooltipRel, .tooltipCustom').forEach(sender =>
{
if(!sender.classList.contains('ogl-tooltipReady')
&& !sender.classList.contains('ogl-stalkReady')
&& !sender.classList.contains('activity'))
{
sender.classList.add('ogl-tooltipReady');
sender.addEventListener(eventAction, () =>
{
let content;
let appendMode = false;
if(sender.classList.contains('tooltipRel'))
{
let id = '#' + sender.getAttribute('rel');
this.tooltipList[id] = this.tooltipList[id] || document.querySelector(id);
content = this.tooltipList[id];
appendMode = true;
}
else
{
content = sender.getAttribute('data-title');
}
if(!content)
{
content = sender.getAttribute('title');
if(!content) return;
sender.setAttribute('data-title', content);
}
sender.removeAttribute('title');
if(sender.classList.contains('tooltipHTML'))
{
content = content.replace('|', '<hr>');
}
if(sender.classList.contains('planetlink'))
{
sender.classList.remove('tooltipLeft');
sender.classList.add('tooltipRight');
sender.classList.add('tooltipOffsetX');
}
if(sender.getAttribute('id')
&& sender.getAttribute('id').indexOf('route_') == 0)
{
sender.classList.add('tooltipRight');
}
let div = this.createDOM('div');
appendMode ? div.appendChild(content) : div.innerHTML = content;
let side = {};
side.left = sender.classList.contains('tooltipLeft');
side.right = sender.classList.contains('tooltipRight');
side.bottom = sender.classList.contains('tooltipBottom');
let autoHide = true;
if(sender.classList.contains('tooltipClose')
|| sender.classList.contains('tooltipCustom'))
{
autoHide = false;
}
this.tooltip(sender, div, autoHide, side);
});
}
});
}
utilities()
{
// fix top tooltips
document.querySelectorAll('#resources .tooltipHTML, #commandercomponent .tooltipHTML').forEach(e =>
{
e.classList.add('tooltipBottom');
});
if(this.page == 'fleetdispatch')
{
// speed slider
document.querySelector('.steps').addEventListener('click', () =>
{
document.querySelector('#continueToFleet3').focus();
});
document.querySelector('#speedPercentage').classList.add('ogl-hidden');
let slider = this.createDOM('div', {'class':'ogl-fleetSpeed'});
document.querySelector('#fleetBriefingPart1').appendChild(slider);
slider.innerHTML = `
<div data-step="1">10</div>
<div data-step="2">20</div>
<div data-step="3">30</div>
<div data-step="4">40</div>
<div data-step="5">50</div>
<div data-step="6">60</div>
<div data-step="7">70</div>
<div data-step="8">80</div>
<div data-step="9">90</div>
<div class="ogl-active" data-step="10">100</div>
`;
slider.addEventListener('click', event =>
{
slider.querySelectorAll('div').forEach(e => e.classList.remove('ogl-active'));
event.target.classList.add('ogl-active');
fleetDispatcher.speedPercent = event.target.getAttribute('data-step');
fleetDispatcher.refresh();
document.querySelector('#continueToFleet3').focus();
});
slider.addEventListener('mouseover', event =>
{
fleetDispatcher.speedPercent = event.target.getAttribute('data-step');
fleetDispatcher.refresh();
});
slider.addEventListener('mouseout', event =>
{
fleetDispatcher.speedPercent = slider.querySelector('.ogl-active').getAttribute('data-step');
fleetDispatcher.refresh();
});
// ship infos
let data = fleetDispatcher.fleetHelper.shipsData;
for(let id in data)
{
let infos = `
<div class="ogl-fleetInfo">
${data[id].name}
<hr>
<div><span>Carg.</span>${data[id].cargoCapacity.toLocaleString('de-DE')}</div>
<div><span>${this.getTranslatedText(19)}</span>${data[id].speed.toLocaleString('de-DE')}</div>
<div><span>Consum</span>${data[id].fuelConsumption.toLocaleString('de-DE')}</div>
</div>
`;
let ship = document.querySelector(`.technology[data-technology="${id}"]`);
if(ship)
{
ship.setAttribute('data-title', infos);
ship.removeAttribute('title');
}
}
// preselect associated moon/planet
document.addEventListener('keydown', event =>
{
if(fleetDispatcher.currentPage == 'fleet2'
&& fleetDispatcher.currentPlanet.galaxy == fleetDispatcher.targetPlanet.galaxy
&& fleetDispatcher.currentPlanet.system == fleetDispatcher.targetPlanet.system
&& fleetDispatcher.currentPlanet.position == fleetDispatcher.targetPlanet.position
&& fleetDispatcher.currentPlanet.type == fleetDispatcher.targetPlanet.type
&& event.keyCode === 13)
{
fleetDispatcher.targetPlanet.type = fleetDispatcher.targetPlanet.type == 1 ? 3 : 1;
if(!fleetDispatcher.mission) fleetDispatcher.mission = this.json.options.harvestMission;
fleetDispatcher.refresh();
}
});
}
}
loopUtilities()
{
this.FPSLoop('loopUtilities');
if(this.page == 'fleetdispatch')
{
if(!fleetDispatcher.mission && fleetDispatcher.currentPage == 'fleet3')
{
// select expedition mission
if(!fleetDispatcher.mission && fleetDispatcher.targetPlanet.position == 16)
{
fleetDispatcher.mission = 15;
}
// select unique mission available
if(!fleetDispatcher.mission && document.querySelectorAll('#missions .on').length == 1)
{
document.querySelectorAll('#missions .on')[0].querySelector('a').click();
}
fleetDispatcher.refresh();
}
// add fret on fleet1
if(fleetDispatcher.currentPage == 'fleet1' && document.querySelector('#civilships'))
{
let div = document.querySelector('#civilships .ogl-fret') || document.querySelector('#civilships').appendChild(this.createDOM('div', {'class':'ogl-fret'}));
div.textContent = fleetDispatcher.getCargoCapacity().toLocaleString('de-DE');
}
}
if(this.page == 'galaxy')
{
if(document.querySelector('a[onclick*="sendShips"'))
{
let ships = document.querySelector('a[onclick*="sendShips"').getAttribute('onclick').match(/\d+/g).map(Number);
if(ships[0] == 6) this.json.spyProbes = ships[5];
}
}
}
getTranslatedText(id)
{
let text =
{
0 :
[
"Gestion des données",
"Administrar Info",
],
1 :
[
"Ouvrir la liste de cibles",
"Abrir Lista de objetivos",
],
2 :
[
"Alterne entre PT et GT comme type de vaisseaux à utilser pour les envois de ressources",
"Cambiar entre cargas pequeñas o cargas grandes para el transporte de recursos",
],
3 :
[
"Alterne entre transport et stationnement comme type de mission à utiliser pour les rapatriements",
"Switch between transport and deployment as default mission to use for transporting resources",
],
4 :
[
"Rapatrie les ressources vers la planète/lune ciblée",
"Enviar recursos al Planeta/Luna",
],
5 :
[
"Afficher/masquer les cibles",
"Mostrar objetivos ignorados",
],
6 :
[
"Rentabilité minimale d'une cible pour être considéré comme intéressante",
"Rentabilidad minima que debe alcanzar el objetivo para q valga la pena sangron",
],
7 :
[
"Active/désactive la suppression automatique des rapports inintéréssants",
"Toggle automatic removal of low rentability reports",
],
8 :
[
"Active/désactive le tableau d'espionnage",
"Toggle spy table",
],
9 :
[
"Ignorer cette planète",
"Saltar planeta",
],
10 :
[
"Envoyer vers...",
"enviar a...",
],
11 :
[
"Active/désactive la vue compacte",
"vista compacta",
],
12 :
[
"Quantité de ressources à laisser ici",
"Cantidad de recursos que deben quedarse en el planeta",
],
13 :
[
"Liste des cibles",
"Lista de objetivos",
],
14 :
[
"Aucun résultat trouvé",
"No se encontraron datos",
],
15 :
[
"PT",
"NPC",
],
16 :
[
"GT",
"NGC",
],
17 :
[
"Epingler ces données",
"Mantener info.",
],
18 :
[
"Ressources en vol",
"Recursos en Vuelo",
],
19 :
[
"Vit.",
"Vel.",
],
20 :
[
"Espionner la planète",
"Espiar Planeta",
],
21 :
[
"Espionner la lune",
"Espiar Luna",
],
22 :
[
"Attaquer la planète",
"Atacar Planeta",
],
23 :
[
"Technologie hyperespace",
"Tecnologia de Hiperespacio",
],
24 :
[
"Seuil rentabilité (RVal)",
"MArgen de Rentabilidad)",
],
25 :
[
"Quantité de ressources à garder",
"Cantidad de recursos a mantener",
],
}
return '<span class="ogl-translated">'+text[id][this.language]+'</span>';
}
importExport()
{
let container = this.createDOM('div', {'class':'ogl-dialogContainer ogl-importExport'}, '<h1>'+this.getTranslatedText(0)+'</h1>');
let text = container.appendChild(this.createDOM('textarea', {}, JSON.stringify(this.json)));
text.addEventListener('click', () => text.select());
container.appendChild(this.createDOM('hr'));
container.appendChild(this.createDOM('span', {}, this.getTranslatedText(23)));
container.appendChild(this.createDOM('span', {'class':'ogl-right'}, this.json.tech114));
container.appendChild(this.createDOM('hr'));
container.appendChild(this.createDOM('span', {}, this.getTranslatedText(24)));
// limit option
let rvalInput = container.appendChild(this.createDOM('input', {'type':'text',
'class':'ogl-rvalInput ogl-formatInput tooltip', 'value':this.json.options.rvalLimit, 'title':this.getTranslatedText(6)}));
container.appendChild(this.createDOM('hr'));
let importBtn = container.appendChild(this.createDOM('button', {'class':'btn_blue'}, 'Save'));
importBtn.addEventListener('click', () =>
{
this.json = JSON.parse(text.value);
this.json.options.rvalLimit = parseInt(this.removeNumSeparator(rvalInput.value));
this.saveData();
document.location.reload();
});
let resetBtn = container.appendChild(this.createDOM('button', {'class':'btn_blue ogl-btn_red'}, 'Reset'));
resetBtn.addEventListener('click', () =>
{
let reset = confirm("Voulez vous vraiment supprimer les données d'OGLight ?");
if(reset)
{
this.json = {};
this.saveData();
document.location.reload();
}
});
container.appendChild(this.createDOM('div', {'class':'clearfloat'}));
this.popup(false, container);
}
}
window.addEventListener ("DOMContentLoaded", () =>
{
let oglight = new OGLight();
});
GM_addStyle(`
#rechts
{
margin-top:-57px;
}
#countColonies
{
background:linear-gradient(to right, #1c2b38 45%, #090e13) !important;
box-shadow:inset 0 1px rgba(255,255,255,.07);
font-size:10px;
height:22px !important;
line-height:22px !important;
margin:0 0 5px 0 !important;
outline:1px solid #000;
}
.smallplanet
{
height:auto !important;
margin-bottom:5px !important;
position:relative !important;
height:31px !important;
width:100% !important;
}
.planetlink, .moonlink
{
background:linear-gradient(to right, #1c2b38 45%, #090e13);
background-position:0 !important;
box-shadow:inset 0 1px rgba(255,255,255,.07), inset 0 16px rgba(255,255,255,.03);
outline:1px solid #000;
height:100% !important;
margin:0 !important;
overflow:hidden;
padding:0 !important;
position:absolute;
top:0 !important;
}
.planetlink
{
left:0 !important;
width:114px;
}
.moonlink
{
left:auto !important;
right:0 !important;
width:30px;
}
.planetlink:hover, .moonlink:hover
{
outline-color:#fff;
}
.planetlink.active, .moonlink.active
{
background:linear-gradient(to right, #862f88, #090e13);
}
.planetlink.ogl-target, .moonlink.ogl-target
{
outline-color:#ffc937;
}
.planetlink .ogl-timer, .moonlink .ogl-timer
{
background:#ab2a2a;
border:1px solid #121a23;
border-radius:50%;
bottom:0;
content:'';
height:5px;
right:1px;
position:absolute;
top:1px;
width:5px;
}
.planetlink .ogl-medium, .moonlink .ogl-medium
{
background:#ce9021;
}
.planetlink .ogl-short, .moonlink .ogl-short
{
background:#36bb6c;
}
.planetlink .planetPic, .moonlink img
{
display:none;
}
.planetlink .planet-name
{
color:#fff !important;
font-size:10px !important;
font-weight:normal !important;
position:absolute;
top:3px !important;
}
.planetlink .planet-koords
{
color:#99c6f5 !important;
font-size:10px !important;
font-weight:normal !important;
opacity:.7;
position:absolute !important;
top:15px !important;
transform:translateX(0);
transition:transform .2s, opacity .2s;
}
.planetlink:hover .planet-koords
{
opacity:0;
transform:translateX(-10px);
}
.planetlink.active .planet-koords
{
color:#ffbfc9 !important;
}
.planetlink .planet-name,
.planetlink .planet-koords,
.planetlink .ogl-mines
{
font-size:10px !important;
left:5px !important;
}
.ogl-planet, .ogl-moon
{
background:#3c536d;
border-radius:12px;
cursor:pointer;
height:12px;
right:2px;
padding:0;
position:absolute;
bottom:2px;
width:12px;
z-index:1;
}
.ogl-planet:hover
{
background:#f87bfb !important;
}
.ogl-planet:after
{
border:2px solid transparent;
border-bottom:2px solid #1d2b3a;
border-radius:50%;
content:'';
display:block;
height:16px;
left:-8px;
position:absolute;
top:-10px;
transform:rotate(-20deg);
width:19px;
}
.ogl-planet:hover:after
{
border-bottom:2px solid #a62fa9 !important;
}
.ogl-moon
{
background:none;
box-shadow:inset -6px -3px #3c536d;
}
.moonlink .ogl-moon:hover
{
box-shadow:inset -6px -3px #f87bfb !important;
}
.planetlink .ogl-mines
{
color:#ffbfc9 !important;
opacity:0;
position:absolute;
top:15px !important;
transform:translateX(-10px);
transition:transform .2s, opacity .2s;
}
.planetlink:hover .ogl-mines
{
opacity:.7;
transform:translateX(0);
}
.smallplanet .constructionIcon
{
bottom:2px !important;
left:auto !important;
right:52px !important;
top:auto !important;
z-index:10;
}
.smallplanet .constructionIcon.moon
{
left:auto !important;
right:15px !important;
}
.smallplanet .alert
{
left:auto !important;
right:52px !important;
top:2px !important;
z-index:10;
}
.smallplanet .alert.moon
{
left:auto !important;
right:15px !important;
}
#galaxytable
{
background:#0e1115;
}
#galaxytable tbody
{
border-spacing:1px;
}
#galaxytable tbody tr
{
background:linear-gradient(to left, #090e13, #1c2b38, #090e13);
}
#galaxytable tbody tr td
{
background:none !important;
border-radius:0;
box-shadow:inset 0 1px rgba(255,255,255,.07), inset 0 15px rgba(255,255,255,.03);
outline:1px solid #000;
text-shadow:1px 1px #000;
filter:brightness(100%) !important;
}
#galaxytable tbody tr td.planetname
{
width:160px !important;
}
#galaxytable tbody tr td.action
{
width:83px !important;
}
#galaxytable tbody tr td.moon a
{
width:38px !important;
}
#galaxytable tbody tr td .moon_a
{
background-size:30px !important;
width:100% !important;
}
#galaxytable .playername
{
padding:0 7px;
position:relative;
text-align:left;
}
#galaxytable .playername > a
{
display:inline-block;
}
#galaxytable .playername .status_abbr_longinactive
{
color:#888 !important;
}
#galaxytable .playername .status_abbr_inactive
{
color:#c3c3c3 !important;
}
#galaxytable .playername span
{
display:inline-block;
overflow:hidden;
text-overflow:ellipsis;
vertical-align:top;
max-width:60px;
white-space:nowrap;
}
#galaxytable .allytag
{
position:relative;
}
#galaxytable tr[data-marked].debris.ogl-active td
{
background:#c14529 !important;
opacity:1 !important;
}
#galaxytable .debrisField
{
background:none !important;
color:#fff;
font-size:10px;
line-height:14px;
padding:0;
width:100% !important;
}
#galaxytable tr[class*="filtered_filter"],
#galaxytable tr[data-marked="gray"]
{
background:none;
opacity:1 !important;
}
tr[class*="filtered_filter"] td,
tr[data-marked="gray"] td,
.ogl-stalkPlanets [data-marked="gray"]
{
opacity:.2 !important;
}
#galaxytable .debris.ogl-active
{
background:#c14529 !important;
opacity:1 !important;
}
#galaxytable tr[data-marked]:not([data-marked="gray"])
{
box-shadow:inset 0 50px 0 rgba(0,0,0,.5);
}
#galaxytable tr[data-marked]:not([data-marked="gray"]) td
{
opacity:1 !important;
}
#galaxytable .ogl-highlighted
{
filter:contrast(.9) brightness(1.4) saturate(1.2);
}
.ogl-colors
{
background:linear-gradient(-45deg, #fff, #ab2727, #f3de4c, #28c78d, #1f8ad6, #8e35d2, #fff);
background:#212121;
border:2px dotted #414f5d;
border-radius:50%;
box-shadow:inset 0 5px 5px rgba(0,0,0,.7);
cursor:pointer;
height:16px;
position:absolute;
top:5px;
width:16px;
}
.ogl-colors:hover
{
box-shadow:inset 0 50px rgba(255,255,255,.1), inset 0 5px 5px rgba(0,0,0,.7);
}
div[data-marker], [data-marked] .ogl-colors
{
background:currentColor;
border:2px solid currentColor;
border-radius:50%;
box-shadow:inset 0 50px rgba(0,0,0,.9);
cursor:pointer;
height:16px;
width:16px;
}
.ogl-spyTable .ogl-colors
{
height:20px;
left:1px;
padding:0;
top:1px;
width:20px;
}
.ogl-colorChoice
{
background:rgba(0,0,0,.5);
border-radius:6px;
display:grid;
grid-gap:10px;
grid-template-columns:repeat(2, 1fr);
padding:10px;
}
div[data-marker].ogl-active,
[data-marked] .ogl-colors,
div[data-marker]:hover
{
box-shadow:inset 0 50px rgba(0,0,0,.3), inset 0 5px 5px rgba(0,0,0,.3);
}
[data-marker="red"], [data-marked="red"] .ogl-colors, [data-toggle="red"] { color:#ab2727; }
[data-marker="yellow"], [data-marked="yellow"] .ogl-colors, [data-toggle="yellow"] { color:#f3de4c; }
[data-marker="green"], [data-marked="green"] .ogl-colors, [data-toggle="green"] { color:#28c78d; }
[data-marker="blue"], [data-marked="blue"] .ogl-colors, [data-toggle="blue"] { color:#1f8ad6; }
[data-marker="violet"], [data-marked="violet"] .ogl-colors, [data-toggle="violet"] { color:#8e35d2; }
[data-marker="gray"], [data-marked="gray"] .ogl-colors, [data-toggle="gray"] { color:#8a8a8a; }
.ogl-stalkPlanets [data-marked="red"] { background:#ab2727 !important; }
.ogl-stalkPlanets [data-marked="yellow"] { background:#f3de4c !important; }
.ogl-stalkPlanets [data-marked="green"] { background:#28c78d !important; }
.ogl-stalkPlanets [data-marked="blue"] { background:#1f8ad6 !important; }
.ogl-stalkPlanets [data-marked="violet"] { background:#8e35d2 !important; }
.ogl-spyTable tr { background:#33333e; }
.ogl-spyTable tr[data-marked="red"] { background:#6b3e3f !important; }
.ogl-spyTable tr[data-marked="yellow"] { background:#696734 !important; }
.ogl-spyTable tr[data-marked="green"] { background:#21544b !important; }
.ogl-spyTable tr[data-marked="blue"] { background:#225477 !important; }
.ogl-spyTable tr[data-marked="violet"] { background:#5d3d77 !important; }
#galaxytable tr[data-marked="red"] { background:linear-gradient(to left, #090e13, #b13434, #090e13) !important; }
#galaxytable tr[data-marked="yellow"] { background:linear-gradient(to left, #090e13, #907923, #090e13) !important; }
#galaxytable tr[data-marked="green"] { background:linear-gradient(to left, #090e13, #2c846f, #090e13) !important; }
#galaxytable tr[data-marked="blue"] { background:linear-gradient(to left, #090e13, #2677b1, #090e13) !important; }
#galaxytable tr[data-marked="violet"] { background:linear-gradient(to left, #090e13, #5d2b94, #090e13) !important; }
.ogl-targetIcon
{
background:#6b2020 !important;
cursor:pointer;
height:100%;
position:relative;
width:100%;
}
.ogl-targetIcon:before
{
background:#c14d4d;
border-radius:50%;
border:6px double #fff;
box-sizing:border-box;
content:'';
height:15px;
left:50%;
position:absolute;
top:50%;
transform:translate(-50%, -50%);
width:15px;
}
.ogl-targetIcon:hover:before
{
background:#cd33ff;
border-color:#e39fff;
}
.ogl-needed
{
background:#141e26;
border-radius:5px 0;
font-size:11px;
left:2px;
padding:3px 4px;
position:absolute;
top:2px;
}
.ogl-spyTable
{
border-spacing:0 1px;
font-size:11px;
text-align:center;
width:100%;
}
.ogl-spyTable figure
{
margin-left:3px;
vertical-align:sub;
}
.ogl-spyTable tr:not(:first-child):hover
{
outline:1px solid #ffc937;
}
.ogl-spyTable tr:nth-child(odd)
{
box-shadow:inset 0 -40px rgba(0,0,0,.4);
}
.ogl-spyTable tr:nth-child(even)
{
box-shadow:inset 0 -40px rgba(0,0,0,.5);
}
.ogl-spyTable td, .ogl-spyTable th
{
color:#8193a2;
height:26px;
margin:auto;
padding:0 3px;
position:relative;
}
.ogl-spyTable th
{
background:#0a0d0e;
color:#d4d4d4;
font-size:10px;
}
.ogl-spyTable .ogl-headerColors
{
width:20px;
}
.ogl-spyTable th[data-filter]
{
cursor:pointer;
}
.ogl-spyTable th[data-filter]:hover,
.ogl-spyTable th[data-filter].ogl-active
{
background:#862f88;
color:#fff;
}
.ogl-spyTable th[data-filter]:after
{
content:'<>';
display:inline-block;
font-family:consolas;
font-size:9px;
margin-left:3px;
transform:rotate(90deg);
}
.ogl-spyTable .ogl-metal
{
background:#52504f;
}
.ogl-spyTable .ogl-crystal
{
background:#406b8a;
}
.ogl-spyTable .ogl-deut
{
background:#376f58;
}
.ogl-spyTable a
{
color:inherit;
text-decoration:none;
}
.ogl-spyTable a:hover
{
color:orange;
}
.ogl-spyTable tr > *:nth-child(odd)
{
box-shadow:inset 0 -40px rgba(0,0,0,.2);
}
.ogl-spyTable .ogl-spyOptions *
{
margin:0 1px;
}
.ogl-spyTable .ogl-attacked td:not(.ogl-colors)
{
color:#f49cf5;
}
.ogl-spyTable .ogl-good
{
color:#73d2af !important;
}
.ogl-spyTable .ogl-care
{
color:#d2b62c !important;
}
.ogl-spyTable .ogl-danger
{
color:#fb6a6a !important;
}
.ogl-spyTable .ogl-name
{
padding-left:5px;
text-align:left;
}
.ogl-spyTable .ogl-sub
{
background:linear-gradient(to left, #090e13, #0c1319, #090e13);
}
.ogl-spyTable .ogl-lootable:not(:hover)
{
background:none !important;
}
.ogl-spyTable .ogl-lootable:hover
{
color:#fff !important;
}
.ogl-spyTable .ogl-sc,
.ogl-spyTable .ogl-lc,
.ogl-spyTable .ogl-pf
{
image-rendering:pixelated;
min-width:26px;
}
.ogl-spyTable .ogl-sc:before,
.ogl-spyTable .ogl-lc:before,
.ogl-spyTable .ogl-pf:before
{
background:url('https://gf3.geo.gfsrv.net/cdn53/7a9861be0c38bf7de05a57c56d73cf.jpg') no-repeat !important;
background-size:550px 825px !important;
display:block;
content:'';
height:26px;
left:50%;
position:absolute;
top:0;
transform:translateX(-50%);
width:26px;
}
.ogl-spyTable .ogl-sc:before
{
background-position:42.1% 51.72% !important;
}
.ogl-spyTable .ogl-lc:before
{
background-position:47.36% 51.72% !important;
}
.ogl-spyTable .ogl-pf:before
{
background-position:78.94% 51.72% !important;
}
.ogl-tableOptions
{
border-bottom:2px solid #1d1d1d;
height:20px;
text-align:right;
width:100%;
}
.ogl-tableOptions:before
{
content:'OGL options:';
margin-right:5px;
vertical-align:top;
}
.ogl-tableOptions > *
{
float:right !important;
}
.ogl-tableOptions button
{
cursor:pointer;
margin-left:5px;
}
.ogl-smallBtn
{
height:16px !important;
line-height:10px !important;
min-width:0 !important;
padding:0 4px !important;
}
.ogl-none
{
background:#000;
color:gold;
font-size:16px;
line-height:30px;
text-align:center;
width:30px;
}
.ogl-harvestOptions
{
background:#171e25;
box-shadow:inset 0 1px rgba(255,255,255,.07);
display:grid;
grid-template-columns:repeat(5, 1fr);
justify-items:center;
margin-top:5px;
outline:1px solid #000;
padding:3px;
text-align:center;
width:141px;
}
.ogl-option
{
background-color:#4f2361;
border:1px solid #000;
border-radius:4px;
color:#fff !important;
cursor:pointer;
display:inline-block;
font-size:11px;
height:22px;
image-rendering:crisp-edges;
image-rendering:-moz-crisp-edges;
image-rendering:-webkit-optimize-contrast;
line-height:22px;
overflow:hidden;
position:relative;
text-decoration:none;
width:22px;
}
.ogl-option:after
{
background:linear-gradient(to top, #000 50%, #fff 50%);
bottom:0;
content:'';
display:block;
height:100%;
opacity:.1;
position:absolute;
width:100%;
}
.ogl-option:hover:after
{
background:linear-gradient(to top, #8500a5 50%, #fa40ff 50%);
opacity:.5;
}
.ogl-harvestMission
{
background:url("https://gf2.geo.gfsrv.net/cdn14/f45a18b5e55d2d38e7bdc3151b1fee.jpg") no-repeat;
background-position:30% 0 !important;
background-size:calc(22px * 11) !important;
}
.ogl-harvestMission.ogl-transpoIcon
{
background-position:50% 0 !important;
}
.ogl-harvestMission.ogl-active
{
background-position-y:0 !important;
}
.ogl-defaultCargo
{
background:url("https://gf2.geo.gfsrv.net/cdn7e/41c09757d8212f48fc574515c8bc87.jpg") no-repeat;
background-position:69.3% 0 !important;
background-size:calc(22px * 14) !important;
}
.ogl-defaultCargo.ogl-smallCargo
{
background-position:61.3% 0 !important;
}
.ogl-harvestType
{
background:#262879;
}
.ogl-autoHarvest
{
background:url("https://gf2.geo.gfsrv.net/cdn14/f45a18b5e55d2d38e7bdc3151b1fee.jpg") no-repeat;
background-position:10% 0 !important;
background-size:calc(22px * 11) !important;
}
.ogl-autoHarvest.ogl-active
{
border:1px solid #ffc937;
}
.ogl-harvest
{
transform:scale(1.15);
transform-origin:bottom right;
}
.ogl-skip
{
position:absolute;
left:2px;
top:2px;
z-index:10;
}
.ogl-skipList
{
background-color:#13181d;
box-shadow:inset 0 1px rgba(255,255,255,.05);
color:#96a0a2 !important;
line-height:24px;
outline:1px solid #000;
padding:0 5px;
position:relative;
}
.ogl-skipList:nth-child(odd)
{
background-color:#0d1014;
}
.ogl-skipList:hover
{
background:rgba(255, 215, 0, 0.1) !important;
color:#e6648e !important;
outline:1px solid gold;
z-index:10;
}
.ogl-skipList figure
{
margin-left:5px;
}
.ogl-ranking
{
position:absolute;
right:5px;
}
.ogl-stalkContainer h1
{
display:inline-block;
margin-right:5px;
vertical-align:sub;
}
.ogl-toggle.ogl-active
{
box-shadow:inset 0 50px rgba(0,0,0,.3);
}
.ogl-toggle.ogl-active:before
{
color:#fff;
content:"✓";
display:inline-block;
left:0;
line-height:16px;
text-align:center;
top:0;
width:100%;
}
.ogl-toggle:hover
{
opacity:.7;
}
.ogl-toggle
{
background:currentColor;
border:2px solid currentColor;
border-radius:3px;
box-shadow:inset 0 50px rgba(0,0,0,.9);
display:inline-block;
height:14px;
margin-right:5px;
vertical-align:middle;
width:14px;
}
.ogl-stalk h1 a, .ogl-ranking
{
color:#e6648e !important;
font-size:10px;
}
.ogl-stalk h1 a:hover, .ogl-ranking:hover
{
color:orange !important;
text-decoration:underline !important;
}
.ogl-stalk h1 s
{
color:#fff;
}
.ogl-stalkPlanets
{
display:grid;
grid-gap:5px;
grid-template-columns:repeat(4, 1fr);
}
.ogl-tooltip .ogl-stalkPlanets
{
grid-template-columns:repeat(3, 1fr);
}
.ogl-sideStalk .ogl-stalkPlanets
{
max-height:none;
}
.ogl-stalkPlanets > a
{
background:#1e2123;
border:2px solid #2f2f2f;
border-radius:3px;
box-sizing:border-box;
color:#fff !important;
cursor:pointer;
display:block;
font-size:11px;
height:27px;
line-height:23px;
padding:0 22px 0 8px;
position:relative;
text-decoration:none !important;
text-align:left !important;
}
.ogl-stalkPlanets > a.ogl-main i
{
color:gold;
font-size:10px;
font-style:normal;
margin-left:4px;
}
.ogl-stalkPlanets [data-marked]:not([data-marked="gray"])
{
border:2px solid rgba(0, 0, 0, 0.44);
box-shadow:inset 0 50px 0 rgba(0,0,0,.6);
}
.ogl-stalkPlanets > a.ogl-active
{
border:2px dotted rgba(255,255,255,.7) !important;
}
.ogl-stalkPlanets > a:hover
{
border:2px solid #FF5722 !important;
}
.ogl-stalkPlanets.ogl-stalkList a
{
opacity:1 !important;
text-align:center;
}
.ogl-stalkPlanets .ogl-moon
{
bottom:5px;
box-shadow:inset -6px -3px rgba(0,0,0,.5);
right:6px;
transform:scale(1);
}
.ogl-stalkPlanets .ogl-moon.ogl-active
{
box-shadow:inset -6px -3px gold;
}
.ogl-stalkPlanets .ogl-moon:hover:not(.ogl-active)
{
box-shadow:inset -6px -3px rgba(0,0,0,.5) !important;
}
.ogl-stalkPlanets .splitLine
{
grid-column: 1/-1;
}
.ogl-textRight
{
text-align:right;
}
.ogl-lock
{
background:rgba(0,0,0,.7) !important;
box-sizing:border-box;
color:#fff;
height:30px;
line-height:30px !important;
text-align:left;
width:100%;
}
.ogl-lock:before
{
background:url("//gf1.geo.gfsrv.net/cdn6f/91ad13c8f9a7e9390085d12adde508.png");
background-position:0 -272px;
background-repeat:no-repeat;
content:'';
display:inline-block;
margin:0 10px 0 5px;
height:16px;
vertical-align:sub;
width:16px;
}
.ogl-lock.ogl-active:before
{
filter:sepia(100%) hue-rotate(-50deg) saturate(10);
}
.ogl-lock > span
{
display:inline-block;
overflow:hidden;
text-overflow:ellipsis;
max-width:130px;
vertical-align:top;
white-space:nowrap;
}
.ogl-sideLock
{
background:url("//gf1.geo.gfsrv.net/cdn6f/91ad13c8f9a7e9390085d12adde508.png");
background-position:0 -272px;
background-repeat:no-repeat;
filter:sepia(100%) hue-rotate(-50deg) saturate(10);
height:16px;
left:100%;
position:absolute;
width:16px;
z-index:1;
}
.ogl-sideLockFilled
{
filter:sepia(100%) hue-rotate(80deg) saturate(3);
}
#allornone .secondcol
{
background:#0d1014;
border-radius:5px;
display:grid !important;
grid-template-columns:repeat(4, 1fr);
padding:5px !important;
width:150px !important;
}
#allornone .secondcol .clearfloat
{
display:none !important;
}
#allornone .secondcol *
{
float:none !important;
}
.ogl-prefab
{
background:url(https://gf2.geo.gfsrv.net/cdn7e/41c09757d8212f48fc574515c8bc87.jpg);
background-position:calc(-8px * 30) 0 !important;
background-size:calc(30px * 14) !important;
border:1px solid #000;
cursor:pointer;
display:inline-block;
height:30px;
position:relative;
width:30px;
z-index:10;
}
.ogl-prefab:before
{
background:url(https://gf2.geo.gfsrv.net/cdn14/f45a18b5e55d2d38e7bdc3151b1fee.jpg) no-repeat;
background-size:calc(36px * 11) !important;
background-position:-3px -5px;
border:1px solid #000;
content:'';
display:block;
height:28px;
right:-5px;
position:absolute;
top:-5px;
transform:scale(.5);
transform-origin:top right;
width:28px;
}
.ogl-prefab:hover
{
border:1px solid orange;
}
.ogl-gtexpe
{
background-position:calc(-9px * 30) 0 !important;
}
.ogl-importExport .ogl-rvalInput
{
cursor:auto !important;
float:right;
height:14px;
line-height:16px;
padding:0 4px;
text-align:center;
width:60px !important;
}
.ogl-importExport .ogl-right
{
margin-top:0;
}
.ogl-importExport .btn_blue
{
float:right;
margin-left:5px;
}
.ogl-quickLinks
{
box-sizing:border-box;
display:grid;
grid-gap:1px;
grid-template-columns:auto 40px;
user-select:none;
}
.ogl-quickLinks > div
{
background-color:#13181d;
box-shadow:inset 0 1px rgba(255,255,255,.05);
color:#96a0a2 !important;
line-height:24px;
outline:1px solid #000;
position:relative;
}
.ogl-quickLinks > .ogl-quickPlanet:nth-of-type(4n+3),
.ogl-quickLinks > .ogl-quickPlanet:nth-of-type(4n+3) + div
{
background-color:#0d1014;
}
.ogl-quickPlanet
{
cursor:pointer;
font-size:11px;
padding:0 8px;
}
.ogl-quickMoon
{
cursor:pointer;
text-align:center !important;
}
.ogl-quickEmpty
{
background-color:#3c1212 !important;
}
.ogl-quickPlanet:not(.ogl-quickEmpty):hover, .ogl-quickMoon:not(.ogl-quickEmpty):hover
{
background:rgba(255, 94, 0, 0.18) !important;
color:#ffa330 !important;
outline:1px solid #ad5b16;
z-index:10;
}
#shortcuts .dropdown.planets
{
display:none !important;
}
.ogl-quickBtn
{
background:#1e2c39;
border:1px solid #000;
border-radius:4px;
box-shadow:inset 0 1px 3px rgba(255,255,255,.1), 0 0 10px 3px #192026;
box-sizing:border-box;
display:block;
height:24px;
line-height:22px;
margin-top:4px;
padding:0 4px;
position:relative;
width:144px;
}
.ogl-quickBtn:before
{
background:url("https://gf3.geo.gfsrv.net/cdne1/d03835718066a5a592a6426736e019.png");
background-position:100% -488px;
content:'';
display:block;
height:24px;
position:absolute;
right:-1px;
top:-1px;
width:24px;
}
.ogl-quickBtn:hover
{
background:#243746;
}
.ogl-quickBtn:hover:before
{
background-position:100% -512px;
}
.maincontent .ogl-shortHeader
{
height:auto !important;
min-height:40px !important;
}
.maincontent .ogl-shortHeader #slot01
{
right:40px !important;
}
.maincontent .ogl-shortHeader + #technologydetails_wrapper
{
display:none !important;
margin-top:-48px !important;
position:relative !important;
}
.maincontent .ogl-shortHeader + #technologydetails_wrapper.slide-up
{
display:block !important;
}
.toggleHeader
{
background:url("//gf1.geo.gfsrv.net/cdn0b/d55059f8c9bab5ebf9e8a3563f26d1.gif") no-repeat 0 -22px !important;
cursor:pointer;
height:22px;
position:absolute;
right:13px;
top:8px;
width:23px;
}
.ogl-shortHeader .toggleHeader, .shortHeader .toggleHeader
{
background:url("//gf1.geo.gfsrv.net/cdn0b/d55059f8c9bab5ebf9e8a3563f26d1.gif") no-repeat 0 0 !important;
}
.ogl-hidden
{
display:none !important;
}
.eventFleet[data-mission-type="1"],
.fleetDetails[data-mission-type="1"]
{
background:#3e2724 !important;
}
.eventFleet[data-mission-type="3"],
.fleetDetails[data-mission-type="3"]
{
background:#2c351d !important;
}
.eventFleet[data-mission-type="4"],
.fleetDetails[data-mission-type="4"]
{
background:#15312c !important;
}
.eventFleet[data-mission-type="6"],
.fleetDetails[data-mission-type="6"]
{
background:#35340f !important;
}
.eventFleet[data-mission-type="7"],
.fleetDetails[data-mission-type="7"]
{
background:#173f61 !important;
}
.eventFleet[data-mission-type="8"],
.fleetDetails[data-mission-type="8"]
{
background:#0d2f15 !important;
}
.eventFleet[data-mission-type="9"],
.fleetDetails[data-mission-type="9"]
{
background:#381313 !important;
}
.eventFleet[data-mission-type="15"],
.fleetDetails[data-mission-type="15"]
{
background:#192542 !important;
}
#eventContent tr:nth-child(odd)
{
box-shadow:inset 0 150px 0 rgba(0,0,0,.2);
}
.eventFleet[data-return-flight="true"],
.fleetDetails[data-return-flight="1"]
{
box-shadow:inset 0 150px 0 rgba(0,0,0,.45);
}
#eventContent tr[data-return-flight="true"]:nth-child(odd)
{
box-shadow:inset 0 150px 0 rgba(0,0,0,.55);
}
#eventContent tr[data-return-flight="true"] td
{
color:rgba(255,255,255,.5);
}
.eventFleet .countDown, .eventFleet .arrivalTime
{
text-align:left;
text-indent:5px;
}
.ogl-translated
{
font-size:11px;
}
.ogl-defaultCargo .ogl-translated
{
background:rgba(0,0,0,.7);
display:block;
font-size:10px;
}
.ogl-keepRes
{
background:linear-gradient(to top, #de8225, #da5a15);
border:none;
border-radius:2px;
box-shadow:inset 0 5px #e88748, inset 0 1px #df8b39, inset 0 -1px #dd9828;
color:#fff;
float:right;
height:11px;
line-height:11px;
margin-top:1px;
padding:0;
text-align:center;
width:14px;
}
.ogl-keepRes.ogl-active
{
background:linear-gradient(to top, #a02b8d, #c44ecc);
box-shadow:inset 0 5px #d748e8, inset 0 1px #ce5fca, inset 0 -1px #de47da;
}
.res #selectMinMetal,
.res #selectMinCrystal,
.res #selectMinDeuterium,
.res #selectMaxMetal,
.res #selectMaxCrystal,
.res #selectMaxDeuterium
{
cursor:pointer;
}
.ogl-sideStalk
{
background:#171d23;
margin-top:15px;
outline:1px solid #000;
padding:10px;
position:relative;
width:127px;
}
.ogl-sideStalk .close-tooltip
{
position:absolute;
right:0;
top:0;
}
.ogl-sideStalk hr
{
background:rgba(255,255,255,.2);
border:none;
height:1px;
}
.ogl-sideStalk h1 a
{
color:#e6648e !important;
font-size:10px;
}
.ogl-sideStalk .ogl-stalkPlanets
{
grid-template-columns:repeat(1, 1fr);
}
.ogl-sideStalk .ogl-stalkPlanets a
{
width:auto;
}
.ogl-stalk .icon_eye
{
cursor:pointer;
filter:sepia(100%) hue-rotate(-50deg) saturate(5);
position:absolute;
top:2px;
right:20px;
}
.ogl-right
{
float:right;
margin-top:5px;
text-align:right;
}
.ogl-fullGrid
{
grid-column:1/-1;
}
.ogl-dialog h1
{
grid-column:1/-1;
margin-bottom:10px;
}
.ogl-flyingGrid > div
{
display:grid;
grid-gap:10px;
grid-template-columns:repeat(4,1fr);
overflow-y:auto;
}
.ogl-flyingGrid > div > div
{
background:#0f1317;
padding:10px;
}
.ogl-flyingGrid .ogl-metal span,
.ogl-flyingGrid .ogl-crystal span,
.ogl-flyingGrid .ogl-deut span
{
display:inline-block;
margin-right:10px;
width:20px;
}
.ogl-flyingGrid .ogl-destination
{
text-align:center;
}
.ogl-hiddenTooltip
{
display:none !important;
visibility:hidden !important;
z-index:-1 !important;
}
.ogl-fleetSpeed
{
background:linear-gradient(to left, #248469, #b9801a, #a72525);
display:grid;
grid-template-columns:repeat(10, 1fr);
margin-top:8px;
}
.ogl-fleetSpeed > div
{
border-bottom:1px solid #000;
border-top:1px solid #000;
box-shadow:inset 0 1px rgba(255,255,255,.07),
inset 0 11px rgba(255,255,255,.15),
inset 1px 0 rgba(255,255,255,.2);
color:#fff;
cursor:pointer;
font-size:11px;
padding:4px 3px;
text-align:center;
text-shadow:1px 1px rgba(0,0,0,.4);
}
.ogl-fleetSpeed > div:hover
{
background:rgba(255,255,255,.2);
}
.ogl-fleetSpeed > div.ogl-active
{
background:#751f63;
box-shadow:inset 0 1px rgba(255,255,255,.07),
inset 0 11px rgba(255,255,255,.07),
inset 1px 0 rgba(255,255,255,.2),
inset -1px 0 rgba(0,0,0,.3),
0 0 5px 5px rgba(0,0,0,.25);
outline:2px solid #fff;
z-index:3;
}
.ogl-tooltip
{
background:#171d23;
border:2px solid #364352;
border-radius:7px;
box-shadow:0 0 10px #000;
display:none;
font-size:11px;
padding:10px;
position:absolute;
transform:translateX(-50%) translateY(-100%);
max-width:370px;
width:fit-content;
z-index:100000;
}
.ogl-tooltip div[style*="display:none;"]
{
display:block !important;
}
.ogl-tooltip a
{
color:cornflowerblue;
text-decoration:none;
}
.ogl-tooltip a:hover
{
color:orange;
}
.ogl-tooltip.ogl-active
{
display:block;
}
.ogl-tooltip hr, .ogl-dialog hr
{
background:#364352;
border:none;
height:1px;
}
.ogl-tooltip .ogl-date,
.ogl-sideStalk .ogl-date
{
color:#61768e;
font-size:10px;
}
.ogl-tooltip .ogl-pin
{
position:absolute;
right:26px;
top:7px;
}
.ogl-tooltip .ogl-pin:hover
{
box-shadow:inset 0 1px rgba(255,255,255,.1), inset 0 50px rgba(255,255,255,.2);
}
.ogl-tooltip .ogl-ranking
{
position:relative !important;
right:auto !important;
}
.ogl-tooltip .icon_chat,
.ogl-tooltip .icon_user,
.ogl-tooltip .icon_against
{
margin-right:0px;
}
.ogl-tooltip .galaxyTooltip
{
display:block !important;
}
.ogl-tooltip.ogl-autoHide .close-tooltip
{
display:none;
}
.ogl-tooltip.ogl-tooltipLeft
{
transform:translateX(-100%);
}
.ogl-tooltip.ogl-tooltipRight
{
transform:none;
}
.ogl-tooltip.ogl-tooltipBottom
{
transform:translateX(-50%);
}
.ogl-tooltip:after
{
background:#171d23;
border-bottom:2px solid #364352;
border-right:2px solid #364352;
bottom:-6px;
content:'';
display:block;
height:15px;
left:50%;
pointer-events:none;
position:absolute;
transform:translateX(-50%) rotate(45deg);
width:15px;
z-index:-1;
}
.ogl-tooltip.ogl-tooltipLeft:after
{
border:none;
border-top:2px solid #364352;
border-right:2px solid #364352;
bottom:auto;
left:auto;
top:8px;
transform:rotate(45deg);
right:-6px;
}
.ogl-tooltip.ogl-tooltipRight:after
{
border:none;
border-bottom:2px solid #364352;
border-left:2px solid #364352;
bottom:auto;
left:-6px;
transform:rotate(45deg);
top:8px;
}
.ogl-tooltip.ogl-tooltipBottom:after
{
border:none;
border-top:2px solid #364352;
border-left:2px solid #364352;
bottom:auto;
left:50%;
top:-8px;
transform:translateX(-50%) rotate(45deg);
}
.ogl-listSeparator
{
background:rgba(255,255,255,.1);
font-size:14px;
margin-top:5px;
padding:5px 0;
text-align:center;
}
.ogl-listSeparator:after
{
content:'>';
display:inline-block;
float:right;
font-family:consolas;
margin-right:10px;
transform:rotate(90deg);
}
.ogl-dialogOverlay
{
align-items:center;
background:rgba(0,0,0,.7);
bottom:0;
display:none;
justify-content:center;
left:0;
position:fixed;
right:0;
top:0;
z-index:1000;
}
.ogl-dialogOverlay.ogl-active
{
display:flex;
}
.ogl-dialog
{
background:#1a222b;
display:inline-flex;
overflow:hidden;
padding:20px;
position:fixed;
max-width:700px;
}
.ogl-dialog .close-tooltip
{
position:absolute;
right:5px;
top:5px;
}
.ogl-dialogContent
{
max-height:70vh;
overflow-y:auto;
padding:10px;
}
.ogl-dialogContent .ogl-stalkPlanets
{
align-content:start;
background:#0d1117;
padding:10px;
min-height:300px;
min-width:467px;
}
.ogl-dialogContent .ogl-stalkPlanets .ogl-targetItem
{
width:112px;
}
.ogl-tabList
{
display:inline-block;
vertical-align:top;
width:50%;
}
.ogl-tabList .ogl-tab
{
background:#334258;
border-radius:2px;
color:#fff;
cursor:pointer;
margin-right:2px;
margin-bottom:2px;
padding:5px 0;
text-align:center;
}
.ogl-tabList .ogl-tab:hover
{
background:#a95b19;
}
.ogl-tabList .ogl-tab.ogl-active
{
background:#a95b19;
opacity:1 !important;
}
.ogl-tab.ogl-isEmpty
{
opacity:.2;
}
.ogl-colorHidden,
.ogl-galaxyHidden,
.ogl-systemHidden
{
display:none !important;
}
.ogl-atk
{
background:#c14d4d;
border:6px double #fff;
border-radius:50%;
box-sizing:border-box;
height:14px;
position:absolute;
bottom:4px;
right:3px;
width:14px;
}
.ogl-atk:hover
{
background:#cd33ff;
border-color:#e39fff;
}
.ogl-fleetInfo div:nth-of-type(1)
{
color:#edff54;
}
.ogl-fleetInfo div:nth-of-type(2)
{
color:#66f8ff;
}
.ogl-fleetInfo div:nth-of-type(3)
{
color:#ff7c7c;
}
.ogl-fleetInfo span
{
display:inline-block;
width:50px;
}
#civilships .ogl-fret
{
bottom:5px;
color:#edff54;
font-size:10px;
position:absolute;
right:20px;
}
/* FLEET INFO TOOTIP
------------------------------- */
table.fleetinfo tr td,
table.fleetinfo tr th
{
padding:2px 5px;
}
table.fleetinfo tr:nth-child(even)
{
box-shadow:inset 0 50px rgba(0,0,0,.2);
}
table.fleetinfo tr:nth-child(odd)
{
box-shadow:inset 0 50px rgba(0,0,0,.4);
}
table.fleetinfo tr:nth-last-child(-n+3) .value
{
position:absolute;
right:10px;
}
table.fleetinfo tr:nth-last-child(3),
.ogl-metal
{
color:#dc6e6e;
}
table.fleetinfo tr:nth-last-child(2),
.ogl-crystal
{
color:#73e5ff;
}
table.fleetinfo tr:nth-last-child(1),
.ogl-deut
{
color:#a6e0b0;
}
/* BTN_BLUE
------------------------------- */
.btn_blue
{
background:#485f93 !important;
border:1px solid #5b77b5 !important;
border-radius:2px !important;
}
.ogl-btn_red
{
background:#b13131 !important;
border:1px solid #de3e3e !important;
}
.btn_blue:hover
{
background:#c75817 !important;
border:1px solid #e06c29 !important;
}
/* ICONS
------------------------------- */
.close-tooltip, .icon_chat,
.icon_close, .icon_fastforward, .icon_user,
.icon_missile, .icon_eye, .icon_against,
.icon_maximize, .icon_trash,
.ogl-pin
{
background:currentColor;
color:#485f93 !important;
cursor:pointer;
border-radius:2px;
box-shadow:inset 0 1px rgba(255,255,255,.1);
height:16px;
overflow:hidden;
position:relative;
width:16px;
}
/*.ogl-tableOptions .icon
{
background:#696969;
}*/
.close-tooltip.ogl-active, .icon_chat.ogl-active,
.icon_close.ogl-active, .icon_fastforward.ogl-active, .icon_user.ogl-active,
.icon_missile.ogl-active, .icon_eye.ogl-active, .icon_against.ogl-active,
.icon_maximize.ogl-active, .icon_trash.ogl-active,
.ogl-pin.ogl-active, .ogl-tableOptions .icon.ogl-active
{
color:#813383 !important;
}
.close-tooltip:hover, .icon_chat:hover,
.icon_close:hover, .icon_fastforward:hover, .icon_user:hover,
.icon_missile:hover, .icon_eye:hover, .icon_against:hover,
.icon_maximize:hover, .icon_trash:hover,
.ogl-pin:hover, .ogl-tableOptions .icon:hover
{
color:#c75817 !important;
}
.icon.hueRotate
{
background:#41846b !important;
filter:none !important;
}
.icon_eye:before
{
background:#fff;
border-radius:0 12px;
content:'';
display:block;
height:14px;
left:50%;
position:absolute;
top:50%;
transform:translate(-50%, -50%) scale(.6, .85) rotate(-45deg);
width:14px;
}
.icon_eye:after
{
background:inherit;
border-radius:10px;
content:'';
display:block;
height:4px;
left:50%;
position:absolute;
top:50%;
transform:translate(-68%, -35%);
width:4px;
}
.icon_chat:before
{
background:#fff;
border-radius:1px;
content:'';
display:block;
height:7px;
left:50%;
position:absolute;
top:50%;
transform:translate(-50%, -60%);
width:10px;
}
.icon_chat:after
{
background:#fff;
content:'';
display:block;
height:4px;
left:50%;
position:absolute;
top:50%;
transform:rotate(45deg) translate(-10%, 20%);
width:4px;
}
.icon_close:before,
.close-tooltip:before
{
background:#fff;
content:'';
display:block;
height:9px;
left:50%;
position:absolute;
top:50%;
transform:translate(-50%, -50%) rotate(45deg);
width:2px;
}
.icon_close:after,
.close-tooltip:after
{
background:#fff;
content:'';
display:block;
height:9px;
left:50%;
position:absolute;
top:50%;
transform:translate(-50%, -50%) rotate(-45deg);
width:2px;
}
.icon_fastforward:before
{
border-bottom:2px solid #fff;
border-right:2px solid #fff;
box-sizing:border-box;
content:'';
display:block;
height:6px;
left:50%;
position:absolute;
top:50%;
transform:translate(-20%, -50%) rotate(-45deg);
width:6px;
}
.icon_fastforward:after
{
border-bottom:2px solid #fff;
border-right:2px solid #fff;
box-sizing:border-box;
content:'';
display:block;
height:6px;
left:50%;
position:absolute;
top:50%;
transform:translate(-110%, -50%) rotate(-45deg);
width:6px;
}
.icon_user:before
{
background:#fff;
border-radius:50px 50px 0 0;
content:'';
display:block;
height:6px;
left:50%;
position:absolute;
top:60%;
transform:translate(-50%, -50%);
width:12px;
}
.icon_user:after
{
background:#fff;
border:2px solid currentColor;
border-radius:10px;
content:'';
display:block;
height:6px;
left:50%;
position:absolute;
top:30%;
transform:translate(-50%, -50%);
width:6px;
}
.icon_missile:before
{
border:2px solid #fff;
border-radius:50%;
box-sizing:border-box;
content:'';
display:block;
height:11px;
left:50%;
position:absolute;
top:50%;
transform:translate(-50%, -50%);
width:11px;
}
.icon_missile:after
{
background:#fff;
border-radius:50%;
content:'';
display:block;
height:3px;
left:50%;
position:absolute;
top:50%;
transform:translate(-50%, -50%);
width:3px;
}
.icon_against:before
{
border:2px solid #fff;
border-radius:50%;
box-sizing:border-box;
content:'';
display:block;
height:11px;
left:50%;
position:absolute;
top:50%;
transform:translate(-50%, -50%);
width:11px;
}
.icon_against:after
{
background:#fff;
content:'';
display:block;
height:9px;
left:50%;
position:absolute;
top:50%;
transform:translate(-50%, -50%) rotate(-45deg);
width:2px;
}
.ogl-pin:before
{
border-left:3px solid transparent;
border-right:3px solid transparent;
border-top:3px solid #fff;
content:'';
display:block;
height:0;
left:50%;
position:absolute;
top:72%;
transform:translate(-50%, -50%);
width:0;
}
.ogl-pin:after
{
border:2px solid #fff;
border-radius:50%;
content:'';
display:block;
height:4px;
left:50%;
position:absolute;
top:45%;
transform:translate(-50%, -50%);
width:4px;
}
.icon_maximize:before
{
border:1px solid #fff;
box-sizing:border-box;
content:'';
display:block;
height:6px;
left:60%;
position:absolute;
top:45%;
transform:translate(-50%, -50%);
width:6px;
}
.icon_maximize:after
{
background:inherit;
border:1px solid #fff;
box-sizing:border-box;
content:'';
display:block;
height:6px;
left:40%;
position:absolute;
top:55%;
transform:translate(-50%, -50%);
width:6px;
}
.icon_trash:before
{
background:repeating-linear-gradient(to right, transparent, #fff 2px);
border:1px solid #fff;
border-radius:0 0 2px 2px;
border-top:none;
box-sizing:border-box;
content:'';
display:block;
height:8px;
left:50%;
position:absolute;
top:55%;
transform:translate(-50%, -50%);
width:8px;
}
.icon_trash:after
{
background:#fff;
box-sizing:border-box;
content:'';
display:block;
height:2px;
left:50%;
position:absolute;
top:25%;
transform:translate(-50%, -50%);
width:10px;
}
/* EXPEDITION DEBRIS
------------------------------- */
.expeditionDebrisSlotBox
{
align-items:center;
display:grid;
grid-template-columns:20% auto auto auto;
}
.expeditionDebrisSlotBox li
{
list-style:none;
}
.expeditionDebrisSlotBox > img
{
float:right;
justify-self:center;
}
.expeditionDebrisSlotBox > div
{
line-height:1.6;
text-align:left;
}
.expeditionDebrisSlotBox a:hover
{
color:orange;
}
`);