avatar
Untitled

Guest 74 22nd Apr, 2024

MARKUP 8.15 KB
                                           
                         // ==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
Recent Pastes
Ta strona używa plików cookie w celu usprawnienia i ułatwienia dostępu do serwisu oraz prowadzenia danych statystycznych. Dalsze korzystanie z tej witryny oznacza akceptację tego stanu rzeczy.
Wykorzystywanie plików Cookie
Jak wyłączyć cookies?
ROZUMIEM