Untitled
Guest 74 22nd Apr, 2024
// ==UserScript==
// @name AutoHeal
// @namespace http://tampermonkey.net/
// @version 2024-02-13
// @description try to take over the world!
// @author You
// @match https://*.margonem.pl/
// @icon https://www.google.com/s2/favicons?sz=64&domain=margonem.pl
// @grant none
// ==/UserScript==
let healLeft = 0;
let lastRemainingHP = 0;
const waitForSeconds = (time) => new Promise(resolve => setTimeout(resolve, time * 1000));
async function init() {
while(typeof Engine.hero === 'undefined') await waitForSeconds(0.1);
while(typeof Engine.hero.d.warrior_stats === 'undefined') await waitForSeconds(0.1);
window.API.addCallbackToEvent("close_battle", initAutoHeal);
var currentHP = Engine.hero.d.warrior_stats.hp;
var maxHP = Engine.hero.d.warrior_stats.maxhp;
var remainingHP = maxHP - currentHP;
lastRemainingHP = remainingHP;
calculateHpLeftToHeal()
const styleSheet = document.styleSheets[0];
const ruleName = 'fadeAndMoveUp';
const existingRule = Array.from(styleSheet.cssRules).find(rule => rule.name === ruleName);
if(!existingRule) {
const fadeAndMoveUp = `@keyframes ${ruleName} {
0% {
transform: translateY(0);
opacity: 1;
}
100% {
transform: translateY(-20px);
opacity: 0;
}
}`;
styleSheet.insertRule(fadeAndMoveUp, styleSheet.cssRules.length);
}
}
async function getItems() {
var heroLevel = Engine.hero.d.lvl;
var items = Engine.items.fetchLocationItems("g");
while(items.length == 0) {
items = Engine.items.fetchLocationItems("g");
await waitForSeconds(0.1);
}
var healPoints = []
var healFull = []
var healPercent = []
healPoints = items.filter(item => item._cachedStats.hasOwnProperty("leczy")).filter(item => item._cachedStats.leczy > 100).filter(item => !item._cachedStats.hasOwnProperty("lvl") || (item._cachedStats.hasOwnProperty("lvl") && item._cachedStats.lvl <= heroLevel)).filter(item => !item._cachedStats.hasOwnProperty("timelimit") || (item._cachedStats.hasOwnProperty("timelimit") && !item._cachedStats.timelimit.includes(","))).sort(function (a, b) {
return b._cachedStats.leczy - a._cachedStats.leczy;
});
healFull = items.filter(item => item._cachedStats.hasOwnProperty("fullheal")).filter(item => !item._cachedStats.hasOwnProperty("lvl") || (item._cachedStats.hasOwnProperty("lvl") && item._cachedStats.lvl <= heroLevel)).filter(item => !item._cachedStats.hasOwnProperty("timelimit") || (item._cachedStats.hasOwnProperty("timelimit") && !item._cachedStats.timelimit.includes(","))).sort(function (a, b) {
return a._cachedStats.fullheal - b._cachedStats.fullheal;
});
healPercent = items.filter(item => item._cachedStats.hasOwnProperty("perheal")).filter(item => item._cachedStats.perheal > 0).filter(item => !item._cachedStats.hasOwnProperty("lvl") || (item._cachedStats.hasOwnProperty("lvl") && item._cachedStats.lvl <= heroLevel)).filter(item => !item._cachedStats.hasOwnProperty("timelimit") || (item._cachedStats.hasOwnProperty("timelimit") && !item._cachedStats.timelimit.includes(","))).sort(function (a, b) {
return b._cachedStats.perheal - a._cachedStats.perheal;
});
return [healPoints, healFull, healPercent];
}
async function calculateHpLeftToHeal() {
const arrays = await getItems();
var healPoints = arrays[0];
var healFull = arrays[1];
var healPercent = arrays[2];
var maxHP = Engine.hero.d.warrior_stats.maxhp;
var i = 0;
healLeft = 0;
for(i = 0; i < healPercent.length; i++) {
if(typeof healPercent[i]._cachedStats.amount != "undefined") healLeft += Number((healPercent[i]._cachedStats.perheal / 100) * maxHP) * healPercent[i]._cachedStats.amount;
else healLeft += Number((healPercent[i]._cachedStats.perheal / 100) * maxHP);
}
for(i = 0; i < healPoints.length; i++) {
if(typeof healPoints[i]._cachedStats.amount != "undefined") healLeft += Number(healPoints[i]._cachedStats.leczy) * healPoints[i]._cachedStats.amount;
else healLeft += Number(healPoints[i]._cachedStats.leczy);
}
for(i = 0; i < healFull.length; i++) {
healLeft += Number(healFull[i]._cachedStats.fullheal);
}
}
function createLabel(id, text, width, top, position, color, textAlign, pointerEvents, textShadow, opacity = '', transition = '') {
const label = document.createElement("div");
label.innerText = text;
label.id = id;
label.style.width = width;
label.style.top = top;
label.style.position = position;
label.style.color = color;
label.style.textAlign = textAlign;
label.style.pointerEvents = pointerEvents;
label.style.textShadow = textShadow;
label.style.opacity = opacity;
label.style.transition = transition;
return label;
}
async function showDamageGot(dmgTaken) {
if(dmgTaken != 0) {
var maxHP = Engine.hero.d.warrior_stats.maxhp;
var percentLost = ((dmgTaken / maxHP) * 100).toFixed(1);
const hue = (1 - percentLost / 100) * 60;
const color = `hsl(${hue}, 100%, 50%)`;
var labelHPDmg = createLabel("autoheal-dmg-label", Engine.hero.d.warrior_stats.hp + " HP", "100%", "-42px", "absolute", "bold", "center", "none", "-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black", "0", "opacity 0.5s ease-in-out");
document.querySelector(".glass").parentElement.parentElement.append(labelHPDmg);
labelHPDmg.innerText = `-${percentLost}%`;
labelHPDmg.style.color = color;
labelHPDmg.style.opacity = '1';
labelHPDmg.style.animation = 'fadeAndMoveUp 2s linear forwards';
}
}
async function initAutoHeal() {
var currentHP = Engine.hero.d.warrior_stats.hp;
var maxHP = Engine.hero.d.warrior_stats.maxhp;
var remainingHP = maxHP - currentHP;
var propRemaining = remainingHP - lastRemainingHP;
if(propRemaining < 0) {
propRemaining = 0;
}
showDamageGot(propRemaining);
if(currentHP <= (maxHP * (100 / 100))) {
autoHeal();
}
}
async function autoHeal() {
await waitForSeconds(0.25);
var currentHP = Engine.hero.d.warrior_stats.hp;
var maxHP = Engine.hero.d.warrior_stats.maxhp;
if(currentHP == maxHP || Engine.dead) {
lastRemainingHP = 0;
return;
}
var remainingHP = maxHP - currentHP;
lastRemainingHP = remainingHP;
const arrays = await getItems();
var healPoints = arrays[0];
var healFull = arrays[1];
var healPercent = arrays[2];
var i = 0;
var amount = 0;
for(i = 0; i < healPercent.length; i++) {
amount = (healPercent[i]._cachedStats.perheal / 100) * maxHP;
if(amount <= remainingHP) {
window._g(`moveitem&st=1&id=${healPercent[i].id}`);
await waitForSeconds(0.25);
currentHP = Engine.hero.d.warrior_stats.hp;
if(currentHP <= maxHP || !Engine.dead) {
autoHeal();
}
return;
}
}
for(i = 0; i < healPoints.length; i++) {
amount = healPoints[i]._cachedStats.leczy;
if(amount <= remainingHP) {
window._g(`moveitem&st=1&id=${healPoints[i].id}`);
await waitForSeconds(0.25);
currentHP = Engine.hero.d.warrior_stats.hp;
if(currentHP <= maxHP || !Engine.dead) {
autoHeal();
}
return;
}
}
if(healFull.length > 0) {
amount = healFull[0]._cachedStats.fullheal;
window._g(`moveitem&st=1&id=${healFull[0].id}`);
await waitForSeconds(0.25);
currentHP = Engine.hero.d.warrior_stats.hp;
if(currentHP <= maxHP || !Engine.dead) {
autoHeal();
}
return;
}
}
init()
To share this paste please copy this url and send to your friends
RAW Paste Data