Displays crafting timers in Summary menu. Settings available in console via window.et_summaryTimer
当前为
// ==UserScript==
// @name ET Summary Timer
// @namespace http://tampermonkey.net/
// @version 0.4
// @description Displays crafting timers in Summary menu. Settings available in console via window.et_summaryTimer
// @author Aes Sedai
// @match http*://*.eternitytower.net/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Default settings, use window.et_summaryTimer in console to change settings
// showCrafting: BOOLEAN, default: true; if true, shows a timer for crafting in summary list
// showInscription: BOOLEAN, default: true; if true, shows a timer for inscription in summary list
// interval: INTEGER, default: 1000; time in millisecons to wait before refreshing timer
window.et_summaryTimer = {
showCrafting: true,
showInscription: true,
interval: 1000
};
if(localStorage.getItem('et_summaryTimer')) window.et_summaryTimer = Object.assign({}, window.et_summaryTimer, JSON.parse(localStorage.getItem('et_summaryTimer')));
$(window).on("beforeunload", function() {
localStorage.setItem('et_summaryTimer', JSON.stringify(window.et_summaryTimer));
});
function getTimeRemaining(endtime) {
var t = Date.parse(endtime) - Date.parse(new Date());
var seconds = Math.floor( (t/1000) % 60 );
var minutes = Math.floor( (t/1000/60) % 60 );
var hours = Math.floor( (t/(1000*60*60)) % 24 );
var days = Math.floor( t/(1000*60*60*24) );
return {
'total': t,
'days': days,
'hours': hours.toString().padStart(2, '0'),
'minutes': minutes.toString().padStart(2, '0'),
'seconds': seconds.toString().padStart(2, '0')
};
}
function formatTimeRemaining(time) {
if(time.days > 0) return time.days + ":" + time.hours + ":" + time.minutes + ":" + time.seconds;
if(time.hours > 0) return time.hours + ":" + time.minutes + ":" + time.seconds;
if(time.minutes > 0) return time.minutes + ":" + time.seconds;
if(time.seconds > 0) return "00:" + time.seconds;
}
function cleanup(summary) {
if($(summary.classSelector).length > 0) $(summary.classSelector).remove();
}
var summaries = [
{classSelector: ".crafting-timer", redis: Meteor.connection._mongo_livedata_collections.crafting.find(), rowSelector: "#content > div.d-sm-flex.flex-grow > div.hidden-lg-down > div > div:nth-of-type(1)", active: window.et_summaryTimer.showCrafting},
{classSelector: ".inscription-timer", redis: Meteor.connection._mongo_livedata_collections.inscription.find(), rowSelector: "#content > div.d-sm-flex.flex-grow > div.hidden-lg-down > div > div:nth-of-type(2)", active: window.et_summaryTimer.showInscription}
];
var interval = setInterval(function() {
summaries.forEach(function(summary) {
if(!summary.active) return;
var fetch = summary.redis.fetch();
if(fetch.length === 0) {
cleanup(summary);
return;
}
var currentlyCrafting = fetch[0].currentlyCrafting;
if (currentlyCrafting.length === 0) {
cleanup(summary);
return;
}
var firstCraft = currentlyCrafting[0];
if(!firstCraft.hasOwnProperty('endDate')) {
cleanup(summary);
return;
}
if($(summary.classSelector).length > 0) {
$(summary.classSelector).html(formatTimeRemaining(getTimeRemaining(firstCraft.endDate)) + " (" + formatTimeRemaining(getTimeRemaining(currentlyCrafting[currentlyCrafting.length - 1].endDate)) + ")");
} else if($(summary.rowSelector).length > 0) {
var row = $(summary.rowSelector);
var timeContainer = document.createElement("span");
timeContainer.className = summary.classSelector.replace('.', '');
timeContainer.style.cssText = 'padding-left: 6px;';
timeContainer.innerHTML = formatTimeRemaining(getTimeRemaining(firstCraft.endDate) + " (" + formatTimeRemaining(getTimeRemaining(currentlyCrafting[currentlyCrafting.length - 1].endDate)) + ")");
row.after(timeContainer);
}
});
}, window.et_summaryTimer.interval);
})();