Melvor CB only completion log

Completion log for combat only restricted accounts

目前為 2020-06-25 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Melvor CB only completion log
// @version      1.1
// @description  Completion log for combat only restricted accounts
// @author       8992
// @match        https://*.melvoridle.com/*
// @grant        none
// @namespace    http://tampermonkey.net/
// @noframes
// ==/UserScript==

window.combatItems = [
CONSTANTS.item.Attack_Skillcape,
CONSTANTS.item.Strength_Skillcape,
CONSTANTS.item.Defence_Skillcape,
CONSTANTS.item.Hitpoints_Skillcape,
CONSTANTS.item.Ranged_Skillcape,
CONSTANTS.item.Magic_Skillcape,
CONSTANTS.item.Prayer_Skillcape,
CONSTANTS.item.Slayer_Skillcape,
CONSTANTS.item.Amulet_of_Calculated_Promotion,
CONSTANTS.item.Fire_Cape,
CONSTANTS.item.Bowstring,
CONSTANTS.item.Eight,
CONSTANTS.item.Lemon,
CONSTANTS.item.Signet_Ring_Half_B,
];
for (let i = 0; i < slayerItems.length; i++) combatItems.push(slayerItems[i]);  //slayer items from shop
for (let i = 0; i < gloveID.length; i++) combatItems.push(gloveID[i]);  //gloves from shop
for (let k = 0; k < MONSTERS.length; k++) { //all monster loot
  if (MONSTERS[k].bones !== undefined) combatItems.push(MONSTERS[k].bones);
  if (MONSTERS[k].lootTable !== undefined) {
    for (let j = 0; j < MONSTERS[k].lootTable.length; j++) {
      combatItems.push(MONSTERS[k].lootTable[j][0]);
    }
  }
}
for (let k = 0; k < combatItems.length; k++) {  //tier one upgrades
  if (items[combatItems[k]].trimmedItemID) {
    let potentialUpgrade = [];
    for (let j = 0; j < items[items[combatItems[k]].trimmedItemID].itemsRequired.length; j++) {
      if (combatItems.includes(items[items[combatItems[k]].trimmedItemID].itemsRequired[j][0])) {
        potentialUpgrade.push(true);
      } else {
        potentialUpgrade.push(false);
      }
    }
    if (!potentialUpgrade.includes(false)) combatItems.push(items[combatItems[k]].trimmedItemID);
  }
}
for (let k = 0; k < combatItems.length; k++) {  //chest loot
  if (items[combatItems[k]].dropTable !== undefined) {
    for (let j = 0; j < items[combatItems[k]].dropTable.length; j++) {
      if (itemStats[items[combatItems[k]].dropTable[j][0]].timesFound < 1) combatItems.push(items[combatItems[k]].dropTable[j][0]);
    }
  }
}
for (let k = 0; k < combatItems.length; k++) {  //tier 2 upgrades
  if (items[combatItems[k]].trimmedItemID) {
    let potentialUpgrade = [];
    for (let j = 0; j < items[items[combatItems[k]].trimmedItemID].itemsRequired.length; j++) {
      if (combatItems.includes(items[items[combatItems[k]].trimmedItemID].itemsRequired[j][0])) {
        potentialUpgrade.push(true);
      } else {
        potentialUpgrade.push(false);
      }
    }
    if (!potentialUpgrade.includes(false)) combatItems.push(items[combatItems[k]].trimmedItemID);
  }
}
combatItems = Array.from(new Set(combatItems)); //removes duplicates
combatItems.sort(function(a, b){return a-b}); //sorts smallest to largest id

window.updateCompletionLog = function() {
  let skills = 8 * 99;
  let skillsTotal =
    skillLevel[CONSTANTS.skill.Attack] +
    skillLevel[CONSTANTS.skill.Strength] +
    skillLevel[CONSTANTS.skill.Defence] +
    skillLevel[CONSTANTS.skill.Hitpoints] +
    skillLevel[CONSTANTS.skill.Ranged] +
    skillLevel[CONSTANTS.skill.Magic] +
    skillLevel[CONSTANTS.skill.Prayer] +
    skillLevel[CONSTANTS.skill.Slayer];
  let itemsTotal = combatItems.length;
  let itemsFound = 0;
  let monstersKilled = 0;
  //skill level
  let skillsPercentage = (skillsTotal / skills) * 100;
  //items
  for (let i = 0; i < itemStats.length; i++) {
    if (itemStats[i].timesFound > 0 && combatItems.includes(i)) itemsFound++;
  }
  let itemsPercentage = (itemsFound / itemsTotal) * 100;
  //monsters
  for (let i = 0; i < monsterStats.length; i++) {
    if (monsterStats[i].killedByPlayer > 0) monstersKilled++;
  }
  let monstersPercentage = (monstersKilled / MONSTERS.length) * 100;
  let totalPercentage = (itemsPercentage + skillsPercentage + monstersPercentage) / 3;
  //update percentages
  $("#completion-skills").text(Math.floor(skillsPercentage) + "%");
  $("#completion-mastery").text("n/a");
  $("#completion-items").text(Math.floor(itemsPercentage) + "%");
  $("#completion-monsters").text(Math.floor(monstersPercentage) + "%");
  $("#completion-total").text(Math.floor(totalPercentage) + "%");
}

window.openItemLog = function() {
  let timesFound = (timesSold = gpFromSale = deathCount = damageTaken = damageDealt = missedAttacks = timesEaten = healedFor = totalAttacks = amountUsedInCombat = timeWaited = timesDied = timesGrown = harvestAmount = enemiesKilled = timesOpened = "");
  $("#itemlog-container").html("");
  for (let i = 0; i < itemStats.length; i++) {
    if (combatItems.includes(i)) {
      if (itemStats[i].timesFound > 0) {
        timesFound = timesSold = gpFromSale = deathCount = damageTaken = damageDealt = missedAttacks = timesEaten = healedFor = totalAttacks = amountUsedInCombat = timeWaited = timesDied = timesGrown = harvestAmount = enemiesKilled = timesOpened = "";
        if (itemStats[i].timesFound > 0) timesFound = "<br>Times Found: <small class='text-warning'>" + formatNumber(itemStats[i].timesFound) + "</small>";
        if (itemStats[i].timesSold > 0) timesSold = "<br>Quantity Sold: <small class='text-warning'>" + formatNumber(itemStats[i].timesSold) + "</small>";
        if (itemStats[i].gpFromSale > 0) gpFromSale = "<br>GP Gained from sales: <small class='text-warning'>" + formatNumber(itemStats[i].gpFromSale) + "</small>";
        if (itemStats[i].deathCount > 0) deathCount = "<br>Times lost due to death: <small class='text-warning'>" + formatNumber(itemStats[i].deathCount) + "</small>";
        if (itemStats[i].damageTaken > 0) damageTaken = "<br>Damage Taken whilst Equipped: <small class='text-warning'>" + formatNumber(itemStats[i].damageTaken) + "</small>";
        if (itemStats[i].damageDealt > 0) damageDealt = "<br>Damage Dealt: <small class='text-warning'>" + formatNumber(itemStats[i].damageDealt) + "</small>";
        if (itemStats[i].missedAttacks > 0) missedAttacks = "<br>Attacks Missed: <small class='text-warning'>" + formatNumber(itemStats[i].missedAttacks) + "</small>";
        if (itemStats[i].timesEaten > 0) timesEaten = "<br>Times Eaten: <small class='text-warning'>" + formatNumber(itemStats[i].timesEaten) + "</small>";
        if (itemStats[i].healedFor > 0) healedFor = "<br>Healed for: <small class='text-warning'>" + formatNumber(itemStats[i].healedFor) + "</small>";
        if (itemStats[i].totalAttacks > 0) totalAttacks = "<br>Total Attacks: <small class='text-warning'>" + formatNumber(itemStats[i].totalAttacks) + "</small>";
        if (itemStats[i].amountUsedInCombat > 0) amountUsedInCombat = "<br>Amount used in combat: <small class='text-warning'>" + formatNumber(itemStats[i].amountUsedInCombat) + "</small>";
        if (itemStats[i].timeWaited > 0) timeWaited = "<br>Time spent waiting to grow: <small class='text-warning'>" + formatNumber(itemStats[i].timeWaited) + "</small>";
        if (itemStats[i].timesDied > 0) timesDied = "<br>Crop deaths: <small class='text-warning'>" + formatNumber(itemStats[i].timesDied) + "</small>";
        if (itemStats[i].timesGrown > 0) timesGrown = "<br>Successful grows: <small class='text-warning'>" + formatNumber(itemStats[i].timesGrown) + "</small>";
        if (itemStats[i].harvestAmount > 0) harvestAmount = "<br>Amount harvested: <small class='text-warning'>" + formatNumber(itemStats[i].harvestAmount) + "</small>";
        if (itemStats[i].enemiesKilled > 0) enemiesKilled = "<br>Enemies killed: <small class='text-warning'>" + formatNumber(itemStats[i].enemiesKilled) + "</small>";
        if (itemStats[i].timesOpened > 0) timesOpened = "<br>Opened: <small class='text-warning'>" + formatNumber(itemStats[i].timesOpened) + "</small>";
        $("#itemlog-container").append('<img class="skill-icon-sm js-tooltip-enable" src="' + items[i].media + '" data-toggle="tooltip" data-html="true" data-placement="bottom" title="" data-original-title="' + items[i].name + "<small class='text-info'> " + timesFound + timesSold + gpFromSale + totalAttacks + missedAttacks + damageDealt + damageTaken + enemiesKilled + amountUsedInCombat + timesEaten + healedFor + timesGrown + timesDied + timeWaited + harvestAmount + timesOpened + '</small>">');
      } else {
        $("#itemlog-container").append('<img class="skill-icon-sm js-tooltip-enable" src="assets/media/main/question.svg" data-toggle="tooltip" data-html="true" data-placement="bottom" title="" data-original-title="' + items[i].name + '">');
      }
    }
  }
  updateTooltips();
  $("#modal-item-log").modal("show");
}

toggleMenu(1);
$('.nav-main-heading').remove(":contains('Skills')");
$("#completion-mastery").parent().toggleClass("d-none");
console.log("Combat only completion log loaded");

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址