Greasy Fork is available in English.
Bloxd.io HPS Counter
当前为
// ==UserScript==
// @name HPS Counter Bloxd.io
// @namespace http://tampermonkey.net/
// @version 2.0
// @description Bloxd.io HPS Counter
// @author Orazix
// @match https://bloxd.io/
// @license MIT
// @copyright 2024, Orazix (https://openuserjs.org/users/Orazix)
// ==/UserScript==
(function () {
var container = document.createElement('div');
container.style.position = 'fixed';
container.style.bottom = '10px';
container.style.left = '10px';
container.style.backgroundColor = 'transparent';
container.style.color = 'white';
container.style.padding = '5px';
container.style.fontFamily = 'Arial';
container.style.fontSize = '14px';
container.style.zIndex = '9999';
var hpsButton = document.createElement('div');
hpsButton.style.position = 'fixed';
hpsButton.style.top = '10px';
hpsButton.style.left = '33.33%';
hpsButton.style.transform = 'translateX(-50%)';
hpsButton.style.backgroundColor = 'black';
hpsButton.style.color = 'white';
hpsButton.style.padding = '5px';
hpsButton.style.fontFamily = 'Arial';
hpsButton.style.fontSize = '14px';
hpsButton.style.zIndex = '9999';
hpsButton.textContent = '';
var hpsLabel = document.createElement('span');
hpsLabel.textContent = 'HPS: ';
var hpsValue = document.createElement('span');
hpsValue.textContent = '0';
hpsButton.appendChild(hpsLabel);
hpsButton.appendChild(hpsValue);
document.body.appendChild(hpsButton);
var dphButton = document.createElement('div');
dphButton.style.position = 'fixed';
dphButton.style.top = '10px';
dphButton.style.left = '50%';
dphButton.style.transform = 'translateX(-50%)';
dphButton.style.backgroundColor = 'black';
dphButton.style.color = 'white';
dphButton.style.padding = '5px';
dphButton.style.fontFamily = 'Arial';
dphButton.style.fontSize = '14px';
dphButton.style.zIndex = '9999';
dphButton.textContent = '';
var dphLabel = document.createElement('span');
dphLabel.textContent = 'DPHPS: ';
var dphValue = document.createElement('span');
dphValue.textContent = '0';
dphButton.appendChild(dphLabel);
dphButton.appendChild(dphValue);
document.body.appendChild(dphButton);
var dpsButton = document.createElement('div');
dpsButton.style.position = 'fixed';
dpsButton.style.top = '10px';
dpsButton.style.left = '66.66%';
dpsButton.style.transform = 'translateX(-50%)';
dpsButton.style.backgroundColor = 'black';
dpsButton.style.color = 'white';
dpsButton.style.padding = '5px';
dpsButton.style.fontFamily = 'Arial';
dpsButton.style.fontSize = '14px';
dpsButton.style.zIndex = '9999';
dpsButton.textContent = '';
var dpsLabel = document.createElement('span');
dpsLabel.textContent = 'DPS: ';
var dpsValue = document.createElement('span');
dpsValue.textContent = '0';
dpsButton.appendChild(dpsLabel);
dpsButton.appendChild(dpsValue);
document.body.appendChild(dpsButton);
var damageTimes = [];
var damages = [];
var previousHealth = 100;
// Listen for the Ctrl key press
document.addEventListener('keydown', (event) => {
if (event.key === "Delete") {
const targetNode = document.getElementsByClassName('BottomScreenStatBarText SmallTextBold')[0];
// Create an observer instance linked to the callback function
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'characterData' || mutation.type === 'childList') {
let texts = targetNode.textContent;
let damage_taken = parseInt(texts.trim().split("/"));
if (previousHealth === 100 || damage_taken !== previousHealth) {
console.log(previousHealth);
console.log(damage_taken);
if (previousHealth > damage_taken) {
damages.push(previousHealth - damage_taken)
};
previousHealth = damage_taken;
countHit();
};
console.log(damages);
}
}
});
// Start observing the target node for configured mutations
observer.observe(targetNode, {
characterData: true,
childList: true,
subtree: true
});
console.log("started");
hpsButton.style.backgroundColor = "green";
dphButton.style.backgroundColor = "green";
dpsButton.style.backgroundColor = "green";
}
});
function countHit() {
var currentTime1 = new Date().getTime();
damageTimes.push(currentTime1);
updateHPS();
}
function updateHPS() {
var currentTime1 = new Date().getTime();
var oneSecondAgo1 = currentTime1 - 1000;
var count1 = 0;
var count2 = 0;
for (var i = damageTimes.length - 1; i >= 0; i--) {
if (damageTimes[i] >= oneSecondAgo1) {
count1++;
}
else {
break;
}
}
if (damageTimes[damageTimes.length - 1] - damageTimes[damageTimes.length - 2] >= 1000) {
damages = [damages[damages.length - 1]];
}
for (let e of damages) {
count2 += e;
};
hpsValue.textContent = count1;
dphValue.textContent = Math.round(count2 / (damages.length + 1))
dpsValue.textContent = count2;
if (count1 >= 6 && count1 < 8) {
hpsButton.style.backgroundColor = "orange";
}
else if (count1 >= 8) {
hpsButton.style.backgroundColor = "red";
}
else if (count1 < 6) {
hpsButton.style.backgroundColor = "green";
}
}
function resetHitCount() {
damageTimes = [];
damages = [];
updateHPS();
}
})();