// ==UserScript==
// @name MH: Profile+
// @author Warden Slayer
// @namespace https://greasyfork.org/en/users/227259-wardenslayer
// @version 1.43
// @description Community requested features for the tabs on your MH profile.
// @grant GM_xmlhttpRequest
// @icon https://www.mousehuntgame.com/images/items/weapons/974151e440f297f1b6d55385310ac63c.jpg?cv=2
// @include https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js
// @include http://www.mousehuntgame.com/*
// @include https://www.mousehuntgame.com/*
// @connect http://www.mousehuntgame.com/*
// @connect https://www.mousehuntgame.com/*
// @grant GM_setClipboard
// ==/UserScript==
//
$(document).ready(function() {
const debug = localStorage.getItem('ws.debug');
if (debug == true) {
console.log('Profile+ Started');
};
localStorage.setItem('ws.pfp.sortUorD','down');
loadFunction();
addStyles(`#tipButton {
position: absolute;
top: 3px;
right: 150px;
float: right;
}`);
});
function loadFunction() {
if ($('.mousehuntHud-page-tabHeader.kings_crowns').hasClass('active')) {
//On king's crowns tab
generateCrowns();
} else if ($('.mousehuntHud-page-tabHeader.items').hasClass('active')) {
//On item tab
manageCollected();
} else if ($('.mousehuntHud-page-tabHeader.profile').hasClass('active')) {
//On profile tab
generateProfile();
} else if ($('.mousehuntHud-page-tabHeader.mice').hasClass('active')) {
//On mouse Tab
generateMice();
} else {
return false;
}
}
$(document).ajaxComplete(function (event, xhr, options) {
if (
options.url ==
'https://www.mousehuntgame.com/managers/ajax/users/userData.php'
) {
} else if (
options.url ==
'https://www.mousehuntgame.com/managers/ajax/users/userInventory.php'
) {
} else {
loadFunction();
}
});
function addStyles(css) {
// Check to see if the existing element exists.
const existingStyles = document.getElementById('ws-profile-plus-styles');
// If so, append our new styles to the existing element.
if (existingStyles) {
existingStyles.innerHTML += css;
return;
}
const style = document.createElement('style');
style.id = 'ws-profile-plus-styles';
style.innerHTML = css;
document.head.appendChild(style);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Profile TAB
//
//
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function generateProfile() {
//With the mhcc level, an egg, a checkmark, a crown, a star
const debug = localStorage.getItem('ws.debug');
let userID = '';
const myProfileLink = $('.mousehuntHud-shield').attr('href');
let maybeYourFriend = '';
let eggMaster = localStorage.getItem('ws.pfp.eggMaster');
if ($('.userInteractionButtonsView-relationship').get(0)) {
userID = $('.userInteractionButtonsView-relationship').attr(
'data-recipient-snuid'
);
maybeYourFriend = userID;
} else if (myProfileLink) {
if (myProfileLink.search('snuid=') == -1) {
if (debug == true) {
console.log('Your SNUID Not Found', myProfileLink);
}
return false;
} else {
userID = myProfileLink.split('snuid=')[1].split('&tab=')[0];
}
} else {
if (debug == true) {
console.log('SNUID Not Found', myProfileLink, userID);
}
return false;
}
localStorage.setItem('ws.pfp.eggMaster', '');
const dataItemOfInterest = ['is_egg_master', 'not_a_real_field'];
hg.utils.User.getUserData([userID], dataItemOfInterest, function (data) {
eggMaster = localStorage.setItem('ws.pfp.eggMaster', data[0].is_egg_master);
});
setTimeout(flexEggMaster, 1000);
if (debug == true) {
console.log('Profile Tab', userID, eggMaster);
}
//stop the silly hyperlink on the hunter ID
const hunterID = $('.hunterInfoView-idCardBlock-secondaryHeader').children();
hunterID.removeAttr('href').removeAttr('onclick');
//
//tipping/misc
if (maybeYourFriend) {
const yourFriendsProfile = $('.friendsPage-friendRow-content');
if ($('#tipButton').get(0)) {
return false;
} else {
const tipButton = document.createElement('button');
tipButton.id = 'tipButton';
tipButton.title = 'Tip this hunter 10 SB+';
tipButton.classList.add('mousehuntActionButton', 'tiny');
const tipButtonText = document.createElement('span');
tipButtonText.innerHTML = 'Tip 10 SB+';
tipButton.appendChild(tipButtonText);
yourFriendsProfile.prepend(tipButton);
}
} else if ($('.friendsProfileView-selfStats').get(0)) {
const randomFriend = $('.friendsProfileView-randomFriend');
const randoSNUID = randomFriend
.attr('href')
.split('snuid=')[1]
.split('&tab=')[0];
hg.utils.User.getUserData(
[randoSNUID],
['not_a_real_field'],
function (data) {
randomFriend.text('Visit Random Friend (' + data[0].name + ')');
}
);
}
}
function flexEggMaster() {
const eggMaster = localStorage.getItem('ws.pfp.eggMaster');
if (eggMaster == 'true') {
if ($('.eggMasterIcon').length > 0) return;
const hunterID = $('.friendsPage-friendRow-titleBar');
const eggMasterIcon = document.createElement('div');
eggMasterIcon.classList.add('eggMasterIcon');
$(eggMasterIcon).attr('title', 'Is an Egg Master');
$(eggMasterIcon).css({
'background-size': '25px 25px',
'background-image':
"url('https://www.mousehuntgame.com/images/items/convertibles/transparent_thumb/3ada6ff18f89d020908e35fee2de7a45.png')",
width: '25px',
height: '25px',
float: 'right',
'margin-right': '7px',
});
hunterID.append(eggMasterIcon);
}
}
$(document).on('click', '#tipButton', function () {
const debug = localStorage.getItem('ws.debug');
const receivingHunter = $('.userInteractionButtonsView-relationship').attr(
'data-recipient-snuid'
);
const receivingName = $('.friendsPage-friendRow-titleBar-name').attr(
'data-text'
);
const sendingHunter = user.unique_hash;
const url =
'https://www.mousehuntgame.com/managers/ajax/users/supplytransfer.php?/sn=Hitgrab&hg_is_ajax=1&receiver=' +
receivingHunter +
'&uh=' +
sendingHunter +
'&item=super_brie_cheese&item_quantity=10';
GM_xmlhttpRequest({
method: 'POST',
url: url,
onload: function (response) {
if (debug == true) {
console.log('Tip Sent', receivingName, receivingHunter);
}
alert('10 SB+ sent to ' + receivingName);
},
onerror: function (response) {
if (debug == true) {
console.log('Tip No Good, Error', receivingName, receivingHunter, url);
}
alert('Error, nothing sent');
},
});
});
$(document).on(
'click',
'.hunterInfoView-idCardBlock-secondaryHeader',
function () {
const debug = localStorage.getItem('ws.debug');
const copiedID = $('.hunterInfoView-hunterId').find('span').text();
if (debug == true) {
console.log('ID Copied', copiedID);
}
GM_setClipboard(copiedID);
}
);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Mouse TAB
//
//
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
function sumCategoryStats(category) {
const categoryName = $(category).find('.mouseListView-categoryContent-name');
const categoryTest = $(category).find(
'.mouseListView-categoryContent-description'
);
let categoryCatches = 0;
let categoryMisses = 0;
const categoryMice = $(category).find(
'.mouseListView-categoryContent-subgroup-mouse.stats:not(.header)'
);
categoryMice.each(function (i) {
const thisCatches = parseInt(
$(this).find('.catches').text().replace(',', ''),
10
);
const thisMisses = parseInt(
$(this).find('.misses').text().replace(',', ''),
10
);
categoryCatches += thisCatches;
categoryMisses += thisMisses;
});
const categoryTotal = categoryCatches + categoryMisses;
let categoryStats = $(category).find('.categoryStats');
if ($(categoryStats).length > 0) {
} else {
categoryStats = document.createElement('div');
categoryStats.classList.add('categoryStats');
$(categoryStats).insertAfter(categoryTest);
}
$(categoryStats).text(
'Category Stats [Catches: ' +
categoryCatches.toLocaleString() +
', Misses: ' +
categoryMisses.toLocaleString() +
', Total: ' +
categoryTotal.toLocaleString() +
']'
);
$(categoryStats).css({
fontSize: '16px',
'margin-top': '3px',
});
}
function generateMice() {
const allMice = $(
'.mouseListView-categoryContent-subgroup-mouse.stats:not(.header)'
);
const statsHeader = $(
'.mouseListView-categoryContent-subgroup-mouse.stats.header'
);
allMice.each(function (i) {
const thisThumb = $(this).find(
'.mouseListView-categoryContent-subgroup-mouse-thumb'
);
const thisCatches = parseInt(
$(this).find('.catches').text().replace(',', ''),
10
);
const thisMisses = parseInt(
$(this).find('.misses').text().replace(',', ''),
10
);
const thisCrown = setCrownBorder(thisThumb, thisCatches);
});
$(statsHeader).css({
cursor: 'pointer',
});
$('.mouseListView-categoryContent-subgroup-mouse.stats.header').on(
'click',
'.mouseListView-categoryContent-subgroup-mouse-stats',
function () {
SortMice(this);
}
);
const theseCategories = $(
'.mouseListView-categoryContent-category.all.active'
);
theseCategories.each(function (i) {
sumCategoryStats(this);
});
}
function SortMice(sortBy) {
const sortUorD = localStorage.getItem('ws.pfp.sortUorD');
let sortKey = '';
if ($(sortBy).hasClass('name')) {
sortKey = '.name';
} else if ($(sortBy).hasClass('catches')) {
sortKey = '.catches';
} else if ($(sortBy).hasClass('misses')) {
sortKey = '.misses';
} else if ($(sortBy).hasClass('average_weight')) {
sortKey = '.average_weight';
} else if ($(sortBy).hasClass('heaviest_catch')) {
sortKey = '.heaviest_catch';
}
if (sortUorD == 'up') {
sortMiceBy(sortKey, 'down');
localStorage.setItem('ws.pfp.sortUorD', 'down');
} else {
sortMiceBy(sortKey, 'up');
localStorage.setItem('ws.pfp.sortUorD', 'up');
}
}
function setCrownBorder(thumb, catches, expanded) {
let top = '';
let bottom = '';
let crown = 'n';
if (catches >= 2500) {
top = '#c4eae6';
bottom = '#63b9cf';
crown = 'd';
} else if (catches >= 1000) {
top = '#9191ff';
bottom = '#1d1781';
crown = 'p';
} else if (catches >= 500) {
top = '#ffe589';
bottom = '#b67800';
crown = 'g';
} else if (catches >= 100) {
top = '#d1d7e9';
bottom = '#66718b';
crown = 's';
} else if (catches >= 10) {
top = '#f0c693';
bottom = '#8d4823';
crown = 'b';
} else {
//no crown
top = '#ab9f92';
bottom = '#251B0A';
}
let background = '';
if (expanded === 'C') {
background = '#c1d5e0';
} else {
background = '#fafafa';
}
$(thumb).css({
cursor: 'pointer',
'background-color': background,
'border-style': 'solid',
'border-width': '4px',
'border-radius': '4px',
'border-top-color': top,
'border-left-color': top,
'border-bottom-color': bottom,
'border-right-color': bottom,
});
return crown;
}
function sortMiceBy(key, UD) {
let activeGrouping = $(
'.mousehuntHud-page-subTabContent.active[data-template-file="AdversariesPage"]'
);
let activeSubGroup = '';
if (
$('.mouseListView-categoryContent-category.active.hasFilter.caught')
.length > 0
) {
activeSubGroup = $(activeGrouping).find(
'.mouseListView-categoryContent-category.active.hasFilter.caught'
);
} else if (
$('.mouseListView-categoryContent-category.active.hasFilter.uncaught')
.length > 0
) {
activeSubGroup = $(activeGrouping).find(
'.mouseListView-categoryContent-category.active.hasFilter.uncaught'
);
} else {
activeSubGroup = $(activeGrouping).find(
'.mouseListView-categoryContent-category.all.active'
);
}
const mouseContainer = $(activeSubGroup).find(
'.mouseListView-categoryContent-subgroupContainer'
);
const allMice = $(activeSubGroup).find(
'.mouseListView-categoryContent-subgroup-mouse.stats:not(.header)'
);
$(allMice)
.sort(function (a, b) {
if (key == '.name') {
a = $(a).find(key).text();
b = $(b).find(key).text();
} else if (key == '.catches' || key == '.misses') {
a = parseInt($(a).find(key).text().replace(',', ''), 10);
b = parseInt($(b).find(key).text().replace(',', ''), 10);
} else if (key == '.average_weight' || key == '.heaviest_catch') {
a = parseUntits($(a).find(key).text());
b = parseUntits($(b).find(key).text());
}
if (UD == 'up' && a > b) {
return -1;
} else if (UD == 'up' && a < b) {
return 1;
} else if (UD == 'down' && a < b) {
return -1;
} else if (UD == 'down' && a > b) {
return 1;
}
})
.appendTo(mouseContainer);
}
function parseUntits(unitString) {
let oz = 0;
const rawNumArray = unitString
.replace(' lb. ', ',')
.replace(' oz.', '')
.split(',');
if (rawNumArray.length == 1) {
oz = parseInt(rawNumArray[0], 10);
} else {
oz = 16 * parseInt(rawNumArray[0], 10) + parseInt(rawNumArray[1], 10);
}
return oz;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Crowns TAB
//
//
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function generateCrowns() {
const debug = localStorage.getItem('ws.debug');
if (debug == true) {
console.log(
'Crowns Tab',
localStorage.getItem('Lock Favorites'),
localStorage.getItem('ShowCommunityRanks')
);
}
buildToolbar();
decorate();
if (
localStorage.getItem('Lock Favorites') == 'Y' &&
$('.mouseCrownsView-group-mouse-favouriteButton').length > 0
) {
lockFavorites();
}
if (localStorage.getItem('ShowCommunityRanks') == 'Y') {
hg.utils.MouseUtil.getMouseNames(function (data) {
const numMice = Object.keys($(data)[0]).length - 2;
localStorage.setItem('ws.mh.pfp.numMice', numMice);
if (debug == true) {
console.log('Total Mice', numMice);
}
showCommunityRanks();
});
}
if (localStorage.getItem('ShowPowerCrowns') == 'Y') {
showPowerCrowns();
}
}
function buildToolbar() {
if ($('.toolBar').length > 0) return;
const toolBar = document.createElement('div');
toolBar.classList.add('toolBar');
// Lock Favs CB
const lockFavs = document.createElement('input');
lockFavs.type = 'checkbox';
lockFavs.name = 'lockFavs';
lockFavs.value = '';
lockFavs.id = 'lockFavs';
if (localStorage.getItem('LockFavs') == 'Y') {
lockFavs.checked = 'Yes';
} else {
lockFavs.checked = '';
}
const lockFavsLabel = document.createElement('label');
lockFavsLabel.htmlFor = 'lockFavsLabel';
lockFavsLabel.appendChild(document.createTextNode('Lock Favorites'));
if ($('.mouseCrownsView-group-mouse-favouriteButton').length > 0) {
toolBar.appendChild(lockFavs);
toolBar.appendChild(lockFavsLabel);
}
// Community Ranks CB
const communityRanks = document.createElement('input');
communityRanks.type = 'checkbox';
communityRanks.name = 'communityRanks';
communityRanks.value = '';
communityRanks.id = 'communityRanks';
communityRanks.checked = '';
if (localStorage.getItem('ShowCommunityRanks') == 'Y') {
communityRanks.checked = 'Yes';
} else {
communityRanks.checked = '';
}
const communityRanksLabel = document.createElement('label');
communityRanksLabel.htmlFor = 'communityRanksLabel';
communityRanksLabel.appendChild(
document.createTextNode('Show Crown Summary ')
);
toolBar.appendChild(communityRanks);
toolBar.appendChild(communityRanksLabel);
// Power Crowns CB
const powerCrowns = document.createElement('input');
powerCrowns.type = 'checkbox';
powerCrowns.name = 'powerCrowns';
powerCrowns.value = '';
powerCrowns.id = 'powerCrowns';
powerCrowns.checked = '';
if (localStorage.getItem('ShowPowerCrowns') == 'Y') {
powerCrowns.checked = 'Yes';
} else {
powerCrowns.checked = '';
}
const powerCrownsLabel = document.createElement('label');
powerCrownsLabel.htmlFor = 'powerCrownsLabel';
powerCrownsLabel.appendChild(document.createTextNode('Show Power Crowns '));
toolBar.appendChild(powerCrowns);
toolBar.appendChild(powerCrownsLabel);
//Copy Crown Button
const copyCrownsButton = document.createElement('button');
copyCrownsButton.id = 'copyCrownsButton';
if ($('.mouseCrownsView-group-mouse-favouriteButton').length > 0) {
copyCrownsButton.addEventListener('click', copyMyCrowns);
} else {
copyCrownsButton.addEventListener('click', copyCrowns);
}
$(copyCrownsButton).attr('title', 'Copy Crowns to Clipboard');
toolBar.appendChild(copyCrownsButton);
$(copyCrownsButton).css({
cursor: 'pointer',
'border-style': 'solid',
'border-color': 'grey',
'border-width': '2px',
'background-image':
"url('https://cdn3.iconfinder.com/data/icons/files-folders-line/100/copy-512.png')",
'background-repeat': 'no-repeat',
'background-size': 'contain',
width: '35px',
height: '35px',
});
// Last
let crownBreak = $('.mouseCrownsView-group.favourite').css({
'margin-bottom': '40px',
});
crownBreak.append(toolBar);
$('.toolBar').css({
float: 'right',
});
}
/********** Lock Favs **********/
$(document).on('change', '#lockFavs', function () {
if (
window.location.href.includes('profile.php') &&
$('.mousehuntHud-page-tabHeader.kings_crowns').hasClass('active')
) {
// Check to see if the cb was JUST checked
if (this.checked) {
// Put the checked value into storage
localStorage.setItem('LockFavs', 'Y');
lockFavs.checked = 'Yes';
lockFavorites();
} else {
// Put the checked value into storage
localStorage.setItem('LockFavs', 'N');
lockFavs.checked = '';
unlockFavorites();
}
}
});
function lockFavorites() {
localStorage.setItem('Lock Favorites', 'Y');
if ($('.mouseCrownsView-group-mouse-favouriteButton').length < 0) {
localStorage.setItem('LockFavs', 'N');
lockFavs.checked = '';
return;
}
const allMice = $('.mouseCrownsView-group-mouse').find(
'.mouseCrownsView-group-mouse-favouriteButton'
);
allMice.css('pointer-events', 'none');
}
function unlockFavorites() {
localStorage.setItem('Lock Favorites', 'N');
const allMice = $('.mouseCrownsView-group-mouse').find(
'.mouseCrownsView-group-mouse-favouriteButton'
);
allMice.css('pointer-events', 'auto');
$('.mouseCrownsView-crown.favourite').css({
'background-image':
"url('https://www.mousehuntgame.com/images/ui/camp/trap/star_favorite.png')",
display: 'inline-block',
'vertical-align': 'middle',
width: '50px',
height: '50px',
'margin-right': '5px',
'background-repeat': 'no-repeat',
'background-position': '50% 50%',
'background-size': 'contain',
});
}
/********** Community Ranks **********/
$(document).on('change', '#communityRanks', function () {
if (
window.location.href.includes('profile.php') &&
$('.mousehuntHud-page-tabHeader.kings_crowns').hasClass('active')
) {
// Check to see if the cb was JUST checked
if (this.checked) {
// Put the checked value into storage
localStorage.setItem('ShowCommunityRanks', 'Y');
communityRanks.checked = 'Yes';
showCommunityRanks();
} else {
// Put the checked value into storage
localStorage.setItem('ShowCommunityRanks', 'N');
communityRanks.checked = '';
hideCommunityRanks();
}
}
});
function showCommunityRanks() {
const debug = localStorage.getItem('ws.debug');
const totalMice = localStorage.getItem('ws.mh.pfp.numMice');
if ($('.mouseCrownsView-group-header.community').length > 0) {
return;
}
const crownBreak = $('.mouseCrownsView-group.favourite');
const communityCrownHeader = $('.mouseCrownsView-group-header')
.first()
.clone();
communityCrownHeader.addClass('community');
communityCrownHeader.css({
//'height': '65px',
padding: '3px',
'margin-bottom': '10px',
});
communityCrownHeader
.find('.mouseCrownsView-crown')
.removeClass('favourite')
.addClass('community')
.css({
'background-image': "url('https://icon-library.com/images/138339.png')",
'background-repeat': 'no-repeat',
'background-size': '40px 40px',
});
communityCrownHeader.find('.mouseCrownsView-group-header-subtitle');
communityCrownHeader
.find('.mouseCrownsView-group-header-name')
.text('Crown Summary')
.css({
'font-weight': 'bold',
});
communityCrownHeader.insertAfter(crownBreak);
const allUncrowned = $('.mouseCrownsView-group.none').find(
'.mouseCrownsView-group-mouse'
);
const allBronze = $(
'.mouseCrownsView-group.bronze,.mouseCrownsView-group.silver,.mouseCrownsView-group.gold,.mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond'
).find('.mouseCrownsView-group-mouse');
const allSilver = $(
'.mouseCrownsView-group.silver,.mouseCrownsView-group.gold,.mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond'
).find('.mouseCrownsView-group-mouse');
const allGold = $(
'.mouseCrownsView-group.gold,.mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond'
).find('.mouseCrownsView-group-mouse');
const allPlat = $(
'.mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond'
).find('.mouseCrownsView-group-mouse');
const allDiamond = $('.mouseCrownsView-group.diamond').find(
'.mouseCrownsView-group-mouse'
);
const bronzeCrowns = allBronze.length;
const silverCrowns = allSilver.length;
const goldCrowns = allGold.length;
const platCrowns = allPlat.length;
const diamondCrowns = allDiamond.length;
const uncrowned = totalMice - bronzeCrowns;
if (debug == true) {
console.log(
'Crown Counts',
uncrowned,
bronzeCrowns,
silverCrowns,
goldCrowns,
platCrowns,
diamondCrowns
);
}
const bronzeLink =
'https://docs.google.com/spreadsheets/d/19_wHCkwiT5M6LS7XNLt4NYny98fjpg4UlHbgOD05ijw/pub?fbclid=IwAR3a1Ku2xTl1mIDksUr8Lk5ORMEnuv7jnvIy9K6OBeziG6AyvYYlZaIQkHY';
const silverLink =
'https://docs.google.com/spreadsheets/d/e/2PACX-1vQG5g3vp-q7LRYug-yZR3tSwQzAdN7qaYFzhlZYeA32vLtq1mJcq7qhH80planwei99JtLRFAhJuTZn/pubhtml?fbclid=IwAR3sPXNLloGnFk324a0HShroP1E-sNcnQBlRTjJ7gScWTWosqmXv5InB_Ns';
const goldLink =
'https://docs.google.com/spreadsheets/d/10OGD5OYkGIEAbiez7v92qU5Fdul0ZtCRgEjlECkwZJE/pubhtml?gid=478731024&single=true&fbclid=IwAR28w7IQyMp91I62CR3GOILpbeLwgKaydIoQimMNm7j3S0DL8Mj_IsRpGD4';
const rankSummary = $("<div class='rank summary'</div>");
rankSummary.css({
'font-size': '11.75px',
});
communityCrownHeader.append(rankSummary);
const uncrownedText = document.createTextNode(
'Uncrowned: ' +
uncrowned +
' (' +
((uncrowned / totalMice) * 100).toFixed(2) +
'%) | '
);
$(rankSummary).attr('title', 'Mobster and Leprechaun excluded from counts');
const bronzeText = document.createTextNode(
'Bronze: ' +
bronzeCrowns +
' (' +
((bronzeCrowns / totalMice) * 100).toFixed(2) +
'%) | '
);
const silverText = document.createTextNode(
'Silver: ' +
silverCrowns +
' (' +
((silverCrowns / totalMice) * 100).toFixed(2) +
'%) | '
);
const goldText = document.createTextNode(
'Gold: ' +
goldCrowns +
' (' +
((goldCrowns / totalMice) * 100).toFixed(2) +
'%) | '
);
const platText = document.createTextNode(
'Platinum: ' +
platCrowns +
' (' +
((platCrowns / totalMice) * 100).toFixed(2) +
'%) | '
);
const diamondText = document.createTextNode(
'Diamond: ' +
diamondCrowns +
' (' +
((diamondCrowns / totalMice) * 100).toFixed(2) +
'%)'
);
const aBronze = document.createElement('a');
aBronze.appendChild(bronzeText);
aBronze.title = '90% Crowned Scoreboard';
aBronze.href = bronzeLink;
$(aBronze).attr('target', '_blank');
const aSilver = document.createElement('a');
aSilver.appendChild(silverText);
aSilver.title = 'MHCC Scoreboard';
aSilver.href = silverLink;
$(aSilver).attr('target', '_blank');
const aGold = document.createElement('a');
aGold.appendChild(goldText);
aGold.title = 'MHCC Elite Scoreboard';
aGold.href = goldLink;
$(aGold).attr('target', '_blank');
$(rankSummary)
.append(uncrownedText)
.append(aBronze)
.append(aSilver)
.append(aGold)
.append(platText)
.append(diamondText);
}
function hideCommunityRanks() {
if ($('.mouseCrownsView-group-header.community').length > 0) {
$('.mouseCrownsView-group-header.community').remove();
}
}
/********** Power Crowns **********/
$(document).on('change', '#powerCrowns', function () {
if (
window.location.href.includes('profile.php') &&
$('.mousehuntHud-page-tabHeader.kings_crowns').hasClass('active')
) {
if (this.checked) {
localStorage.setItem('ShowPowerCrowns', 'Y');
powerCrowns.checked = 'Yes';
decorate();
showPowerCrowns();
} else {
localStorage.setItem('ShowPowerCrowns', 'N');
powerCrowns.checked = '';
hidePowerCrowns();
}
}
});
function populatePowerCrowns(mouse) {
const mouseName = $(mouse).find('.mouseCrownsView-group-mouse-name').text();
if (mouseName == '-- Empty --') {
return false;
}
let powerType = getMousePowerType(mouseName);
let icon = 'https://www.mousehuntgame.com/images/powertypes/parental.png';
let iconClass = '';
if (powerType == 'normal') {
powerType = 'multi';
iconClass = 'pt ' + powerType;
} else if (powerType == 'event') {
iconClass = 'pt event';
icon =
'https://www.mousehuntgame.com/images/items/skins/73c91f2016a313406553794587625e24.jpg';
} else if (powerType == 'prize') {
iconClass = 'pt prize';
icon =
'https://www.mousehuntgame.com/images/items/convertibles/80cf614cbec2ec3d739502bd45c93ab3.gif?cv=2';
} else {
icon =
'https://www.mousehuntgame.com/images/powertypes/' + powerType + '.png';
iconClass = 'pt ' + powerType;
}
const label = $(mouse).find('.mouseCrownsView-group-mouse-label');
if ($(label).find('img').length > 0) {
} else {
$(label).append(
$('<img>', {
class: iconClass,
src: icon,
title: powerType,
})
);
$(label).find('img').css({
width: '17.5px',
height: '17.5px',
'margin-left': '1px',
});
}
}
function showPowerCrowns() {
const debug = localStorage.getItem('ws.debug');
localStorage.setItem('ws.mh.pfp.ptProps', JSON.stringify({}));
if ($('.mouseCrownsView-group-header.powerCrown').length > 0) {
return;
}
let crownBreak = $('.mouseCrownsView-group.favourite');
if ($('.mouseCrownsView-group-header.community').length > 0) {
crownBreak = $('.mouseCrownsView-group-header.community');
}
const powerCrownHeader = $('.mouseCrownsView-group-header').first().clone();
powerCrownHeader.addClass('powerCrown');
powerCrownHeader
.find('.mouseCrownsView-crown')
.removeClass('favourite')
.addClass('powerCrown')
.css({
'background-image':
"url('https://icon-library.com/images/off-icon/off-icon-12.jpg')",
'background-repeat': 'no-repeat',
'background-size': '40px 40px',
});
powerCrownHeader.find('.mouseCrownsView-group-header-subtitle');
powerCrownHeader
.find('.mouseCrownsView-group-header-name')
.text('Power Crowns')
.css({
'font-weight': 'bold',
});
powerCrownHeader.insertAfter(crownBreak);
const ptBtnGroup = $("<div class='btn-group' id='powerTypeBtns'></div>");
const powerTypes = [
'arcane',
'draconic',
'forgotten',
'hydro',
'law',
'physical',
'rift',
'shadow',
'tactical',
'parental',
'event',
'prize',
];
powerTypes.forEach(function (type, index) {
const thisBtn = document.createElement('button');
let icon = '';
let title = type;
let masterText = '';
if (type == 'parental') {
$(thisBtn).addClass('ptbtn multi');
icon = 'https://www.mousehuntgame.com/images/powertypes/' + type + '.png';
title = 'multi';
masterText = 'Master of Multi!';
} else if (type == 'event') {
$(thisBtn).addClass('ptbtn ' + type);
icon =
'https://www.mousehuntgame.com/images/items/skins/73c91f2016a313406553794587625e24.jpg';
masterText = 'Master of Events!';
} else if (type == 'prize') {
$(thisBtn).addClass('ptbtn ' + type);
icon =
'https://www.mousehuntgame.com/images/items/convertibles/80cf614cbec2ec3d739502bd45c93ab3.gif?cv=2';
masterText = 'Master of Cheating because this is impossible :/';
} else {
$(thisBtn).addClass('ptbtn ' + type);
icon = 'https://www.mousehuntgame.com/images/powertypes/' + type + '.png';
masterText =
'Master of ' + type.charAt(0).toUpperCase() + type.substring(1) + '!';
}
const powerTypeData = getPowerTypeTotals(type);
const powerTypeIcon = $('<img>', {
src: icon,
title: title,
width: '35',
height: '35',
});
$(thisBtn).append(powerTypeIcon);
//
const countText = document.createElement('div');
$(countText).append(powerTypeData[0]);
//
if (powerTypeData[2]) {
const masterBtn = $('<img>', {
src: 'https://www.mousehuntgame.com/images/ui/crowns/crown_silver.png?asset_cache_version=2',
title: masterText,
});
$(thisBtn).append(masterBtn);
$(masterBtn).css({
position: 'relative',
top: '-12px',
left: '-5px',
float: 'right',
});
$(powerTypeIcon).css({
position: 'relative',
top: '0px',
left: '-5px',
});
$(countText).css({
float: 'left',
position: 'relative',
top: '-12px',
left: '0px',
width: '100%',
});
} else {
const percentText = document.createElement('div');
$(percentText).append(powerTypeData[1]);
$(percentText).css({
position: 'relative',
top: '-35px',
left: '40px',
width: '55%',
});
$(thisBtn).append(percentText);
$(powerTypeIcon).css({
position: 'relative',
left: '-40px',
});
$(countText).css({
position: 'relative',
top: '-20px',
left: '0px',
width: '100%',
});
}
$(thisBtn).append(countText);
$(thisBtn).css({
cursor: 'pointer',
'background-color': '#008CBA',
'border-radius': '4px',
'font-size': '16px',
padding: '7.5px 2.5px',
height: '67.5px',
width: '16.666666666666666666%',
});
$(thisBtn).on('click', function () {
let ptProps = JSON.parse(localStorage.getItem('ws.mh.pfp.ptProps'));
const type = $(this).attr('class').replace('ptbtn ', '');
let allMice = $('.mouseCrownsView-group:not(.favourite)').find('.pt');
$(allMice).parent().parent().parent().show();
if (ptProps[type] == 'Show') {
Object.keys(ptProps).forEach((e) => (ptProps[e] = 'Show'));
ptBtnGroup.find('button').css({
'border-color': 'black',
});
ptProps[type] = 'All';
} else {
Object.keys(ptProps).forEach((e) => (ptProps[e] = 'Hide'));
ptBtnGroup.find('button').not(this).css({
'border-color': 'black',
});
$(this).css({
'border-color': '#f44336',
});
ptProps[type] = 'Show';
$(allMice)
.not('.pt.' + type)
.parent()
.parent()
.parent()
.hide();
}
localStorage.setItem('ws.mh.pfp.ptProps', JSON.stringify(ptProps));
});
$(ptBtnGroup).append(thisBtn);
});
powerCrownHeader.append(ptBtnGroup);
}
function getPowerTypeTotals(type) {
const debug = localStorage.getItem('ws.debug');
if (type == 'parental') {
type = 'multi';
}
const totalMice = {
arcane: 78,
draconic: 37,
forgotten: 87,
hydro: 189,
law: 68,
physical: 79,
rift: 142,
shadow: 91,
tactical: 106,
multi: 138,
event: 168,
prize: 2,
};
const num = $(
'.mouseCrownsView-group:not(.favourite):not(.none):not(.bronze)'
).find('.pt.' + type).length;
const percent = ((num / totalMice[type]) * 100).toFixed(2);
let result = [];
result.push('' + num + ' of ' + totalMice[type]);
if (num == totalMice[type]) {
result.push('isMaster');
}
result.push(' ' + percent + '% ');
if (debug == true) {
console.log(type, num, percent, result);
}
return result;
}
$(document).on(
'click',
'.mouseCrownsView-group-header.powerCrown',
function (e) {
const eventTarget = $(e.target).attr('class');
const btnGroup = $(this).find('.btn-group');
if (e.target === e.currentTarget) {
btnGroup.toggle();
} else if (eventTarget === 'mouseCrownsView-crown powerCrown') {
btnGroup.toggle();
} else if (eventTarget === 'mouseCrownsView-group-header-name') {
btnGroup.toggle();
}
}
);
function getMousePowerType(mouseName) {
const miceMap = {
'Abominable Snow': 'normal',
'Absolute Acolyte': 'rift',
Acolyte: 'forgotten',
'Admiral Arrrgh': 'event',
'Admiral Cloudbeard': 'normal',
Aether: 'tactical',
Aged: 'physical',
'Agent M': 'law',
'Agitated Gentle Giant': 'rift',
Alchemist: 'hydro',
Alnilam: 'tactical',
Alnitak: 'hydro',
'Alpha Weremouse': 'shadow',
'Amplified Brown': 'rift',
'Amplified Grey': 'rift',
'Amplified White': 'rift',
'Ancient of the Deep': 'hydro',
'Ancient Scribe': 'forgotten',
Angelfish: 'hydro',
Angler: 'hydro',
'Angry Aphid': 'tactical',
'Angry Train Staff': 'law',
Aquos: 'shadow',
'Arcana Overachiever': 'arcane',
'Arcane Master Sorcerer': 'arcane',
'Arcane Summoner': 'arcane',
'Arch Champion Necromancer': 'rift',
Archer: 'tactical',
'Architeuthulhu of the Abyss': 'hydro',
'Aristo-Cat Burglar': 'law',
'Armored Archer': 'rift',
'Artillery Commander': 'arcane',
'Ascended Elder': 'rift',
'Ash Golem': 'forgotten',
Assassin: 'tactical',
'Assassin Beast': 'rift',
'Astrological Astronomer': 'shadow',
'Audacious Alchemist': 'shadow',
'Automated Sentry': 'rift',
'Automated Stone Sentry': 'forgotten',
Automorat: 'law',
'Baba Gaga': 'event',
'Balack the Banished': 'forgotten',
'Ballroom Blitzers': 'physical',
Bandit: 'physical',
Bark: 'hydro',
Barkshell: 'hydro',
'Barmy Gunner': 'hydro',
'Barnacle Beautician': 'hydro',
'Baroness Von Bean': 'physical',
'Baroque Dancer': 'physical',
Barracuda: 'hydro',
Bartender: 'law',
Bat: 'shadow',
'Battering Ram': 'normal',
'Battle Cleric': 'forgotten',
Beachcomber: 'hydro',
Bear: 'tactical',
'Bearded Elder': 'draconic',
'Beast Tamer': 'tactical',
Berserker: 'tactical',
Berzerker: 'rift',
Betta: 'hydro',
'Big Bad Behemoth Burroughs': 'rift',
'Big Bad Burroughs': 'normal',
'Bilged Boatswain': 'hydro',
Biohazard: 'hydro',
Bionic: 'normal',
Birthday: 'event',
'Bitter Grammarian': 'forgotten',
'Bitter Root': 'normal',
'Black Diamond Racer': 'event',
'Black Mage': 'shadow',
'Black Powder Thief': 'law',
'Black Widow': 'normal',
Blacksmith: 'normal',
'Bloomed Sylvan': 'rift',
'Bog Beast': 'hydro',
'Bonbon Gummy Globlin': 'event',
Bookborn: 'tactical',
Bookworm: 'shadow',
'Borean Commander': 'event',
Bottled: 'hydro',
'Bottom Feeder': 'hydro',
'Boulder Biter': 'rift',
'Bounty Hunter': 'law',
Brawny: 'rift',
Breakdancer: 'event',
'Breeze Borrower': 'normal',
Briegull: 'hydro',
Brimstone: 'shadow',
'Broomstick Bungler': 'arcane',
'Brothers Grimmaus': 'forgotten',
Brown: 'normal',
Bruticle: 'hydro',
'Bruticus the Blazing': 'draconic',
Buccaneer: 'hydro',
Buckethead: 'event',
'Budrich Thornborn': 'physical',
Builder: 'event',
'Bulwark of Ascent': 'rift',
Burglar: 'law',
'Burly Bruiser': 'draconic',
'Cabin Boy': 'hydro',
'Cagey Countess': 'physical',
Calalilly: 'hydro',
Calligraphy: 'event',
Camoflower: 'hydro',
Camofusion: 'hydro',
'Candy Cane': 'event',
'Candy Cat': 'event',
'Candy Goblin': 'event',
Cannonball: 'law',
Captain: 'hydro',
'Captain Cannonball': 'event',
'Captain Cloudkicker': 'tactical',
'Captain Croissant': 'normal',
'Caravan Guard': 'normal',
Cardshark: 'law',
'Carefree Cook': 'event',
'Careless Catfish': 'hydro',
Caretaker: 'tactical',
'Carmine the Apothecary': 'hydro',
Carnivore: 'hydro',
'Carrion Medium': 'rift',
Cavalier: 'tactical',
'Cavern Crumbler': 'forgotten',
'Celestial Summoner': 'shadow',
'Cell Sweeper': 'physical',
Centaur: 'tactical',
'Centaur Ranger': 'rift',
'Chafed Cellist': 'physical',
'Chamber Cleaver': 'rift',
Chameleon: 'tactical',
Champion: 'hydro',
'Champion Danseuse': 'rift',
'Champion Thief': 'rift',
'Charming Chimer': 'arcane',
'Cheat Sheet Conjurer': 'shadow',
'Cheesy Party': 'event',
Cherry: 'tactical',
'Cherry Sprite': 'rift',
'Chess Master': 'tactical',
'Chip Chiseler': 'shadow',
Chipper: 'hydro',
Chitinous: 'shadow',
'Chocolate Gold Foil': 'event',
'Chocolate Overload': 'event',
'Christmas Tree': 'event',
Chrono: 'forgotten',
Chronomaster: 'rift',
Cinderstorm: 'draconic',
'Circuit Judge': 'law',
'City Noble': 'hydro',
'City Worker': 'hydro',
'Class Clown': 'arcane',
'Classroom Disrupter': 'shadow',
'Classroom Keener': 'shadow',
'Clockwork Samurai': 'normal',
'Clockwork Timespinner': 'rift',
'Cloud Collector': 'normal',
'Cloud Miner': 'normal',
'Cloud Strider': 'hydro',
Clownfish: 'hydro',
Clump: 'rift',
'Clumsy Carrier': 'hydro',
'Clumsy Chemist': 'normal',
'Clumsy Cupbearer': 'physical',
'Coal Shoveller': 'law',
Cobweb: 'event',
'Coco Commander': 'event',
'Coffin Zombie': 'shadow',
'Confused Courier': 'event',
Conjurer: 'tactical',
Conqueror: 'tactical',
'Constructively Critical Artist': 'arcane',
'Consumed Charm Tinkerer': 'normal',
Cook: 'hydro',
Coral: 'hydro',
'Coral Cuddler': 'hydro',
'Coral Dragon': 'hydro',
'Coral Gardener': 'hydro',
'Coral Guard': 'hydro',
'Coral Harvester': 'hydro',
'Coral Queen': 'hydro',
'Core Sample': 'normal',
'Cork Defender': 'draconic',
Corkataur: 'draconic',
'Corky the Collector': 'draconic',
'Corridor Bruiser': 'forgotten',
Corrupt: 'arcane',
'Corrupt Commodore': 'hydro',
'Costumed Dog': 'event',
'Costumed Dragon': 'event',
'Costumed Horse': 'event',
'Costumed Monkey': 'event',
'Costumed Ox': 'event',
'Costumed Pig': 'event',
'Costumed Rabbit': 'event',
'Costumed Rat': 'event',
'Costumed Rooster': 'event',
'Costumed Sheep': 'event',
'Costumed Snake': 'event',
'Costumed Tiger': 'event',
'Count Vampire': 'rift',
'Covetous Coastguard': 'hydro',
Cowardly: 'normal',
Cowbell: 'tactical',
Crabolia: 'hydro',
'Crag Elder': 'forgotten',
'Craggy Ore': 'normal',
'Cranky Caterpillar': 'rift',
'Crate Camo': 'law',
'Crazed Cultivator': 'tactical',
'Crazed Goblin': 'rift',
'Creepy Marionette': 'event',
'Crimson Commander': 'normal',
'Crimson Ranger': 'physical',
'Crimson Titan': 'physical',
'Crimson Watch': 'physical',
'Croquet Crusher': 'law',
'Crown Collector': 'normal',
'Crystal Behemoth': 'forgotten',
'Crystal Cave Worm': 'forgotten',
'Crystal Controller': 'forgotten',
'Crystal Golem': 'forgotten',
'Crystal Lurker': 'forgotten',
'Crystal Observer': 'forgotten',
'Crystal Queen': 'forgotten',
Crystalback: 'forgotten',
'Crystalline Slasher': 'forgotten',
Cumulost: 'forgotten',
'Cupcake Camo': 'event',
'Cupcake Candle Thief': 'event',
'Cupcake Cutie': 'event',
'Cupcake Runner': 'event',
Cupid: 'tactical',
'Curious Chemist': 'tactical',
Cursed: 'arcane',
'Cursed Crusader': 'rift',
'Cursed Enchanter': 'arcane',
'Cursed Engineer': 'arcane',
'Cursed Librarian': 'arcane',
'Cursed Taskmaster': 'arcane',
'Cursed Thief': 'arcane',
'Cute Cloud Conjurer': 'hydro',
'Cute Crate Carrier': 'law',
Cutpurse: 'rift',
'Cutthroat Cannoneer': 'normal',
'Cutthroat Pirate': 'normal',
Cuttle: 'hydro',
'Cyber Miner': 'rift',
'Cybernetic Specialist': 'rift',
Cyborg: 'rift',
Cycloness: 'arcane',
Cyclops: 'tactical',
'Cyclops Barbarian': 'rift',
'Dance Party': 'event',
Dancer: 'tactical',
'Dancing Assassin': 'rift',
'Dangerous Duo': 'law',
'Dark Magi': 'arcane',
'Dark Templar': 'forgotten',
'Dashing Buccaneer': 'hydro',
'Dastardly Duchess': 'physical',
'Data Devourer': 'shadow',
'Davy Jones': 'shadow',
'Dawn Guardian': 'arcane',
Daydreamer: 'normal',
'Decrepit Tentacle Terror': 'normal',
Deep: 'hydro',
'Deep Sea Diver': 'hydro',
Defender: 'tactical',
Dehydrated: 'hydro',
Demolitions: 'normal',
'Deranged Deckhand': 'hydro',
Derpicorn: 'physical',
Derpshark: 'hydro',
'Derr Chieftain': 'physical',
'Derr Lich': 'forgotten',
'Desert Archer': 'physical',
'Desert Architect': 'normal',
'Desert Nomad': 'normal',
'Desert Soldier': 'physical',
Desperado: 'law',
Destructoy: 'event',
'Devious Gentleman': 'law',
Diamond: 'normal',
Diamondhide: 'forgotten',
'Diminutive Detainee': 'physical',
Dinosuit: 'event',
'Dire Lycan': 'event',
'Dirt Thing': 'forgotten',
'Dojo Sensei': 'tactical',
Doktor: 'rift',
'Double Black Diamond Racer': 'event',
'Draconic Warden': 'draconic',
Dragon: 'draconic',
Dragonbreather: 'draconic',
Dragoon: 'draconic',
'Dread Knight': 'rift',
'Dread Pirate Mousert': 'hydro',
'Dream Drifter': 'rift',
Drudge: 'forgotten',
Drummer: 'tactical',
'Dumpling Chef': 'tactical',
'Dumpling Delivery': 'rift',
Dunehopper: 'shadow',
'Dungeon Master': 'physical',
Dwarf: 'normal',
'Eagle Owl': 'tactical',
Eclipse: 'forgotten',
Eel: 'hydro',
Effervescent: 'tactical',
'Egg Painter': 'event',
'Egg Scrambler': 'event',
Eggscavator: 'event',
'Eggsplosive Scientist': 'event',
'Eggsquisite Entertainer': 'event',
'El Flamenco': 'event',
Elder: 'hydro',
Elf: 'event',
'Elite Guardian': 'hydro',
'Elixir Maker': 'rift',
'Elub Chieftain': 'hydro',
'Elub Lich': 'forgotten',
'Elven Princess': 'tactical',
'Emberstone Scaled': 'draconic',
'Empyrean Appraiser': 'normal',
'Empyrean Empress': 'normal',
'Empyrean Geologist': 'normal',
'Empyrean Javelineer': 'draconic',
'Enchanted Chess Club Champion': 'arcane',
Enginseer: 'hydro',
'Enlightened Labourer': 'rift',
'Enslaved Spirit': 'shadow',
'Epoch Golem': 'rift',
'Escape Artist': 'physical',
'Essence Collector': 'arcane',
'Essence Guardian': 'arcane',
'Ethereal Enchanter': 'arcane',
'Ethereal Engineer': 'arcane',
'Ethereal Guardian': 'forgotten',
'Ethereal Librarian': 'arcane',
'Ethereal Thief': 'arcane',
'Evil Scientist': 'rift',
'Excitable Electric': 'rift',
'Exo-Tech': 'forgotten',
Explorator: 'physical',
'Extreme Everysports': 'normal',
'Factory Technician': 'event',
Fairy: 'tactical',
'Fall Familiar': 'shadow',
'Fallen Champion Footman': 'rift',
'Falling Carpet': 'normal',
Farmhand: 'normal',
Farrier: 'law',
Featherlight: 'arcane',
Fencer: 'tactical',
'Fete Fromager': 'event',
'Fetid Swamp': 'shadow',
Fibbocchio: 'forgotten',
Fiddler: 'tactical',
Field: 'normal',
Fiend: 'hydro',
'Fiery Crusher': 'shadow',
Finder: 'tactical',
Firebreather: 'tactical',
Firefly: 'tactical',
'Flamboyant Flautist': 'forgotten',
'Flame Archer': 'physical',
'Flame Ordnance': 'arcane',
'Flame Warrior': 'physical',
'Floating Spore': 'normal',
Flutterby: 'tactical',
'Fluttering Flutist': 'arcane',
Flying: 'normal',
Fog: 'normal',
'Force Fighter Blue': 'event',
'Force Fighter Green': 'event',
'Force Fighter Pink': 'event',
'Force Fighter Red': 'event',
'Force Fighter Yellow': 'event',
'Forgotten Elder': 'forgotten',
'Fortuitous Fool': 'normal',
Foxy: 'tactical',
'Free Skiing': 'event',
'Frightened Flying Fireworks': 'event',
'Frigid Foreman': 'event',
Frog: 'tactical',
'Frost King': 'event',
Frostbite: 'hydro',
'Frostlance Guard': 'hydro',
'Frostwing Commander': 'hydro',
'Frosty Snow': 'normal',
Frozen: 'normal',
Fuel: 'law',
"Ful'Mina the Mountain Queen": 'draconic',
'Fungal Frog': 'rift',
'Fungal Spore': 'hydro',
'Fungal Technomorph': 'forgotten',
Funglore: 'normal',
'Fuzzy Drake': 'draconic',
Gargantuamouse: 'draconic',
Gargoyle: 'arcane',
'Gate Guardian': 'arcane',
'Gate Keeper': 'physical',
'Gelatinous Octahedron': 'hydro',
Gemorpher: 'forgotten',
'Gemstone Worshipper': 'forgotten',
'General Drheller': 'hydro',
'Gentleman Caller': 'law',
Ghost: 'shadow',
'Ghost Pirate Queen': 'event',
'Giant Snail': 'shadow',
'Gilded Leaf': 'rift',
Gingerbread: 'event',
'Glacia Ice Fist': 'event',
Gladiator: 'physical',
'Glamorous Gladiator': 'physical',
'Glass Blower': 'normal',
Glazy: 'event',
Glitchpaw: 'normal',
'Gluttonous Zombie': 'shadow',
Goblin: 'shadow',
Gold: 'normal',
Goldleaf: 'tactical',
Golem: 'arcane',
'Goliath Field': 'rift',
Gorgon: 'arcane',
'Gourd Ghoul': 'event',
Gourdborg: 'event',
'Grampa Golem': 'shadow',
'Grand Master of the Dojo': 'rift',
Grandfather: 'tactical',
Granite: 'normal',
'Granny Spice': 'arcane',
'Grave Robber': 'event',
'Great Giftnapper': 'event',
'Great Winter Hunt Impostor': 'event',
'Greedy Al': 'event',
Greenbeard: 'forgotten',
Grey: 'normal',
'Grey Recluse': 'event',
Greyrun: 'rift',
'Grit Grifter': 'tactical',
'Grizzled Silth': 'rift',
'Ground Gavaleer': 'physical',
Grubling: 'shadow',
'Grubling Herder': 'shadow',
Grunt: 'physical',
Guardian: 'physical',
Guppy: 'hydro',
'Guqin Player': 'tactical',
Gyrologer: 'tactical',
'Hall Monitor': 'normal',
'Hans Cheesetian Squeakersen': 'forgotten',
Hapless: 'tactical',
'Hapless Marionette': 'normal',
'Harbinger of Death': 'rift',
Hardboiled: 'event',
'Hardworking Hauler': 'law',
'Hare Razer': 'event',
Harpy: 'shadow',
'Harvest Harrier': 'shadow',
Harvester: 'shadow',
Hazmat: 'hydro',
Healer: 'physical',
'Heart of the Meteor': 'arcane',
'Heavy Blaster': 'hydro',
'Herbaceous Bravestalk': 'physical',
Herc: 'physical',
'High Roller': 'event',
'Hired Eidolon': 'forgotten',
Hoarder: 'event',
Hollowed: 'event',
'Hollowed Minion': 'event',
Hollowhead: 'event',
'Homeopathic Apothecary': 'normal',
Hookshot: 'law',
Hope: 'tactical',
'Horned Cork Hoarder': 'draconic',
'Hot Head': 'tactical',
'Humphrey Dumphrey': 'forgotten',
Huntereater: 'forgotten',
Hurdle: 'normal',
Hydra: 'normal',
Hydrologist: 'hydro',
Hydrophobe: 'physical',
'Hypnotized Gunslinger': 'arcane',
'Ice Regent': 'forgotten',
'Iceberg Sculptor': 'event',
Iceblade: 'hydro',
Iceblock: 'hydro',
Icebreaker: 'hydro',
Icewing: 'hydro',
Icicle: 'hydro',
Ignatia: 'draconic',
Ignis: 'shadow',
'Illustrious Illusionist': 'arcane',
Impersonator: 'physical',
'Incompetent Ice Climber': 'hydro',
'Industrious Digger': 'normal',
'Inferna the Engulfed': 'arcane',
'Inferno Mage': 'hydro',
Infiltrator: 'tactical',
'Invisible Fashionista': 'arcane',
'Itty Bitty Rifty Burroughs': 'rift',
'Itty-Bitty Burroughs': 'normal',
Jellyfish: 'hydro',
'Jovial Jailor': 'physical',
Joy: 'event',
Juliyes: 'normal',
Jurassic: 'shadow',
"Kalor'ignis of the Geyser": 'draconic',
Karmachameleon: 'rift',
Keeper: 'arcane',
"Keeper's Assistant": 'arcane',
'Key Master': 'physical',
'King Grub': 'shadow',
'King Scarab': 'shadow',
'Kite Flyer': 'normal',
Knight: 'tactical',
Koimaid: 'hydro',
'Kung Fu': 'tactical',
'Lab Technician': 'hydro',
'Lady Coldsnap': 'hydro',
Lambent: 'rift',
'Lambent Crystal': 'normal',
'Lancer Guard': 'draconic',
'Land Loafer': 'tactical',
'Lasso Cowgirl': 'law',
'Launchpad Labourer': 'normal',
Lawbender: 'law',
'Leafton Beanwell': 'physical',
Leprechaun: 'event',
'Lethargic Guard': 'physical',
Leviathan: 'hydro',
Lich: 'arcane',
'Lightning Rod': 'normal',
'Limestone Miner': 'normal',
'Little Bo Squeak': 'forgotten',
'Little Miss Fluffet': 'forgotten',
'Living Ice': 'hydro',
'Living Salt': 'hydro',
'Loathsome Locust': 'tactical',
Lockpick: 'physical',
Longtail: 'normal',
'Lord Splodington': 'hydro',
Lost: 'forgotten',
'Lost Legionnaire': 'forgotten',
'Lovely Sports': 'normal',
Lucky: 'event',
Lumahead: 'normal',
Lumberjack: 'normal',
'Lumi-lancer': 'rift',
'Lunar Red Candle Maker': 'event',
Lycan: 'shadow',
Lycanoid: 'rift',
M400: 'normal',
M1000: 'normal',
'Mad Elf': 'event',
"Madame d'Ormouse": 'forgotten',
'Mage Weaver': 'normal',
Magic: 'normal',
'Magic Champion': 'rift',
'Magical Multitasker': 'shadow',
'Magma Carrier': 'shadow',
Magmarage: 'hydro',
'Magmatic Crystal Thief': 'law',
'Magmatic Golem': 'law',
'Mairitime Pirate': 'normal',
'Maize Harvester': 'event',
'Malevolent Maestro': 'physical',
'Malicious Marquis': 'physical',
Mammoth: 'hydro',
'Manaforge Smith': 'forgotten',
Manatee: 'hydro',
'Market Guard': 'normal',
'Market Thief': 'law',
Martial: 'rift',
'Masked Pikeman': 'forgotten',
'Master Burglar': 'law',
'Master Exploder': 'rift',
'Master of the Cheese Belt': 'tactical',
'Master of the Cheese Claw': 'tactical',
'Master of the Cheese Fang': 'tactical',
'Master of the Chi Belt': 'rift',
'Master of the Chi Claw': 'rift',
'Master of the Chi Fang': 'rift',
'Master of the Dojo': 'tactical',
'Matriarch Gander': 'forgotten',
'Matron of Machinery': 'forgotten',
'Matron of Wealth': 'forgotten',
'Mecha Tail': 'rift',
Medicine: 'rift',
'Melancholy Merchant': 'normal',
'Melodramatic Minnow': 'hydro',
'Menace of the Rift': 'rift',
Mermouse: 'hydro',
Mermousette: 'hydro',
Mershark: 'hydro',
'Meteorite Golem': 'arcane',
'Meteorite Miner': 'law',
'Meteorite Mover': 'law',
'Meteorite Mystic': 'arcane',
'Meteorite Snacker': 'law',
Micro: 'rift',
'Mighty Mite': 'tactical',
'Mighty Mole': 'rift',
'Mild Spicekin': 'draconic',
'Militant Samurai': 'rift',
Mimic: 'forgotten',
'Mind Tearer': 'forgotten',
Miner: 'normal',
'Mining Materials Manager': 'law',
Mintaka: 'physical',
'Mischievous Meteorite Miner': 'law',
'Mischievous Wereminer': 'shadow',
Miser: 'event',
'Misfortune Teller': 'arcane',
'Missile Toe': 'event',
'Mist Maker': 'hydro',
'Mixing Mishap': 'shadow',
'Mlounder Flounder': 'hydro',
Mobster: 'event',
Mole: 'normal',
'Molten Midas': 'forgotten',
Monarch: 'tactical',
Monk: 'tactical',
'Monsoon Maker': 'shadow',
Monster: 'normal',
'Monster of the Meteor': 'arcane',
'Monster Tail': 'hydro',
'Monstrous Abomination': 'rift',
'Monstrous Black Widow': 'rift',
'Monstrous Midge': 'tactical',
Moosker: 'tactical',
'Mossy Moosker': 'rift',
'Mouldy Mole': 'normal',
Mountain: 'normal',
'Mousataur Priestess': 'event',
'Mouse of Elements': 'rift',
'Mouse of Winter Future': 'event',
'Mouse of Winter Past': 'event',
'Mouse of Winter Present': 'event',
'Mouse With No Name': 'law',
'Mousevina von Vermin': 'shadow',
Moussile: 'event',
Mummy: 'shadow',
Mush: 'normal',
'Mush Monster': 'forgotten',
'Mushroom Harvester': 'forgotten',
'Mushroom Sprite': 'normal',
'Mutant Mongrel': 'hydro',
'Mutant Ninja': 'hydro',
'Mutated Behemoth': 'hydro',
'Mutated Brown': 'normal',
'Mutated Grey': 'normal',
'Mutated Mole': 'normal',
'Mutated Siblings': 'hydro',
'Mutated White': 'normal',
'Mysterious Traveller': 'law',
Mystic: 'hydro',
'Mystic Bishop': 'tactical',
'Mystic Guardian': 'forgotten',
'Mystic Herald': 'forgotten',
'Mystic King': 'tactical',
'Mystic Knight': 'tactical',
'Mystic Pawn': 'tactical',
'Mystic Queen': 'tactical',
'Mystic Rook': 'tactical',
'Mystic Scholar': 'forgotten',
'Mythical Giant King': 'physical',
'Mythical Master Sorcerer': 'normal',
Mythweaver: 'forgotten',
'Nachore Golem': 'shadow',
'Nachous the Molten': 'shadow',
Narrator: 'tactical',
Naturalist: 'rift',
'Naughty Nougat': 'event',
Necromancer: 'hydro',
'Nefarious Nautilus': 'hydro',
'Nerg Chieftain': 'tactical',
'Nerg Lich': 'forgotten',
"New Year's": 'event',
Nibbler: 'normal',
'Nice Knitting': 'event',
'Night Shift Materials Manager': 'shadow',
'Night Watcher': 'arcane',
Nightfire: 'arcane',
Nightmancer: 'shadow',
'Nightshade Flower Girl': 'normal',
'Nightshade Fungalmancer': 'forgotten',
'Nightshade Maiden': 'normal',
'Nightshade Masquerade': 'normal',
'Nightshade Nanny': 'forgotten',
Nimbomancer: 'hydro',
Ninja: 'tactical',
'Nitro Racer': 'event',
Nomad: 'tactical',
'Nomadic Warrior': 'rift',
Nugget: 'normal',
Nutcracker: 'event',
'Obstinate Oboist': 'physical',
Octomermaid: 'hydro',
"Ol' King Coal": 'event',
'Old One': 'hydro',
'Old Spice Collector': 'arcane',
'One-Mouse Band': 'rift',
'Onion Chopper': 'event',
Ooze: 'arcane',
'Ore Chipper': 'shadow',
Ornament: 'event',
'Outbreak Assassin': 'hydro',
Outlaw: 'law',
'Over-Prepared': 'hydro',
Overcaster: 'shadow',
'Oxygen Baron': 'hydro',
Pack: 'hydro',
Page: 'tactical',
Paladin: 'arcane',
'Paladin Weapon Master': 'forgotten',
'Pan Slammer': 'event',
'Para Para Dancer': 'event',
'Paragon of Arcane': 'arcane',
'Paragon of Dragons': 'draconic',
'Paragon of Forgotten': 'forgotten',
'Paragon of Shadow': 'shadow',
'Paragon of Strength': 'physical',
'Paragon of Tactics': 'tactical',
'Paragon of the Lawless': 'law',
'Paragon of Water': 'hydro',
'Parlour Player': 'law',
'Party Head': 'event',
Passenger: 'law',
Pathfinder: 'tactical',
'Peaceful Prisoner': 'physical',
Pearl: 'hydro',
'Pearl Diver': 'hydro',
Pebble: 'normal',
'Peevish Piccoloist': 'physical',
'Peggy the Plunderer': 'normal',
Penguin: 'hydro',
'Pernicious Prince': 'physical',
'Perpetual Detention': 'arcane',
Phalanx: 'tactical',
'Phase Zombie': 'rift',
Photographer: 'law',
'Pie Thief': 'law',
Pinchy: 'hydro',
Pinkielina: 'forgotten',
Pintail: 'event',
Pirate: 'hydro',
'Pirate Anchor': 'hydro',
'Plague Hag': 'hydro',
'Plotting Page': 'physical',
'Plutonium Tentacle': 'rift',
'Pneumatic Dirt Displacement': 'rift',
Pocketwatch: 'physical',
'Polar Bear': 'hydro',
'Pompous Perch': 'hydro',
'Portable Generator': 'rift',
'Portal Paladin': 'rift',
'Portal Plunderer': 'rift',
'Portal Pursuer': 'rift',
'Possessed Armaments': 'rift',
'Praetorian Champion': 'rift',
Present: 'event',
'Prestigious Adventurer': 'rift',
'Prestigious Prestidigitator': 'shadow',
Primal: 'shadow',
'Princess and the Olive': 'forgotten',
'Princess Fist': 'hydro',
Prospector: 'law',
Protector: 'hydro',
Prototype: 'rift',
Puddlemancer: 'physical',
Puffer: 'hydro',
Pugilist: 'normal',
'Pump Raider': 'law',
'Pumpkin Head': 'shadow',
'Pumpkin Hoarder': 'event',
'Puppet Champion': 'rift',
'Puppet Master': 'normal',
Puppetto: 'rift',
'Pygmy Wrangler': 'shadow',
Pyrehyde: 'draconic',
Pyrite: 'law',
'Queen Quesada': 'law',
'Queso Extractor': 'law',
Quesodillo: 'shadow',
Quillback: 'normal',
'Radioactive Ooze': 'rift',
'Rain Collector': 'shadow',
'Rain Summoner': 'shadow',
'Rain Wallower': 'shadow',
'Rainbow Racer': 'event',
Rainmancer: 'shadow',
'Rainwater Purifier': 'normal',
'Rambunctious Rain Rumbler': 'draconic',
'Rancid Bog Beast': 'rift',
'Ravenous Zombie': 'shadow',
'Raw Diamond': 'rift',
'Reality Restitch': 'event',
'Realm Ripper': 'arcane',
'Reanimated Carver': 'forgotten',
Reaper: 'arcane',
'Record Keeper': 'rift',
"Record Keeper's Assistant": 'rift',
'Red Coat Bear': 'rift',
'Red Envelope': 'event',
'Red-Eyed Watcher Owl': 'rift',
'Regal Spearman': 'draconic',
Reinbo: 'event',
'Relic Hunter': 'normal',
Renegade: 'physical',
'Retired Minotaur': 'forgotten',
'Reveling Lycanthrope': 'shadow',
Revenant: 'rift',
Ribbon: 'event',
'Richard the Rich': 'normal',
'Ridiculous Sweater': 'event',
'Rift Bio Engineer': 'rift',
'Rift Guardian': 'rift',
'Rift Tiger': 'rift',
Rifterranian: 'rift',
Riftweaver: 'rift',
Riptide: 'normal',
Robat: 'rift',
'Rock Muncher': 'normal',
Rocketeer: 'tactical',
Rockstar: 'event',
Rogue: 'physical',
Romeno: 'normal',
Romeo: 'normal',
'Root Rummager': 'tactical',
'RR-8': 'forgotten',
'Rubble Rouser': 'shadow',
'Rubble Rummager': 'shadow',
Ruffian: 'law',
'S.N.O.W. Golem': 'event',
Saboteur: 'hydro',
'Sacred Shrine': 'arcane',
'Saloon Gal': 'law',
'Salt Water Snapper': 'hydro',
'Saltwater Axolotl': 'hydro',
Samurai: 'tactical',
'Sand Cavalry': 'tactical',
'Sand Colossus': 'shadow',
'Sand Dollar Diver': 'hydro',
'Sand Dollar Queen': 'hydro',
'Sand Pilgrim': 'shadow',
'Sand Sifter': 'hydro',
Sandmouse: 'event',
'Sandwing Cavalry': 'tactical',
Sanguinarian: 'forgotten',
Sarcophamouse: 'shadow',
'Sassy Salsa Dancer': 'physical',
Scarab: 'shadow',
Scarecrow: 'shadow',
'Scarlet Revenger': 'normal',
Scavenger: 'arcane',
'Scheming Squire': 'physical',
'School of Mish': 'hydro',
'Scorned Pirate': 'event',
Scout: 'hydro',
'Scrap Metal Monster': 'hydro',
Scribe: 'physical',
Scrooge: 'event',
Scruffy: 'normal',
Seadragon: 'hydro',
'Seasoned Islandographer': 'tactical',
Seer: 'physical',
'Sentient Slime': 'rift',
Sentinel: 'physical',
'Serpent Monster': 'hydro',
Serpentine: 'shadow',
'Shackled Servant': 'rift',
'Shade of the Eclipse': 'rift',
'Shadow Master Sorcerer': 'shadow',
'Shadow Sage': 'shadow',
'Shadow Stalker': 'forgotten',
Shaman: 'tactical',
'Shaolin Kung Fu': 'rift',
'Shard Centurion': 'rift',
Sharpshooter: 'law',
'Shattered Carmine': 'hydro',
'Shattered Obsidian': 'forgotten',
Shelder: 'hydro',
Shinobi: 'rift',
Shipwrecked: 'hydro',
Shopkeeper: 'law',
Shortcut: 'event',
'Shorts-All-Year': 'event',
Shroom: 'hydro',
Silth: 'hydro',
Silvertail: 'normal',
'Sinister Egg Painter': 'event',
'Sinister Squid': 'hydro',
'Sir Fleekio': 'forgotten',
Siren: 'hydro',
'Sizzle Pup': 'draconic',
'Skeletal Champion': 'rift',
Skeleton: 'arcane',
'Sky Dancer': 'arcane',
'Sky Glass Glazier': 'arcane',
'Sky Glass Sorcerer': 'arcane',
'Sky Glider': 'arcane',
'Sky Greaser': 'normal',
'Sky Highborne': 'arcane',
'Sky Squire': 'physical',
'Sky Surfer': 'hydro',
'Sky Swordsman': 'physical',
Skydiver: 'normal',
'Slay Ride': 'event',
Slayer: 'tactical',
'Sleep Starved Scholar': 'arcane',
Sleepwalker: 'event',
'Sleepy Merchant': 'law',
Slimefist: 'hydro',
'Slope Swimmer': 'normal',
Sludge: 'hydro',
'Sludge Scientist': 'normal',
'Sludge Soaker': 'hydro',
'Sludge Swimmer': 'hydro',
Smoldersnap: 'draconic',
'Smug Smuggler': 'physical',
'Snake Charmer': 'normal',
Snooty: 'event',
'Snow Boulder': 'event',
'Snow Bowler': 'hydro',
'Snow Fort': 'event',
'Snow Golem Architect': 'event',
'Snow Golem Jockey': 'event',
'Snow Scavenger': 'event',
'Snow Slinger': 'hydro',
'Snow Sniper': 'hydro',
'Snow Soldier': 'hydro',
'Snow Sorceress': 'event',
'Snowball Hoarder': 'event',
Snowblind: 'hydro',
Snowblower: 'event',
Snowflake: 'event',
Snowglobe: 'event',
'Sock Puppet Ghost': 'normal',
'Soldier of the Shade': 'rift',
'Solemn Soldier': 'forgotten',
Soothsayer: 'hydro',
Sorcerer: 'arcane',
'Soul Binder': 'forgotten',
'Space Party-Time Plumber': 'event',
'Spear Fisher': 'hydro',
'Spectral Butler': 'event',
'Spectral Swashbuckler': 'event',
Spectre: 'arcane',
Speedy: 'normal',
Spellbinder: 'physical',
'Spheric Diviner': 'forgotten',
'Spice Farmer': 'arcane',
'Spice Finder': 'arcane',
'Spice Merchant': 'normal',
'Spice Raider': 'arcane',
'Spice Reaper': 'arcane',
'Spice Seer': 'arcane',
'Spice Sovereign': 'arcane',
Spider: 'arcane',
'Spiked Burrower': 'normal',
'Spiky Devil': 'shadow',
'Spirit Fox': 'rift',
'Spirit Light': 'event',
'Spirit of Balance': 'rift',
'Spiritual Steel': 'rift',
'Splintered Stone Sentry': 'forgotten',
Spore: 'hydro',
'Spore Muncher': 'normal',
'Spore Salesman': 'normal',
Sporeticus: 'normal',
'Sporty Ski Instructor': 'event',
Spotted: 'normal',
'Spring Familiar': 'physical',
'Spring Sprig': 'event',
'Sprinkly Sweet Cupcake Cook': 'event',
'Spry Sky Explorer': 'forgotten',
'Spry Sky Seer': 'forgotten',
Spud: 'normal',
Squeaken: 'hydro',
'Squeaker Bot': 'normal',
'Squeaker Claws': 'event',
'Stack of Thieves': 'law',
'Stagecoach Driver': 'law',
Stalagmite: 'forgotten',
Stealth: 'physical',
'Steam Grip': 'physical',
'Steam Sailor': 'draconic',
Steel: 'normal',
'Steel Horse Rider': 'law',
Stickybomber: 'hydro',
Stinger: 'tactical',
Stingray: 'hydro',
Stocking: 'event',
'Stone Cutter': 'normal',
'Stone Maiden': 'forgotten',
'Stonework Warrior': 'shadow',
'Stormsurge the Vile Tempest': 'draconic',
Stoutgear: 'law',
Stowaway: 'law',
Stratocaster: 'shadow',
'Strawberry Hotcakes': 'hydro',
'Stuck Snowball': 'event',
'Student of the Cheese Belt': 'tactical',
'Student of the Cheese Claw': 'tactical',
'Student of the Cheese Fang': 'tactical',
'Student of the Chi Belt': 'rift',
'Student of the Chi Claw': 'rift',
'Student of the Chi Fang': 'rift',
'Stuffy Banker': 'law',
'Suave Pirate': 'normal',
Subterranean: 'normal',
'Sugar Rush': 'event',
'Sultry Saxophonist': 'physical',
'Summer Mage': 'tactical',
'Summoning Scholar': 'forgotten',
'Sunken Banshee': 'hydro',
'Sunken Citizen': 'hydro',
'Super FighterBot MegaSupreme': 'event',
'Super Mega Mecha Ultra RoboGold': 'rift',
Supernatural: 'rift',
'Supply Hoarder': 'law',
'Supreme Sensei': 'rift',
'Surgeon Bot': 'rift',
Swabbie: 'hydro',
'Swamp Runner': 'hydro',
'Swamp Thang': 'event',
'Swarm of Pygmy Mice': 'shadow',
Swashblade: 'hydro',
Sylvan: 'tactical',
'Tackle Tracker': 'hydro',
Tadpole: 'hydro',
Taleweaver: 'hydro',
Tanglefoot: 'physical',
'Tech Golem': 'forgotten',
'Tech Ravenous Zombie': 'rift',
'Technic Bishop': 'tactical',
'Technic King': 'tactical',
'Technic Knight': 'tactical',
'Technic Pawn': 'tactical',
'Technic Queen': 'tactical',
'Technic Rook': 'tactical',
'Teenage Vampire': 'event',
'Telekinetic Mutant': 'hydro',
'Teleporting Truant': 'shadow',
Tentacle: 'hydro',
Terra: 'shadow',
'Terrible Twos': 'event',
'Terrified Adventurer': 'rift',
'Terror Knight': 'arcane',
'The Menace': 'hydro',
'The Total Eclipse': 'rift',
'Theurgy Warden': 'physical',
Thirsty: 'hydro',
Thistle: 'hydro',
Thorn: 'hydro',
'Thunder Strike': 'draconic',
'Thundering Watcher': 'draconic',
'⚡Thunderlord⚡': 'draconic',
'Tidal Fisher': 'shadow',
Tiger: 'tactical',
'Time Punk': 'event',
'Time Tailor': 'event',
'Time Thief': 'event',
'Timeless Lich': 'rift',
'Timelost Thaumaturge': 'rift',
'Timeslither Pythoness': 'rift',
'Timid Explorer': 'rift',
Tiny: 'normal',
'Tiny Dragonfly': 'draconic',
'Tiny Saboteur': 'law',
'Tiny Toppler': 'shadow',
'Titanic Brain-Taker': 'event',
'Toboggan Technician': 'event',
'Tomb Exhumer': 'event',
'Tome Sprite': 'tactical',
'Tonic Salesman': 'law',
'Totally Not Tax Fraud': 'normal',
'Toxic Avenger': 'rift',
'Toxic Warrior': 'hydro',
Toxikinetic: 'rift',
Toy: 'event',
'Toy Sylvan': 'normal',
'Toy Tinkerer': 'event',
Trailblazer: 'physical',
'Train Conductor': 'law',
'Train Engineer': 'law',
Trampoline: 'normal',
'Travelling Barber': 'law',
'Treacherous Tubaist': 'physical',
Treant: 'tactical',
'Treant Queen': 'rift',
'Treasure Brawler': 'forgotten',
'Treasure Hoarder': 'hydro',
'Treasure Keeper': 'hydro',
Treasurer: 'event',
Treat: 'event',
'Tree Troll': 'rift',
'Tri-dra': 'rift',
Trick: 'event',
'Tricky Witch': 'event',
'Triple Lutz': 'event',
Tritus: 'hydro',
Troll: 'shadow',
Tumbleweed: 'law',
'Tundra Huntress': 'event',
'Turret Guard': 'hydro',
'Twisted Carmine': 'hydro',
'Twisted Fiend': 'shadow',
'Twisted Hotcakes': 'hydro',
'Twisted Lilly': 'hydro',
'Twisted Treant': 'rift',
'Tyrannical Thaumaturge': 'arcane',
'Uncoordinated Cauldron Carrier': 'shadow',
Undertaker: 'law',
'Unwavering Adventurer': 'rift',
'Upper Class Lady': 'law',
'Urchin King': 'hydro',
Vampire: 'shadow',
Vanguard: 'physical',
Vanquisher: 'hydro',
Vaporior: 'draconic',
'Vicious Vampire Squid': 'hydro',
'Vigilant Ward': 'rift',
'Vincent the Magnificent': 'event',
'Vindictive Viscount': 'physical',
Vinetail: 'physical',
'Vinneus Stalkhome': 'physical',
'Violent Violinist': 'physical',
'Violet Stormchild': 'draconic',
Walker: 'tactical',
'Wandering Monk': 'rift',
'Warden of Fog': 'normal',
'Warden of Frost': 'normal',
'Warden of Rain': 'normal',
'Warden of Wind': 'normal',
'Warehouse Manager': 'law',
'Warming Wyvern': 'draconic',
Warmonger: 'physical',
'Water Nymph': 'hydro',
'Water Sprite': 'rift',
'Water Wielder': 'hydro',
'Wave Racer': 'normal',
Wealth: 'rift',
'Wealthy Werewarrior': 'shadow',
Werehauler: 'shadow',
Wereminer: 'shadow',
Whelpling: 'draconic',
'Whimsical Waltzer': 'physical',
Whirleygig: 'shadow',
White: 'normal',
'White Mage': 'arcane',
'Wicked Witch of Whisker Woods': 'tactical',
Wiggler: 'tactical',
Wight: 'arcane',
'Wild Chainsaw': 'event',
'Wily Weevil': 'tactical',
'Wind Warrior': 'arcane',
'Wind Watcher': 'arcane',
'Windy Farmer': 'normal',
'Winged Harpy': 'rift',
'Winter Games': 'normal',
'Winter Mage': 'hydro',
'Withered Remains': 'rift',
Wolfskie: 'hydro',
Wordsmith: 'physical',
Worker: 'tactical',
'Worried Wayfinder': 'tactical',
'Wound Up White': 'normal',
'Wrathful Warden': 'physical',
'Wreath Thief': 'event',
Yeti: 'hydro',
'Young Prodigy Racer': 'event',
'Zealous Academic': 'shadow',
Zephyr: 'shadow',
Zombie: 'shadow',
'Zombot Unipire': 'event',
'Zombot Unipire the Third': 'rift',
'Zurreal the Eternal': 'tactical',
};
if (miceMap[mouseName] == undefined) {
console.warn('Mouse not found', mouseName, miceMap[mouseName]);
}
return miceMap[mouseName];
}
function hidePowerCrowns() {
if ($('.mouseCrownsView-group-header.powerCrown').length > 0) {
$('.mouseCrownsView-group-header.powerCrown').remove();
$('.mouseCrownsView-group:not(.favorite)').find('.pt').remove();
}
}
/********** Copy Crowns **********/
function copyMyCrowns() {
const debug = localStorage.getItem('ws.debug');
hg.utils.MouseUtil.getHuntingStats(function (data) {
let statArray = [];
data.forEach(function (arrayItem, index) {
const mouseName = correctMouseName(arrayItem.name);
const catches = arrayItem.num_catches;
const misses = arrayItem.num_misses;
statArray[index] = [mouseName, catches, misses];
});
if (debug == true) {
console.log('My Mice Array', statArray);
}
let finalTable = statArray.map((e) => e.join(',')).join('\n');
GM_setClipboard(finalTable);
const copyCrownsButton = $('#copyCrownsButton');
copyCrownsButton.css({
'border-style': 'solid',
'border-color': '#f44336',
'border-width': '2px',
});
setTimeout(function () {
copyCrownsButton.css({
'border-style': 'solid',
'border-color': 'grey',
'border-width': '1px',
});
}, 1000);
});
}
function copyCrowns() {
const debug = localStorage.getItem('ws.debug');
const allMice = $(
'.mouseCrownsView-group.none,.mouseCrownsView-group.bronze,.mouseCrownsView-group.silver,.mouseCrownsView-group.gold,.mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond'
).find('.mouseCrownsView-group-mouse');
let miceArray = [];
allMice.each(function (i) {
let $mouse = correctMouseName(
$(this).find('.mouseCrownsView-group-mouse-name').text()
);
let $count = parseInt(
$(this)
.find('.mouseCrownsView-group-mouse-catches')
.text()
.replace(',', ''),
10
);
miceArray[i] = [$mouse, $count];
});
// need to sort uncrowned by # instead of Alpha
if (debug == true) {
console.log('Their Mice Array', miceArray);
}
let finalTable = miceArray.map((e) => e.join(',')).join('\n');
GM_setClipboard(finalTable);
const copyCrownsButton = $('#copyCrownsButton');
copyCrownsButton.css({
'border-style': 'solid',
'border-color': 'grey',
'border-width': '1px',
});
setTimeout(function () {
copyCrownsButton.css({
'border-style': 'solid',
'border-color': 'grey',
'border-width': '1px',
});
}, 1000);
}
function correctMouseName(mouseName) {
mouseName = mouseName.replace(' Mouse', '');
let newMouseName = '';
if (mouseName == "Ful'Mina, The Mountain Queen") {
newMouseName = "Ful'mina the Mountain Queen";
} else if (mouseName == 'Inferna, The Engulfed') {
newMouseName = 'Inferna the Engulfed';
} else if (mouseName == 'Nachous, The Molten') {
newMouseName = 'Nachous the Molten';
} else if (mouseName == 'Stormsurge, the Vile Tempest') {
newMouseName = 'Stormsurge the Vile Tempest';
} else if (mouseName == 'Bruticus, the Blazing') {
newMouseName = 'Bruticus the Blazing';
} else if (mouseName == 'Vincent, The Magnificent') {
newMouseName = 'Vincent The Magnificent';
} else if (mouseName == 'Corky, the Collector') {
newMouseName = 'Corky the Collector';
} else if (mouseName == "Ol' King Coal") {
newMouseName = 'Ol King Coal';
} else if (mouseName == 'Dread Piratert') {
newMouseName = 'Dread Pirate Mousert';
} else {
newMouseName = mouseName;
}
return newMouseName;
}
function decorate() {
let collapseProps = JSON.parse(
localStorage.getItem('ws.mh.pfp.collapseProps')
);
if (collapseProps) {
} else {
collapseProps = {
none: 'E',
bronze: 'E',
silver: 'E',
gold: 'E',
platinum: 'E',
diamond: 'E',
favourite: 'E',
};
localStorage.setItem(
'ws.mh.pfp.collapseProps',
JSON.stringify(collapseProps)
);
}
let uncrowned = $('.mouseCrownsView-group.none').find(
'.mouseCrownsView-crown.none'
);
$(uncrowned).css({
'background-image':
"url('https://cdn-icons-png.flaticon.com/512/3281/3281316.png')",
'background-repeat': 'no-repeat',
'background-size': 'contain',
});
let favorites = $('.mouseCrownsView-group-mouse');
$(favorites).each(function (i) {
const image = $(this).find('.mouseCrownsView-group-mouse-image');
const catches = parseInt(
$(this)
.find('.mouseCrownsView-group-mouse-catches')
.text()
.replace(',', ''),
10
);
setCrownBorder(image, catches);
if (localStorage.getItem('ShowPowerCrowns') == 'Y') {
populatePowerCrowns(this);
}
});
$('.mouseCrownsView-group').each(function (index) {
const thisCrown = $(this)
.attr('class')
.replace('mouseCrownsView-group ', '');
const isHeaderExpanded = collapseProps[thisCrown];
if (isHeaderExpanded == 'E') {
$(this).find('.mouseCrownsView-group-mice').removeClass('hidden');
} else {
$(this).find('.mouseCrownsView-group-mice').addClass('hidden');
}
const header = $(this).find('.mouseCrownsView-group-header');
let catches = header.find('.mouseCrownsView-group-header-subtitle').text();
catches = parseInt(
catches
.replace('Earned at ', '')
.replace(' catches', '')
.replace(',', ''),
10
);
setCrownBorder(header, catches, isHeaderExpanded);
});
}
$(document).on(
'click',
'.mouseCrownsView-group-header:not(.community):not(.powerCrown)',
function (e) {
showHideCrowns($(this).parent());
}
);
function showHideCrowns(thisGroup) {
let collapseProps = JSON.parse(
localStorage.getItem('ws.mh.pfp.collapseProps')
);
const thisCrown = $(thisGroup)
.attr('class')
.replace('mouseCrownsView-group ', '');
const theseMice = $(thisGroup).find('.mouseCrownsView-group-mice');
if (theseMice.hasClass('hidden')) {
collapseProps[thisCrown] = 'E';
} else {
collapseProps[thisCrown] = 'C';
}
theseMice.toggle();
localStorage.setItem(
'ws.mh.pfp.collapseProps',
JSON.stringify(collapseProps)
);
decorate();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ITEMS TAB
//
//
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function manageCollected() {
let itemContainer = $('.hunterProfileItemsView-content-padding');
//Hide LE Layout
if ($('.hideLeContainer').length == 0) {
let hideLeContainer = document.createElement('div');
hideLeContainer.classList.add('hideLeContainer');
let hideLeCb = document.createElement('input');
hideLeCb.type = 'checkbox';
hideLeCb.name = 'hideLeCb';
hideLeCb.value = '';
hideLeCb.id = 'hideLeCb';
hideLeCb.checked = '';
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeCb.checked = 'Yes';
} else {
hideLeCb.checked = '';
}
let hideLeLabel = document.createElement('label');
hideLeLabel.htmlFor = 'hideLeLabel';
hideLeLabel.appendChild(document.createTextNode('Hide LE Items'));
hideLeContainer.append(hideLeCb);
hideLeContainer.append(hideLeLabel);
$(itemContainer).prepend(hideLeContainer);
$(hideLeContainer).css({
width: '100%',
});
$(hideLeLabel).css({
fontSize: '14px',
width: '80%',
});
$(hideLeCb).css({
width: '5%',
});
}
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
}
let allTypes = $('.hunterProfileItemsView-categoryContent');
let allItems = $(allTypes).children();
allItems.click(function () {
hg.views.ItemView.show($(this).attr('data-type'));
});
}
function hideLeItems() {
let allTypes = $('.hunterProfileItemsView-categoryContent.active');
let allCollected = $(allTypes)
.find('.hunterProfileItemsView-categoryContent-item.collected')
.not('.limited_edition');
let allUncollected = $(allTypes).find(
'.hunterProfileItemsView-categoryContent-item.uncollected'
);
let collectedLe = $(allTypes).find(
'.hunterProfileItemsView-categoryContent-item.collected.limited_edition'
);
let activeTab = $('.hunterProfileItemsView-filter').filter('.active');
if ($(activeTab).hasClass('collected')) {
$(allCollected).show();
$(allUncollected).hide();
$(collectedLe).hide();
} else if ($(activeTab).hasClass('uncollected')) {
$(allCollected).hide();
$(allUncollected).show();
$(collectedLe).hide();
} else if ($(activeTab).hasClass('limited_edition')) {
$(allCollected).hide();
$(allUncollected).hide();
$(collectedLe).show();
} else if ($(activeTab).hasClass('all')) {
$(allCollected).show();
$(allUncollected).show();
$(collectedLe).hide();
}
}
function showLeItems() {
let allTypes = $('.hunterProfileItemsView-categoryContent.active');
let allCollected = $(allTypes)
.find('.hunterProfileItemsView-categoryContent-item.collected')
.not('.limited_edition');
let allUncollected = $(allTypes).find(
'.hunterProfileItemsView-categoryContent-item.uncollected'
);
let collectedLe = $(allTypes).find(
'.hunterProfileItemsView-categoryContent-item.collected.limited_edition'
);
let activeTab = $('.hunterProfileItemsView-filter').filter('.active');
if ($(activeTab).hasClass('collected')) {
$(allCollected).show();
$(allUncollected).hide();
$(collectedLe).show();
} else if ($(activeTab).hasClass('uncollected')) {
$(allCollected).hide();
$(allUncollected).show();
$(collectedLe).hide();
} else if ($(activeTab).hasClass('limited_edition')) {
$(allCollected).hide();
$(allUncollected).hide();
$(collectedLe).show();
} else if ($(activeTab).hasClass('all')) {
$(allCollected).show();
$(allUncollected).show();
$(collectedLe).show();
}
}
//Weapons Tab
$(document).on('click', "[data-category='weapon']", function () {
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
} else {
showLeItems();
}
});
//Bases Tab
$(document).on('click', "[data-category='base']", function () {
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
} else {
showLeItems();
}
});
//Maps Tab
$(document).on('click', "[data-category='map_piece']", function () {
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
} else {
showLeItems();
}
});
//Collectible Tab
$(document).on('click', "[data-category='collectible']", function () {
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
} else {
showLeItems();
}
});
//Skin Tab
$(document).on('click', "[data-category='skin']", function () {
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
} else {
showLeItems();
}
});
//Collected tab
$(document).on(
'click',
'.hunterProfileItemsView-filter.collected',
function () {
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
} else {
showLeItems();
}
}
);
//Uncollected tab
$(document).on(
'click',
'.hunterProfileItemsView-filter.uncollected',
function () {
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
} else {
showLeItems();
}
}
);
//Limited Edition Tab
$(document).on(
'click',
'.hunterProfileItemsView-filter.limited_edition',
function () {
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
} else {
showLeItems();
}
}
);
//All Tab
$(document).on('click', '.hunterProfileItemsView-filter.all', function () {
if (localStorage.getItem('hideLeItems') == 'Y') {
hideLeItems();
} else {
showLeItems();
}
});
/********** Layout Opt-In **********/
$(document).on('change', '#hideLeCb', function () {
// Check to see if the cb was JUST checked
if (this.checked) {
// Put the checked value into storage
localStorage.setItem('hideLeItems', 'Y');
this.checked = 'Yes';
manageCollected();
} else {
// Put the checked value into storage
localStorage.setItem('hideLeItems', 'N');
this.checked = '';
showLeItems();
}
});