Timer, reminder, and counter for random events (modified from npc timer)
// ==UserScript==
// @name Grundos.cafe - RE Timer w Toggle
// @namespace https://greasyfork.org/users/748951
// @version v2.4
// @description Timer, reminder, and counter for random events (modified from npc timer)
// @author ben (mushroom), exarch, alexa, dani (Mousekat), zelle
// @match https://grundos.cafe/*
// @match https://www.grundos.cafe/*
// @exclude https://www.grundos.cafe/userlookup/*
// @exclude https://www.grundos.cafe/petlookup/?pet_name=*
// @noframes
// @grant none
// @run-at document-end
// ==/UserScript==
/* globals $ */
//change this to you main pets name, capitalization is important
var petname = "Sprocket";
//change icons here
var petnameicon = "🐺";
var quickstockicon = "✨";
var SDBicon = "🎁";
var REicon = "<button style = 'background-color:transparent; border:none;' id='view'>❓</button>";
//to change the location chage the values for top and left below
//code
var link ="<a href='/setactivepet/?pet_name=" + petname + "'>" + petnameicon +
"</a> <a href='/quickstock/'>" + quickstockicon +
"</a> <a href='/safetydeposit/'>" + SDBicon +
"</a>" + REicon;
if (document.getElementById("userinfo")) {
var PPNContainer = document.createElement("div");
PPNContainer.id = "PPNContainer";
document.querySelector("#aio_sidebar > div:first-child").prepend(PPNContainer);
PPNContainer.innerHTML ="<p style='font-size: 13px'>" + link + "</style>";
PPNContainer.style = `
background:transparent;
color:#00000;
text-align:center;
width: 100%;
margin: 0px;
height: 20px;
`;
}
//Storgage
var storage;
localStorage.getItem("BENPETSRElogger==") != null ? storage = JSON.parse(localStorage.getItem("BENPETSRElogger==")) : storage = {re_count: 0, rf_count: 0, re_time: "N/A", all_re: ["Random Events log started. New REs will appear above this notice."]};
//Change Hex Codes to Change Colors
var dontRefresh = '#E0D4FC';
var soon = '#D4DDFC';
var sooner = '#D4F1FC';
var refresh = '#D4FCE0';
//Triggers
var page_html = document.body.innerHTML;
storage.rf_count++;
localStorage.setItem("BENPETSRElogger==", JSON.stringify(storage));
console.log(storage.rf_count + " refreshes total!");
const randomEvent = document.querySelector(".re_text")
if (randomEvent) { // if there is an re on the page
randomEvent.innerText // do something with it
console.log("Something has happened!");
storage.re_count++;
console.log(storage.re_count + " re's total!");
storage.re_time = new Date().getTime();
var humanReadableTime = new Date(storage.re_time).toLocaleString([], {timeZone: 'America/Vancouver', timeStyle: 'short'}); //display the epoch time as a string a human can read
console.log("Last re at " + storage.re_time);
storage.all_re.unshift("<b>" + humanReadableTime + "</b>:" + document.querySelector(".re_text").innerText);
localStorage.setItem("BENPETSRElogger==", JSON.stringify(storage));
}
//Containers
var timerContainer = document.createElement("div");
timerContainer.id = "timerContainer";
var reLog = document.createElement("div");
reLog.id = "reLog";
// When on any page with Neopets sidebar, add sidebar modules
if (document.getElementById("userinfo")) {
document.querySelector("#aio_sidebar").append(timerContainer);
document.body.appendChild(reLog);
}
//Clear Button
window.reset = function() {
storage.re_count = 0;
storage.all_re = ["---<br>Random Events log started. New REs will appear above this notice."];
localStorage.setItem("BENPETSRElogger==", JSON.stringify(storage));
};
//Refresh Button
window.refresh = function() {
window.location = "https://www.grundos.cafe/donations/"; //<--- this one
};
//toggle the reLog
function toggleLog() {
var x = document.getElementById("reLog");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
// Choose one button, replace the one above (url can be changed)
//same tab url - window.location = "https://neopetsclassic.com/donations/"
//same tab relaod - location.reload(false);
//new tab url - window.open('https://neopetsclassic.com/donations/', '_blank');
//Random Event log
reLog.innerHTML = "<p style='font-size: 13px; color:#666;'>" + storage.all_re.join('<br>') + "</font>";
//Styling
var TimerStyle1 = "width:auto;padding:5px;height:100px;color:#121212;font-size:10px;border-radius:25px;text-transform: lowercase;letter-spacing: 1px;z-index:0;background:";
var TimerStyle2 = ";padding-top:10px;padding-bottom:6px;text-align:center;"
var InnerHTML1 = "</style><center><button style = 'color:#666;cursor: pointer;border:0px;border-radius:25px;width:50px;' onclick='refresh()' id='refresh'><font size=1>Refresh</font></button></center><br>";
var InnerHTML2 = "<br><br><center><button style = 'color:#666;cursor: pointer;border:0px;border-radius:25px;width:70px;' onclick='reset()' id='clear'><font size=1>Clear Log</i></font></center></button>";
//Repeating---------------------------------------------------------------------------S:-checkTime
function checkTime() {
//Time Variables
var lastRE = storage.re_time; // get last RE time in epoch time
var timeNow = new Date().getTime(); // get time now in epoch time
var timeSince = (timeNow - lastRE) / 60000; // convert milliseconds to minutes
timeSince = Math.round(timeSince); // round the minutes
var humanTime = new Date(lastRE).toLocaleString(); //display the epoch time as a string a human can read
var timeUntil = (8 - timeSince);
var timeOver = (timeSince - 8);
//Conditionals
if (timeSince > 60) {
timerContainer.style = TimerStyle1 + refresh + TimerStyle2;
timerContainer.innerHTML = InnerHTML1 + "Last RE: " + timeSince + "m<br><br>Tally: " + storage.re_count + InnerHTML2;
}
else if(timeSince >= 6) {
timerContainer.style = TimerStyle1 + refresh + TimerStyle2;
timerContainer.innerHTML = InnerHTML1 + "Last RE: " + timeSince + "m<br><br>Tally: " + storage.re_count + InnerHTML2;
}
else if(timeSince == 5) {
timerContainer.style = TimerStyle1 + sooner + TimerStyle2;
timerContainer.innerHTML = InnerHTML1 + "Last RE: " + timeSince + "m<br><br>Tally: " + storage.re_count + InnerHTML2;
}
else if(timeSince == 4) {
timerContainer.style = TimerStyle1 + soon + TimerStyle2;
timerContainer.innerHTML = InnerHTML1 + "Last RE: " + timeSince + "m<br><br>Tally: " + storage.re_count + InnerHTML2;
}
else if(timeSince == 3) {
timerContainer.style = TimerStyle1 + soon + TimerStyle2;
timerContainer.innerHTML = InnerHTML1 + "Last RE: " + timeSince + "m<br><br>Tally: " + storage.re_count + InnerHTML2;
}
else {
timerContainer.style = TimerStyle1 + dontRefresh + TimerStyle2;
timerContainer.innerHTML = InnerHTML1 + "Last RE: " + timeSince + "m<br><br>Tally: " + storage.re_count + InnerHTML2;
}
document.querySelector("#view").addEventListener("click", toggleLog);
}
//Append CSS to the page
let customCSS = `
#TimerContainer {
display: flex;
align-content: right;
justify-content: center;
flex-direction: column;
padding: 0px;
}
#reLog {
display: none;
width: 950px;
height: 300px;
overflow: auto;
position: fixed;
bottom: 0px;
left: 0px;
background-color: #D4DDFC;
border: 2px solid #DECAF5;
padding: 0px 10px;
z-index: 1;
}
#view {
cursor: pointer;
}
#refresh, #clear {
background-color:rgb(255,255,255,0.5);
}
#refresh:hover, #clear:hover {
background-color: rgb(255,255,255,1);
}
`;
$("<style>").prop("type", "text/css").html(customCSS).appendTo("head");
//(Repeating)---------------------------------------------------------------------------E:-checkTime
(function(){
"use strict";
//first check
checkTime();
//refresh every 1 seconds
setInterval(checkTime, 1000);
})();