Combat Drops Only Complog

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

// ==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 );