BvS Kaiju Drop tracker

Tells you what a kaiju drops and if you have the drop already

// ==UserScript==
// @name           BvS Kaiju Drop tracker
// @namespace      BvS-Conster
// @description    Tells you what a kaiju drops and if you have the drop already
// @include        http*://*animecubed.com/billy/bvs/villagemonsterfight.html
// @include        http*://*animecubed.com/billy/bvs/village.html
// @include        http*://*animecubed.com/billy/bvs/pages/main.html
// @include        http*://*animecubedgaming.com/billy/bvs/villagemonsterfight.html
// @include        http*://*animecubedgaming.com/billy/bvs/village.html
// @include        http*://*animecubedgaming.com/billy/bvs/pages/main.html
// @version        0.7.8
// @history        0.7.8 New domain - animecubedgaming.com - Channel28
// @history        0.7.7 (21/06/2017) Added Tesseract, PsnsDrgn, Crisistron, bjorntfh and Gothjon (Updated by Channel28)
// @history        0.7.6 (05/19/2017) Now https compatible (Updated by Channel28)
// @history        0.7.5 (09/28/2014) Added grant permissions (Updated by Channel28)
// @history        0.7.4 (10/11/2011) Added The Pestilence.
// @history        0.7.3 (08/02/2011) Fixed bug, Added Makenshi and Dorcas.
// @history        0.7.2 (07/08/2011) Added Fayt, Jadian, Jasticus, Zenovia.
// @history        0.7.1 (03/04/2011) Fixed FrostMist and Div-R-EON spelling issue.
// @history        0.7.0 (02/08/2011) Changed script for new summon message wording and added other missing kaijus.
// @history        0.6.3 (06/19/2010) Added Shanks and Ham.
// @history        0.6.2 (05/21/2010) Fixed 'Persocomps' name and added Robert the Sage.
// @history        0.6.1 (04/23/2010) Fixed 'Persocoms' drop name.
// @history        0.6.0 (04/22/2010) Added support to find current kaiju on the village page, new feature to alert you when you don't have a kaiju drop, and fixed some recent kaiju name changes.
// @grant          GM_getValue
// @grant          GM_setValue
// ==/UserScript==

//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
/////////
/////////		Options
/////////			Customizable
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////

var alertMeOnDropIDontHave = true;		//true or false	

//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
/////////
/////////		MAIN PROGRAM		DON'T TOUCH!!!!
/////////
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////

var drops = new Array();
var items = new Array();

function createDrops() {
	drops["AgentBrand"]             = "Catgirl Entourage";
	drops["Alchemists"]             = "Red Water";
	drops["Amalga"]                 = "Amalga Eye";
	drops["Astaroth"]               = "Broforce";
	drops["AzoJason"]               = "Merchant Sigil";
	drops["Bishounen"]              = "Perfect Hair";
	drops["bjorntfh"]               = "Lucky Coin";
	drops["Cardcatchers"]           = "Claw Card";
	drops["Celeste"]                = "Poisoned Daggers";
	drops["Console Elitists"]       = "Money Printer";
	drops["Crazed Mimiga"]          = "Polar Star";
	drops["Crisistron"]             = "Crisis-Com";
	drops["Dakralai"]               = "Hacksaw";
	drops["Dave"]                   = "Driving Music";
	drops["Demon of the Sand"]      = "Spirit of the Demon of the Sand";
	drops["Div-R-EON"]              = "B-Class Laser";
	drops["Dorcas"]                 = "Kitty Ears";
	drops["Drazhar"]                = "Firebrand";
	drops["Drift Racers"]           = "Late-Night Snack";
	drops["Evanjellyons"]           = "Plug Suit";
	drops["EvilTaxi"]               = "Tire Tracks";
	drops["Evil Taxi"]              = "Tire Tracks";
	drops["Fanboys"]                = "Book of Spoilers";
	drops["Fayt"]                   = "Noble Phantasm";
	drops["Forum Trolls"]           = "Troll Account";
	drops["FrostMist"]              = "Cold Hard Cash";
	drops["Giant Cockroach"]        = "Carapace Armor";
	drops["Go Players"]             = "Go Piece";
	drops["Gothjon"]                = "Stocking Sword";
	drops["Ham"]                    = "Something Good";
	drops["Hungry"]                 = "Big Mouth";
	drops["Jadian"]                 = "Ultra Dessert";
	drops["Jasticus"]               = "Beta Reader";
	drops["J-Rock Bands"]           = "Groupies";
	drops["Jkeezer"]                = "Helix Tattoo";
	drops["Kukaichi"]               = "Jutsu Barrage";
	drops["Mad Scientists"]         = "Lab Coat";
	drops["MageOhki"]               = "Pink Skull";
	drops["Magical Girls"]          = "Magical Wand";
	drops["Makenshi"]               = "Flask of Mist";
	drops["McSmashy"]               = "Huggly Teddybear";
	drops["Millennium"]             = "Dramatic Monologue";
	drops["Nine-Tailed Fox"]        = "Spirit of the Nine-Tailed Fox";
	drops["Nine Thousands"]         = "Power Over 9000";
	drops["Ninja Bears"]            = "Bear Coat";
	drops["Persocomps"]             = "Persocomp";
	drops["Pokermans"]              = "Pokerballs";
	drops["Pro Wrestlers"]          = "Shiny Belt";
	drops["Psnsdrgn"]               = "Catbro";
	drops["Psycho Hikers"]          = "Granola Camouflage";
	drops["Robert the Sage"]        = "Senjutsu Reserves";
	drops["Robot Monkeys"]          = "Monkey Cymbals";
	drops["Shanks"]                 = "Lightning Draw";
	drops["Shin Goji"]              = "Rocket Punch";
	drops["Storm Riders"]           = "Regalia";
	drops["Super Robots"]           = "Soul of Steel";
	drops["Tesseract"]              = "Monoract";
	drops["The Pestilence"]         = "Little Wooden Cubes";
	drops["Vampires"]               = "Vampire Cloak";
	drops["Velidra"]                = "Control Rod";
	drops["Vysaga"]                 = "Student ID";
	drops["Xochitl"]                = "Thunderclaw Ring";
	drops["Zenovia"]                = "Frozen Rose";
	drops["Zodiac Girlyboys"]       = "Fruits Basket";

	drops["Arms Dealers"]           = "Surplus Ordnance";
	drops["Bartenders"]             = "Crystal Tumblers";
	drops["Bootleggers"]            = "Makeshift Booth";
	drops["Celebrity Chefs"]        = "Quality Cookware";
	drops["Drama Llama"]            = "Flaming Spit Technique";
	drops["Game Show Hosts"]        = "Parting Gifts";
	drops["Ghosts in the Machine"]  = "Time Reversal Cube";
	drops["Metal Idol"]             = "Sad Robot";
	drops["Model Builders"]         = "Remote Scout";
	drops["Personal Trainers"]      = "Training Montage";
	drops["Psycho Zombja Girl"]     = "Zombja Survival Guide";
	drops["Sexy Lady Cops"]        = "'Goodbye Kitten' Pink Taser";
	drops["Street Mimes"]           = "Avant-Guards";
	drops["The Spanish Imposition"] = "Pokey Stick";
}

var playerName = null;
var pageURL = document.location.href;
var itemPage = false;
var kaijuName = null;
var kaijuNameElement = null;
var kaijuDate = null;
var drop = null;

function getKaiju() {
	if (pageURL.indexOf("villagemonsterfight.html") != -1) {
		kaijuNameElement = document.evaluate("//font[@style='font-size: 20px;']/b", document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;

		if (kaijuNameElement != null) {
			kaijuName = kaijuNameElement.innerHTML;
			kaijuDate = GM_getValue(playerName + "_kaijudate", "");

			if (kaijuDate == "")
				kaijuDate = ".*";

			return true;
		}
	} else if (pageURL.indexOf("village.html") != -1) {
		kaijuNameElement = document.forms.namedItem("kat");

		if (kaijuNameElement != null) {	//kaiju in village currently
			kaijuNameElement = kaijuNameElement;

			var snap = document.evaluate("//li[starts-with(@class, 'alt')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
			var temp;
			var match;

			for (var i = 0; temp = snap.snapshotItem(i); i++) {
				if (match = temp.textContent.match(/(.*) Attack! (\d+\/\d+) \(\w+ \- \d+:\d+\): .* has summoned (.*) to your village! Your entire village has \d+ days? to defeat it \(.* HP\) for a great bonus, or else disaster will befall you!/)) {
					//summoned kaiju
					break;
				} else if (match = temp.textContent.match(/(.*) Attack! (\d+\/\d+) \(\w+ \- \d+:\d+\): (.*) wandered into your village! Your entire village has \d+ days? to defeat it \(.* HP\) for a great bonus, or else disaster will befall you!/)) {
					//wandering kaiju
					break;
				}
			}

			if (temp) {
				kaijuName = match[1].trim();
				kaijuDate = match[2].trim();

				GM_setValue(playerName + "_kaijudate", kaijuDate);

				return true;
			}
		}
	} else {
		itemPage = true;

		GM_setValue(playerName + "_kaijudate", "");
	}

	return false;
}

function getKaijuDrop() {
	if (kaijuName != null) {
		drop = drops[kaijuName];
	}
	if (drop == null) {
		drop = "Kaiju Memento";
	}
}

function getUserItems() {
	var div = document.getElementById("pitem");

	if (div) {
		var list = div.textContent.split("\n");
		var temp;

		for (var i = 0; i < list.length; i++) {
			temp = list[i];
			if ((temp == null) || (temp.length == 0))
				continue;

			temp = temp.split(":")[0].trim();

			items.push(temp);
		}

		return true;
	}

	return false;
}

window.addEventListener("load", load, false);

function load(e) {
	try {
		var temp = document.getElementsByName("player");
		if ((temp != null) && (temp.length > 0))
			playerName = temp[0].value;
		else
			return;

		if (getKaiju()) {
			createDrops();
			getKaijuDrop();

			var temp = GM_getValue(playerName + "_items", "");

			if ((temp != null) && (temp != ""))
				items = temp.split(",");

			var size;
			var extraText;
			var extraText2;
			var color;

			if (pageURL.indexOf("villagemonsterfight.html") != -1) {
				extraText = " (" + kaijuDate + ")";
				extraText2 = "";
				size = "+0";
				color = "black";
			} else if (pageURL.indexOf("village.html") != -1) {
				extraText = "";
				extraText2 = kaijuName + " (" + kaijuDate + ")";
				size = "-1";
				color = "white";
			}

			var text =
				extraText + "<font size='" + size + "'>" + extraText2 + "<br/>Drops: "
				+ "<a href=\"http://bvs.wikidot.com/items:" + drop + "\" target=\"_blank\" style='color: " + color + "'>"
				+ drop + "</a><br/>";

			if (items.length == 0) {
				//never saved items to tell

				text += "<font color='red'>Don't have your items logged yet!<br/>Go to the expanded main page!</font>";
			} else if (items.indexOf(drop) == -1) {
				//don't have drop

				text += "<font color='red'>You don't have this drop!</font>";

				if (alertMeOnDropIDontHave) {
					var save = "|" + kaijuName + "|" + kaijuDate + "|";
					temp = GM_getValue(playerName + "_alert", "");

					if ((temp == null) || (temp.length == 0) || (!temp.match(save))) {
						if (kaijuDate == ".*")
							kaijuDate = "???";

						alert("BvS Kaiju Drop Tracker Alert!\n\nThe kaiju '" + kaijuName + "' is in the village currently and you don't have its drop '" + drop.replace(/'/g,"") + "'!");

						GM_setValue(playerName + "_alert", save);
					}
				}
			} else {
				//have drop

				text += "<font color='green'>You have this drop already!</font>";				
			}

			text += "</font>";

			kaijuNameElement.innerHTML += text;
		} else if (itemPage) {
			//save all items listed

			if (getUserItems()) {
				GM_setValue(playerName + "_items", items.join(","));
			}			
		}
	}
	catch(e) {
		alert("Exception!\n\nError name: " + e.name + "\nError message: " + e.message);
	}
}