// ==UserScript==
// @name hornex.PRO | Randomize rarity colours, RAINBOW MODE, hide HUD and Performance Boost
// @namespace http://tampermonkey.net/
// @version 1.3
// @description Hides HUD on hotkey press, RAINBOW MODE for petal deck and zone infos, deletes outdated messages, randomize petal background colours and more!
// @author aragami070
// @match https://hornex.pro/*
// @run-at document-start
// @icon https://hornex.pro/favicon.png
// @license MIT
// @grant none
// ==/UserScript==
const scriptVersion = "1.3"
const maxMessages = 24; // edit this if you want to allow more or less messages
const randomizer = true; // set this to false if you want to disable press P to randomize petal colours
const enableRainbow = true; // same as the above
console.log("Waiting...");
(function() {
'use strict';
window.onload = async () => {
await new Promise(resolve => setTimeout(resolve, 1200)); //for EVERYTHING to load
console.log('Starting to load script...')
console.log('NOTE: Rarity background colour randomizer and rainbow mode can be disabled by changing randomizer = true and enableRainbow = true to false at the top of the script!')
console.log("Don't see bottom right user count infos? They are cloned from debug info. Enable debug info by pressing L and reload page should fix it.")
const debugInfo = document.querySelector('.debug-info');
const clone = debugInfo.cloneNode();
clone.setAttribute('stroke', `User Count / AS1: Unknown / AS2: Unknown / EU1: Unknown / EU2: Unknown / US1: Unknown / US2: Unknown / Total: Unknown`);
clone.style.bottom = `12px`;
clone.classList.add('user-count');
debugInfo.parentElement.insertBefore(clone, debugInfo);
const clone2 = debugInfo.cloneNode();
clone2.setAttribute('stroke', `SSHC ${scriptVersion} | ` + getActiveServer());
clone2.style.bottom = `21.5px`;
clone2.classList.add('server-info');
debugInfo.parentElement.insertBefore(clone2, debugInfo);
const petalRows = document.querySelector('.petal-rows');
const minimap = document.querySelector('.minimap');
const chatInput = document.querySelector('.chat-input');
const scoreboard = document.querySelector('.scoreboard');
const input = document.querySelector('.chat-input');
const inputName = document.querySelector('.grid .nickname')
updateUserCount()
let chatFocus = false;
let nameFocus = false;
input.addEventListener('focus', () => {
chatFocus=true;
});
inputName.addEventListener('focus', () => {
nameFocus=true;
});
input.addEventListener('blur', () => {
chatFocus=false
})
inputName.addEventListener('blur', () => {
nameFocus=false;
});
const susStyle = document.querySelector('.desktop style')
const rules = susStyle.sheet.cssRules;
const tier0Rule = findRule(rules, /\.tier-0/);
const tier1Rule = findRule(rules, /\.tier-1/);
const tier2Rule = findRule(rules, /\.tier-2/);
const tier3Rule = findRule(rules, /\.tier-3/);
const tier4Rule = findRule(rules, /\.tier-4/);
const tier5Rule = findRule(rules, /\.tier-5/);
const tier6Rule = findRule(rules, /\.tier-6/);
const tier7Rule = findRule(rules, /\.tier-7/);
const tier8Rule = findRule(rules, /\.tier-8/);
const uwu = [tier0Rule,tier1Rule,tier2Rule,tier3Rule,tier4Rule,tier5Rule,tier6Rule,tier7Rule,tier8Rule]
const rainbow=document.createElement('style');
rainbow.innerHTML=`
@keyframes rainbow{
from {
filter: hue-rotate(0deg);
}
to {
filter: hue-rotate(360deg);
}
}
.rainbow .petal-rows .petal:not(.empty), .rainbow .zone .petal {
animation: rainbow 3s infinite alternate linear !important;
}
`;
document.body.appendChild(rainbow);
document.body.classList.add('rainbow');
document.body.classList.toggle('rainbow');
const style=document.createElement('style');
style.innerHTML=`
.hide-zone .zone {
display: none !important;
}
`;
document.body.appendChild(style);
const urmom = document.createElement('style')
urmom.innerHTML=`
.hidden {
display: none !important;
}
`;
document.body.appendChild(urmom)
document.addEventListener('keydown', event => {
if (chatFocus===false && nameFocus===false) {
if (event.key === 'h') { // 72
toggleElem(petalRows)
}
if (event.key === 'b') { // 66
toggleElem(minimap)
}
if (event.key === 'k') { // 75
toggleHideChat(chatInput)
}
if (event.key === 'j') { // 74
toggleElem(scoreboard)
}
if (event.key === 'n') {
document.body.classList.toggle('hide-zone')
}
if (event.key === 'p' && randomizer === true) {
for (let i=0; i<uwu.length; i++) {
rgbRandomizer(uwu[i], 'background-color', i)
}
}
if (event.key === 'o' && enableRainbow === true) {
document.body.classList.toggle('rainbow');
}
if (event.key === 'y') {
toggleElem(scoreboard)
toggleElem(minimap)
toggleElem(petalRows)
document.body.classList.toggle('hide-zone')
}
}
});
document.addEventListener('DOMNodeInserted', (event) => {
if (event.target.classList.contains('chat-item')) {
deleteOldMessages();
}
});
document.addEventListener('click', event => {
const target = event.target;
if (target.classList.contains('btn')) {
console.log("update server info")
updateServerInfo()
}
});
}; //window.onload ends
})(); //function ends
const deleteOldMessages = () => {
const messages = document.querySelectorAll('.chat-item');
if (messages.length > maxMessages) {
for (let i = 0; i < messages.length - maxMessages; i++) {
messages[i].remove();
}}
};
function toggleElem(e) {
e.classList.toggle('hidden');
}
function toggleHideChat(sus) {
const hideChatCB = document.querySelector('.hide-chat-cb');
hideChatCB.checked = !hideChatCB.checked;
sus.classList.toggle('hide-chat');
}
function getActiveServer() {
const activeButton = document.querySelector('.server-area .btn.active');
if (activeButton) {
const serverName = activeButton.querySelector('span:first-child').getAttribute('stroke');
return serverName;
}
return "sus";
}
function updateServerInfo() {
const activeButton = document.querySelector('.server-area .btn.active');
const server = activeButton ? activeButton.querySelector('span:first-child').getAttribute('stroke') : 'Unknown';
const serverInfo = document.querySelector('.server-info');
serverInfo.setAttribute('stroke', `SSHC ${scriptVersion} | ` + server);
};
function findRule(rules, selector) {
for (let i = 0; i < rules.length; i++) {
const rule = rules[i];
if (rule.selectorText.match(selector)) {
return rule;
}
}
return null;
}
function rgbRandomizer(rule, property, i) {
if (rule) {
const myVariable = Math.round(0-(i*2.5))
const sys = `hsl(${Math.random()*360}, ${95+myVariable}%, ${75+myVariable}%)`
rule.style[property] = sys;
}
}
function updateUserCount() {
fetch('https://stats.hornex.pro/api/userCount')
.then(res => res.json())
.then(data => {
const total = data.eu_ffa1 + data.eu_ffa2 + data.us_ffa1 + data.us_ffa2 + data.as_ffa1 + data.as_ffa2
const ucEl = document.querySelector('.debug-info.user-count')
ucEl.setAttribute('stroke', 'User Count / AS1: ' + data.as_ffa1 + ' / AS2: ' + data.as_ffa2 + ' / EU1: ' + data.eu_ffa1 + ' / EU2: ' + data.eu_ffa2 + ' / US1: ' + data.us_ffa1 + ' / US2: ' + data.us_ffa2 + ' / Total: ' + total)
});
}
// Updates each 10 seconds
setInterval(() => {
updateUserCount()
}, 10000);