Free Trader

Does various things for the Pirates Glory games, see additional info.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name        Free Trader
// @namespace   passiveaggressiveboot
// @description Does various things for the Pirates Glory games, see additional info.
// @license     MIT
// @include     *s2.piratesglory.com/*
// @version     8
// ==/UserScript==
// This script comes with ABSOLUTELY NO GUARANTEE OF ANY KIND. Or cookies.
//
//
//don't run on frames or iframes
if (window.top != window.self) return;
//
window.addEventListener('load', LocalMain, false);
//
var refresh_min  =  3,
    refresh_max  =  5,
    helper_links = {
        'General Trade Report': 'http://s2.piratesglory.com/?page=treasury&action=trade_report&id=1',
        'Show Fleets Profit': 'http://s2.piratesglory.com/index.php?action=ships&sort_type=profit',
        'Hunt for new Treasure': 'http://s2.piratesglory.com/index.php?page=treasure&action=hunt',
        'List Trade Routes': 'http://s2.piratesglory.com/index.php?page=market&action=list_trade_route'
    };
var presents_page  = 'http://s2.piratesglory.com/index.php?page=profile&action=presents',
    news_page      = 'http://s2.piratesglory.com/index.php?page=news',
    presents_pages = [
        'http://s2.piratesglory.com/?page=profile&action=presents&store=present1',
        'http://s2.piratesglory.com/?page=profile&action=presents&store=present2',
        'http://s2.piratesglory.com/?page=profile&action=presents&store=present3'
    ];
//
// Notification permission request
var Notification = window.Notification || window.mozNotification || window.webkitNotification;
Notification.requestPermission(function (permission) {
    console.log('Permission to use notifications is ' + permission);
});
//
// In place editing
var editing = false;
if (document.getElementById && document.createElement) {
    var butt = document.createElement('BUTTON');
    var buttext = document.createTextNode('OK');
    butt.appendChild(buttext);
    butt.onclick = saveEdit;
}

//
function LocalMain() {
    // Refresh at random intervals
    function getRandomInt(min, max) {
        return (Math.floor(Math.random() * (max - min + 1)) + min) * 60 * 1000;
    }
    random_int = getRandomInt(refresh_min, refresh_max);
    setTimeout(function () {
        window.location.reload();
    }, random_int);
    //
    // Panel with various info.
    var panel = document.createElement('div'),
        turns = (localStorage.getItem("GM_FreeTrader_warning_turns")) ? localStorage.getItem("GM_FreeTrader_warning_turns") : 0,
        gold = (localStorage.getItem("GM_FreeTrader_warning_gold")) ? localStorage.getItem("GM_FreeTrader_warning_gold") : 0;
    panel.innerHTML = '<div style="margin: 10px; border: 2px solid #ffffff; font-size: small; background-color: #000000; color: #ffffff;' +
    'position: absolute; float: right; right:0; padding: 10px;">' +
    '<div id="controls">Additional Controls<hr></div>'+
    '<br />Console<hr>' +
    '<span id="refresh-countdown"></span><br />' +
    '<br />Warnings<hr>' +
    '<div><span>Turns: </span><span id="turns" style="display: inline-block;"><p class="sgold" style="margin: 0px;">' + turns + '</p></span></div>' +
    '<div><span>Gold: </span><span id="gold" style="display: inline-block;"><p class="sgold" style="margin: 0px;">'+gold+'</p></span></div>' +
    '</div>';
    // Creates panel
    document.body.insertBefore(panel, document.body.firstChild);
    // Add helper links to panel
    HelperLinks();
    // Activates in-place editing
    panel.onclick = catchIt;
    // Check current page for related events.
    CheckCurrentPage();
    // Initiate the refresh countdown
    RefreshCountdown(random_int);
    // Check events and notify if necessary.
    CheckEvents();
};
//
// Check current page and make background changes
function CheckCurrentPage() {
    // Check Presents Page
    if (presents_pages.indexOf(location.href) != - 1) {
        sessionStorage.setItem('GM_FreeTrader_Presents_Checked', 'false');
    }
    if (news_page == location.href) {
        sessionStorage.setItem('GM_FreeTrader_News_Checked', 'false');
    }
};
//
// Check for presents
function CheckEvents() {
    var important_events = document.getElementsByClassName('xred');
    if (important_events.length > 0) {
        for (var i in important_events) {
            if (typeof important_events[i].textContent != 'undefined') {
                var important_event = important_events[i].textContent;
                if (important_event == '(Present Available)') {
                    if (!(sessionStorage.getItem('GM_FreeTrader_Presents_Checked') == 'true')) {
                        ShowNotification('Presents available!', 'presents', presents_page);
                    };
                };
                if (important_event.search(/event/) != - 1) {
                    if (!(sessionStorage.getItem('GM_FreeTrader_News_Checked') == 'true')) {
                       ShowNotification(important_event.slice(1, important_event.length - 1), 'news', news_page);
                    };
                };
            };
        };
    };
    
    var watched_items = document.getElementsByClassName("sgold"),
        turns_limit = localStorage.getItem("GM_FreeTrader_warning_turns"),
        gold_limit = localStorage.getItem("GM_FreeTrader_warning_gold");
    for (var item in watched_items) {
        if (typeof watched_items[item].textContent != 'undefined') {
            if (watched_items[item].getAttribute("href") == "index.php?page=crs" && turns_limit) {
                if (parseInt(watched_items[item].textContent) >= parseInt(turns_limit)) {
                    if (sessionStorage.getItem('GM_FreeTrader_Turn_Limit_Checked') != 'true') {
                        ShowNotification( watched_items[item].textContent + ' turns available - limit at '+turns_limit, 'turn_limit_warning' );
                    };}
                else {
                    sessionStorage.setItem("GM_FreeTrader_Turn_Limit_Checked", "false");
                };
            };
            if (watched_items[item].getAttribute("href") == "index.php?page=treasury" && gold_limit) {
                if (parseInt(watched_items[item].textContent.replace(/\,/g,'')) >= parseInt(gold_limit)) {
                    if (sessionStorage.getItem('GM_FreeTrader_Gold_Limit_Checked') != 'true') {
                        ShowNotification( watched_items[item].textContent + ' gold available - limit at '+gold_limit, 'gold_limit_warning' );
                    };}
                else {
                    sessionStorage.setItem("GM_FreeTrader_Gold_Limit_Checked", "false");
                };
            };
        };
    }
};
//
// Countdown for refresh. Needs to be visible for now.
function RefreshCountdown(countdown_time) {
    var target_date = new Date() .getTime() + countdown_time,
    days,
    hours,
    minutes,
    seconds,
    countdown = document.getElementById('refresh-countdown');
    setInterval(function () {
        var current_date = new Date() .getTime(),
        seconds_left = (target_date - current_date) / 1000;
        minutes = parseInt(seconds_left / 60);
        seconds = parseInt(seconds_left % 60);
        countdown.innerHTML = 'Refresh in: ' + minutes + 'm, ' + seconds + 's';
    }, 480);
};
//
// Show a notification message.
function ShowNotification(message, message_tag = 'hahahaha', target_location = '#') {
    message_title = 'Pirates Glory'
    var instance = new Notification(message_title, {
        icon: 'http://s2.piratesglory.com/favicon.ico',
        tag: message_tag,
        body: message
    });
    instance.onclick = function () {
        location.href = target_location
        if (message_tag == 'presents') {
            sessionStorage.setItem('GM_FreeTrader_Presents_Checked', 'true');
        };
        if (message_tag == 'news') {
            sessionStorage.setItem('GM_FreeTrader_News_Checked', 'true');
        };
        if (message_tag == 'turn_limit_warning') {
            sessionStorage.setItem('GM_FreeTrader_Turn_Limit_Checked', 'true');
        };
        if (message_tag == 'gold_limit_warning') {
            sessionStorage.setItem('GM_FreeTrader_Gold_Limit_Checked', 'true');
        };
    };
    instance.onerror = function () {
        console.log('Cannot display notification for some reason.');
    };
    //     instance.onshow = function () {
    //         // Something to do
    //     };
    instance.onclose = function () {
    };
    return false;
};

function catchIt(e) {
    if (editing) return;
    if (!document.getElementById || !document.createElement) return;
    if (!e) var obj = window.event.srcElement;
    else var obj = e.target;
    while (obj.nodeType != 1) {
        obj = obj.parentNode;
    }
    if (obj.tagName == "INPUT" || obj.tagName == 'A') return;
    while (obj.nodeName != 'P' && obj.nodeName != 'HTML') {
        obj = obj.parentNode;
    }
    if (obj.nodeName == 'HTML') return;
    var x = obj.innerHTML;
    var y = document.createElement("INPUT");
    var z = obj.parentNode;
    y.setAttribute("type", "text")
    y.setAttribute("size", "5")
    z.insertBefore(y,obj);
    z.insertBefore(butt,obj);
    z.removeChild(obj);
    y.value = x;
    y.focus();
    editing = true;
}
function saveEdit() {
    var area = document.getElementsByTagName("INPUT")[0];
    var y = document.createElement('P');
    var z = area.parentNode;
    y.setAttribute("class", "sgold");
    y.setAttribute("style", "margin: 0px;");
    var reg = /^\d+$/;
    if (reg.test(parseInt(area.value))) {
        localStorage.setItem('GM_FreeTrader_warning_' + z.id, parseInt(area.value));
    };
    y.innerHTML = area.value;
    z.insertBefore(y,area);
    z.removeChild(area);
    z.removeChild(document.getElementsByTagName('button')[0]);
    editing = false;
}
//
// Helper Links
function HelperLinks() {
    if (helper_links.length == -1) return;
    var controls = document.getElementById("controls");
    var link_list = document.createElement("ul");
    link_list.setAttribute("id", "helper_links");
    controls.appendChild(link_list);
    for (var k in helper_links) {
        if (helper_links.hasOwnProperty(k)) {
            var list_item = document.createElement("li");
            var link = document.createElement("a");
            link.setAttribute("href", helper_links[k]);
            link.textContent = k;
            list_item.appendChild(link);
            link_list.appendChild(list_item);
        };
    };
};



// The cookie part is non-negotiable.