Lordswm progress bars

Add progress bars to lordswm

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         Lordswm progress bars
// @namespace    https://github.com/spapanik
// @version      0.1.3
// @description  Add progress bars to lordswm
// @author       spapanik
// @match        https://www.lordswm.com/home.php
// @license      LGPL-3.0-or-later
// ==/UserScript==

(function () {
  "use strict";

  const expArrays = {
    combat: [
      0, 1500, 4500, 15000, 32000, 90000, 190000, 400000, 860000, 1650000,
      3000000, 5000000, 8500000, 14500000, 25000000, 43000000, 70000000,
      108000000, 160000000, 230000000, 325000000, 500000000, 800000000,
    ],
    faction: [
      0, 20, 50, 90, 160, 280, 500, 900, 1600, 2900, 5300, 9600, 17300, 35000,
      70000,
    ],
    labourer: [
      0, 90, 180, 360, 720, 1500, 3000, 5000, 8000, 12000, 17000, 23000, 30000,
      38000, 47000, 57000, 70000, 90000, 120000,
    ],
    hunter: [
      0, 16, 60, 180, 400, 700, 1200, 2000, 3000, 4300, 6000, 8000, 10500,
      13100, 16000,
    ],
    mercenary: [
      0, 50, 120, 300, 600, 1000, 1500, 2200, 3000, 4000, 5500, 7800, 11000,
      14500, 18200, 22200,
    ],
    leader: [
      80, 180, 300, 440, 600, 780, 990, 1230, 1500, 2200, 3200, 4500, 7000,
      11000,
    ],
    watcher: [0, 60, 200, 450, 850, 1500, 2700, 4500, 7200, 10500],
    thief: [
      0, 50, 120, 240, 400, 600, 840, 1200, 2000, 3000, 4300, 6000, 8000, 10800,
      14000, 17600, 21600, 26000, 30800, 36600, 43600, 52000, 65000,
    ],
    ranger: [
      0, 100, 240, 480, 800, 1200, 1680, 2400, 4000, 6000, 8600, 12000, 16000,
      21600,
    ],
    commander: [
      0, 150, 350, 750, 1400, 2200, 3200, 4300, 5600, 7000, 8500, 10000, 11700,
      14500,
    ],
    gambler: [
      0, 10, 30, 60, 100, 150, 210, 280, 360, 450, 550, 660, 800, 1000, 1300,
      2000, 3000, 6000, 10000, 17000, 25000,
    ],
    adventurer: [0, 1600, 3600],
    smith: [0, 30, 80, 165, 310, 555, 970, 1680, 2885, 5770],
    enchanter: [0, 104, 588, 2200, 7000, 10000],
    enchanterSpecialisation: [
      0, 8, 29, 71, 155, 295, 505, 799, 1191, 1695, 6000, 12000,
    ],
  };

  const factionNames = [
    "Knight",
    "Necromancer",
    "Wizard",
    "Elf",
    "Barbarian",
    "Dark elf",
    "Demon",
    "Dwarf",
    "Tribal",
    "Pharaoh",
  ];

  const bareTerms = [
    "Hunters' guild",
    "Laborers' guild",
    "Gamblers' guild",
    "Thieves' guild",
    "Rangers' guild",
    "Mercenaries' guild",
    "Commanders' guild",
    "Watchers' guild",
    "Adventurers' guild",
    "Leaders' Guild",
    "Smiths' guild",
    "Enchanters' guild",
    "Weaponsmith",
    "Armorer",
    "Jewelcrafter",
  ];

  function getTagByText(tagName, text) {
    let tags = mainTr.getElementsByTagName(tagName);
    for (let tag of tags) {
      if (tag.textContent.includes(text)) {
        return tag;
      }
    }
  }

  function getActiveFunctionTag() {
    for (let faction of factionNames) {
      let activeFactionTag = getTagByText("b", `${faction}`);
      if (activeFactionTag !== undefined) {
        return activeFactionTag;
      }
    }
  }

  function addPercentageBar(tag, expArray, adjustment = 1) {
    let expTag = tag.nextSibling;
    let currentLevel = adjustment + parseInt(tag.innerText.split(":")[1], 10);
    let currentExp = parseFloat(expTag.textContent.replace(/[,()]/g, ""));
    if (currentExp === 0.0) {
      return;
    }
    let previousExp = expArray[currentLevel - 1];
    let nextExp = expArray[currentLevel];
    let percentage = (currentExp - previousExp) / (nextExp - previousExp);
    tag.nextSibling.nextSibling.innerHTML += `<br/>&nbsp;&nbsp;&nbsp;<progress value="${percentage}" max="1">
         </progress>`;
  }

  function replaceWithSpan(tag, term) {
    let regex = new RegExp(`${term}: (\\d+)`);
    tag.innerHTML = tag.innerHTML.replace(regex, `<span>${term}: $1</span>`);
  }

  a();
  let mainTd = document.getElementsByClassName("wbwhite")[0];
  let mainTr = mainTd.getElementsByTagName("tr")[1];
  let rightTable = mainTr.children[1];

  let hunterLevel = rightTable.getElementsByTagName("a")[0].textContent;
  rightTable.removeChild(rightTable.children[22]);
  rightTable.innerHTML = rightTable.innerHTML.replace(
    "Hunters' guild:",
    `Hunters' guild: ${hunterLevel}`,
  );
  let enchantersGuild = document.getElementById("home_2");
  enchantersGuild.removeChild(enchantersGuild.children[1]);
  enchantersGuild.children[0].nextSibling.remove();
  enchantersGuild.children[0].nextSibling.remove();

  for (let term of bareTerms) {
    replaceWithSpan(rightTable, term);
  }

  addPercentageBar(getActiveFunctionTag(), expArrays.faction);
  addPercentageBar(getTagByText("b", "Combat level"), expArrays.combat, 0);
  addPercentageBar(getTagByText("span", "Hunters' guild"), expArrays.hunter);
  addPercentageBar(getTagByText("span", "Thieves' guild"), expArrays.thief);
  addPercentageBar(getTagByText("span", "Rangers' guild"), expArrays.ranger);
  addPercentageBar(getTagByText("span", "Smiths' guild"), expArrays.smith);
  addPercentageBar(getTagByText("span", "Watchers' guild"), expArrays.watcher);
  addPercentageBar(getTagByText("span", "Laborers' guild"), expArrays.labourer);
  addPercentageBar(getTagByText("span", "Gamblers' guild"), expArrays.gambler);
  addPercentageBar(
    getTagByText("span", "Mercenaries' guild"),
    expArrays.mercenary,
  );
  addPercentageBar(
    getTagByText("span", "Commanders' guild"),
    expArrays.commander,
  );
  addPercentageBar(
    getTagByText("span", "Adventurers' guild"),
    expArrays.adventurer,
  );
  addPercentageBar(getTagByText("span", "Leaders' Guild"), expArrays.leader);
  addPercentageBar(
    getTagByText("span", "Enchanters' guild"),
    expArrays.enchanter,
  );
  addPercentageBar(
    getTagByText("span", "Weaponsmith"),
    expArrays.enchanterSpecialisation,
  );
  addPercentageBar(
    getTagByText("span", "Armorer"),
    expArrays.enchanterSpecialisation,
  );
  addPercentageBar(
    getTagByText("span", "Jewelcrafter"),
    expArrays.enchanterSpecialisation,
  );
})();