您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Live countdown to next EP
// ==UserScript== // @name Quarantine EP Counter // @namespace tech.myip.jess.q2019counter // @version 1.0.5 // @description Live countdown to next EP // @author J. Jones // @match http://play.quarantine2019.com/game // @grant GM_setValue // @grant GM_getValue // @require https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js // ==/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 > 3600) 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); var nextclock = new Date(Math.floor(Date.now()) + (nexttimer * 1000)); $("#doc_float_nextep").attr("title", "Next @ " + nextclock.toLocaleTimeString()); } if (ep_c > 50) ep_c = 50; if (ep_c > 0 && ep <= 0 && reload_mode) document.location.reload(); $("#doc_float_epcount").text(ep_c); unsafeWindow.doktorj = {"ep":ep, "epc":ep_c, "next":nexttimer, "one":onetimer, "full":fulltimer}; } var reload_mode = GM_getValue("reloadmode", 0); var expanded = GM_getValue("expanded", 1); var energyrow = $("#left tr.boxbody").has(":contains('Energy')").find("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\">\n \ div.doc_float { \ width: 100%; \ padding: 2px 5px; \ color: #fff; \ }\n \ span.doc_head { \ font-weight: bold; \ width: 75px; \ text-align: left; \ float: left; \ }\n \ div.doc_button_on, div.doc_button_off { \ position: absolute; \ z-index: 100001; \ top: 2px; \ right: 2px; \ width: 14px; \ height: 14px; \ cursor: pointer; \ }\n \ div.doc_button_on { \ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAN5JREFUeNqc0jEKwjAUBuCkWoR6BEdFdw/gqmfoBbyDk7T0Fm4uLm5uXqYUbIcO2kVw0Pg/+CuxpAotfKWk788Lj2hjjOryeEppZfEhhgoM3SCB2VetNKQR5CCHKGFPV64lVu3nQ0PBgtAuoAUErmDE0NIRcpLXBF48ZsDubYEUznUwZbcHHMFrCY1Zd5d5yMIanlyctoRkswM3l7qs/rGDy48jyvGHHKA0mds/en8GsmK3yJ6qGMAJNo5QyFBRD695AYzjApRcy1mjmkHRhy1U1ibyHYNv1+qul/wtwAD4im1sLqOpkgAAAABJRU5ErkJggg=='); \ }\n \ div.doc_button_off { \ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMhJREFUeNpi/P//PwM1ACsQNwPxRyD+D8UfgLgViNVxaZIG4mdQxa+BeDEUv4eKtWLTxAjEz6EKorDI2wExFzaNTVBN7qT4SwWI/0GdyQW1HRd4AMS7kTkg234C8VogZsKhSRmq7hs0PBjSgfgvVFANhyaQYSughoPUPYJJzAHip3icCHI+NzQAQZYYIUswEwgLD6htTegS7EC8BYirsGiKgmp6ji3wpJFSC3ICeA0VewYLFGyABYgb0JLcR2gyZEXxNLmJHCDAAHqzOoGrq8keAAAAAElFTkSuQmCC'); \ }\n \ .ui-tabs.ui-tabs-vertical { \ padding: 0; \ width: 160px; \ }\n \ .ui-tabs.ui-tabs-vertical .ui-widget-header { \ border: none; \ }\n \ .ui-tabs.ui-tabs-vertical .ui-tabs-nav { \ float: left; \ width: 1.2em; \ border-radius: 4px 0 0 4px; \ z-index: 20009; \ }\n \ .ui-tabs.ui-tabs-vertical .ui-tabs-nav li { \ clear: left; \ width: 100%; \ margin: 15px 0; \ border: 1px solid #666; \ border-width: 1px 0 1px 1px; \ border-radius: 4px 0 0 4px; \ background: #333; \ right: -2px; \ z-index: 20010; \ }\n \ .ui-tabs.ui-tabs-vertical .ui-tabs-nav li a { \ display: block; \ width: 100%; \ padding: 0.3em 0.3em; \ font-weight: bold; \ font-size: larger; \ text-decoration: none; \ }\n \ .ui-tabs.ui-tabs-vertical .ui-tabs-nav li a:hover { \ cursor: pointer; \ }\n \ .ui-tabs.ui-tabs-vertical .ui-tabs-nav li.ui-tabs-active { \ margin-bottom: 0.2em; \ padding-bottom: 0; \ border-right: 1px solid #333; \ }\n \ .ui-tabs.ui-tabs-vertical .ui-tabs-panel { \ float: left; \ width: 28em; \ border-left: 1px solid #666; \ border-radius: 0; \ position: relative; \ left: -1px; \ }\n \ .slide-in { \ right: 0px; \ }\n \ .slide-out { \ right: -160px; \ }\n \ </style>").appendTo("head"); var container = $("<div id=\"doc_container\">"); container.css({"position":"fixed", "width":"175px", "height":"90px", "bottom":"0px", "z-index":"9000"}); if (expanded == 1) container.addClass("slide-in"); else container.addClass("slide-out"); var floater = $("<div id=\"doc_float\">"); floater.css({"position":"absolute", "width":"160px", "height":"90px", "bottom":"0px", "right":"0px", "border":"1px solid #666", "background-color":"#333", "z-index":"-1"}); floater.appendTo(container); var closetab_ul = $("<ul>"); var closetab_li = $("<li>"); var closetab_a = $("<a href=\"#doc_float\">»</a>"); closetab_a.appendTo(closetab_li); closetab_li.appendTo(closetab_ul); closetab_ul.css({"position":"absolute", "top":"2px", "left":"-14px"}); closetab_ul.appendTo(floater); closetab_a.click(function() { if (expanded == 1) { container.switchClass("slide-in","slide-out",1000,"easeInOutSine"); expanded = 0; GM_setValue("expanded", 0); closetab_a.html("«"); } else { container.switchClass("slide-out","slide-in",1000,"easeInOutSine"); expanded = 1; GM_setValue("expanded", 1); closetab_a.html("»"); } }); floater.tabs().addClass('ui-tabs-vertical ui-helper-clearfix'); 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 now = Math.floor(Date.now() / 1000); var nextclock = new Date((now + nexttimer) * 1000); 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\" title=\"Next @ " + nextclock.toLocaleTimeString() + "\">" + prettyTime(nexttimer) + "</span>").appendTo(next); var oneclock = new Date((now + onetimer) * 1000); var one = $("<div id=\"doc_float_one\" class=\"doc_float\">"); $("<span class=\"doc_head\">>0 EP In:</span>").appendTo(one); $("<span id=\"doc_float_oneep\" title=\"1 EP @ " + oneclock.toLocaleTimeString() + "\">" + prettyTime(onetimer) + "</span>").appendTo(one); var fullclock = new Date((now + fulltimer) * 1000); 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\" title=\"Full @ " + fullclock.toLocaleTimeString() + "\">" + prettyTime(fulltimer) + "</span>").appendTo(full); var auto = $("<div id=\"doc_float_auto\" class=\"doc_button_off\" title=\"Auto-reload DISABLED\"></div>"); auto.click(function() { if (reload_mode) { reload_mode = 0; $("#doc_float_auto").attr("class","doc_button_off"); $("#doc_float_auto").attr("title","Auto-reload DISABLED"); GM_setValue("reloadmode", 0) } else { reload_mode = 1; $("#doc_float_auto").attr("class","doc_button_on"); $("#doc_float_auto").attr("title","Auto-reload ENABLED"); GM_setValue("reloadmode", 1) } }); if (reload_mode == 1) { auto.attr("class", "doc_button_on"); $("#doc_float_auto").attr("title","Auto-reload ENABLED"); } 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); floater.append(auto); $("#wrapper").append(container); window.setInterval(tickCheck, 500);