NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name OG-GalaxyCheck
// @description To be used with OG-Tracker. Navigate to each position in the galaxy.
// @include *.ogame*gameforge.com/game/index.php*
// @author Draym
// @copyright 2019, Draym (draymlab.fr)
// @license MIT
// @version 2.0.1.0
// @updateURL https://openuserjs.org/meta/Draym/OG-GalaxyCheck.meta.js
// @downloadURL https://openuserjs.org/install/Draym/OG-GalaxyCheck.user.js
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// ==/UserScript==
// ==OpenUserJS==
// @author Draym
// ==/OpenUserJS==
(function () {
'use strict';
let gc_pos = function (galaxy, system) {
return ({
galaxy: galaxy,
system: system
});
}
/* **************************************************************/
/* ******************** PARAMETERS ******************************/
/* **************************************************************/
var gc_minutes = 15;
var gc_secondes = 5;
/* **************************************************************/
/* ********************** TOOLS *********************************/
/* **************************************************************/
function gc_goToGalaxyPosition(g, pos, callback) {
$("#galaxy_input").val(g);
$("#system_input").val(pos);
unsafeWindow.submitForm();
if (callback) {
callback();
}
return;
}
function gc_goToGalaxyRangePosition(galaxy, system, end, index, callback) {
if ((system <= end && index > end) || (system > end && index < end) || GM_getValue("gc_toggleOn") != true) {
if (callback) {
callback();
}
return;
}
gc_goToGalaxyPosition(galaxy, index);
if (system <= end) {
++index;
}
else {
--index;
}
setTimeout(function () {
gc_goToGalaxyRangePosition(galaxy, system, end, index);
}, gc_secondes * 1000);
}
/* **************************************************************/
/* ********************** ICONS *********************************/
/* **************************************************************/
let trashIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAA81BMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9YqtblAAAAUHRSTlMAAQIDBAUGBwgJCwwNDxARFBYYHCAiJSYoLTA1Nzg5Ozw/QUtPWFxhZG11e3x+f4iLkZKUlZieqKuvtb7DxcrO09nc4ubo6evt8fP19/n7/baRV4cAAAFLSURBVDjL3ZTJVsJAEEUrARURQXFGcZ4QnBIUFUURQhAR7v9/jQuSkA6dA2tqVzm3K/VeVbfI3MZqVhMZc4I7QxuDmwi6R1zUFTI/iAW5CnErXWgvaxo3StAZpwtN6K9pJS4BCT8x68CO3oskkPSTZ+BUpoNl4FqmgxfAvf/9oF0xRioqzqEKFoEXwwcdsEVEjCo4Crg5hEYgS8qAJSI2UAmDuR60UiHfqoBlWoBthMBUC35zisM24Hp1AzDRALYiOi0Ycx5YAu6ihpgu4JoKmPgAtrUVH1UfF7+hvz69R5FMF9x0hLNMO6paJP8HzUXFR9vjFR9FdoH3YIkdr9LkZEROgJo/w6ITzLpzFN2eS+Bhhu0ZNVaaBZQn4HwW0HgD9rVgGgjd1+QnDAualyJfg6/wwVQr/l4fK7/I/sRxt5FmNrRvRe+1IHMW/wzugelBDRgVAAAAAElFTkSuQmCC";
let plusIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAvVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Ke75sAAAAPnRSTlMAAQMEBQcICQoZGiEoKi0uLzM2NzxPUVJWWFldX2dpbG1zd4CCiIuSlLe5ury+wMHMztfZ3ODi5u3v8/X7/QehlGwAAADUSURBVDjL7ZRXD4IwGEWvC9wiat1bcW/FSf//zxKpMVJSqSa+cd56c5q0Tb8L2KSH2xsVcJrXVTBiE/oZq+x4ikl96T7EBZUgD2RlPHoARlIiTWDPRwYhpLbh0yIsLuk4N4xcubgEfqvG3mzJxcQj5pi4CMR3saXlGAoTU89lYe4WBxARdYsVoYh/i33ZM9Km4Nb6NPgUP4nCKeTnuu144Ytnrj1NMbSborr2NsVYrnuS0KQ8MwSsZETdPrd69Pd6rJtnfh3++tYZY2eJrPOyEcc33AEfCR2wsoznKgAAAABJRU5ErkJggg==";
/* **************************************************************/
/* ********************** SCRIPT ********************************/
/* **************************************************************/
var $ = unsafeWindow.$;
function gc_getPositions() {
return JSON.parse(GM_getValue('gc_PositionList'));
}
function gc_checkEachPositionJob(i) {
let gc_positions = gc_getPositions();
if (gc_positions.length == 0 || i >= gc_positions.length || GM_getValue("gc_toggleOn") != true) {
return;
}
if (!gc_positions[i].end || gc_positions[i].end === "") {
gc_goToGalaxyPosition(gc_positions[i].galaxy, gc_positions[i].system, () => {
setTimeout(function () {
gc_checkEachPositionJob(i + 1);
}, gc_secondes * 1000);
});
}
else {
gc_goToGalaxyRangePosition(gc_positions[i].galaxy, gc_positions[i].system, gc_positions[i].end, gc_positions[i].system, () => {
setTimeout(function () {
gc_checkEachPositionJob(i + 1);
}, gc_secondes * 1000);
});
}
}
function gc_checkPositionInGalaxy() {
console.log("do:", gc_getPositions());
gc_checkEachPositionJob(0);
}
/* **************************************************************/
/* ********************* STARTUP ********************************/
/* **************************************************************/
function gc_launch() {
if (GM_getValue("gc_toggleOn") == true) {
gc_checkPositionInGalaxy();
gc_reload();
}
}
function gc_reload() {
setTimeout(function () {
gc_launch();
}, gc_minutes * 60 * 1000);
}
/* **************************************************************/
/* ******************** GUI - PANEL *****************************/
/* **************************************************************/
unsafeWindow.gc_clickPanelLi = function (row) {
let id = $(row).attr('id')
console.log("delete row:", id);
gc_deletePositionFromPanel(id);
}
function gc_addPositionInPanelListView(i, position) {
$('#gcPanelList').append(
$("<li>").attr('class', 'clickable').attr('onclick', 'gc_clickPanelLi(this)').attr('id', i).append(
$('<span>').attr('class', 'tab').append(position.galaxy + " : " + position.system + (position.end ? " -> " + position.end : ""))
).append(
$('<a>').attr('class', 'tab').append(
`<img src="` + trashIcon + `" rel="` + trashIcon + `" height="15" width="15" style="margin-left:10px">`
)
)
);
}
function gc_updatePanelListView() {
if (GM_getValue('gc_PositionList')) {
let data = JSON.parse(GM_getValue('gc_PositionList'));
console.log("update:", data);
$('#gcPanelList').empty();
for (var i in data) {
gc_addPositionInPanelListView(i, data[i]);
}
}
}
function gc_savePositionFromPanel(galaxy, system, systemEnd) {
let positions = [];
if (!galaxy || galaxy == "" || !system || system == "") {
return;
}
if (GM_getValue('gc_PositionList')) {
positions = JSON.parse(GM_getValue('gc_PositionList'));
}
for (let i in positions) {
if (positions[i].galaxy == galaxy && positions[i].system == system) {
return;
}
}
positions.push({
galaxy: galaxy,
system: system,
end: systemEnd
});
GM_setValue('gc_PositionList', JSON.stringify(positions));
console.log(GM_getValue('gc_PositionList'));
gc_updatePanelListView();
}
function gc_deletePositionFromPanel(id) {
if (GM_getValue('gc_PositionList')) {
let positions = JSON.parse(GM_getValue('gc_PositionList'));
console.log("delete row: ", id);
positions.splice(id, 1);
console.log("=delete");
GM_setValue('gc_PositionList', JSON.stringify(positions));
gc_updatePanelListView();
}
}
function gc_drawPanel(visible) {
if (!visible) {
$("#gcPanel").hide();
}
else {
gc_updatePanelListView();
$("#gcPanel").show();
}
}
$("body").append(`
<div id="gcPanel" style="display: none;">
<form>
<h3 id="gcPanelTitle">OG-GalaxyCheck Panel</h3>
<p class="mt-2">Add a position: </p>
<div class="form-group">
<input id="gc_panelGalaxyValue" class="form-control" type="number" min="1" max="9" placeholder="galaxy"/>
<input id="gc_panelSystemValue" class="form-control" type="number" min="1" max="499" placeholder="system"/>
<input id="gc_panelSystemValueEnd" class="form-control" type="number" min="1" max="499" placeholder="optional end"/>
<a id="gc_panelValueSubmit" class="form-control">
<img class="clickable" src="` + plusIcon + `" rel="` + plusIcon + `" height="15" width="15">
</a>
</div>
<p class="mt-2">Position to check: </p>
<ul id="gcPanelList">
</ul>
<button id="gcClosePanelBtn" class="mt-2" type="button">Close</button>
</form>
</div>
`);
$("#gc_panelValueSubmit").click(function () {
gc_savePositionFromPanel($("#gc_panelGalaxyValue").val(), $("#gc_panelSystemValue").val(), $("#gc_panelSystemValueEnd").val());
});
$("#gcClosePanelBtn").click(function () {
gc_drawPanel(false);
});
/* **************************************************************/
/* ******************** GUI - MENU ******************************/
/* **************************************************************/
unsafeWindow.gc_handleClick = function (cb) {
GM_setValue('gc_toggleOn', cb.checked);
if (cb.checked == true) {
gc_launch();
}
}
if (/component=galaxy/.test(location.href)) {
var aff_option = `
<span class="menu_icon">
<label class="tooltipRight js_hideTipOnMobile sa-switch">
<input id="cbActiveGC" type="checkbox" onclick="gc_handleClick(this);">
<span class="sa-slider round"></span>
</label>
</span>
<a id="drawOptionGC" class="menubutton" href="#" accesskey="" target="_self">
<span class="textlabel">OG-GalaxyCheck</span></a>`;
var tableau = document.createElement("li");
tableau.innerHTML = aff_option;
tableau.className += "custom-option";
tableau.id = 'option-GalaxyCheck';
document.getElementById('menuTable').appendChild(tableau);
let isToggle = GM_getValue("gc_roggleOn");
$("#cbActiveGC").prop('checked', isToggle ? isToggle : false);
document.getElementById('drawOptionGC').addEventListener("click", function (event) {
gc_drawPanel($("#gcPanel").is(":hidden"));
}, true);
if (isToggle) {
gc_launch();
}
}
/* **************************************************************/
/* ************************ CSS *********************************/
/* **************************************************************/
GM_addStyle(`
/*** CUSTOM ***/
#gcPanel {
position: fixed;
top: 50%;
left: 2%;
width: 300px;
padding: 10px;
background: rgba(51, 102, 153, 0.9);
border: 2px black;
border-radius: 1ex;
z-index: 777;
}
#gcPanelList{
overflow-y: scroll;
height: 150px;
margin-bottom: 10px;
}
/*** THEME ***/
#menuTable > .custom-option {
margin-top: 10px !important;
margin-bottom: 10px !important;
}
#menuTable > .custom-option ~ .custom-option {
margin-top: -10px !important;
margin-bottom: 10px !important;
}
.custom-option a span {
color: #68a2ff !important;
}
.clickable {
cursor: pointer;
}
/*** TOGGLE SWITCH ***/
.sa-switch {
position: relative;
display: inline-block;
width: 30px;
height: 17px;
margin-top: 5px;
}
.sa-switch input {
opacity: 0;
width: 0;
height: 0;
}
.sa-slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ff4949;
-webkit-transition: .4s;
transition: .4s;
}
.sa-slider:before {
position: absolute;
content: "";
height: 13px;
width: 13px;
left: 2px;
bottom: 2px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .sa-slider {
background-color: #0664b0;
}
input:focus + .sa-slider {
box-shadow: 0 0 1px #0664b0;
}
input:checked + .sa-slider:before {
-webkit-transform: translateX(13px);
-ms-transform: translateX(13px);
transform: translateX(13px);
}
.sa-slider.round {
border-radius: 17px;
}
.sa-slider.round:before {
border-radius: 50%;
}
#gc_panelGalaxyValue {
width: 60px;
}
#gc_panelSystemValueEnd {
width: 90px;
}
.mt-2 {
margin-top: 10px;
}
`);
})();