Combat Drops Only Complog

Adds a button to filter completion log to only show combat drop-exclusive items

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Combat Drops Only Complog
// @namespace    melvor_hcco
// @version      0.1.1
// @description  Adds a button to filter completion log to only show combat drop-exclusive items
// @author       mazunki
// @match	 https://*.melvoridle.com/*
// @exclude	 https://wiki.melvoridle.com*
// @grant        none
// @noframes
// @license      MIT
// ==/UserScript==

// Made for version 1.0

window.melvor_hcco_is_monster_loot = function (id) {
	for (let i=0; i<MONSTERS.length; i++) {
		monster_loot = MONSTERS[i].lootTable;
		for (let j=0; j<monster_loot.length; j++) {
			if (monster_loot[j][0] === id) return true;
		}
	}
	return false;
}
window.melvor_hcco_is_cdo_available = function (id) {
	return melvor_hcco_is_monster_loot(id);
}

window.complog_filter_cdo = function (all=true) {
	clearItemLogSearch();
	let found_items = [];
	for (let i=0; i<items.length;i++) {
		$(`#item-log-img-${i}`).addClass("d-none");
		if (melvor_hcco_is_monster_loot(i)) {
			if (found_items.find( (v) => { v == i }) === undefined) {
				found_items[found_items.length] = i;
			}
		}
	}
	if (all) {
		// opening all chests
		for (let i=0; i<found_items.length; i++) {
			if (items[found_items[i]].canOpen) {
				let dt = items[found_items[i]].dropTable;
				for (let j=0; j<dt.length; j++) {
					if (found_items.find( (v) => { v == dt[j][0] }) === undefined) {
						found_items[found_items.length] = dt[j][0];
					}
				}
			}
		}
		// going through all craftable items
		for (let i=0; i<items.length; i++) {
			if (items[i].itemsRequired !== undefined) {
				let qualified = true;
				for (let j=0; (j<items[i].itemsRequired.length) && (qualified); j++) {
					if (found_items.find( (v) => { v == items[i].itemsRequired[j] } ) === undefined)
						qualified = false;
				}
				if (qualified) {
					found_items[found_items.length] = i;
				}
			}
		}
	}
	for (let i=0;i<found_items.length;i++) {
		$(`#item-log-img-${found_items[i]}`).removeClass("d-none");
	}
	return found_items;
}

var add_filter_button = () => {
	if ($("#completion-log-2")) {
		itemlog = $("#completion-log-2");
		buttonRow = itemlog.find(".col-12")[4];
		monsterLootButton = $("<button>", {
			id: "complog_monster_loot",
		 	class: "btn btn-sm btn-info m-1",
		 	role: "button",
		 	onclick: "complog_filter_cdo(false);",
		 	text: "Monster loot"
		});
		cdoButton = $("<button>", {
			id: "complog_cdo",
		 	class: "btn btn-sm btn-info m-1",
		 	role: "button",
		 	onclick: "complog_filter_cdo(true);",
		 	text: "All Combat Drops"
		});
		if ($("#complog_cdo").length === 0) {
			monsterLootButton.appendTo(buttonRow);
			cdoButton.appendTo(buttonRow);
			let cdo_counter = complog_filter_cdo(true).length;
			$("#item-log-comp-count").append(' / <span id="item-log-cdo-count">' + cdo_counter + '</span>');
		}
	}
};

setTimeout( () => setInterval(add_filter_button, 1000), 1000 );