Quarantine EP Counter

Live countdown to next EP

Verze ze dne 06. 02. 2016. Zobrazit nejnovější verzi.

// ==UserScript==
// @name         Quarantine EP Counter
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  Live countdown to next EP
// @author       You
// @match        http://play.quarantine2019.com/game
// @grant        none
// ==/UserScript==
/* jshint -W097 */
'use strict';

// Your code here...

var START_STAMP = Math.floor(Date.now() / 1000);
var reset = 432; // seconds per EP

function prettyTime(seconds) {
    if (seconds < 0) return 0;
    if (seconds < 60) return seconds + "s";
    var remain = seconds % 60;
    var mins = Math.floor(seconds / 60);
    if (mins < 60) return mins + "m " + remain + "s";
    var hours = Math.floor(mins / 60);
    mins = mins % 60;
    return hours + "h " + mins + "m " + remain + "s";
}

function tickCheck() {
    var interval = Math.floor(Date.now() / 1000) - START_STAMP;
    if (interval > 14400) document.location.reload();
    var ep_c = ep;
    var nexttimer_c = nexttimer - interval;
    while(nexttimer_c < 0) nexttimer_c += reset;
    $("#doc_float_nextep").text(prettyTime(nexttimer_c));
    var onetimer_c = onetimer - interval;
    if (onetimer_c < 0) {
        one.css("display","none");
        titlebar.css("background-color","#827839");
    } else { $("#doc_float_oneep").text(prettyTime(onetimer_c)); }
    var fulltimer_c = fulltimer - interval;
    if (fulltimer_c < 0) {
        next.css("display","none");
        full.css("display","none");
        floater.css("height","45px");
        titlebar.css("background-color","#6F993E");
        titlebar.text("EP is full");
    } else { $("#doc_float_fullep").text(prettyTime(fulltimer_c)); }
    if (interval > nexttimer) {
        ep_c++; interval -= nexttimer;
        ep_c += Math.floor(interval / reset);
    }
    if (ep_c > 50) ep_c = 50;
    if (ep_c > 0 && ep <= 0) document.location.reload();
    $("#doc_float_epcount").text(ep_c);
}

var energyrow = $("#left tr.boxbody:last tbody > *").has(":contains('Energy')");
var epcount = energyrow.children("td").has("div:contains(' / 50')").children("div").filter(function(){ return this.nodeType == 1; }).children(":contains(' / 50')").get(0).innerText;
var nextep = energyrow.children("td").find(".tooltip").children("b:contains('Next EP')").get(0).innerText;

var re = new RegExp("(-?\\d+) / 50");
var ep = parseInt(re.exec(epcount)[1]);
var remainep = 49 - ep;

re = new RegExp("Next EP:\\s+([0-7]+m)? ?([0-9]+s)");
var nexttime = re.exec(nextep);
re = new RegExp("(\\d+)[ms]");
var nextmin = (typeof nexttime[1] != 'undefined') ? parseInt(re.exec(nexttime[1])[1]) : 0;
var nextsec = (typeof nexttime[2] != 'undefined') ? parseInt(re.exec(nexttime[2])[1]) : 0;

var nexttimer = nextsec + (nextmin * 60);
var fulltimer = nexttimer + (remainep * reset);
var onetimer = nexttimer;
if (ep < 0) onetimer += ((0 - ep) * reset);

$("<style type='text/css'> \
div.doc_float { \
  width: 100%; \
  padding: 2px 5px; \
  color: #fff; \
} \
span.doc_head { \
  font-weight: bold; \
  width: 75px; \
  text-align: left; \
  float: left; \
} \
</style>").appendTo("head");

var floater = $("<div id=\"doc_float\">");
floater.css({"position":"fixed", "width":"160px", "height":"90px", "bottom":"0px", "right":"0px", "border":"1px solid #666", "background-color":"#333", "z-index":"100000", "overflow":"hidden"});

var titlebar = $("<div id=\"doc_float_title\" class=\"doc_float\">");
titlebar.css({"background-color":"#600", "font-weight":"bold", "text-align":"center"});
titlebar.text("EP Counter");

var current = $("<div id=\"doc_float_current\" class=\"doc_float\">");
$("<span class=\"doc_head\">Current EP:</span>").appendTo(current);
$("<span id=\"doc_float_epcount\">" + ep + "</span>").appendTo(current);

var next = $("<div id=\"doc_float_next\" class=\"doc_float\">");
$("<span class=\"doc_head\">Next EP In:</span>").appendTo(next);
$("<span id=\"doc_float_nextep\">" + prettyTime(nexttimer) + "</span>").appendTo(next);

var one = $("<div id=\"doc_float_one\" class=\"doc_float\">");
$("<span class=\"doc_head\">&gt;0 EP In:</span>").appendTo(one);
$("<span id=\"doc_float_oneep\">" + prettyTime(onetimer) + "</span>").appendTo(one);
    
var full = $("<div id=\"doc_float_full\" class=\"doc_float\">");
$("<span class=\"doc_head\">Full EP In:</span>").appendTo(full);
$("<span id=\"doc_float_fullep\">" + prettyTime(fulltimer) + "</span>").appendTo(full);

if (ep > 0) {
    one.css("display","none");
    titlebar.css("background-color","#827839");
}
if (ep == 50) {
    next.css("display","none");
    full.css("display","none");
    floater.css("height","45px");
    titlebar.css("background-color","#6F993E");
    titlebar.text("EP is full");
}

floater.append(titlebar);
floater.append(current);
floater.append(next);
floater.append(one);
floater.append(full);

$("#wrapper").append(floater);

window.setInterval(tickCheck, 500);