// ==UserScript==
// @name Mousehunt Helper
// @namespace DSXC
// @description DSXC's Mousehunt helper script.
// @include http://www.mousehuntgame.com/*
// @include https://www.mousehuntgame.com/*
// @include http://apps.facebook.com/mousehunt/*
// @include https://apps.facebook.com/mousehunt/*
// @version 14.3
// @revision - New zone, Dance Hall, added to the list of party locations, sorry it wasn't added before it was over.
// @revision - New region and zone, Rift Plane and Gnawnia Rift added to travel destinations.
// @revision - New crafting patterns for the Gnawnia Rift.
// ==/UserScript==
//===============================================================================
var SCRIPT = {
scripturl: 'http://userscripts.org/scripts/source/58464.user.js',
version: '14.3',
versionurl: 'http://userscripts.org/scripts/source/58464.meta.js',
lastupdate: DSXC_getValue('Update - Script', 'never')
}
var STATE_OFF = 0, STATE_SOUND = 1, STATE_MESSAGE = 2;
var SETTINGS = {
horn: 0,
king: 0,
cheese: 0,
washed: 0,
season: 0,
tourney: 0,
direct: false,
showall: false,
timers: true,
buttons: false,
auto: false,
length: 5
}
var STATE = {
title: document.title,
ready: false,
hash: '',
level: -1,
location: -1,
trap: -1,
base: -1,
cheese: -1,
route: null,
maintenance: false,
king: false,
redirect: '',
baseurl: location.protocol + '//www.mousehuntgame.com/',
hornstate: 0, // 0 = countdown, 1 = ready, 2 = sounding
userobject: null,
errorshown: false,
tourney: -1,
lastjournal: 0
}
var IMAGE = {
config: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oGDwceLTyDBTAAAAS1SURBVDjLTZRPaFRXFMa/c++dNzOdN2PrpCYTpw1xFUKtlHak2diq2KabGgoKLkKlK4m0QlpFQSmktG6qWFrdZNGKSCENWXRRRIjBSEi6SCFiQRo1VSfppPkzmcy/9959954unJHe1YVzOOd+3/fjwloLZoYxBs1TLpfBzIKZFQCEYSistTFjzBZmlswcN8wxZpYAEHh1Ya2VAKCIiIwxpJSyzJycnJzc4bruHAAeGxt7f2FhYVZKuWqtfVEIUfl95NLQ0r07+yxIBvXK01+Hv/kuEo3daQw3goh4enr6lXPnzv14/fr1pdnZ2StEBCLiu3fvto+Pj+cvXrz4W7lc0QCEXf5j8MAbLW+/uyPMvdcd+8hM/3D75++//Dj0gtBaC8HMuHbt2qeHDh062tra6haLxftNKVrr5M6dO2V3d/eBy1cu31rZqERUbQXVB1Pw/n3C9eWn7DoSxcLjd5wXYmytJQEglkgkSpVKBY7jIAzDDiJqGtqmtUYmk7Fevb5ttS4Cy8xBKOEHTH4AspbBEJKZBRFBAfA9z1sKwxCxWIxbW1v3Dw0NXWppaXmqlDqRTqfZGENBoP1a4cEWEwRSg6ANwJZhLAEwHgABwCoi4tOnT5cWFxeRy+Vo7969XKvVPiuXy8hms1BK8c2bN0UY6uWY5EQt0MIHQYcMywKWCUJG4kQUGmNIAMD58+dv5PP5G1evXoXv+5RKpZDNZtHwVxQKhXsnBr/Y15JOUhAEyg8YgRbQAWAsgYQAABARC2tt0lorT548+UFfX9+Rqampejweh5SSJiYmKBqN1vr7+z98dXumSiBlghBaCw4CwA/AbAWIwyoAWGshANSIyNFaq8HBwV/a2trmiYiEEOy6LjKZzGh3d/cCM2Pb9s4nNVDFDyx8X7Pva6rUV2HSrxUAQAgBQUSGiDaVUpGzZ89mlVJZIQRLKSkSiWBtbc00tkeIaNN5q//o7za5sdHVQ49aOvH365//9cmxwW+bAxUzN/VbAJxIJDwpJQFg13VpZWVlrVEPjTFKCHFr8s/C7f37j/StzMz4/tLSwXiUKsxMAJ6xAyAA4FcqFUSjURZCQEoJ13VRKpXKje1MRCERFX3P11IQjDW1f5YW15g5DoABQBARhBAMAJubmyIWi0EpBaUUXNdFtVq1zU+DmQUAVKuVZSklrLW2s7NTArAAiJkhrH3erzzPg+M4cBwHrus2XxhteChso7lcLrtSSpRKpZd2797dS0Q+MztEBCWEgLWWADhhGIpkMomZmRmsr69jz5498H0/x8wJAFoppU+dOnXQdd2jkUgEXV1dYmJioh/AT0TkExFE0x8Alplp69atGB0dRa1WQz6fh9a6DsA0JT18+PB+KpUKHMfh9vZ2hGE41wjtOYdoJO27rqvHx8fVmTNnsGvXLqpWq0in03ki8gBoAGJ0dPTR3NzcvVQqRfPz89ZxnLFGKM9oaV6MMeR5Ho4fP/51sVgciMfjpLVevXDhwpsdHR2bACwRgZkTAwMDX7mue2x1dbXQ29t74PDhw48bdUv/SxANhDAyMvJyoVBwcrlcvaenZ11rTUopMDMTERYWFrYNDw+7SqnSwMDARiaTMU0O/wOkOp5CS37/NAAAAABJRU5ErkJggg==',
craft: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oGDwcnBQeyIHAAAAMRSURBVDjLlZNNbxtVFIafOzMZOxM74/FH7DglrkybpIpC0gRSIipFlFSVUlHEAqGKX4AEEhIr+AOAWLBB3cGGFUJi2W0RCkYEDJRClMgB1RX14BgZTzJ27Ik9l0XdEpmkdV/prO65j857PgTHS0xPT5+3LOtKvV4/W61WZwzD2Aaub21tfeH7fgGQvZ/UhwBjlmWtRKNRI5VKXZ2dnQ07jvPE6urqBUVR3ozFYpdt2/4skUi0G43Gf1XQh8Lh8Fw2m/1paWmJUChEJBIhl8vJcrm8nc/nJw7nKv0A6/V6xzRNKpWKrNVq0nEcFhcXhWVZp+bn53f6tfxAUsodz/M80zRXACGEkKqqkslkRDKZNJrN5sVyufwpgEafsm37+87BLgvPLEshBIqiUK1W5dTUlKhUKmtACHAf2cNBDfbbnDqR1DdCAVX721WYmT0n6nXX8zxPn5yc9HVdVzzPI5/Pv9/PULTsWPDueDKY2Gu0RX7TfTedTl8vlUqV0dHRl8Ph8MfpdFpOTEwQj8fFoyyrschAaXJ8KO5LKW4WmhvAe6VSCQDXdW8MDw8D4HmeWF9fX3vYUJSwoX51fi5yRlMU/txpNop/tTKHl9nzvEqr1SqYpvmibdv5XC538ViaEVQ+emk5IV95YcS/8LQlgVf/1wvtnkHTNAfu7/SRloO68sHl5+JvBXRF+h0pfvuj/gnweW9eu90GwHGcg2MvRdN4/dK52LWRaEAi4dtbNXez2EgBjX7Wq/dSriyfjV4bTw3KwIDCnfK+2Cw2FvuF9QIzz86YX06dHJIBXWGv0Ra5X5x3gE0eQ/d7OPbkieDtudNhf9jQ+Mc9EN/crG3st/wPuxcA4B+KTjeOBBpWWP1x4UzEH4npYtftsPZz7eC23ZwGgl0XC8BTgAfsA7uAC9wF7gB7D4C6xhvZtDGSSQblPVhV/Pq7u9IFpYHngThQB74Git23NjAGnOwC94CqpioiNmSoslhuUii64ta2+wPwGnC127/vgI1uVb0qHGX77aFBpWSGVFdVuNFd4NNdu4+tfwEQ0ipmhXPGJwAAAABJRU5ErkJggg==',
potion: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oGDwciL6F+HeMAAAOLSURBVDjLhdRPbFRVFMfx77nv37xOHcoUOxApJGoRjYAaIKiRQCQYUwy6YePCpP5JCC5c6E42EBOjBKMLSNyJLowkRiMk/ktEkNjyJyKNWBcISFsozoxtp+3MvPfuPS6ABLQDZ//75NxzT47Qok58+drShYu6dxmR+4zQJurEuTRLm8lotVrZ92DvB3tmy/mtwLHhQbqKfq8XRKi1qEvRLGHi8oXuC+XsLLBn17f9vL5xzU05bzbsrYNHHljxxEuD7TO/C3gifogXFTBBHsXXRRt2Ll/2bJ+/bf3KH/6bldnAz44N6uqehRrUL5E6K+oyrLNkznLx71GSwhJsHT4+da6wv29T7casmQ1UBAPioqKoCVEvwnkx1svR9NrJBRG1pmV/36ba3r17uS04Upl4+7dzI4w3lXIaM5bkGEtCLjVCtG0htWqN0XK1D2Dr1q2tn6yq7DhwZOXau+86XirmtaMtlkaW0cgyUuew1vJPvU6aWc2ayNen/iiVOude2f7M2tk7FBGWloqfFGJfS4V2cQpj9YRyklFJLJOpBYR85FOIfVb1LH73Rux/He7+bmD1igXFgZFcRD6MODMxw8/lcVSERpJSrydMVibJpqZ5qDPWl5f1yIGhv+a9v2VDZdYO58bR5pqgPXMKWIXTE1OIMRgRPBEQwSJMp5bvz1dkuNHg/q6OLS0XuxAFT+eCgKJv8CKPh+OAVBUL1EPDVGioepbLeUM1SfmlOqnrOosrb/HLulg8T5xenWfB95gXBcyPArpyAZ1RQFsYIkZQYGhyWuLA3ApkGKfqGyE0BuTqkK1zOKfotS29XqlTgKAlOJXYA75aVJXUOYwIqsqCfEwpzoGC1eusUoojtU5/bQlemap/3mwkMtZIUGB+nANgJrMkziECmXMgoAqP39khI7X64ZbgG0+tOTk5k/SPVcY1EKN3hD5WlVqSEvsec8KAzCoCap3Te+NccvTspY9agjsPHuXEaPm5IEnkdGUcX0TbfY/MOS7WpinXG1hrdTq1smN5jwyVJ17c19c7c7trI9ve+3DVxnVrB0aMaBz4Mt5MSZ1jqDzO8MS0bu7ukuqf59/c/vzmdwALuFvdw/D4N19Vp+LCp490dy8JRebn0aBohC4jjcfyQf+Ph356ZferL3xx7Yf1Gtr6HgJGxPiqLjH3LO94dP2Tbb5v5NjhQ436mZNVIAZSILtpj4B/ATVLqIW4cZIuAAAAAElFTkSuQmCC',
refresh: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oHAQYoC7vvJQwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAADk0lEQVQ4y52UX0xbVRzHP+f+K7ctLZYNDMPq6GRZxGyJ4MSJE3RkS0zUB+bDYrLsaeqDj5qYmBjjgwu+6ZuJvmwPLD4Q9WHGMAY4I7rMOHBKgcEK0qKFlraU3tue44O0KQjT+H065+acz/nd3+/7+8F/0Lm2Wv632pvs8lK0wKGesH0KMMofIwFR+3QDJwBzp/vGtr1o32ucef+N831KyaPJ+TuNH30+9BkwCmQBzjxz+PzhcOjC8Vu/DLx3Lf4akKwG6NuA2o8JR28T8bfE0lRjNrnM1Vj+SjIvhwEXsE4/2ngpMxetDemi7Ug48NTofHYQyFcA24Cy/+xzvR1dx+vtYC12jUViXS4CJYBjYd/R0kqi+b46L4ZtqkaLJ3v3+14HrB0jPNVS90hve+vAwo0R/YNvlz+JraxHJ/50RoGprrBPjt3NpaeT+TsdDwa6dfA4RUm9QffwUuEyiuV/AM92to6nY9HQ/LqKDt5OvTudci8CcSBzN+2iCQrJgrp9K5H/+fFm30s5p6QXMhvCrjFXZ1LuKCArv9xVr/eofPqhUtFlaCb9FTAJ/AEsAQpAKgDW51LON1Pp0qCQUuSlUrWa7AQCW3J4YF+gO5tKU5RwM77xPZC7h7uyl2c3+i2PiUAJvyWageAWoFF0I5apqWJRshmZ3I12f9Dm96XVSVcTWa/PxDQNG7CrfSgeaPR7jaIUhi4ov7ab4uk8gFNS2pqh636f33RgTVVHKBxXZWRJKk0TnIgEn9jB9NuldF0PeTwmqZybANYrQFMTKivFjJRSFFzJY032i8Cee9Eifg76vJ4aTdOYz7o/AakK0JVK/RDLjiilcEuSgCVae1vrzpXzUt2a1t+R66/29bztFCSJrCuvzma+ADJbfBhbcxItddZJDZqUEOz1mT11Hs0TXSmMvNzqL00mHQCr78i+TyPhBnGoKfRObHZOvzix+mHGVYNAegvQ1ERpOuVMtjXYr3gMoQkUXuQxIQh9PZ8fAoqA/9n9wUsvPH/y9MTYsLi2kP/y12ThYyBa9mrFNq5UMu2omzcSGxcsyxCmqeMgSuPxwvWqc96NzBrfDQ5g6mgO2jjwW7XFtlTSNkTu+uJ6P0LI7gPBNxcLjAE3yhXsjIQeNrQiqy6J1awzo8tig4Cg2hxtAGKXIgaBDo8ufIWSugJsADT4zLblnNux2Y4Lm32e2kzHv8qoHksH91Qawd5hjlb0F9+teenmFNIUAAAAAElFTkSuQmCC',
travel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oGDwcpBgA4XEQAAANuSURBVDjL3ZRvbBN1GMe/v7te/9H2uLVrV6eOplsIDl2E4DI3s5GBMRsQZ6aJjBA3A0bUF2pIjEGDG4MYEzEmxogJEiM6NQgOjYhTzAwLrgbrFljHAsOxbt3Rdru7ttdr7+7nC2JiE/8EX/J99TzfPM/n1fN9gFtCP36+p6QfPPTszUNe3roWlNIS74P+Tt+f9aHe7X+7R/4LfOztHTXlQX8P7/U9brXZPYm5hd71j+5965/mS4AcgKFjezm3x2NLiom1Pr//NYdzWTNhGOTUPKS0DCUlZvSi+lQ8nvzkuQMn6Pt9W7HjlY9LgUff3MWvaagPaKqyEsRstVmtWyg1Q2AYUEogLUpUN0EEwUXldIoUtKKeySjtfS8e/H50EcaHb/Rg++7DN4CnBvavX9e88QVZnKmlphoCKPJqHi63ixaLOliWJVdikwAMMAyBR/DSMn8luTY9WVAzudcf7Nr/KgC8u+cRPL3vC7CtjaurfV5hH1/mFVgGuHxhHAYlKPMKxCwukOTCFHKKBg4GKOeAmMwS0yhS0zQtgtfXtHFNwPnZqejQ18MTONzfBfaesPc6y5C2O0LhClMv0viVScJxDDTKQKhsQDDUiOtiFDY7oBacyGSyuHNFFbE73JRShtGy6VXtzbW5++8NR5/p/dRghyNThfrVVRMenu8M3Ba0uXgBLsEOPtCIvDyP+PQ4QquacOnCEMrcy+CvqIRpFCEvpQkKCmUtnJPQQhtLda6p7vYRFgC+/Wns97qacsntWd5SURGwatkxqiNILsfOITb2A/yVtXDYdGSVeVDDDkNTAMZCObudUFOHIslIpZcaFiU1wnY/XI9oLI5vzpyPrKwqF60c95BPiFsW01epbgkTh5uHlpvFxV+OYLnvblp9VwORZQmpuRmi5IqYm09J09OzAxenxHcmZ5bOEADo2rQOR7+KAACe7960c9u2+ve8wlU6G1chijIRFy5BlqzY3LEbWr6AkeGzS9dm4+czqnFckTJnjwyOTgDIlxz2hvtqMDQ6dSN2uzoOdPdseSkRH6UcpxOHqwaE+BD5OSqei4z3zc0nB5x2S/b46V81HTD/NXpPdDQhq+QsrRse+LJ9c2vb2G+xxMmTp7/LZHOJjwZH+gFI/+vDPNnZEt75WMtB3oKqv/p11cGbh1E6gVtXfwAxKYLl39hF2gAAAABJRU5ErkJggg==',
journal: 'data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAP///zQTFCsVFnNRUxYLDBsHCTclKGJXWTQrLVRQUQgGB05MTTk4OVpbW4NqSZZ3UYNpSJd6V4tyVIFkRYBmSZN1VZR8Yop2X2xML31mUZmAa5eAb4NfRWlKNn5cSZiFe3xPO3lQPHZJNmc5KIU8LcdBK3MnGrxCLc1LM8pIMr5EL8RKNMZLNcdLNsRKNcdMN8BJNchQOcRNOclPO8hQO7BINoU2KcpUQLxPPMlVQcFSP7UrGMkzHbMvG4EhFLIuHKwwHLUxHqMrG7MxH5wrG8o8JcY6JLUzIa4yIa43JLc5Jqs0JL08KJ8xIro7KLk7KL88Krk6Kbk8Kbc7Kbo9K7o+LLY8K646KcFALrxBLbo+Lbk+LcREMbtAL688LLxDMIkyJMdJNas+Lo41J4gyJqpAMJE3K58+MNFTQKhDNMhTQMZSQL9RP6FCNblPPqBENp4XB4cVCGQPBpodD6MfEKMgEaAiEokcD7UlFaEhE2IWDnQbEV8WDqUoGbouHYkgFakrG6UqGrQvHp4nGoUiFrEvHpQmGYIhFqArHI8lGcM1I60uH5QoG28dFKwwIKMtHpYoHMs6J7UzI6MuIJ0rH4onG7Y3J706KrQ4KKkzJb07K54yJJowI4wsIKk2J4orILU7K7s9Lbs+Lrk+LqY6LLJANL9IOZU4Lr5VSZtHPqNXT655cnYPBaEYCm0PB1wOCIcZEFMSDYsgF3YbFHgcFYQjGZElHG0dFXkfGIIjGnUfGHIgGJYpIJguJIEnH6QzKHklHocuJ5o8M5I6MYo5MVwrJkoHAjwHA1QNCUEMCXAZE2cYE0IQDXMdF4MhG38hGognIGooJJlOSadXUWlbWi0FBDsIBj8MCmZKSUgBADQAACoAACUAACMAACIAABkAABYAABEAADcFBf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAOQALAAAAAAUABQAAAj/AMkJHEhwGcGDCAdKizUroUNVwHbR0oPKIUFiiZJU6cTsUZ1VDqmVuvXsihdSmRwNO2UHIYFWdxr9CsYEyhZMh4qlMkXo4IA5RWo502XJ0xQpk6LBYXWpF0EE3foEAqQIGigsojZp4qXkj6tpBAscK+Snkq9PoaygaOEpmaAecQgyCCdLyKAno7hEycLChS1luPLQIbgAGSJISKho6SJmxpo0kcY1kyNsoANw2CgRWbLiRQ0dbd7QYATL2rZsAxNw4+OkSQwcO9SgsSHDBI9cJD4QFHfNDJscbs6MgZHiSJASHSwcbOCNk7EbX8CoMAIkjIgHGBIaeLXnh6RFhsiMKKBwwaKCb3h8DCkTIsIEEBYFHtB2wkMFCRziExSQAcIG/QdVo4F+AQEAOw==',
close: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBAYMCW+DdHoAAAN1SURBVDjLXZNNTNt1AIaf37+ltEUGBVaKmEyGCIrMTGogUYgzBi4wFzDFxMTFQHZSonFk6UXNTAzJjAvRA+GAB8UEiJjwMTEjIEbctBOTNkBBvrYCK1DStbT/fv9/HhYP23t+nyfv5YXH0tvbm+fz+a6GwuE/ImrsfjQe3w9HIn+vrKz09ff3lwNMTU09CjmdTgAmJiY+CQQC8mhrU/puLciNX6bk2sRPcv3nSelz/SkP/H65uLj4A8DMzAwA4n/J6OjocEN9nSO65EHGokhNoiUTaMkkmWSCtKqSSCQoePUc8RP5qzUvVFeNjY2hPIRHuurtdkfw93nSoQc89XoTUtNIHOyTDBwgFIXT7W8TXfPi7f2M5NZ6pcvl+ratre3hgrX19UTsr4Usbd8vKi69T47JBEJw59PLRDbWeO37cVKpJGoqzUiZhXg8RfPiv7hu3y7Wzc3NNZQUFXUdTo8LYlFWJ8fIq28gx2Si5FwTJa1vEQ6FCKkxZi9eoMC/jRGJvupFTp2tDehLS0vPxu7vkj7c58h9h/TdVeZ/u0HDjBsFSKfTiCwDy53NnNle5viEgXBSI73llZY3musUKaVZAIFbv5L0bZCrl1R/cAVN00ilUiiKgk5qPH/5Cyy5eqy5OgrNOgzZ2SLLYNArXq83Yn2umuD2DgY9lF7/Dsv5d9AJQTwaYdP9D6FQiIitjNg3s5iLT2LSaeTX1nEcDoeUgYGBDV22keLW84hsI/6sJ1DQ2PPdg4+aqPrqXXZXl7BYLIhCG8EsM8G8k1Q2teB2u+8JgKGhIflmS4ucfPlpUahL8uBiD5U3B6gwpBACohlwv/clRSPXMO5uol2fxlh6ir6+PrsOwGw2Z1XX1DTWdl/BO32DovkfMekUYhlBLANpqWBZGGcvmib44dfkP1Mll5eWXN3d3Vd1AG63e9ZkMrVmm3OebP38GsflZ/BHkgTUFIc6M/7iCu7WXyDd0Y05v0Cqqhrt6el5yeFwxAVATU0NHo+H9vb2Ybvd7mhsbJRlp8uFMScHVVUJHh2x5l2RUkqhquqK0+l8ZWdnJyiEQA/g8XgAsNlsXfPz83t7e3uXrFar2WazYTQaiUQiuFyuTDgcnj4+Pv54d3c3KIR49EwdHR0MDw8D0NnZaQkGg89Go1FbJpPBaDQeWq3W9cHBwYPHu/8B/IeoYeNzxNQAAAAASUVORK5CYII=',
background: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oHBhcQBlLyFLQAAAU8SURBVEjHdZbPb1zVFcc/98d7M7Zngu04sg1xkkZylSBaqXGRKgSLyLYIQgEWqFJ3bRdd9T9A7LuGLTtYIEWpqpZWKSnKJpEKTSgEkWAIjsgPfiQhmWRmPPPuTxb3Ps84pU86uvf9Op/zPefc+57g4aO1Cr338skRxcHlNs7+EqVXmN51iKmJWYiR7uA297uX8fY8RfkRm1f6cMED0F6F7ns73IqdkHXonU7Xp48d5vDB51laPMYvDk3x0/2OVtPjYsR7sE7Q6So2vtJ8eqXDN7f/yub1d+mcupJga9D914+Atm8stjjwzG9Y+9WLrDw+x9LCEGsDxgqsB5/NeQgRYoQQBNe+bXJ58yb/vXyS6ydPAJbWGvQSTCXIeoY8NsfhtVf47QvP8eQTJRMNQ28Aw0pQWTAGjM3moDIwrGBQRQpt2TPTYmb6CN3dB7h3433MJUt7HcwmakRdanPo6Kv84eUVFuYilY1URuxwbt0YxI2uV1ZQWYGxgbIQ7JnZR2dyH/c/P4v5ItBeRWE2gVKyd/V3/PrZY8zvjsmpFSPnLo07zI6pGwMObSrJZHM/D6Yr+hufYK7m1O1a+xnPrPyRJ5Y1xkaMFdvOnU9Orc9A/xCwvu/YTm9lI0IofNhPf+5DzJd3NTyl2Lf4Esv7phlWA7wXhDhW6Agh5LkHn8/rhvB+DG7BeDBGYKxnsrmXR9rrmKNXNQu797B7ZpX21JD+QGwDiBCAGEbAGMGHMVAA/5BKY1OTVBaEHKD1cVqTb2qifIqlhZLeIKkhQuakeX1ew0KC+TCmqK5jBlQOhkZQmYjWs4Twc01RHOGRlqM/EEnJjx0PAWtQXTvrwI3VrbLJhgYq5xHqSc1k8yDOe4Id2y9Etv/l4UNaO/1BUuHdCBzJQDsyKRxKPq6BNr2tiJTJ8TYkmxRpAxFjkMoksFbpvvBATl9dQwFICUpFpJzXbA0VmzdhfhaaZXYus4M8F1masSl1ZZHV5S6s1deprztVZZNCaGLsc+/BJM5HZtrQmgCtczQivSzyqGRSQXbqBMgwSnHdMFqCV6ADeC8Q4q5Giq+Qch7nPd2t1EnNEholFBpUTM6VygHkvTiEFIz3GRR3NorOXSmlQvCZxNkPkbJAyYiSo6KHnAYloShSusoiBdDIY1mkYLROgSg5GqUAJSNSaqy9IHHuLMF7lBTpZn5Q5zRpnZyVRQKUZbIaXuj8XA2SIFVOvZQ420OJ85JG42uMOYeQJVJGlBiLLDso1JiiMSuKFEidWqVGtVUyAk2sPUWIXcmNPzu8O4E1Q5QUCBlzNFlZVlRoKHVS0yjyXI+BajUSpIxIKbHmDtb8g+/+5lNRrn78McPhO/igkSKlUEhGwFpZAQ09Sl2ttgbU604KgfeC4fAvXDt5GUAyvQ5sWD699BZbg4tERF4XMb+UnBQqqaqboa5NHVBad3F7KfT6H3Dp3NtApH0UxXATFo5D78wW35WX2DO7TLO5yEQjonWkKMR2M9Rdp+TYxpq/Wc5HQpAMhorv717gg7N/go0Oc89B53T+8PU+h6WXoHO6wzX/H2ZnC6Rcpj3VpCg8WkUKJbbrAaMN1PmIDwJjJ7hzr8+t70/w73++DhsdFo/Drb+P/ZwAPPgMHnsRume2uP71BaYWLtLvt9D6J+xqlWnxqtQoMYILAuc11jX45lbg2o13uXXnNc6/cQruVcw/D9++83/+6wCm16FzOs1Xfq+5e3+R2fbT7H30CO3WAcpiF4JIZR5wv/cl12+epzc4x2TjNhffyj+QR6F7ZofbHwBbOem8JzJyVgAAAABJRU5ErkJggg=='
}
var AUDIO = {
cheese: 'data:audio/mid;base64,TVRoZAAAAAYAAQAIAeBNVHJrAAAAGQD/UQMGW5oA/1gEBAIYCAD/WQIAAAD/LwBNVHJrAAAAxQD/Aw9GaW5hbCBGYW50YXN5IDUA/yEBAAD/IAEAALAHfwCwCkAAwAQAkEZkgXCARlAAkEhkgXCASFAAkElkgXCASVAAkEtkgXCAS1AAkE1kAJBEZACQRmQAkDZkg2CATVAAkElkg2CARFAAgEZQAIA2UACASVAAkExkAJA1ZACQRWQAkENkg2CATFAAkEhkgmiAQ1AAkEFkPIBIUACQSGQ8gEVQAJBLZDyANVAAkDFkiWyAQVA8gEhQPIBLUDyAMVAA/y8ATVRyawAAABgA/wMLR29vZCBOaWdodCEA/yEBAAD/LwBNVHJrAAAAJgD/AxlPcmlnaW5hbCBieSBOb2J1byBVZW1hdHN1AP8hAQAA/y8ATVRyawAAACIA/wMVUzNNIGFuZCBtaWRpIGJ5IFlha3JhAP8hAQAA/y8ATVRyawAAAC4A/wMheWFrcmFAbmJyeWFuNzEuZG9ybS51c20ubWFpbmUuZWR1AP8hAQAA/y8ATVRyawAAABsA/wMOQXVndXN0IDQsIDE5OTcA/yEBAAD/LwBNVHJrAAAAKAD/AxtCZXN0IGhlYXJkIGluIEN1YmljIFBsYXllciEA/yEBAAD/LwA=',
horn: 'data:audio/mid;base64,TVRoZAAAAAYAAQARA8BNVHJrAAAAXQD/AzZGaW5hbCBGYW50YXN5h1iBd4N0g0CDk4N0g0CBW4OMglCBeC9ieSCQX5azltiBmZdGlusvR00A/1EDB6EgAP9YBAQCGAgA8AV+fwkB9wD/WQIEAIG0AP8vAE1UcmsAAAD9nXDAOACwXVoAsFtAALAHf5Y0kDtkWIA7ZDKQPWRWgD1kMZA/ZFaAP2QxkEBkVoBAZDGQQmRWgEJkMZBEZFaARGQxkEVkVoBFZDGQR2QAkERkAJBAZIc8gEdkAIBEZACAQGQAkEdkAJBEZACQQGSBS4BHZACARGQAgEBkc5BHZACQRGQAkEBkgUuAR2QAgERkAIBAZHKQR2QAkERkAJBAZIFLgEdkAIBEZACAQGRykEhkAJBDZACQQGSHPIBIZACAQ2QAgEBkAJBKZACQRWQAkEJkhzyASmQAgEVkAIBCZACQTGQAkEdkAJBEZKUsgExkAIBHZACARGS1EP8vAE1UcmsAAABVnXDBKwCxXWQAsVtAALEHeJ1wkS9khzyBL2QAkS9kgUuBL2RzkS9kgUuBL2RykS9kgUuBL2RykTBkhzyBMGQAkTJkhzyBMmQAkTRkpSyBNGS1CP8vAE1UcmsAAADanXDCLwCyXUYAsltQALIHf51wkiNkhGOCI2SCWJIjZIFLgiNkc5IjZIFLgiNkcpIjZIFLgiNkcpIkaYRjgiRpgliSJm6EY4ImboJYkihzhGOCKHOCWJIjf3qCI39FkiN/eYIjf0WSI395giN/RZIjf3mCI39FkiN/eYIjf0WSI396giN/RZIjf3mCI39FkiN/eYIjf0WSI395giN/RZIjf3mCI39FkiN/eoIjf0WSI395giN/RZIjf3mCI39FkiN/eYIjf0WSI395giN/RZIjf4RjgiN/t3T/LwBNVHJrAAAAyJ1wwzAAs11aALNbQACzB26WNJM7ZFiDO2Qykz1kVoM9ZDGTP2RWgz9kMZNAZFaDQGQxk0JkVoNCZDGTRGRWg0RkMZNFZFaDRWQxk0dkAJNEZIRjg0dkAINEZIJYk0dkAJNEZIFLg0dkAINEZHOTR2QAk0RkgUuDR2QAg0RkcpNHZACTRGSBS4NHZACDRGRyk0hkAJNDZIRjg0hkAINDZIJYk0pkAJNCZIRjg0pkAINCZIJYk0xkAJNEZKJTg0xkAINEZLds/y8ATVRyawAAAAaBtAD/LwBNVHJrAAAABoG0AP8vAE1UcmsAAAAGgbQA/y8ATVRyawAAAAaBtAD/LwBNVHJrAAAABoG0AP8vAE1UcmsAAAA2nXDJAAC5XWQAuVtLALkHf51wyQAAmTFkiUeJMWSFMJkxZIlHiTFkhTCZMWSiU4kxZLdf/y8ATVRyawAAAAaBtAD/LwBNVHJrAAAABoG0AP8vAE1UcmsAAAAGgbQA/y8ATVRyawAAAAaBtAD/LwBNVHJrAAAABoG0AP8vAE1UcmsAAAAGgbQA/y8A',
reward: 'data:audio/mid;base64,TVRoZAAAAAYAAQAJA8BNVHJrAAAAQAD/AzZGaW5hbCBGYW50YXN5h1iBd4N0g0CDk4N0g0CBW4OMglGBeC9ieSCQX5azltiBmZdGlusvR02B0gD/LwBNVHJrAAAAIwDwBX5/CQH3AP9RAwcK4gD/WAQEAhgIAP9ZAgAAgdIA/y8ATVRyawAAAVEAwTgAsQd/ALEKFACxW0C0QJE5RoEggTlGAJE7SIEggTtIAJE8SoEggTxKAJE+TIEggT5MAJFAToEggUBOAJFBUIEggUFQAJFDZINggUNkAJE8WoFwgTxaAJE+XIFwgT5cAJFAX4FwgUBfgXCRRWSBcIFFZIFwkUNijwCBQ2IAkUZpg2CBRmkAkT5fgXCBPl8AkT9hgXCBP2EAkUFkgXCBQWSBcJFIaYFwgUhpgXCRRmePAIFGZwCRSWSDYIFJZACRQV+BcIFBXwCRQmGBcIFCYQCRRGSBcIFEZIFwkUtpgXCBS2mBcJFMZIFwgUxkgXCRRF+BcIFEX4FwkUVigXCBRWKBcJFJZIFwgUlkgXCRTG6CQIFMbgCRSWmCQIFJaQCRTG6CQIFMbgCRTnOCQIFOcwCRS26CQIFLbgCRTnOCQIFOcwCRUHieAIFQeI8A/y8ATVRyawAAAT0AwkgAsgd/ALIKbgCyW0C0QJJRRoEgglFGAJJTSIEgglNIAJJUSoEgglRKAJJWTIEgglZMAJJYToEgglhOAJJZUIEggllQkmCST2SBcIJPZACSUWaBcIJRZgCSUmiBcIJSaACSUWaBcIJRZgCST2SDYIJPZJJgklJogXCCUmgAklRqgXCCVGoAklVsgXCCVWwAklRqgXCCVGoAklJog2CCUmgAklVpg2CCVWkAkk1kgXCCTWQAkk5mgXCCTmYAklBpgXCCUGmBcJJXboFwgldugXCSWG6BcIJYboFwklNpgXCCU2mBcJJVa4FwglVrgXCSWG6BcIJYboFwklVzgkCCVXMAklFugkCCUW4AklVzgkCCVXMAkld4gkCCV3gAklNzgkCCU3MAkld4gkCCV3gAkll/ngCCWX+PAP8vAE1UcmsAAAHGAMMwALMHeACzCkAAs1tQtECTOWSBIIM5ZACTO2aBIIM7ZgCTPGiBIIM8aACTPmqBIIM+agCTQGyBIINAbACTQW6BIINBbgCTPFoAk0BaAJNDWodAgzxaAINAWgCDQ1oAkzxeAJNCXgCTRV6HQIM8XgCDQl4Ag0Veg2CTP18Ak0NfAJNGX4dAgz9fAINDXwCDRl8Akz9fAJNGXwCTQ1+BcIM/XwCDRl8Ag0NfgXCTP18Ak0NfAJNGX4dAgz9fAINDXwCDRl8Akz9jAJNFYwCTSGOHQIM/YwCDRWMAg0hjg2CTRmQAk0JkAJNJZIdAg0ZkAINCZACDSWQAk0JkAJNGZACTSWSBcINCZACDRmQAg0lkgXCTQloAk0ZaAJNJWodAg0JaAINGWgCDSVoAk0RfAJNIXwCTS1+HQINEXwCDSF8Ag0tfAJNJZACTRWQAk0xkh0CDSWQAg0VkAINMZACTS2kAk05pAJNHaYdAg0tpAINOaQCDR2kAk0lkAJNFZACTTGSHQINJZACDRWQAg0xkAJNOaQCTS2kAk0dph0CDTmkAg0tpAINHaQCTUGkAk0lpAJNNaZ4Ag1BpAINJaQCDTWmPAP8vAE1UcmsAAACgAMQvALQHfwC0CkAAtFtkvACUMG6HQIQwbgCUMG6HQIQwboNglC1ph0CELWkAlC1pgXCELWmBcJQzc4dAhDNzAJQzc4dAhDNzg2CULm6HQIQubgCULm6BcIQuboFwlDZzh0CENnMAlDFuh0CEMW4AlC1ph0CELWkAlDFuh0CEMW4AlC1ph0CELWkAlC9uh0CEL24AlDF0ngCEMXSPAP8vAE1UcmsAAAFRAMU5ALUHeAC1ChQAtVtktECVOVqBIIU5WgCVO1yBIIU7XACVPF6BIIU8XgCVPmCBIIU+YACVQGKBIIVAYgCVQWSBIIVBZACVQ1qDYIVDWgCVPFCBcIU8UACVPlKBcIU+UgCVQFWBcIVAVYFwlUVagXCFRVqBcJVDWI8AhUNYAJVGaYNghUZpAJU+X4FwhT5fAJU/YYFwhT9hAJVBZIFwhUFkgXCVSGmBcIVIaYFwlUZnjwCFRmcAlUlkg2CFSWQAlUFfgXCFQV8AlUJhgXCFQmEAlURkgXCFRGSBcJVLaYFwhUtpgXCVTGSBcIVMZIFwlURfgXCFRF+BcJVFYoFwhUVigXCVSWSBcIVJZIFwlUxugkCFTG4AlUlpgkCFSWkAlUxugkCFTG4AlU5zgkCFTnMAlUtugkCFS24AlU5zgkCFTnMAlVB4ngCFUHiPAP8vAE1UcmsAAAK4AMkAALkHfwC5W2S8AJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkAJkmZIEgiSZkg2CZJmSHQIkmZACZJmSBcIkmZIFwmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmQAmSZkgSCJJmSDYJkmZIdAiSZkAJkmZIFwiSZkgXCZJmSDYIkmZACZJmSBcIkmZACZJmSBcIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSDYIkmZACZJmSBcIkmZACZJmSBcIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSBIIkmZACZJmSCQIkmZACZJmSCQIkmZACZJmSCQIkmZACZJmSCQIkmZACZJmSCQIkmZACZJmSCQIkmZACZJmSBIIkmZACZJmaBIIkmZgCZJmiBIIkmaACZJmeBIIkmZwCZJmaBIIkmZgCZJmSBIIkmZACZJmKBIIkmYgCZJmCBIIkmYACZJl6BIIkmXgCZJlyBIIkmXACZJlqBIIkmWgCZJliBIIkmWACZJleBIIkmVwCZJlWBIIkmVQCZJlWBIIkmVQCZJlOBIIkmUwCZJlGBIIkmUQCZJk+BIIkmTwCZJk2BIIkmTQCZJkuBIIkmSwCZJkmBIIkmSQCZJkeBIIkmRwCZJkWBIIkmRZAg/y8ATVRyawAAAEW8AJkxc54AiTFzAJkxc54AiTFzAJkxc48AiTFzAJkxc48AiTFzAJkxc4dAiTFzAJkxeIdAiTF4AJkxf54AiTF/jwD/LwA=',
maxamp: 'data:audio/mid;base64,TVRoZAAAAAYAAQAMAeBNVHJrAAAA1wD/Aw9PcmNoZXN0cmFsIEhhcnAAwC4AsAd/AP9RAwOTh4NgkENggXBDAABHYIFwRwAASmCBcEoAAEdggXBHAABKYIFwSgAAT2CBcE8AAEpggXBKAABPYIFwTwAAU2CBcFMAAE9ggXBPAABTYIFwUwAAVmCBcFYAAFtggXBbAABWYIFwVgAAU2CBcFMAAFZggXBWAABTYIFwUwAAT2CBcE8AAFNggXBTAABPYIFwTwAASmCBcEoAAE9ggXBPAABKYIFwSgAAR2CBcEcAAENggXBDAIkw/y8ATVRyawAAAHwA/wMPU3RyaW5nIEVuc2VtYmxlAMEwiTCRQ2AAO2AAPmCBcEMAADsAAD4AAENgADtgAD5ggXBDAAA7AAA+AABDYAA7YAA+YIFwQwAAOwAAPgAARGAAPGAAP2CLIEQAADwAAD8AAENgADtgAD5gmDBDAAA7AAA+AIkw/y8ATVRyawAAAOkA/wMHVGltcGFuaQDCL4Ngkit/hVArAAArf4FwKwAAK3+BcCsAACt/gXArAAArf4JoKwAAK3+CaCsAACt/gmgrAAArf4JoKwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwAAK394KwCJMP8vAE1UcmsAAAA4AMM4AP8DB1RydW1wZXSJMJNHf4FwRwAAR3+BcEcAAEd/gXBHAABIf4sgSAAAR3+YMEcAiTD/LwBNVHJrAAAACQD/AwC8AP8vAE1UcmsAAAApAP8DIEx1ZmlhIElJOiBSaXNlIG9mIHRoZSBTaW5pc3RyYWxzvAD/LwBNVHJrAAAAGgD/AxFCbHVlIFRyZWFzdXJlIEJveLwA/y8ATVRyawAAAAkA/wMAvAD/LwBNVHJrAAAAGwD/AxJieSBZYXN1bm9yaSBTaGlvbm+8AP8vAE1UcmsAAAAfAP8DFnNlcXVlbmNlZCBieSBTaW5jbGFpckO8AP8vAE1UcmsAAAAcAP8DE3NpbmNsYWlyQGFjcm9zcy5jb228AP8vAE1UcmsAAAAYAP8DD2x1ZjJibHVlYm94Lm1pZLwA/y8A',
season: 'data:audio/mid;base64,TVRoZAAAAAYAAQAOAeBNVHJrAAAAXgD/UQMFuNgA/wMRUGl6emljYXRvIFN0cmluZ3MAwC2HQLAHcABbUJZAkFRweFQAeEtoeEsAeE9geE8AeEhYeEgAeEtQeEsAeENIeEMAeEhAeEgAeD84eD8Aj3j/LwBNVHJrAAABIwD/Aw9TdHJpbmcgRW5zZW1ibGUAwTCHQLEHcABbUIdAkTxAAD8geDwAAD8AAD1DAEAjeD0AAEAAADxGAD8meDwAAD8AAD1JAEApeD0AAEAAAD9MAEIseD8AAEIAAEBQAEMweEAAAEMAAD9TAEIzeD8AAEIAAEBWAEM2eEAAAEMAAEFZAEQ5eEEAAEQAAEJcAEU8eEIAAEUAAEFgAERAeEEAAEQAAEJjAEVDeEIAAEUAAENmAEZGeEMAAEYAAERpAEdJeEQAAEcAAENsAEZMeEMAAEYAAERwAEdQeEhPACRQAEQAAEcAgXBIAAA/TIFwPwAAQ0iBcEMAADxEgXA8AAA/QIFwPwAANzyBcDcAADw4gXA8AAAzNIFwMwAAJACPAP8vAE1UcmsAAACmAP8DD1N0cmluZyBFbnNlbWJsZQDCMIdAsgdwAFtgh0CSMHCDYDAAACtwg2ArAAAncINgJwAAJHCDYCQAACRweCQAACRgeCQAACRweCQAACRgeCQAACRweCQAACRgeCQAACRweCQAACRgeCQAACRweCQAACRgeCQAACRweCQAACRgeCQAACRweCQAACRgeCQAACRweCQAACRgeCQAh0CyB3CHQP8vAE1UcmsAAAB9AP8DB1RpbXBhbmkAwy+HQLMHcABbYJZAkyR/eCQAACRyeCQAACRoeCQAACRfeCQAACRWeCQAACRNeCQAACRFeCQAACQ/eCQAACQ5eCQAACQzeCQAACQueCQAACQqeCQAACQneCQAACQleCQAACQjeCQAACQieCQAjwD/LwBNVHJrAAAAyADJMAD/AwpQZXJjdXNzaW9uh0C5B3AAW1CHQAcgAJkmcHgmAAAmQBi5ByZgmSYAACZQMLkHLEiZJgAAJmBIuQcyMJkmAAAmcGC5BzgYmSYAACZAeCYAALkHPgCZJlB4JgAAJmAYuQdEYJkmAAAmcDC5B0pImSYAACZASLkHUDCZJgAAJlBguQdWGJkmAAAmYHgmAAC5B1wAmSZweCYAACZAGLkHYmCZJgAAJlAwuQdoSJkmAAAmYEi5B24wmSYAALkHcJ4A/y8ATVRyawAAAAW8AP8vAE1UcmsAAAAbAP8DEk9ncmUgQmF0dGxlIChTTkVTKbwA/y8ATVRyawAAABIA/wMJRGFuZ2Vyb3VzvAD/LwBNVHJrAAAABbwA/y8ATVRyawAAABwA/wMTYnkgSGl0b3NoaSBTYWtpbW90b7wA/y8ATVRyawAAAB8A/wMWc2VxdWVuY2VkIGJ5IFNpbmNsYWlyQ7wA/y8ATVRyawAAABwA/wMTc2luY2xhaXJAYWNyb3NzLmNvbbwA/y8ATVRyawAAAAW8AP8vAE1UcmsAAAAUAP8DC29ibG9zZTIubWlkvAD/LwA=',
washed: 'data:audio/mid;base64,TVRoZAAAAAYAAAABAYBNVHJrAAAB7wD/AwpES0MyLzNCRk5TAP9YBAQCGAgA/1EDB6EghSOZJmQBkk1kAJVBZHqJJgAAmSNkBMYgBoJNAADDOwCSSmQBk0ZkAcQ7BJRKZAGFQQAAlT5kA8YgA5YiZFeJIwABgkoAAJJNZAGDRgABhT4AAIRKAAGVQWQBhiIAboJNAACZJmQBkk9kAZNEZAGUSmQBhUEAAJVDZACWImRwgk8AAIkmAACSUGQBg0QAAYRKAAWFQwAAlURkbYJQAACZI2QBklFkAZNGZAGFRAAAlExkAZVFZAGGIgAAliRkbokjAAGCUQAAmSZkAJJUZAGDRgABhEwAAYVFAACVSGRxiSYAAJkmZAGCVAAAklZkAZNGZAGFSAAAlExkAZVKZAGGJAAAliRkb4kmAACZKGQBglYAAYNGAACSWWQBk0VkBIRMAAGGJAAAhUoAAJRNZACVTWQAlh1kZ4koAAGCWQB0g0UAAJJWZAGFTQABlUpkAYYdAHGZJmQBglYAAJJXZAGTRWQBhE0AAJRIZAGFSgABlUtkAZYdZGuJJgAAmSZkcokmAHWZMmQciTIAAZkwZByJMAABmS9kHIkvAACZLWQdiS0AAZkrZBuJKwAAmTFkAJkpZB2JKQAAiTEAOoYdAHaDRQAAglcAAYRIAAGFSwCIWv8vAA==',
tourney: 'data:audio/mid;base64,TVRoZAAAAAYAAQAHAeBNVHJrAAAALQD/WAQBAhgIAP9ZAgAAAP9RAwdTAAD/BgdmYW5mYXJlg2D/WAQEAhgIAP8vAE1UcmsAAABfAP8hAQAA/wMEUEVUMQCwAAEAwDgAsAduALAKP4NgkEhkUEgAUEhkUEgAUEhkUEgAUEhkg2BIAABEZINgRAAARmSDYEYAAEhkgR9IAIEhRmSBH0YAAUhkix9IAAD/LwBNVHJrAAAAXwD/IQEAAP8DBFBFVDIAsQABAME4ALEHbgCxCj+DYJFBZFBBAFBAZFBAAFA+ZFA+AFBAZINgQAAAPGSDYDwAAD5kg2A+AABAZIEfQACBIT5kgR8+AAFAZIsfQAAA/y8ATVRyawAAAF8A/yEBAAD/AwRQRVQzALIAAQDCOACyB24Asgo/g2CSPmRQPgBQPGRQPABQPGRQPABQPGSDYDwAADpkg2A6AAA6ZINgOgAAPGSBHzwAgSE8ZIEfPAABPGSLHzwAAP8vAE1UcmsAAABfAP8hAQAA/wMEUEVUNACzAAEAwzgAswduALMKP4NgkzlkUDkAUDdkUDcAUDVkUDUAUDdkg2A3AAAzZINgMwAANWSDYDUAADdkgR83AIEhNWSBHzUAATdkix83AAD/LwBNVHJrAAAAYQD/IQEAAP8DBlRST01CTwC0AAEAxDkAtAduALQKP4NglDxkUDwAUDxkUDwAUDxkUDwAUDxkg2A8AAA4ZINgOAAAOmSDYDoAADxkgR88AIEhOmSBHzoAATxkix88AAD/LwBNVHJrAAABLAD/IQEAAP8DBVNOQVJFALkAAQDJfwC5B24AuQo/ALkAAQCZKGQ8KAAAKF88KAAAKFo8KAAAKFU8KAAAKFA8KAAAKEs8KAAAKEY8KAAAKEE8KAAAKGSBICgAAChkgSAoAAAoZIEgKAAAKGQ8KAAAKFo8KAAAKFA8KAAAKEY8KAAAKDw8KAAAKDI8KAAAKCg8KAAAKB48KAAAKGSCQCgAACg8gSAoAAAoZIEgKAAAKGSBICgAAChkgSAoAAAoZII/KAABKGSBHygAAShkOygAAShfOygAAShaOygAAShVOygAAShQOygAAShLOygAAShGOygAAShBOygAASg8OygAASg3OygAASgyOygAASgtOygAASgoOygAASgjOygAASgeOygAASgZOygAAP8vAA=='
}
var LEVEL = [
[ 'Novice' ],
[ 'Recruit' ],
[ 'Apprentice' ],
[ 'Initiate' ],
[ 'Journeyman' ],
[ 'Master' ],
[ 'Grandmaster' ],
[ 'Legendary' ],
[ 'Hero' ],
[ 'Knight' ],
[ 'Lord', 'Lady', 'Lord/Lady' ],
[ 'Baron', 'Baroness', 'Baron/Baroness' ],
[ 'Count', 'Countess', 'Count/Countess' ],
[ 'Duke', 'Duchess', 'Duke/Duchess' ],
[ 'Grand Duke', 'Grand Duchess', 'Grand Duke/Grand Duchess' ],
[ 'Archduke', 'Archduchess', 'Archduke/Archduchess' ]
];
var LNAME = 0, LZONE = 1, LLINK = 2, LLVL = 3, LMAP = 4, LWARNING = 5, LID = 6;
var LOCATION = {
region: [ 'Gnawnia', 'Valour', 'Whisker Woods', 'Varmint Valley', 'Burroughs', 'Furoma', 'Bristle Woods', 'Rodentia', 'Tribal Isles', 'Sandtail Desert', 'Rift Plane' ],
detail: [
[ 'Meadow', 0, 'meadow', 0, 6, false ], // 0
[ 'Town of Gnawnia', 0, 'town_of_gnawnia', 1, 6, false ],
[ 'Windmill', 0, 'windmill', 2, 6, false ],
[ 'Harbour', 0, 'harbour', 3, 6, false ],
[ 'Mountain', 0, 'mountain', 4, 6, false ],
[ 'Slushy Shoreline', 0, 'slushy_shoreline', 10, 856, false ],
[ 'King\'s Arms', 1, 'kings_arms', 1, 6, false ],
[ 'Tournament Hall', 1, 'tournament_hall', 2, 6, false ],
[ 'King\'s Gauntlet', 1, 'kings_gauntlet', 3, 4, false ],
[ 'Calm Clearing', 2, 'calm_clearing', 4, 16, false ],
[ 'Great Gnarled Tree', 2, 'great_gnarled_tree', 5, 5, false ],
[ 'Lagoon', 2, 'lagoon', 6, 10, false ], // 10
[ 'Claw Shot City', 3, 'claw_shot_city', 0, 6, false ],
[ 'Gnawnian Express Station', 3, 'train_station', 0, 6, false ],
[ 'Laboratory', 4, 'laboratory', 5, 9, false ],
[ 'Toxic Spill', 4, 'pollution_outbreak', LEVEL.length, 9, false ],
[ 'Town of Digby', 4, 'town_of_digby', 5, 3, false ],
[ 'Mousoleum', 4, 'mousoleum', 5, [ 15, 12 ], false ],
[ 'Bazaar', 4, 'bazaar', 6, 2, false ],
[ 'Training Grounds', 5, 'training_grounds', 6, [ 13, 14 ], false ],
[ 'Dojo', 5, 'dojo', 6, 14, false ],
[ 'Meditation Room', 5, 'meditation_room', 6, 14, false ],
[ 'Pinnacle Chamber', 5, 'pinnacle_chamber', 6, 14, false ],
[ 'Catacombs', 6, 'catacombs', 7, 12, false ], // 20
[ 'Forbidden Grove', 6, 'forbidden_grove', 7, 8, false ],
[ 'Acolyte Realm', 6, 'acolyte_realm', 7, -1, true ],
[ 'S.S. Huntington III', 7, 'ss_huntington_ii', 7, 7, false ],
[ 'Seasonal Garden', 7, 'seasonal_garden', 10, 347, false ],
[ 'Zugzwang\'s Tower', 7, 'zugzwang_tower', 10, 348, true ],
[ 'Crystal Library', 7, 'zugzwang_library', 10, 646, false ],
[ 'Iceberg', 7, 'iceberg', 10, 856, false ],
[ 'Cape Clawed', 8, 'cape_clawed', 7, 11, false ],
[ 'Elub Shore', 8, 'elub_shore', 7, 11, false ],
[ 'Nerg Plains', 8, 'nerg_plains', 7, 11, false ],
[ 'Derr Dunes', 8, 'derr_dunes', 7, 11, false ], // 30
[ 'Jungle of Dread', 8, 'jungle_of_dread', 8, 11, false ],
[ 'Dracano', 8, 'dracano', 9, 11, false ],
[ 'Balack\'s Cove', 8, 'balacks_cove', 9, 1, false ],
[ 'Fiery Warpath', 9, 'desert_warpath', 11, 529, false ],
[ 'Muridae Market', 9, 'desert_city', 11, 528, false ],
[ [ 'Living Garden', 'Twisted Garden' ], 9, 'desert_oasis', 11, 607, false ],
[ [ 'Lost City', 'Cursed City' ], 9, 'lost_city', 11, 607, false ],
[ [ 'Sand Dunes', 'Sand Crypts' ], 9, 'sand_dunes', 11, 607, false ],
[ 'Gnawnia Rift', 10, 'rift_gnawnia', 12, 1422, false ],
[ [ 'King\'s Party Zone', 'Vacant Lot', 'Birthday Party Celebration', 'Chocolate Factory', 'Festive Comet', 'Haunted Terrortories', 'Snow Fortress', 'Great Gnawnian Games', 'MegaBuy Mart', 'Calamity Carl\'s Cozy Cruise', 'Festive Snow Fort', 'Dance Hall' ], 0, 'special_event_location', 1, 6, false ],
[ 'Ronza\'s Traveling Shoppe', 0, 'ronzas_traveling_shoppe', 1, 6, false ] // 40
],
costs: [
// Mead TGnaw Windm Harbo Mount Shore KArms THall Gaunt Clear GTree Lagoo ClwCty GESttn Labor Spill Digby Mouse Bazaa Train Dojo MRoom Pinna Catac Grove AcRlm SSIII SGard ZTowr CLibr Icbrg CapeC ElubS NergP DerrD Dread Draco BCove Fiery MMark LGard LCity SDune GnRift Event Ronza
[ 0, 10, 260, 510, 1010, 1010, 1060, 1010, 1010, 250, 500, 1000, 500, 750, 2010, 2260, 2510, 2510, 2260, 3510, 3535, 3560, 3660, 4010, 5010, -99, 2010, 4010, 9010, 9710, 4510, 3510, 4010, 4010, 4010, 4510, 6510, 6510, 2200, 4100, 6300, 8650, 8650, 2400, 520, 60 ], // Meadow
[ 0, 0, 250, 500, 1000, 1000, 1050, 1000, 1000, 260, 510, 1010, 510, 760, 2000, 2250, 2500, 2500, 2250, 3500, 3525, 3550, 3650, 4000, 5000, -99, 2000, 4000, 9000, 9700, 4500, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 2210, 4110, 6310, 8660, 8660, 2410, 510, 50 ], // Town of Gnawnia
[ 0, 250, 0, 250, 1250, 750, 800, 750, 750, 510, 760, 1260, 760, 1010, 2250, 2500, 2750, 2750, 2500, 3750, 3775, 3800, 3900, 4250, 5250, -99, 1750, 3750, 8750, 9450, 4250, 3250, 3750, 3750, 3750, 4250, 6250, 6250, 2460, 4360, 6560, 8910, 8910, 2660, 260, 300 ], // Windmill
[ 0, 500, 250, 0, 1500, 500, 550, 500, 500, 760, 1010, 1510, 1010, 1260, 2500, 2750, 3000, 3000, 2750, 4000, 4025, 4050, 4150, 4500, 5500, -99, 1500, 3500, 8500, 9200, 4000, 3000, 3500, 3500, 3500, 4000, 6000, 6000, 2710, 4610, 6810, 9160, 9160, 2910, 10, 550 ], // Harbour
[ 0, 1000, 1250, 1500, 0, 2000, 2050, 2000, 2000, 1260, 1510, 2010, 1510, 1760, 1000, 1250, 1500, 1500, 1250, 2500, 2525, 2550, 2650, 3000, 4000, -99, 3000, 5000, 10000, 10700, 5500, 4500, 5000, 5000, 5000, 5500, 7500, 7500, 3210, 5110, 7310, 9660, 9660, 3410, 1510, 1050 ], // Mountain
[ 0, 1000, 750, 500, 2000, 0, 1050, 1000, 1000, 1260, 1510, 2010, 1510, 1760, 3000, 3250, 3500, 3500, 3250, 4500, 4525, 4550, 4650, 5000, 6000, -99, 2000, 4000, 9000, 9700, 4500, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 3210, 5110, 7310, 9660, 9660, 3410, 510, 1050 ], // Slushy Shoreline
[ 0, 1050, 800, 550, 2050, 1050, 0, 50, 1050, 1310, 1560, 2060, 1560, 1810, 3050, 3300, 3550, 3550, 3300, 4550, 4575, 4600, 4700, 5050, 6050, -99, 2050, 4050, 9050, 9750, 4550, 3550, 4050, 4050, 4050, 4550, 6550, 6550, 3260, 5160, 7360, 9710, 9710, 3460, 550, 1100 ], // King's Arms
[ 0, 1000, 750, 500, 2000, 1000, 50, 0, 1000, 1260, 1510, 2010, 1510, 1760, 3000, 3250, 3500, 3500, 3250, 4500, 4525, 4550, 4650, 5000, 6000, -99, 2000, 4000, 9000, 9700, 4500, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 3210, 5110, 7310, 9660, 9660, 3410, 510, 1050 ], // Tournament Hall
[ 0, 1000, 750, 500, 2000, 1000, 1050, 1000, 0, 1260, 1510, 2010, 1510, 1760, 3000, 3250, 3500, 3500, 3250, 4500, 4525, 4550, 4650, 5000, 6000, -99, 2000, 4000, 9000, 9700, 4500, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 3210, 5110, 7310, 9660, 9660, 3410, 510, 1050 ], // King's Gauntlet
[ 0, 260, 510, 760, 1260, 1260, 1310, 1260, 1260, 0, 250, 750, 250, 500, 2260, 2510, 2760, 2760, 2510, 3760, 3785, 3810, 3910, 4260, 5260, -99, 2260, 4260, 9260, 9960, 4760, 3760, 4260, 4260, 4260, 4760, 6760, 6760, 1950, 3850, 6050, 8400, 8400, 2650, 770, 310 ], // Calm Clearing
[ 0, 510, 760, 1010, 1510, 1510, 1560, 1510, 1510, 250, 0, 500, 500, 750, 2510, 2760, 3010, 3010, 2760, 4010, 4035, 4060, 4160, 4510, 5510, -99, 2510, 4510, 9510, 10210, 5010, 4010, 4510, 4510, 4510, 5010, 7010, 7010, 1700, 3600, 5800, 8150, 8150, 2900, 1020, 560 ], // Great Gnarled Tree
[ 0, 1010, 1260, 1510, 2010, 2010, 2060, 2010, 2010, 750, 500, 0, 1000, 1250, 3010, 3260, 3510, 3510, 3260, 4510, 4535, 4560, 4660, 5010, 6010, -99, 3010, 5010, 10010, 10710, 5510, 4510, 5010, 5010, 5010, 5510, 7510, 7510, 1200, 3100, 5300, 7650, 7650, 3400, 1520, 1060 ], // Lagoon
[ 0, 510, 760, 1010, 1510, 1510, 1560, 1510, 1510, 250, 500, 1000, 0, 250, 2510, 2760, 3010, 3010, 2760, 4010, 4035, 4060, 4160, 4510, 5510, -99, 2510, 4510, 9510, 10210, 5010, 4010, 4510, 4510, 4510, 5010, 7010, 7010, 2200, 4100, 6300, 8650, 8650, 2900, 1020, 560 ], // Claw Shot City
[ 0, 760, 1010, 1260, 1760, 1760, 1810, 1760, 1760, 500, 750, 1250, 250, 0, 2760, 3010, 3260, 3260, 3010, 4260, 4285, 4310, 4410, 4760, 5760, -99, 2760, 4760, 9760, 10460, 5260, 4260, 4760, 4760, 4760, 5260, 7260, 7260, 2450, 4350, 6550, 8900, 8900, 3150, 1270, 810 ], // Gnawnian Express Station
[ 0, 2000, 2250, 2500, 1000, 3000, 3050, 3000, 3000, 2260, 2510, 3010, 2510, 2760, 0, 250, 500, 500, 250, 1500, 1525, 1550, 1650, 2000, 3000, -99, 4000, 6000, 11000, 11700, 6500, 5500, 6000, 6000, 6000, 6500, 8500, 8500, 4210, 6110, 8310, 10660, 10660, 4410, 2510, 2050 ], // Laboratory
[ 0, 2250, 2500, 2750, 1250, 3250, 3300, 3250, 3250, 2510, 2760, 3260, 2760, 3010, 250, 0, 750, 250, 250, 1750, 1775, 1800, 1900, 2250, 3250, -99, 4250, 6250, 11250, 11950, 6750, 5750, 6250, 6250, 6250, 6750, 8750, 8750, 4460, 6360, 8560, 10910, 10910, 4660, 2760, 2300 ], // Toxic Spill
[ 0, 2500, 2750, 3000, 1500, 3500, 3550, 3500, 3500, 2760, 3010, 3510, 3010, 3260, 500, 750, 0, 1000, 750, 2000, 2025, 2050, 2150, 2500, 3500, -99, 4500, 6500, 11500, 12200, 7000, 6000, 6500, 6500, 6500, 7000, 9000, 9000, 4710, 6610, 8810, 11160, 11160, 4910, 3010, 2550 ], // Town of Digby
[ 0, 2500, 2750, 3000, 1500, 3500, 3550, 3500, 3500, 2760, 3010, 3510, 3010, 3260, 500, 250, 1000, 0, 250, 1000, 1025, 1050, 1150, 1500, 2500, -99, 4500, 6500, 11500, 12200, 7000, 6000, 6500, 6500, 6500, 7000, 9000, 9000, 4710, 6610, 8810, 11160, 11160, 4910, 3010, 2550 ], // Mousoleum
[ 0, 2250, 2500, 2750, 1250, 3250, 3300, 3250, 3250, 2510, 2760, 3260, 2760, 3010, 250, 250, 750, 250, 0, 1250, 1275, 1300, 1400, 1750, 2750, -99, 4250, 6250, 11250, 11950, 6750, 5750, 6250, 6250, 6250, 6750, 8750, 8750, 4460, 6360, 8560, 10910, 10910, 4660, 2760, 2300 ], // Bazaar
[ 0, 3500, 3750, 4000, 2500, 4500, 4550, 4500, 4500, 3760, 4010, 4510, 4010, 4260, 1500, 1750, 2000, 1000, 1250, 0, 25, 50, 150, 2500, 3500, -99, 5500, 7500, 12500, 13200, 8000, 7000, 7500, 7500, 7500, 8000, 10000, 10000, 5710, 7610, 9810, 12160, 12160, 5910, 4010, 3550 ], // Training Grounds
[ 0, 3525, 3775, 4025, 2525, 4525, 4575, 4525, 4525, 3785, 4035, 4535, 4035, 4285, 1525, 1775, 2025, 1025, 1275, 25, 0, 25, 125, 2525, 3525, -99, 5525, 7525, 12525, 13225, 8025, 7025, 7525, 7525, 7525, 8025, 10025, 10025, 5735, 7635, 9835, 12185, 12185, 5935, 4035, 3575 ], // Dojo
[ 0, 3550, 3800, 4050, 2550, 4550, 4600, 4550, 4550, 3810, 4060, 4560, 4060, 4310, 1550, 1800, 2050, 1050, 1300, 50, 25, 0, 100, 2550, 3550, -99, 5550, 7550, 12550, 13250, 8050, 7050, 7550, 7550, 7550, 8050, 10050, 10050, 5760, 7660, 9860, 12210, 12210, 5960, 4060, 3600 ], // Meditation Room
[ 0, 3650, 3900, 4150, 2650, 4650, 4700, 4650, 4650, 3910, 4160, 4660, 4160, 4410, 1650, 1900, 2150, 1150, 1400, 150, 125, 100, 0, 2650, 3650, -99, 5650, 7650, 12650, 13350, 8150, 7150, 7650, 7650, 7650, 8150, 10150, 10150, 5860, 7760, 9960, 12310, 12310, 6060, 4160, 3700 ], // Pinnacle Chamber
[ 0, 4000, 4250, 4500, 3000, 5000, 5050, 5000, 5000, 4260, 4510, 5010, 4510, 4760, 2000, 2250, 2500, 1500, 1750, 2500, 2525, 2550, 2650, 0, 1000, -99, 6000, 8000, 13000, 13700, 8500, 7500, 8000, 8000, 8000, 8500, 10500, 10500, 6210, 8110, 10310, 12660, 12660, 6410, 4510, 4050 ], // Catacombs
[ 0, 6500, 6750, 7000, 5500, 6000, 7550, 7500, 7500, 6760, 7010, 6010, 5510, 5760, 4500, 3250, 5000, 4000, 3250, 5000, 5025, 5050, 5150, 2500, 0, 0, 8500, 10500, 15500, 14700, 11000, 10000, 10500, 10500, 10500, 11000, 13000, 13000, 7210, 9110, 11310, 13660, 13660, 7410, 5510, 5050 ], // Forbidden Grove
[ 0, 4500, 4750, 5000, 3500, -99, 5550, 5500, 5500, 4760, 5010, 5510, 5010, 5260, 2500, 2250, 3000, 2000, 2250, 3000, 3025, 3050, 3150, 500, 1500, 0, 6500, 8500, 13500, 12700, 9000, 8000, 8500, 8500, 8500, 9000, 11000, 11000, 5210, 7110, 9310, 11660, 11660, 5410, 3510, 3050 ], // Acolyte Realm
[ 0, 2000, 1750, 1500, 3000, 2000, 2050, 2000, 2000, 2260, 2510, 3010, 2510, 2760, 4000, 4250, 4500, 4500, 4250, 5500, 5525, 5550, 5650, 4000, 7000, -99, 0, 2000, 7000, 7700, 2500, 1500, 2000, 2000, 2000, 2500, 4500, 4500, 4210, 6110, 8310, 10660, 10660, 4410, 1510, 2050 ], // S.S. Huntington II
[ 0, 4000, 3750, 3500, 5000, 4000, 4050, 4000, 4000, 4260, 4510, 5010, 4510, 4760, 6000, 6250, 6500, 6500, 6250, 7500, 7525, 7550, 7650, 8000, 9000, -99, 2000, 0, 5000, 5700, 4500, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 6210, 8110, 10310, 12660, 12660, 6410, 3510, 4050 ], // Seasonal Garden
[ 0, 9000, 8750, 8500, 10000, 9000, 9050, 9000, 9000, 9260, 9510, 10010, 9510, 9760, 11000, 11250, 11500, 11500, 11250, 12500, 12525, 12550, 12650, 13000, 14000, -99, 7000, 5000, 0, 700, 9500, 8500, 9000, 9000, 9000, 9500, 11500, 11500, 11210, 13110, 15310, 17660, 17660, 11410, 8510, 9050 ], // Zugzwang's Tower
[ 0, 9700, 9450, 9200, 10700, 9700, 9750, 9700, 9700, 9960, 10210, 10710, 10210, 10460, 11700, 11950, 12200, 12200, 11950, 13200, 13255, 13250, 13350, 13700, 14700, -99, 7700, 5700, 700, 0, 10200, 9200, 9700, 9700, 9700, 10200, 12200, 12200, 11910, 13810, 16010, 18360, 18360, 12110, 9210, 9750 ], // Crystal Library
[ 0, 4500, 4250, 4000, 5500, 4500, 4550, 4500, 4500, 4760, 5010, 5510, 5010, 5260, 6500, 6750, 7000, 7000, 6750, 8000, 8025, 8050, 8150, 8500, 11000, -99, 2500, 4500, 9500, 10200, 0, 4000, 4500, 4500, 4500, 5000, 7000, 7000, 6710, 8610, 10810, 13160, 13160, 6910, 4010, 4550 ], // Iceberg
[ 0, 3500, 3250, 3000, 4500, 3500, 3550, 3500, 3500, 3760, 4010, 4510, 4010, 4260, 5500, 5750, 6000, 6000, 5750, 7000, 7025, 7050, 7150, 7500, 8500, -99, 1500, 3500, 8500, 9200, 4000, 0, 500, 500, 500, 1000, 3000, 3000, 5710, 7610, 9810, 12160, 12160, 5910, 3010, 3550 ], // Cape Clawed
[ 0, 4000, 3750, 3500, 5000, 4000, 4050, 4000, 4000, 4260, 4510, 5010, 4510, 4760, 6000, 6250, 6500, 6500, 6250, 7500, 7525, 7550, 7650, 8000, 9000, -99, 2000, 4000, 9000, 9700, 4500, 500, 0, 1000, 1000, 1500, 3500, 3500, 6210, 8110, 10310, 12660, 12660, 6410, 3510, 4050 ], // Elub Shore
[ 0, 4000, 3750, 3500, 5000, 4000, 4050, 4000, 4000, 4260, 4510, 5010, 4510, 4760, 6000, 6250, 6500, 6500, 6250, 7500, 7525, 7550, 7650, 8000, 9000, -99, 2000, 4000, 9000, 9700, 4500, 500, 1000, 0, 1000, 1500, 3500, 3500, 6210, 8110, 10310, 12660, 12660, 6410, 3510, 4050 ], // Nerg Plains
[ 0, 4000, 3750, 3500, 5000, 4000, 4050, 4000, 4000, 4260, 4510, 5010, 4510, 4760, 6000, 6250, 6500, 6500, 6250, 7500, 7525, 7550, 7650, 8000, 9000, -99, 2000, 4000, 9000, 9700, 4500, 500, 1000, 1000, 0, 1500, 3500, 3500, 6210, 8110, 10310, 12660, 12660, 6410, 3510, 4050 ], // Derr Dunes
[ 0, 4500, 4250, 4000, 5500, 4500, 4550, 4500, 4500, 4760, 5010, 5510, 5010, 5260, 6500, 6750, 7000, 7000, 6750, 8000, 8025, 8050, 8150, 8500, 9500, -99, 2500, 4500, 9500, 10200, 5000, 1000, 1500, 1500, 1500, 0, 2000, 2000, 6710, 8610, 10810, 13160, 13160, 6910, 4010, 4550 ], // Jungle of Dread
[ 0, 6500, 6250, 6000, 6500, 6500, 6550, 6500, 6500, 6760, 7010, 7510, 7010, 7260, 8500, 8750, 9000, 9000, 8750, 10000, 10025, 10050, 10150, 10500, 11500, -99, 4500, 6500, 11500, 12200, 7000, 3000, 3500, 3500, 3500, 2000, 0, 4000, 8710, 10610, 12810, 15160, 15160, 8910, 6010, 6550 ], // Dracano
[ 0, 6500, 6250, 6000, 6500, 6500, 6550, 6500, 6500, 6760, 7010, 7510, 7010, 7260, 8500, 8750, 9000, 9000, 8750, 10000, 10025, 10050, 10150, 10500, 11500, -99, 4500, 6500, 11500, 12200, 7000, 3000, 3500, 3500, 3500, 2000, 4000, 0, 8710, 10610, 12810, 15160, 15160, 8910, 6010, 6550 ], // Balack's Cove
[ 0, 2210, 2460, 2710, 3210, 3210, 3260, 3210, 3210, 1950, 1700, 1200, 2200, 2450, 4210, 4460, 4710, 4710, 4460, 5710, 5735, 5760, 5860, 6210, 7210, -99, 4210, 6210, 11210, 11910, 6710, 5710, 6210, 6210, 6210, 6710, 8710, 8710, 0, 1900, 4100, 6450, 6450, 4600, 2720, 2260 ], // Fiery Warpath
[ 0, 4110, 4360, 4610, 5110, 5110, 5160, 5110, 5110, 3850, 3600, 3100, 4100, 4350, 6110, 6360, 6610, 6610, 6360, 7610, 7635, 7660, 7760, 8110, 9110, -99, 6110, 8110, 13110, 13810, 8610, 7610, 8110, 8110, 8110, 8610, 10610, 10610, 1900, 0, 2200, 4550, 4550, 6500, 4620, 4160 ], // Muridae Market
[ 0, 6310, 6560, 6810, 7310, 7310, 7360, 7310, 7310, 6050, 5800, 5300, 6300, 6550, 8310, 8560, 8810, 8810, 8560, 9810, 9835, 9860, 9960, 10310, 11310, -99, 8310, 10310, 15310, 16010, 10810, 9810, 10310, 10310, 10310, 10810, 12810, 12810, 4100, 2200, 0, 2350, 2350, 8700, 6720, 6360 ], // Living Garden
[ 0, 8660, 8910, 9160, 9660, 9660, 9710, 9660, 9660, 8400, 8150, 7650, 8650, 8900, 10660, 10910, 11160, 11160, 10910, 12160, 12185, 12210, 12310, 12660, 13660, -99, 10660, 12660, 17660, 18360, 13160, 12160, 12660, 12660, 12660, 13160, 15160, 15160, 6450, 4550, 2350, 0, 2350, 11050, 9070, 8710 ], // Lost City
[ 0, 8660, 8910, 9160, 9660, 9660, 9710, 9660, 9660, 8400, 8150, 7650, 8650, 8900, 10660, 10910, 11160, 11160, 10910, 12160, 12185, 12210, 12310, 12660, 13660, -99, 10660, 12660, 17660, 18360, 13160, 12160, 12660, 12660, 12660, 13160, 15160, 15160, 6450, 4550, 2350, 2350, 0, 11050, 9070, 8710 ], // Sand Dunes
[ 0, 2410, 2660, 2910, 3410, 3410, 3460, 3410, 3410, 2650, 2900, 3400, 2900, 3150, 4410, -99, 4910, 4910, 4660, 5910, 5935, 5960, 6060, 6410, 7410, -99, 4410, 6410, 11410, 12110, 6910, 5910, 6410, 6410, 6410, 6910, 8910, 8910, 4600, 6500, 8700, 11050, 11050, 0, 2920, -99 ], // Gnawnia Rift
[ 0, 510, 260, 10, 1510, -99, 550, 510, 510, 770, 1020, 1520, 1020, 1270, 2510, 2760, 3010, 3010, 2760, 4010, 4035, 4060, 4160, 4510, 5510, -99, 1510, 3510, 8510, 9210, 4010, 3010, 3510, 3510, 3510, 4010, 6010, 6010, 2720, 4620, 6720, 9070, 9070, 2920, 0, -99 ], // Special Event Location
[ 0, 50, 300, 550, 1050, 1050, 1100, 1050, 1050, 310, 560, 1060, 560, 810, 2050, 2300, 2550, 2550, 2300, 3550, 3575, 3600, 3700, 4050, 5050, -99, 2050, 4050, 9050, 9750, 4550, 3550, 4050, 4050, 4050, 4550, 6550, 6550, 2260, 4160, 6360, 8710, 8710, -99, -99, 0 ] // Ronza
// Mead TGnaw Windm Harbo Mount Shore KArms THall Gaunt Clear GTree Lagoo ClwCty GESttn Labor Spill Digby Mouse Bazaa Train Dojo MRoom Pinna Catac Grove AcRlm SSIII SGard ZTowr CLibr Icbrg CapeC ElubS NergP DerrD Dread Draco BCove Fiery MMark LGard LCity SDune GnRift Event Ronza
],
distance: null,
previous: null
}
var PNAME = 0, PINGREDIENTS = 1;
var PATTERNS = [
[ 'Base - Dehydration Base', { 'dehydration_base_blueprints_craft_item':'1', 'salt_craft_item':'213', 'splintered_wood_craft_item':'4' } ],
[ 'Base - Deep Freeze Base', { 'bead_of_slumber_craft_item':'1', 'deep_freeze_base_blueprints_crafting_item':'1', 'steam_nine_crafting_item':'1', 'cold_fusion_crafting_item':'6', 'platinum_bar_crafting_item':'6', 'frosty_metal_crafting_item':'18', 'wire_spool_crafting_item':'20', 'stale_super_brie_craft_item':'22', 'living_shard_crafting_item':'32' } ],
[ 'Base - Gingerbread Base', { 'candies_craft_item':'5', 'gingerbread_base_blueprints_craft_item':'1', 'icing_sugar_craft_item':'1', 'plank_of_gingerbread_craft_item':'1' } ],
[ 'Base - Hearthstone Base', { 'hearthstone_base_blueprints_crafting_item':'1', 'wire_spool_crafting_item':'14', 'heating_oil_crafting_item':'8', 'frosty_metal_crafting_item':'8', 'cold_fusion_crafting_item':'10' } ],
[ 'Base - Magnet Base', { 'magnet_base_blueprints_crafting_item':'1', 'wire_spool_crafting_item':'5', 'heating_oil_crafting_item':'2', 'frosty_metal_crafting_item':'5', 'cold_fusion_crafting_item':'3' } ],
[ 'Base - Molten Shrapnel Base', { 'dragon_ember':'1', 'platinum_bar_crafting_item':'12', 'scrap_metal_craft_item':'200' } ],
[ 'Base - Remote Detonator Base', { 'remote_detonator_base_blueprints_crafting_item':'1', 'wire_spool_crafting_item':'8', 'heating_oil_crafting_item':'1', 'frosty_metal_crafting_item':'2', 'cold_fusion_crafting_item':'3' } ],
[ 'Base - Rift Base', { 'rift_base_blueprints_crafting_item':'1', 'rift_crystal_crafting_item':'1', 'rift_mist_crafting_item':'1', 'rift_stars_crafting_item':'1' } ],
[ 'Base - Soiled Base', { 'soiled_base_blueprints_crafting_item':'1', 'fresh_living_garden_soil_crafting_item':'3', 'dewthief_petal_crafting_item':'1', 'duskshade_petal_crafting_item':'1', 'graveblossom_petal_crafting_item':'1', 'lunaria_petal_crafting_item':'1' } ],
[ 'Base - Spellbook Base', { 'spellbook_base_blueprints_crafting_item':'1', 'master_binding_crafting_item':'1', 'technic_page_crafting_item':'3', 'mystic_page_crafting_item':'3', 'platinum_bar_crafting_item':'6' } ],
[ 'Base - Spiked Base', { 'spiked_base_blueprints_crafting_item':'1', 'wire_spool_crafting_item':'5', 'heating_oil_crafting_item':'10', 'frosty_metal_crafting_item':'5', 'splintered_wood_craft_item':'50', 'cold_fusion_crafting_item':'6' } ],
[ 'Base - Tiki Base', { 'tiki_base_blueprints_crafting_item':'1', 'tribal_timber_crafting_item':'3' } ],
[ 'Base - Tribal Base', { 'tribal_timber_crafting_item':'3' } ],
[ 'Blueprints - Ancient Box Trap', { 'ancient_frayed_blueprint_piece_craft_item':'1', 'ancient_mangled_blueprint_piece_craft_item':'1', 'ancient_ripped_blueprint_piece_craft_item':'1', 'ancient_torn_blueprint_piece_craft_item':'1' } ],
[ 'Blueprints - Clockwork Portal', { 'essence_f_crafting_item':'1', 'essence_i_crafting_item':'1' } ],
[ 'Blueprints - Grand Arcanum', { 'essence_g_crafting_item':'1', 'essence_i_crafting_item':'1' } ],
[ 'Blueprints - Phantasmic Oasis', { 'essence_e_crafting_item':'1', 'essence_f_crafting_item':'1', 'essence_i_crafting_item':'1' } ],
[ 'Blueprints - Soiled Base', { 'essence_f_crafting_item':'1', 'essence_g_crafting_item':'1', 'essence_h_crafting_item':'1' } ],
[ 'Charm - Antiskele Charm', { 'radioactive_sludge_craft_item':'1', 'simple_orb_crafting_item':'1', 'charmbit_crafting_item':'36' } ],
[ 'Charm - Brain Charm', { 'brain_bit_crafting_item':'10', 'simple_orb_crafting_item':'1', 'charmbit_crafting_item':'40' } ],
[ 'Charm - Double Sponge Charm', { 'essence_a_crafting_item':'2', 'flawless_orb_crafting_item':'1', 'blue_double_dewdrop_powder_crafting_item':'1' } ],
[ 'Charm - Dragonbane Charm', { 'frozen_scroll_craft_item':'1', 'perfect_orb':'1', 'charmbit_crafting_item':'120' } ],
[ 'Charm - Empowered Anchor Charm', { 'scrap_metal_craft_item':'1', 'flawless_orb_crafting_item':'1', 'charmbit_crafting_item':'40' } ],
[ 'Charm - Growth Chram', { 'perfect_orb':'1', 'charmbit_crafting_item':'1000', 'essence_d_crafting_item':'1' } ],
[ 'Charm - Prospector\'s Charm', { 'meteorite_piece_craft_item':'1', 'simple_orb_crafting_item':'1', 'charmbit_crafting_item':'16' } ],
[ 'Charm - Red Double Sponge Charm', { 'essence_b_crafting_item':'2', 'perfect_orb':'1', 'red_double_dewdrop_powder_crafting_item':'1' } ],
[ 'Charm - Rotten Charm', { 'stale_cheese_craft_item':'1', 'flawed_orb_crafting_item':'1', 'charmbit_crafting_item':'12' } ],
[ 'Charm - Scientist\'s Charm', { 'living_shard_crafting_item':'1', 'flawless_orb_crafting_item':'1', 'charmbit_crafting_item':'4' } ],
[ 'Charm - Shattering Charm', { 'aromatic_oil_crafting_item':'1', 'epic_orb_crafting_item':'1', 'essence_i_crafting_item':'1', 'charmbit_crafting_item':'1000' } ],
[ 'Charm - Soap Charm', { 'soapy_suds_crafting_item':'2', 'flawed_orb_crafting_item':'1', 'charmbit_crafting_item':'10' } ],
[ 'Charm - Super Rotten Charm', { 'stale_super_brie_craft_item':'1', 'flawed_orb_crafting_item':'1', 'charmbit_crafting_item':'12' } ],
[ 'Charm - Super Salt Charm', { 'essence_b_crafting_item':'2', 'perfect_orb':'1', 'extra_coarse_salt_crafting_item':'1' } ],
[ 'Charm - Super Warpath Cavalry Charm', { 'desert_horseshoe_crafting_item':'1', 'magic_essence_craft_item':'1', 'simple_orb_crafting_item':'1', 'charmbit_crafting_item':'2' } ],
[ 'Charm - Super Warpath Mage Charm', { 'heatproof_mage_cloth_crafting_item':'1', 'magic_essence_craft_item':'1', 'simple_orb_crafting_item':'1', 'charmbit_crafting_item':'2' } ],
[ 'Charm - Ultimate Charm', { 'epic_orb_crafting_item':'1', 'rift_crystal_crafting_item':'1', 'rift_mist_crafting_item':'1', 'rift_stars_crafting_item':'1', 'charmbit_crafting_item':'2500' } ],
[ 'Charm - Ultimate Luck Charm', { 'perfect_orb':'1', 'charmbit_crafting_item':'1000', 'essence_f_crafting_item':'1' } ],
[ 'Charm - Ultimate Power Charm', { 'perfect_orb':'1', 'charmbit_crafting_item':'1000', 'essence_e_crafting_item':'1' } ],
[ 'Charm - Warpath Cavalry Charm', { 'desert_horseshoe_crafting_item':'1', 'ionized_salt_craft_item':'1', 'simple_orb_crafting_item':'1', 'charmbit_crafting_item':'2' } ],
[ 'Charm - Warpath Mage Charm', { 'heatproof_mage_cloth_crafting_item':'1', 'ionized_salt_craft_item':'1', 'simple_orb_crafting_item':'1', 'charmbit_crafting_item':'2' } ],
[ 'Charm - Wild Growth Charm', { 'epic_orb_crafting_item':'1', 'charmbit_crafting_item':'1000', 'essence_e_crafting_item':'1', 'fresh_living_garden_soil_crafting_item':'1' } ],
[ 'Charm - Yellow Double Sponge Charm', { 'essence_b_crafting_item':'2', 'perfect_orb':'1', 'yellow_double_dewdrop_powder_crafting_item':'1' } ],
[ 'Cheese - Ancient (3)', { 'ionized_salt_craft_item':'6', 'stale_cheese_craft_item':'3' } ],
[ 'Cheese - Ancient using SB+ (6)', { 'ionized_salt_craft_item':'6', 'magic_essence_craft_item':'3', 'stale_cheese_craft_item':'3' } ],
[ 'Cheese - Checkmate (3)', { 'mystic_curd_crafting_item':'1', 'tech_cheese_mould_crafting_item':'1', 'ionized_salt_craft_item':'12' } ],
[ 'Cheese - Checkmate using SB+ (9)', { 'mystic_curd_crafting_item':'1', 'tech_cheese_mould_crafting_item':'1', 'ionized_salt_craft_item':'12', 'magic_essence_craft_item':'6' } ],
[ 'Cheese - Combat (3)', { 'curds_and_whey_craft_item':'5', 'paintbrand_paint_craft_item':'1', 'splintered_wood_craft_item':'1', 'token_of_the_cheese_fang_craft_item':'3' } ],
[ 'Cheese - Creamy Havarti (6)', { 'coconut_milk_craft_item':'10', 'creamy_orange_pepper_craft_item':'6', 'curds_and_whey_craft_item':'18', 'salt_craft_item':'6' } ],
[ 'Cheese - Crunchy Havarti (6)', { 'coconut_milk_craft_item':'4', 'crunchy_green_pepper_craft_item':'6', 'curds_and_whey_craft_item':'18', 'salt_craft_item':'6' } ],
[ 'Cheese - Crunchy (15)', { 'coconut_milk_craft_item':'20', 'curds_and_whey_craft_item':'10', 'delicious_stone_craft_item':'30', 'salt_craft_item':'30' } ],
[ 'Cheese - Crunchy using SB+ (20)', { 'coconut_milk_craft_item':'20', 'curds_and_whey_craft_item':'10', 'delicious_stone_craft_item':'30', 'salt_craft_item':'30', 'magic_essence_craft_item':'5' } ],
[ 'Cheese - Gumbo (15)', { 'coconut_milk_craft_item':'15', 'curds_and_whey_craft_item':'90', 'salt_craft_item':'1', 'savoury_vegetables_craft_item':'30' } ],
[ 'Cheese - Gumbo using SB+ (20)', { 'coconut_milk_craft_item':'15', 'curds_and_whey_craft_item':'90', 'salt_craft_item':'1', 'savoury_vegetables_craft_item':'30', 'magic_essence_craft_item':'5' } ],
[ 'Cheese - Glutter (3)', { 'cheesy_fluffs_craft_item':'1', 'curds_and_whey_craft_item':'7', 'invisiglu_craft_item':'1', 'token_of_the_cheese_belt_craft_item':'3' } ],
[ 'Cheese - Inferno Havarti (6)', { 'coconut_milk_craft_item':'16', 'curds_and_whey_craft_item':'18', 'fire_salt_craft_item':'6', 'inferno_pepper_craft_item':'6' } ],
[ 'Cheese - Limelight (3)', { 'curds_and_whey_craft_item':'30', 'living_shard_crafting_item':'3', 'radioactive_sludge_craft_item':'3' } ],
[ 'Cheese - Magical Havarti (6)', { 'coconut_milk_craft_item':'2', 'curds_and_whey_craft_item':'18', 'magical_blue_pepper_craft_item':'6', 'salt_craft_item':'6' } ],
[ 'Cheese - Magical Rift Cheese (1)', { 'magic_essence_craft_item':'1', 'essence_a_crafting_item':'1', 'rift_cheese_curd_crafting_item':'1' } ],
[ 'Cheese - Maki (3)', { 'curds_and_whey_craft_item':'3', 'magic_essence_craft_item':'3', 'nori_craft_item':'1' } ],
[ 'Cheese - Moon (1)', { 'curds_and_whey_craft_item':'3', 'magic_essence_craft_item':'2', 'meteorite_piece_craft_item':'1' } ],
[ 'Cheese - Mountain Cheese (5)', { 'mountain_cheese_ore_crafting_item':'10', 'curds_and_whey_craft_item':'5', 'salt_craft_item':'10' } ],
[ 'Cheese - Onyx Gorgonzola (3)', { 'curds_and_whey_craft_item':'60', 'ionized_salt_craft_item':'6', 'onyx_stone_craft_item':'1' } ],
[ 'Cheese - Pungent Havarti (6)', { 'coconut_milk_craft_item':'8', 'curds_and_whey_craft_item':'18', 'pungent_purple_pepper_craft_item':'6', 'salt_craft_item':'6' } ],
[ 'Cheese - Rancid RB Cheese (1)', { 'radioactive_curd_crafting_item':'2', 'radioactive_sludge_craft_item':'1', 'ionized_salt_craft_item':'1' } ],
[ 'Cheese - Resonator Cheese (3)', { 'magic_seed_crafting_item':'3', 'riftgrass_crafting_item':'3', 'rift_dust_crafting_item':'3', 'rift_cheese_curd_crafting_item':'1', 'ionized_salt_craft_item':'1' } ],
[ 'Cheese - Res. Cheese using SB+ (4)', { 'magic_seed_crafting_item':'3', 'riftgrass_crafting_item':'3', 'rift_dust_crafting_item':'3', 'rift_cheese_curd_crafting_item':'1', 'ionized_salt_craft_item':'1', 'magic_essence_craft_item':'1' } ],
[ 'Cheese - Rumble with Seal (3)', { 'curds_and_whey_craft_item':'20', 'ionized_salt_craft_item':'1', 'masters_seal_craft_item':'1' } ],
[ 'Cheese - Rumble with Shards (3)', { 'curds_and_whey_craft_item':'20', 'ionized_salt_craft_item':'1', 'master_belt_shard_craft_item':'1', 'master_claw_shard_craft_item':'1', 'master_fang_shard_craft_item':'1' } ],
[ 'Cheese - Runic (1)', { 'ionized_salt_craft_item':'3', 'rune_craft_item':'1', 'stale_cheese_craft_item':'1' } ],
[ 'Cheese - Runic using SB+ (2)', { 'ionized_salt_craft_item':'3', 'rune_craft_item':'1', 'stale_cheese_craft_item':'1', 'magic_essence_craft_item':'1' } ],
[ 'Cheese - Shell (15)', { 'coconut_milk_craft_item':'10', 'curds_and_whey_craft_item':'60', 'salt_craft_item':'40', 'seashell_craft_item':'30' } ],
[ 'Cheese - Shell using SB+ (20)', { 'coconut_milk_craft_item':'10', 'curds_and_whey_craft_item':'60', 'salt_craft_item':'40', 'seashell_craft_item':'30', 'magic_essence_craft_item':'5' } ],
[ 'Cheese - Spicy Havarti (6)', { 'coconut_milk_craft_item':'12', 'curds_and_whey_craft_item':'18', 'salt_craft_item':'6', 'spicy_red_pepper_craft_item':'6' } ],
[ 'Cheese - SUPER|brie+ (1)', { 'curds_and_whey_craft_item':'1', 'magic_essence_craft_item':'1', 'salt_craft_item':'1' } ],
[ 'Cheese - Susheese (3)', { 'burroughs_salmon_craft_item':'1', 'curds_and_whey_craft_item':'3', 'nori_craft_item':'1', 'token_of_the_cheese_claw_craft_item':'3' } ],
[ 'Cheese - Sweet Havarti (6)', { 'coconut_milk_craft_item':'6', 'curds_and_whey_craft_item':'18', 'salt_craft_item':'6', 'sweet_yellow_pepper_craft_item':'6' } ],
[ 'Cheese - Vanilla Stilton (15)', { 'coconut_milk_craft_item':'15', 'curds_and_whey_craft_item':'15', 'salt_craft_item':'15', 'vanilla_bean_crafting_item':'15' } ],
[ 'Cheese - V. Stilton using SB+ (15)', { 'coconut_milk_craft_item':'15', 'curds_and_whey_craft_item':'15', 'salt_craft_item':'15', 'vanilla_bean_crafting_item':'5', 'magic_essence_craft_item':'15' } ],
[ 'Cheese - Vengeful Vanilla Stilton (1)', { 'bottled_up_rage_crafting_item':'1', 'coconut_milk_craft_item':'1', 'curds_and_whey_craft_item':'1', 'ionized_salt_craft_item':'1', 'pinch_of_annoyance_crafting_item':'1', 'raisins_of_wrath':'1', 'vanilla_bean_crafting_item':'1' } ],
[ 'Cheese - Venge V. Stilton using SB+ (3)', { 'bottled_up_rage_crafting_item':'1', 'coconut_milk_craft_item':'1', 'curds_and_whey_craft_item':'1', 'ionized_salt_craft_item':'1', 'magic_essence_craft_item':'3', 'pinch_of_annoyance_crafting_item':'1', 'raisins_of_wrath':'1', 'vanilla_bean_crafting_item':'1' } ],
[ 'Cheese - White Cheddar (1)', { 'curds_and_whey_craft_item':'1', 'salt_craft_item':'1' } ],
[ 'Essence - Ber', { 'essence_a_crafting_item':'3', 'essence_prism_crafting_item':'1' } ],
[ 'Essence - Cynd', { 'essence_b_crafting_item':'3', 'essence_prism_crafting_item':'1' } ],
[ 'Essence - Dol', { 'essence_c_crafting_item':'3', 'essence_prism_crafting_item':'1' } ],
[ 'Essence - Est', { 'essence_d_crafting_item':'3', 'essence_prism_crafting_item':'1' } ],
[ 'Essence - Fel', { 'essence_e_crafting_item':'3', 'essence_prism_crafting_item':'1' } ],
[ 'Essence - Gur', { 'essence_f_crafting_item':'3', 'essence_prism_crafting_item':'1' } ],
[ 'Essence - Hix', { 'essence_g_crafting_item':'3', 'essence_prism_crafting_item':'1' } ],
[ 'Essence - Icuri', { 'essence_h_crafting_item':'3', 'essence_prism_crafting_item':'1' } ],
[ 'Map - Balack\'s Lantern', { 'dragon_ember':'3', 'old_lantern':'1' } ],
[ 'Map - Ocean Navigation Kit', { 'compass_craft_item':'1', 'sextant_craft_item':'1', 'telescope_craft_item':'1' } ],
[ 'Map - S.S. Huntington III', { 'bolt_of_cloth_craft_item':'70', 'kings_reserve_bubbleh_craft_item':'1', 'rope_craft_item':'100', 'scrap_metal_craft_item':'18', 'ship_blueprints_craft_item':'1', 'splintered_wood_craft_item':'900' } ],
[ 'Map - S.S. Huntington III', { 'kings_reserve_bubbleh_craft_item':'1', 'unchristened_ship_craft_item':'1' } ],
[ 'Master\'s Seal', { 'master_belt_shard_craft_item':'1', 'master_claw_shard_craft_item':'1', 'master_fang_shard_craft_item':'1' } ],
[ 'Plant - Creamy Orange Pepper', { 'plant_pot_craft_item':'1', 'red_pepper_seed_craft_item':'1', 'yellow_pepper_seed_craft_item':'1' } ],
[ 'Plant - Crunchy Green Pepper', { 'plant_pot_craft_item':'1', 'blue_pepper_seed_craft_item':'1', 'yellow_pepper_seed_craft_item':'1' } ],
[ 'Plant - Inferno Pepper', { 'plant_pot_craft_item':'1', 'blue_pepper_seed_craft_item':'1', 'red_pepper_seed_craft_item':'1', 'yellow_pepper_seed_craft_item':'1' } ],
[ 'Plant - Magical Blue Pepper', { 'plant_pot_craft_item':'1', 'blue_pepper_seed_craft_item':'2' } ],
[ 'Plant - Pungent Purple Pepper', { 'plant_pot_craft_item':'1', 'blue_pepper_seed_craft_item':'1', 'red_pepper_seed_craft_item':'1' } ],
[ 'Plant - Spicy Red Pepper', { 'plant_pot_craft_item':'1', 'red_pepper_seed_craft_item':'2' } ],
[ 'Plant - Sweet Yellow Pepper', { 'plant_pot_craft_item':'1', 'yellow_pepper_seed_craft_item':'2' } ],
[ 'Theme - Halloween', { 'halloween_theme_scrap_1_crafting_item':'1', 'halloween_theme_scrap_2_crafting_item':'1', 'halloween_theme_scrap_3_crafting_item':'1' } ],
[ 'Theme - Living Garden', { 'living_garden_theme_scrap_1_crafting_item':'1', 'living_garden_theme_scrap_2_crafting_item':'1', 'living_garden_theme_scrap_3_crafting_item':'1' } ],
[ 'Theme - Halloween Undead', { 'halloween_undead_theme_scrap_1_crafting_item':'1', 'halloween_undead_theme_scrap_2_crafting_item':'1', 'halloween_undead_theme_scrap_3_crafting_item':'1' } ],
[ 'Trap - A.C.R.o.N.Y.M.', { 'magic_essence_craft_item':'3', 'mysterious_blueprints_craft_item':'1', 'obelisk_parts_craft_item':'1', 'onyx_stone_craft_item':'1', 'scrap_metal_craft_item':'12' } ],
[ 'Trap - A.C.R.o.N.Y.M. (repair)', { 'acronym_parts_crafting_item':'1' } ],
[ 'Trap - Ambush', { 'ambush_trap_blueprints_craft_item':'1', 'droid_parts_craft_item':'8', 'masters_seal_craft_item':'1', 'rice_paper_craft_item':'3', 'splintered_wood_craft_item':'5' } ],
[ 'Trap - Ambush (repair)', { 'ambush_trap_parts_crafting_item':'1' } ],
[ 'Trap - Ancient Box', { 'ancient_box_trap_blueprints_craft_item':'1', 'ancient_relic_staff_craft_item':'1', 'encrusted_metal_of_time_craft_item':'1', 'engraved_solid_stone_slab_craft_item':'1', 'ethereal_rope_craft_item':'1', 'hinge_of_eternity_craft_item':'1', 'timeless_mystic_gem_craft_item':'1' } ],
[ 'Trap - Ancient Spear Gun', { 'ancient_spear_craft_item':'1', 'ancient_spear_launcher_blueprints_craft_item':'1', 'launcher_parts_craft_item':'1' } ],
[ 'Trap - Blackstone Pass', { 'blackstone_pass_blueprints_crafting_item':'1', 'coal_craft_item':'4', 'mystic_crystal_crafting_item':'1' } ],
[ 'Trap - Cackle Lantern (LE)', { 'digby_drillbot_parts_craft_item':'1', 'dragon_ember':'1', 'obelisk_parts_craft_item':'1', 'smashed_pumpkin_crafting_item':'1', 'venus_mouse_trap_husk_craft_item':'1', 'platinum_bar_crafting_item':'24' } ],
[ 'Trap - Clockapult of Time (repair)', { 'clock_parts_crafting_item':'1' } ],
[ 'Trap - Clockwork Portal', { 'clockwork_portal_blueprints_crafting_item':'1', 'clock_parts_crafting_item':'1', 'umbral_capacitor_crafting_item':'8' } ],
[ 'Trap - Chrome MonstroBot', { 'chrome_monstrobot_upgrade_crafting_item':'1', 'sandstorm_monstrobot_parts_crafting_item':'1' } ],
[ 'Trap - Chrome Nannybot (LE)', { 'chrome_nanite_coating_crafting_item':'1', 'nanny_glasses_crafting_item':'1', 'nannybot_parts_crafting_item':'1', 'timeout_upgrade_crafting_item':'1' } ],
[ 'Trap - Digby Drillbot (repair)', { 'digby_drillbot_parts_craft_item':'1' } ],
[ 'Trap - Double Diamond Adventure (LE)', { 'climbing_pitons_crafting_item':'1', 'mine_crafting_item':'1', 'lava_bucket_crafting_item':'1', 'missile_cone_crafting_item':'1', 'ski_sign_crafting_item':'1', 'toboggan_ride_parts_crafting_item':'1', 'platinum_bar_crafting_item':'18' } ],
[ 'Trap - Enraged RhinoBot', { 'rhinobot_parts_crafting_item':'1', 'rhino_horn_craft_item':'3', 'stale_super_brie_craft_item':'48', 'platinum_bar_crafting_item':'6' } ],
[ 'Trap - Fluffy DeathBot', { 'fluffy_deathbot_skin_crafting_item':'1', 'deathbot_parts_craft_item':'1' } ],
[ 'Trap - Gingerbread House Surprise', { 'candies_craft_item':'10', 'gingerbread_house_plans_craft_item':'1', 'icing_sugar_craft_item':'5', 'plank_of_gingerbread_craft_item':'7' } ],
[ 'Trap - Glacier Gatler (LE)', { 'ice_blaster_parts_crafting_item':'1', 'oasis_bead_crafting_item':'1', 'frosty_metal_crafting_item':'7', 'living_shard_crafting_item':'600' } ],
[ 'Trap - Grand Arcanum', { 'grand_arcanum_blueprints_crafting_item':'1', 'acronym_parts_crafting_item':'1', 'arcane_crystal_crafting_item':'1', 'platinum_bar_crafting_item':'40' } ],
[ 'Trap - Grungy DeathBot', { 'grungy_deathbot_skin_crafting_item':'1', 'deathbot_parts_craft_item':'1' } ],
[ 'Trap - Harpoon Gun (repair)', { 'launcher_parts_craft_item':'1' } ],
[ 'Trap - Heat Bath', { 'launcher_parts_craft_item':'2', 'heat_bath_blueprints_crafting_item':'1', 'scrap_metal_craft_item':'6', 'coal_craft_item':'36' } ],
[ 'Trap - High Tension Spring (repair)', { 'high_tension_spring_parts_craft_item':'1' } ],
[ 'Trap - HitGrab Rainbow Rockin\' Horsey (LE)', { 'rainbow_mohawk_wig_of_awesomeness_craft_item':'1', 'hobby_horse_parts_craft_item':'1', 'invisiglu_craft_item':'1' } ],
[ 'Trap - Horrific Venus Mouse Trap', { 'radioactive_sludge_craft_item':'20', 'thorned_venus_mouse_trap_husk_craft_item':'1' } ],
[ 'Trap - Ice Blaster (LE)', { 'ice_blaster_parts_crafting_item':'1' } ],
[ 'Trap - Ice Maiden', { 'frozen_scroll_craft_item':'1', 'high_tension_spring_parts_craft_item':'1', 'rune_craft_item':'60' } ],
[ 'Trap - Mouse DeathBot', { 'deathbot_parts_craft_item':'1' } ],
[ 'Trap - Mutated Venus Mouse Trap', { 'radioactive_sludge_craft_item':'20', 'venus_mouse_trap_husk_craft_item':'1' } ],
[ 'Trap - Net Cannon Trap', { 'launcher_parts_craft_item':'1', 'rope_craft_item':'1' } ],
[ 'Trap - Ninja Ambush', { 'ambush_trap_parts_crafting_item':'1', 'ninja_ambush_skin_crafting_item':'1' } ],
[ 'Trap - Oasis Water Node Trap', { 'oasis_water_node_blueprint_crafting_item':'1', 'oasis_bead_crafting_item':'1', 'living_shard_crafting_item':'1000', 'coconut_milk_craft_item':'1', 'flameshard_crafting_item':'150' } ],
[ 'Trap - Oasis Water Node Trap (repair)', { 'oasis_water_node_parts_crafting_item':'1' } ],
[ 'Trap - Obelisk of Incineration', { 'coal_craft_item':'1', 'obelisk_of_incineration_blueprints_craft_item':'1', 'obelisk_parts_craft_item':'1', 'scrap_metal_craft_item':'2', 'splintered_wood_craft_item':'3' } ],
[ 'Trap - Obelisk of Slumber', { 'obelisk_parts_craft_item':'1', 'bead_of_slumber_craft_item':'1' } ],
[ 'Trap - Onyx Mallet', { 'onyx_mallet_blueprints_crafting_item':'1', 'onyx_stone_craft_item':'12', 'platinum_bar_crafting_item':'10' } ],
[ 'Trap - Obvious Ambush', { 'obvious_ambush_blueprints_crafting_item':'1', 'droid_jetpack_crafting_item':'1', 'droid_parts_craft_item':'1' } ],
[ 'Trap - PartyBot (LE)', { 'deathbot_parts_craft_item':'1', 'party_hat_craft_item':'1' } ],
[ 'Trap - Phantasmic Oasis', { 'phantasmic_oasis_blueprints_crafting_item':'1', 'oasis_water_node_parts_crafting_item':'1', 'phantasmic_essence_crafting_item':'3' } ],
[ 'Trap - Pumpkin Pummeler (LE)', { 'evil_pumpkin_seed_crafting_item':'1', 'pumpkin_pummeler_blueprints_crafting_item':'1' } ],
[ 'Trap - Reaper\'s Perch', { 'droid_parts_craft_item':'1', 'repear_perch_blueprint_crafting_item':'1', 'monolithic_slab_crafting_item':'6', 'onyx_stone_craft_item':'6', 'rune_craft_item':'6' } ],
[ 'Trap - RhinoBot', { 'digby_drillbot_parts_craft_item':'1', 'rhino_horn_craft_item':'1', 'rhinobot_blueprints_craft_item':'1', 'stale_super_brie_craft_item':'24' } ],
[ 'Trap - RhinoBot (repair)', { 'rhinobot_parts_crafting_item':'1' } ],
[ 'Trap - Sandstorm MonstroBot', { 'sandstormbot_weapon_blueprint_crafting_item':'1', 'flameshard_crafting_item':'400', 'sandblasted_metal_crafting_item':'2', 'rhinobot_parts_crafting_item':'1', 'digby_drillbot_parts_craft_item':'1', 'deathbot_parts_craft_item':'1' } ],
[ 'Trap - Sandstorm MonstroBot (repair)', { 'sandstorm_monstrobot_parts_crafting_item':'1' } ],
[ 'Trap - Soul Catcher (LE) (repair)', { 'soul_catcher_parts_crafting_item':'1' } ],
[ 'Trap - Soul Harvester (LE)', { 'soul_catcher_parts_crafting_item':'1', 'onyx_stone_craft_item':'2', 'monolithic_slab_crafting_item':'2', 'platinum_bar_crafting_item':'12', 'living_shard_crafting_item':'12' } ],
[ 'Trap - Sphynx Wrath', { 'sphynx_weapon_blueprint_crafting_item':'1', 'sphynx_crystal_crafting_item':'1', 'gold_leaf_crafting_item':'28', 'flameshard_crafting_item':'200' } ],
[ 'Trap - Steam Laser Mk. I (repair)', { 'steam_laser_mk_i_parts_crafting_item':'1' } ],
[ 'Trap - Steam Laser Mk. II', { 'steam_laser_mk_i_parts_crafting_item':'1', 'well_sealed_canister_crafting_item':'1', 'wire_spool_crafting_item':'15', 'heating_oil_crafting_item':'15', 'frosty_metal_crafting_item':'15', 'cold_fusion_crafting_item':'4' } ],
[ 'Trap - Steam Laser Mk. II (repair)', { 'steam_laser_mk_ii_parts_crafting_item':'1' } ],
[ 'Trap - Steam Laser Mk. III', { 'steam_laser_mk_ii_parts_crafting_item':'1', 'steam_nine_crafting_item':'1' } ],
[ 'Trap - Thorned Venus Mouse Trap', { 'thorned_mouse_trap_plans_craft_item':'1', 'thorned_vine_craft_item':'1', 'venus_mouse_trap_husk_craft_item':'1' } ],
[ 'Trap - Venus Mouse Trap (repair)', { 'venus_mouse_trap_husk_craft_item':'1' } ],
[ 'Trap - Zugzwang\'s First Move', { 'magical_feather_crafting_item':'1', 'zugzwangs_first_move_crafting_item':'1', 'chess_pieces_crafting_item':'1' } ],
[ 'Trap - Zugzwang\'s Last Move (repair)', { 'chess_pieces_crafting_item':'1' } ],
[ 'Trap - Zurreal\'s Folly', { 'zzl_marchingflameresearch_crafting_item':'1', 'zzl_ripper_nail':'3', 'zzl_ectoplasm':'3', 'zzl_gnawniaresearch_crafting_item':'1', 'zzl_fine_wood_crafting_item':'6', 'zzl_stonework_runes':'3', 'zzl_mesh_netting':'1', 'zzl_lich_jewel':'1', 'zzl_draconic_book':'1' } ],
[ 'Unchirstened Ship', { 'bolt_of_cloth_craft_item':'70', 'rope_craft_item':'100', 'scrap_metal_craft_item':'18', 'ship_blueprints_craft_item':'1', 'splintered_wood_craft_item':'900' } ],
[ 'Unstable Curd', { 'curds_and_whey_craft_item':'1', 'ionized_salt_craft_item':'1', 'onyx_stone_craft_item':'1' } ],
[ 'Unstable Gourd', { 'essence_e_crafting_item':'1', 'plant_pot_craft_item':'1' } ],
[ 'Zugzwang\'s Tower Key', { 'summer_key_shard_crafting_item':'1', 'fall_key_shard_crafting_item':'1', 'winter_key_shard_crafting_item':'1', 'spring_key_shard_crafting_item':'1' } ]
];
var INVID = 0, INVTYPE = 1, INVNAME = 2, INVDETAIL = 3, INVQTY = 4, INVEXTRA = 5;
var INVENTORY = Array();
var INV_TYPE_BAIT = 0, INV_TYPE_BASE = 1, INV_TYPE_BREAK = 2, INV_TYPE_CONVERT = 3, INV_TYPE_MAPS = 4, INV_TYPE_NOVELTY = 5, INV_TYPE_PLANKRUN = 6, INV_TYPE_POTION = 7, INV_TYPE_WEAPON = 8, INV_TYPE_NONE = 9;
var INVENTORY_TYPES_TEXT = [ 'bait', 'base', 'breakable', 'covertible', 'map_piece', 'collectible', 'torn_page', 'potion', 'weapon', 'none' ];
var CRAFTID = 0, CRAFTNAME = 1, CRAFTDETAIL = 2, CRAFTQTY = 3;
var CRAFTING = Array();
var LOCATION_TIMERS = [
[ 'Seasonal Garden', { first: 1283616000, length: 288000, breakdown: [ 1, 1, 1, 1 ], name: [ 'Summer', 'Autumn', 'Winter', 'Spring' ], color: [ 'Red', 'Orange', 'Blue', 'Green' ], effective: [ 'tactical', 'shadow', 'hydro', 'physical' ] } ],
[ 'Balack\'s Cove', { first: 1294680060, length: 1200, breakdown: [ 48, 3, 2, 3 ], name: [ 'Low', 'Medium (in)', 'High', 'Medium (out)' ], color: [ 'Green', 'Orange', 'Red', 'Orange' ] } ],
[ 'Forbidden Grove', { first: 1285704000, length: 14400, breakdown: [ 4, 1 ], name: [ 'Open', 'Closed' ], color: [ 'Green', 'Red' ] } ],
[ 'Relic Hunter', { url: 'http://horntracker.com/backend/relichunter.php?functionCall=relichunt' } ],
[ 'Toxic Spill', { url: 'http://horntracker.com/backend/new/toxic.php?functionCall=spill' } ]
];
function DSXC_setValue(name, value)
{
localStorage.setItem('MHH ' + name, '' + value);
}
function DSXC_getValue(name, value, full)
{
var DSXC_getValueReturn = value;
if (typeof(full) != 'boolean') full = false;
var getvalue = localStorage.getItem('MHH ' + name);
if (getvalue)
{
if (getvalue == 'true')
getvalue = true;
else if (getvalue == 'false')
getvalue = false;
DSXC_getValueReturn = getvalue;
}
return DSXC_getValueReturn;
}
function ValueDetail(type, value)
{
var ValueDetailReturn = '';
switch (type)
{
case 'string':
{
ValueDetailReturn = value;
} break;
case 'boolean':
{
switch (value)
{
case 'true':
{
ValueDetailReturn = true;
} break;
case 'false':
{
ValueDetailReturn = false;
} break;
}
} break;
case 'number':
{
ValueDetailReturn = Number(value);
}
}
return ValueDetailReturn;
}
function DSXC_log(text)
{
GM_log(text);
}
function GetFullDomain(text)
{
var FullDomainReturn = '';
var StartPos = text.indexOf('//');
if (StartPos != -1)
{
var EndPos = text.indexOf('/', StartPos + 2);
if (EndPos == -1) EndPos = text.length;
FullDomainReturn = text.substring(StartPos + 2, EndPos);
if (FullDomainReturn.substring((FullDomainReturn.length - 1)) == '/')
{
FullDomainReturn = FullDomainReturn.substring(0, (FullDomainReturn.length - 1));
}
}
return FullDomainReturn;
}
function DSXC_xmlHttpRequest(options)
{
var request = new XMLHttpRequest()
if (request != null)
{
request.onload = function() {
var response = {
responseText: request.responseText,
readyState: request.readyState,
responseHeaders: (request.readyState == 4 ? request.getAllResponseHeaders() : ''),
status: request.readyState == 4 ? request.status : 0,
statusText: request.readyState == 4 ? request.statusText : ''
};
options.onload(response);
}
request.open(options.method, options.url, true);
if (options.headers)
{
if (!options.headers["X-Requested-With"])
{
options.headers["X-Requested-With"] = "XMLHttpRequest";
}
}
// set the headers
for (var header in options.headers) {
request.setRequestHeader(header, options.headers[header]);
}
// send the data
request.send(options.data);
}
return request;
}
serialize = function(obj)
{
var str = [];
for (var item in obj)
{
if (typeof obj[item] === "object")
{
for (var subitem in obj[item])
{
if (typeof obj[item][subitem] !== "function")
str.push(encodeURIComponent(item) + "[" + encodeURIComponent(subitem) + "]=" + encodeURIComponent(obj[item][subitem]));
}
}
else if (typeof obj[item] !== "function")
{
str.push(encodeURIComponent(item) + "=" + encodeURIComponent(obj[item]));
}
}
return str.join("&");
}
function ReadSettings()
{
SETTINGS.horn = DSXC_getValue('SETTINGS.horn', STATE_OFF);
SETTINGS.king = DSXC_getValue('SETTINGS.king', STATE_OFF);
SETTINGS.cheese = DSXC_getValue('SETTINGS.cheese', STATE_OFF);
SETTINGS.washed = DSXC_getValue('SETTINGS.washed', STATE_OFF);
SETTINGS.season = DSXC_getValue('SETTINGS.season', STATE_OFF);
SETTINGS.tourney = DSXC_getValue('SETTINGS.tourney', STATE_OFF);
SETTINGS.direct = DSXC_getValue('SETTINGS.direct', false);
SETTINGS.showall = DSXC_getValue('SETTINGS.showall', false);
SETTINGS.timers = DSXC_getValue('SETTINGS.timers', true);
SETTINGS.title = DSXC_getValue('SETTINGS.title', true);
SETTINGS.auto = DSXC_getValue('SETTINGS.auto', false);
SETTINGS.buttons = DSXC_getValue('SETTINGS.buttons', false);
SETTINGS.length = DSXC_getValue('SETTINGS.length', 10);
}
function SaveSettings()
{
DSXC_setValue('SETTINGS.horn', SETTINGS.horn);
DSXC_setValue('SETTINGS.king', SETTINGS.king);
DSXC_setValue('SETTINGS.cheese', SETTINGS.cheese);
DSXC_setValue('SETTINGS.washed', SETTINGS.washed);
DSXC_setValue('SETTINGS.season', SETTINGS.season);
DSXC_setValue('SETTINGS.tourney', SETTINGS.tourney);
DSXC_setValue('SETTINGS.direct', SETTINGS.direct);
DSXC_setValue('SETTINGS.showall', SETTINGS.showall);
DSXC_setValue('SETTINGS.timers', SETTINGS.timers);
DSXC_setValue('SETTINGS.title', SETTINGS.title);
DSXC_setValue('SETTINGS.auto', SETTINGS.auto);
DSXC_setValue('SETTINGS.buttons', SETTINGS.buttons);
DSXC_setValue('SETTINGS.length', SETTINGS.length);
}
function ResetSettings()
{
SETTINGS.horn = STATE_OFF;
SETTINGS.king = STATE_OFF;
SETTINGS.cheese = STATE_OFF;
SETTINGS.washed = STATE_OFF;
SETTINGS.season = STATE_OFF;
SETTINGS.tourney = STATE_OFF;
SETTINGS.direct = false;
SETTINGS.showall = false;
SETTINGS.timers = true;
SETTINGS.title = true;
SETTINGS.auto = false;
SETTINGS.buttons = false;
SETTINGS.length = 5;
ResetWindows();
}
function Initialize()
{
DSXC_log('MHH v' + SCRIPT.version + ' - startup');
// initialize the user object
InitUserObject(document.documentElement.innerHTML);
// determine current base
DetermineBase();
// determine current cheese
DetermineCheese();
// determine the unique hash
DetermineHash();
// determine current level
DetermineLevel();
// determine current location
DetermineLocation();
// determine current trap
DetermineTrap();
ReadSettings();
// read the saved inventory from settings
LoadCrafting();
LoadInventory();
InitWindow();
StartTimers();
}
Initialize();
function InitUserObject(value)
{
DSXC_log('Init UserObject');
var OldUserObject = STATE.userobject;
if (value != null)
{
if (typeof value == "string")
{
DSXC_log(' - from HTML');
var StartPos = value.indexOf('user = ');
var EndPos = value.indexOf('};', StartPos);
if (StartPos != -1)
{
var FullObjectText = value.substring(StartPos + 7, EndPos + 1);
STATE.userobject = JSON.parse(FullObjectText);
}
}
else if (typeof value == "object")
{
DSXC_log(' - from javascript');
STATE.userobject = value;
}
}
if (STATE.userobject != null)
{
if (OldUserObject != null && OldUserObject.location != STATE.userobject.location)
DSXC_log('Not at expected location, expected ' + OldUserObject.location + ' but at ' + STATE.userobject.location);
UpdatePercentage(STATE.userobject.title_percentage);
}
}
function LoadInventory()
{
var TotalItems = DSXC_getValue('Inventory - Max ID', -1);
DSXC_log('Load Inventory Items');
for (iCount1 = 0; iCount1 <= TotalItems; iCount1++)
{
var InventoryDetail = DSXC_getValue('Inventory Item - ' + iCount1, 'INVALID');
INVENTORY[iCount1] = Array();
if (InventoryDetail != 'INVALID')
{
var InvValues = InventoryDetail.split(',');
INVENTORY[iCount1][INVID] = iCount1;
INVENTORY[iCount1][INVTYPE] = InvValues[0];
INVENTORY[iCount1][INVNAME] = InvValues[1];
INVENTORY[iCount1][INVDETAIL] = InvValues[2];
INVENTORY[iCount1][INVQTY] = Number(InvValues[3]);
if (InvValues.length == 5)
{
INVENTORY[iCount1][INVEXTRA] = InvValues[4];
}
}
else
{
INVENTORY[iCount1][INVID] = -1;
INVENTORY[iCount1][INVTYPE] = INVENTORY_TYPES_TEXT[INV_TYPE_NONE];
INVENTORY[iCount1][INVQTY] = 0;
}
}
DSXC_log(' - ' + iCount1 + ' loaded');
}
function LoadCrafting()
{
var TotalItems = DSXC_getValue('Crafting - Max ID', -1);
var NextItem = 0;
DSXC_log('Load Crafting Items');
for (iCount1 = 0; iCount1 <= TotalItems; iCount1++)
{
var CraftDetail = DSXC_getValue('Crafting Item - ' + iCount1, 'INVALID');
if (CraftDetail != 'INVALID')
{
var CraftValues = CraftDetail.split(',');
CRAFTING[NextItem] = Array();
CRAFTING[NextItem][CRAFTID] = iCount1;
CRAFTING[NextItem][CRAFTNAME] = CraftValues[0];
CRAFTING[NextItem][CRAFTDETAIL] = CraftValues[1];
CRAFTING[NextItem][CRAFTQTY] = Number(CraftValues[2]);
NextItem++;
}
}
DSXC_log(' - ' + NextItem + ' loaded');
}
function InitWindow()
{
// display the windows
DisplayState();
DisplayTimers();
DisplayDetail();
}
function DetermineLevel()
{
STATE.level = -1;
if (STATE.userobject != null)
{
DSXC_log("Determine Level");
for (count1 = 0; count1 < LEVEL.length && STATE.level == -1; count1++)
{
for (count2 = 0; count2 < LEVEL[count1].length; count2++)
{
if (STATE.userobject.title_name == LEVEL[count1][count2])
{
STATE.level = count1;
}
}
}
DSXC_log(" - Level is " + STATE.userobject.title_name);
}
if (STATE.level == -1)
{
setTimeout(DetermineLevel, 500);
}
}
function DetermineCheese()
{
if (STATE.userobject != null && STATE.userobject.bait_item_id != null)
{
DSXC_log("Determine Cheese");
STATE.cheese = STATE.userobject.bait_item_id;
if (STATE.cheese != -1 && STATE.cheese < INVENTORY.length)
{
DSXC_log(" - Cheese is " + INVENTORY[STATE.cheese][INVNAME]);
}
else
{
setTimeout(DetermineCheese, 500);
}
}
else
{
setTimeout(DetermineCheese, 500);
}
}
function DetermineLocation()
{
STATE.location = -1;
if (STATE.userobject != null)
{
DSXC_log("Determine Location");
STATE.location = GetLocationID(STATE.userobject.location);
if (STATE.location != -1)
{
// update expected location, this is updated when the page is loaded or you use travel
DSXC_setValue('STATE.location', STATE.userobject.location);
DSXC_log(" - Location is " + LOCATION.detail[STATE.location][LNAME]);
}
}
else
{
setTimeout(DetermineLocation, 500);
}
}
function CalculateRouteCosts()
{
var TotalLocations = LOCATION.costs.length;
LOCATION.distance = new Array(TotalLocations);
LOCATION.previous = new Array(TotalLocations);
for (var iCount1 = 0; iCount1 < TotalLocations; iCount1++)
{
LOCATION.distance[iCount1] = new Array(TotalLocations);
LOCATION.previous[iCount1] = new Array(TotalLocations);
for (var iCount2 = 0; iCount2 < TotalLocations; iCount2++)
{
LOCATION.previous[iCount1][iCount2] = -99;
LOCATION.distance[iCount1][iCount2] = -99;
if (CheckMap(LOCATION.detail[iCount2][LMAP]))
{
LOCATION.distance[iCount1][iCount2] = LOCATION.costs[iCount1][iCount2];
}
}
}
for (var iCount1 = 0; iCount1 < TotalLocations; iCount1++)
{
for (var iCount2 = 0; iCount2 < TotalLocations; iCount2++)
{
for (var iCount3 = 0; iCount3 < TotalLocations; iCount3++)
{
if ((LOCATION.distance[iCount2][iCount1] + LOCATION.distance[iCount1][iCount3] < LOCATION.distance[iCount2][iCount3] || LOCATION.distance[iCount2][iCount3] == -99) && LOCATION.distance[iCount2][iCount1] != -99 && LOCATION.distance[iCount1][iCount3] != -99)
{
LOCATION.distance[iCount2][iCount3] = LOCATION.distance[iCount2][iCount1] + LOCATION.distance[iCount1][iCount3];
LOCATION.previous[iCount2][iCount3] = iCount1;
}
}
}
}
}
function CalculateRoute(wherefrom, whereto, route)
{
if (route == null)
{
route = new Array();
route.push(whereto);
}
if (LOCATION.previous[wherefrom][whereto] == -99)
{
route.reverse();
return route;
}
else
{
route.push(LOCATION.previous[wherefrom][whereto]);
}
return CalculateRoute(wherefrom, LOCATION.previous[wherefrom][whereto], route);
}
function DetermineHash()
{
if (STATE.userobject != null)
{
DSXC_log('Determine Hash');
STATE.hash = STATE.userobject.unique_hash;
DSXC_setValue('STATE.hash', STATE.hash);
DSXC_log(' - Hash is ' + STATE.hash);
}
else
{
setTimeout(DetermineHash, 500);
}
}
function DetermineTrap()
{
STATE.trap = -1;
if (STATE.userobject != null)
{
DSXC_log("Determine Trap");
STATE.trap = STATE.userobject.weapon_item_id;
DSXC_log(" - Trap is " + STATE.userobject.weapon_name);
}
else
{
setTimeout(DetermineTrap, 500);
}
}
function DetermineBase()
{
STATE.base = -1;
if (STATE.userobject != null)
{
DSXC_log("Determine Base");
STATE.base = STATE.userobject.base_item_id;
DSXC_log(" - Base is " + STATE.userobject.base_name);
}
else
{
setTimeout(DetermineBase, 500);
}
}
function CalculatePower(trap, base)
{
var total_power = 0;
var multiplier = 1.0;
if (trap != -1 && base != -1)
{
total_power = total_power + TRAPS[trap][TPOWER] + BASES[base][BPOWER];
multiplier = multiplier + ((TRAPS[trap][TBONUS] + BASES[base][BBONUS]) / 100);
total_power = Math.round((total_power * multiplier) * 10) / 10; // round to 1 decimal place
total_power = Math.round(total_power);
}
return total_power;
}
/************************ Drag n drop*******************************/
function CreatePopupWindow(name, w, h, display)
{
if (display == null) display = true;
if (document.getElementById(name + '_Message') == null)
{
if (display)
{
var CloseButton = "<A HREF='#' ID='" + name + "_Close'><IMG SRC='" + IMAGE.close + "' border='0' TITLE='Close' ALT='X' /></A>";
var PopupWindow = document.createElement("div");
var WindowPosition = DSXC_getValue("Position - " + name, "90px_300px");
WindowPosition = WindowPosition.split("_");
PopupWindow.style.position = 'absolute';
PopupWindow.style.top = WindowPosition[0];
PopupWindow.style.left = WindowPosition[1];
PopupWindow.style.zIndex = 910;
PopupWindow.id = name + "_Message";
PopupWindow.innerHTML = "<DIV STYLE='position:absolute; z-index:911; background: white; padding: 0px 0px; color: black; border: 1px solid; font:10pt Verdana; width: " + w + "px; height: " + h + "px;'><DIV ID='" + name + "_Titlebar' STYLE='background: navy; color: white; cursor:move; font-weight: bold'> " + name + " <DIV STYLE='position:absolute; right:0px; top: 0px'>" + CloseButton + "</DIV></DIV><DIV ID='" + name + "' STYLE='padding: 5px 5px; text-align: left; overflow: auto; height: " + (h - 26) + "px;'></DIV></DIV>";
document.body.appendChild(PopupWindow);
makeDraggable(document.getElementById(name + '_Titlebar'));
document.getElementById(name + '_Close').addEventListener("click", function() { document.getElementById(name + '_Message').parentNode.removeChild(document.getElementById(name + '_Message')) }, false);
return document.getElementById(name);
}
}
else
{
document.getElementById(name + '_Message').parentNode.removeChild(document.getElementById(name + '_Message'));
}
return null;
}
function CreateSlider(node, width, minimum, maximum, show)
{
var SliderCtrl = document.getElementById(node);
if (SliderCtrl != null)
{
SliderCtrl.setAttribute('SliderCtrl', 'idle');
SliderCtrl.setAttribute('RangeMin', minimum);
SliderCtrl.setAttribute('RangeMax', maximum);
SliderCtrl.setAttribute('SliderTrack', 'Slider_Track_' + node);
SliderCtrl.setAttribute('SliderThumb', 'Slider_Thumb_' + node);
if (show != null) SliderCtrl.setAttribute('SliderValue', show);
SliderCtrl.innerHTML = '<DIV ID="Slider_Track_' + node + '" STYLE="width: 200px; left: 2px; height: 1px; border: 1px solid black"><DIV ID="Slider_Thumb_' + node + '" STYLE="z-index:100; margin-top: -3px; width: 5px; height: 6px; border: 1px solid black; background-color: white"></DIV></DIV>';
SliderCtrl.addEventListener("mousedown", function(ev) { this.setAttribute('SliderCtrl', 'drag'); return false; }, false);
SliderCtrl.addEventListener("mouseup", function(ev) { this.setAttribute('SliderCtrl', 'idle'); return false; }, false);
SliderCtrl.addEventListener("mousemove", function(ev) {
if (this.getAttribute('SliderCtrl') == 'drag')
{
var SliderTrack = document.getElementById(this.getAttribute('SliderTrack'));
var SliderThumb = document.getElementById(this.getAttribute('SliderThumb'));
var MousePos = mouseCoords(ev);
var TrackPos = getPosition(SliderTrack);
var ThumbPos = getPosition(SliderThumb);
var Range = {
min: (TrackPos.x + 2),
max: (TrackPos.x + parseFloat(SliderTrack.style.width) - 6)
};
SliderThumb.style.position = 'relative';
if (Range.min > MousePos.x)
{
SliderThumb.style.left = '0px';
}
else if (Range.max < MousePos.x)
{
SliderThumb.style.left = (Range.max - Range.min) + 'px';
}
else
{
SliderThumb.style.left = (MousePos.x - Range.min) + 'px';
}
if (this.getAttribute('SliderValue') != null && document.getElementById(this.getAttribute('SliderValue')) != null)
{
document.getElementById(this.getAttribute('SliderValue')).innerHTML = Math.ceil(((parseFloat(SliderThumb.style.left) + 1) * this.getAttribute('RangeMax')) / parseFloat(SliderTrack.style.width));
}
return false;
}
}, false);
}
}
var mouseOffset = null;
var mousePos = [ 0, 0 ];
var iMouseDown = false;
var lMouseState = false;
var dragObject = null;
var curTarget = null;
function mouseCoords(ev)
{
return { x: ev.pageX, y: ev.pageY };
}
function makeClickable(object)
{
object.onmousedown = function()
{
dragObject = this;
}
}
function getMouseOffset(target, ev)
{
var dPos = getPosition(target.parentNode);
var mPos = mouseCoords(ev);
return { x:mPos.x - dPos.x, y:mPos.y - dPos.y };
}
function getPosition(e)
{
var border_left;
var border_top;
var left = 0;
var top = 0;
while (e.offsetParent)
{
border_left = (e.currentStyle ? parseInt(e.currentStyle.borderLeftWidth) : 0);
border_top = (e.currentStyle ? parseInt(e.currentStyle.borderTopWidth) : 0);
left += e.offsetLeft + (typeof(border_left) == "number" ? border_left : 0);
top += e.offsetTop + (typeof(border_top) == "number" ? border_top : 0);
e = e.offsetParent;
}
border_left = (e.currentStyle ? parseInt(e.currentStyle.borderLeftWidth) : 0);
border_top = (e.currentStyle ? parseInt(e.currentStyle.borderTopWidth) : 0);
left += e.offsetLeft + (typeof(border_left) == "number" ? border_left : 0);
top += e.offsetTop + (typeof(border_top) == "number" ? border_top : 0);
return { x: left, y: top };
}
function mouseMove(ev)
{
var target = ev.target;
mousePos = mouseCoords(ev);
if (dragObject)
{
dragObject.parentNode.style.position = 'absolute';
dragObject.parentNode.style.top = Math.max(0, (mousePos.y - mouseOffset.y)) +"px";
dragObject.parentNode.style.left = Math.max(0, (mousePos.x - mouseOffset.x)) +"px";
}
lMouseState = iMouseDown;
return false;
}
function mouseUp(ev)
{
if (dragObject != null)
{
if (dragObject.parentNode.id.indexOf('_Message') != -1)
{
var item_name = dragObject.parentNode.id.substring(0, dragObject.parentNode.id.indexOf('_Message'));
DSXC_setValue("Position - " + item_name, dragObject.parentNode.style.top + "_" + dragObject.parentNode.style.left);
}
dragObject = null;
}
iMouseDown = false;
}
function mouseDown(ev)
{
var mousePos = mouseCoords(ev);
var target = ev.target;
iMouseDown = true;
if (target.getAttribute('DragObj'))
{
return false;
}
}
function makeDraggable(item)
{
if (!item) return;
item.addEventListener("mousedown",
function(ev)
{
dragObject = this.parentNode;
mouseOffset = getMouseOffset(this.parentNode, ev);
return false;
},
false);
}
document.addEventListener("mousemove", mouseMove, false);
document.addEventListener("mousedown", mouseDown, false);
document.addEventListener("mouseup", mouseUp, false);
function getElementById(search, node, tag)
{
var FoundElement = null;
if (node == null) node = document;
if (tag == null) tag = '*';
var AllElements = node.getElementsByTagName(tag);
for (count = 0; count < AllElements.length && FoundElement == null; count++)
{
if (AllElements[count].id != null)
{
if (AllElements[count].id.indexOf(search) != -1)
{
FoundElement = AllElements[count];
}
}
}
return FoundElement;
}
function getElementsByPartialId(search, node, tag)
{
var FoundElements = new Array();
if (node == null) node = document;
if (tag == null) tag = '*';
var AllElements = node.getElementsByTagName(tag);
for (count = 0; count < AllElements.length; count++)
{
if (AllElements[count].id != null)
{
if (AllElements[count].id.indexOf(search) != -1)
{
FoundElements.push(AllElements[count]);
}
}
}
return FoundElements;
}
function getElementsByClass(search, node, tag)
{
var FoundElements = new Array();
if (node == null) node = document;
if (tag == null) tag = '*';
var AllElements = node.getElementsByTagName(tag);
for (count = 0; count < AllElements.length; count++)
{
if (AllElements[count].className != null)
{
if (AllElements[count].className == search)
{
FoundElements.push(AllElements[count]);
}
}
}
return FoundElements;
}
function getElementsByPartialClass(search, node, tag)
{
var FoundElements = new Array();
if (node == null) node = document;
if (tag == null) tag = '*';
var AllElements = node.getElementsByTagName(tag);
for (count = 0; count < AllElements.length; count++)
{
if (AllElements[count].className != null)
{
if (AllElements[count].className.indexOf(search) != -1)
{
FoundElements.push(AllElements[count]);
}
}
}
return FoundElements;
}
if (typeof String.prototype.startsWith != 'function') {
String.prototype.startsWith = function (str){
return this.slice(0, str.length) == str;
};
}
if (typeof String.prototype.endsWith != 'function') {
String.prototype.endsWith = function (str){
return this.slice(-str.length) == str;
};
}
function GetMessageText(text)
{
var StartPos = text.indexOf('pagemessage');
var EndPos = text.indexOf('<div id="tabbarContent');
var MessageText = "";
if (StartPos != -1)
{
MessageText = text.substring(StartPos + 53, EndPos);
}
return MessageText;
}
var MessageTimeout;
function ShowMessageWindow(text, time)
{
clearTimeout(MessageTimeout);
if (time == null) time = 0;
var CurrentMessage = document.getElementById('pagemessage');
if (typeof text != 'string') text = '';
if (CurrentMessage != null)
{
CurrentMessage.innerHTML = text;
if (time > 0)
{
MessageTimeout = setTimeout(ShowMessageWindow, (time * 1000));
}
}
}
function ShowConfigWindow(display)
{
var ConfigWindow = CreatePopupWindow('Configuration', 275, 350, display);
if (ConfigWindow != null)
{
ConfigWindow.innerHTML = "<TABLE HEIGHT='100%'><TR><TD WIDTH='200'>Alerts</TD><TD STYLE='text-align: right; width: 100'><SPAN STYLE='font-size: 8px'>Snd Msg</SPAN></TD></TR><TR><TD WIDTH='200'> Horn Ready</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Hunter_Horn_Sound'><INPUT TYPE='Checkbox' ID='Hunter_Horn_Popup'></TD></TR><TR><TD WIDTH='200'> King's Reward</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Kings_Reward_Sound'><INPUT TYPE='Checkbox' ID='Kings_Reward_Popup'></TD></TR><TR><TD WIDTH='200'> Cheese Empty</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Out_of_Cheese_Sound'><INPUT TYPE='Checkbox' ID='Out_of_Cheese_Popup'></TD></TR><TR><TD WIDTH='200'> Washed Away</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Washed_Away_Sound'><INPUT TYPE='Checkbox' ID='Washed_Away_Popup'></TD></TR><TR><TD WIDTH='200'> Season Change / Tower Amp</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Season_Change_Sound'><INPUT TYPE='Checkbox' ID='Season_Change_Popup'></TD></TR><TR><TD WIDTH='200'> Tournament Soon</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Tourney_Warning_Sound'><INPUT TYPE='Checkbox' ID='Tourney_Warning_Popup'></TD></TR><TR><TD WIDTH='200'>Direct Travel</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Direct_Travel'></TD></TR><TR><TD WIDTH='200'>Display Timers</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Display_Timers'></TD></TR><TR><TD WIDTH='200'>Timer in Title</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Timer_Title'></TD></TR><TR><TD WIDTH='200'>Show All Crafting Items</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Show_All_Craft'></TD></TR><TR><TD WIDTH='200'>Automatic Inventory Update</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Inventory_Update'></TD></TR><TR><TD WIDTH='200'>Change Button Style</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Checkbox' ID='Display_Button'></TD></TR><TR><TD WIDTH='200'>Update Timer Length</TD><TD STYLE='text-align: right; width: 100'><INPUT TYPE='Text' ID='Update_Length' SIZE='3'></TD></TR><TR HEIGHT='100%'><TD COLSPAN='2' style='vertical-align: bottom'>Version " + SCRIPT.version + " <a href=\"#\" ajaxify=\"/ajax/pages/fan_status.php?fbpage_id=134975893200179&add=1&reload=1&preserve_tab=1&use_primer=1\" rel=\"async-post\">Like</a> <A HREF='#' ID='Reset_to_Default'>Defaults</A></TD></TR></TABLE>";
document.getElementById('Hunter_Horn_Sound').checked = SETTINGS.horn & STATE_SOUND;
document.getElementById('Hunter_Horn_Popup').checked = SETTINGS.horn & STATE_MESSAGE;
document.getElementById('Kings_Reward_Sound').checked = SETTINGS.king & STATE_SOUND;
document.getElementById('Kings_Reward_Popup').checked = SETTINGS.king & STATE_MESSAGE;
document.getElementById('Out_of_Cheese_Sound').checked = SETTINGS.cheese & STATE_SOUND;
document.getElementById('Out_of_Cheese_Popup').checked = SETTINGS.cheese & STATE_MESSAGE;
document.getElementById('Washed_Away_Sound').checked = SETTINGS.washed & STATE_SOUND;
document.getElementById('Washed_Away_Popup').checked = SETTINGS.washed & STATE_MESSAGE;
document.getElementById('Season_Change_Sound').checked = SETTINGS.season & STATE_SOUND;
document.getElementById('Season_Change_Popup').checked = SETTINGS.season & STATE_MESSAGE;
document.getElementById('Tourney_Warning_Sound').checked = SETTINGS.tourney & STATE_SOUND;
document.getElementById('Tourney_Warning_Popup').checked = SETTINGS.tourney & STATE_MESSAGE;
document.getElementById('Direct_Travel').checked = SETTINGS.direct;
document.getElementById('Show_All_Craft').checked = SETTINGS.showall;
document.getElementById('Display_Timers').checked = SETTINGS.timers;
document.getElementById('Timer_Title').checked = SETTINGS.title;
document.getElementById('Inventory_Update').checked = SETTINGS.auto;
document.getElementById('Display_Button').checked = SETTINGS.buttons;
document.getElementById('Update_Length').value = SETTINGS.length;
document.getElementById('Hunter_Horn_Sound').addEventListener('click', function () { SETTINGS.horn = SETTINGS.horn ^ STATE_SOUND; SaveSettings(); }, true);
document.getElementById('Hunter_Horn_Popup').addEventListener('click', function () { SETTINGS.horn = SETTINGS.horn ^ STATE_MESSAGE; SaveSettings(); }, true);
document.getElementById('Kings_Reward_Sound').addEventListener('click', function () { SETTINGS.king = SETTINGS.king ^ STATE_SOUND; SaveSettings(); }, true);
document.getElementById('Kings_Reward_Popup').addEventListener('click', function () { SETTINGS.king = SETTINGS.king ^ STATE_MESSAGE; SaveSettings(); }, true);
document.getElementById('Out_of_Cheese_Sound').addEventListener('click', function () { SETTINGS.cheese = SETTINGS.cheese ^ STATE_SOUND; SaveSettings(); }, true);
document.getElementById('Out_of_Cheese_Popup').addEventListener('click', function () { SETTINGS.cheese = SETTINGS.cheese ^ STATE_MESSAGE; SaveSettings(); }, true);
document.getElementById('Washed_Away_Sound').addEventListener('click', function () { SETTINGS.washed = SETTINGS.washed ^ STATE_SOUND; SaveSettings(); }, true);
document.getElementById('Washed_Away_Popup').addEventListener('click', function () { SETTINGS.washed = SETTINGS.washed ^ STATE_MESSAGE; SaveSettings(); }, true);
document.getElementById('Season_Change_Sound').addEventListener('click', function () { SETTINGS.season = SETTINGS.season ^ STATE_SOUND; SaveSettings(); }, true);
document.getElementById('Season_Change_Popup').addEventListener('click', function () { SETTINGS.season = SETTINGS.season ^ STATE_MESSAGE; SaveSettings(); }, true);
document.getElementById('Tourney_Warning_Sound').addEventListener('click', function () { SETTINGS.tourney = SETTINGS.tourney ^ STATE_SOUND; SaveSettings(); }, true);
document.getElementById('Tourney_Warning_Popup').addEventListener('click', function () { SETTINGS.tourney = SETTINGS.tourney ^ STATE_MESSAGE; SaveSettings(); }, true);
document.getElementById('Direct_Travel').addEventListener('click', function () { SETTINGS.direct = !SETTINGS.direct; SaveSettings(); }, true);
document.getElementById('Show_All_Craft').addEventListener('click', function () { SETTINGS.showall = !SETTINGS.showall; SaveSettings(); }, true);
document.getElementById('Display_Timers').addEventListener('click', function () { SETTINGS.timers = !SETTINGS.timers; SaveSettings(); }, true);
document.getElementById('Timer_Title').addEventListener('click', function () { SETTINGS.title = !SETTINGS.title; SaveSettings(); }, true);
document.getElementById('Inventory_Update').addEventListener('click', function () { SETTINGS.auto = !SETTINGS.auto; SaveSettings(); }, true);
document.getElementById('Display_Button').addEventListener('click', function () { SETTINGS.buttons = !SETTINGS.buttons; SaveSettings(); }, true);
document.getElementById('Update_Length').addEventListener('change', function () { SETTINGS.length = parseInt(document.getElementById('Update_Length').value); SaveSettings(); }, true);
document.getElementById('Reset_to_Default').addEventListener('click', function () { ResetSettings(); SaveSettings(); ShowConfigWindow(false); }, true);
}
}
function DisplayState()
{
var AllHUDs = getElementsByClass('headsup');
var HUD = AllHUDs[0];
var iCount = 1;
if (HUD != null)
{
var HUDStatLists = getElementsByClass('hudstatlist');
for (iCount = 1; iCount < HUDStatLists.length; iCount++)
{
var Embedded = document.createElement('li');
Embedded.id = 'MHH_Display_' + (iCount + 1);
HUDStatLists[iCount].firstChild.appendChild(Embedded);
}
}
if (document.getElementById('header') != null)
{
if (DSXC_getValue('Alert - Kings Reward', false))
{
ResetTimeout('Update - Kings Reward');
DSXC_setValue('Alert - Kings Reward', false);
}
DSXC_setValue('Alert - Cheese', false);
STATE.ready = true;
}
else
{
STATE.maintenance = true;
STATE.ready = true;
}
}
function DisplayTimers()
{
if (!STATE.maintenance)
{
if (SETTINGS.timers)
{
SetDisplayText(2, '<span class="hudstatlabel">Reward:</span> <span id="MHH_Kings_Reward_Timer"></span>');
var MHHornTimer = document.getElementById('huntTimer');
MHHornTimer.style.display = 'none';
var HornTimer = document.createElement('div');
HornTimer.id = 'MHH_Display_1';
HornTimer.className = 'hunttimer';
HornTimer.innerHTML = '<span style="font-size: 12px"><B>Horn:</B></span> <span style="font-size: 12px" id="MHH_Horn_Timer"></span>';
MHHornTimer.parentNode.appendChild(HornTimer);
}
}
}
function HeaderDetail(text, stylestart, styleend, link, linktext)
{
var HeaderText = "<div class='uiHeader uiHeaderTopAndBottomBorder mbs uiSideHeader'><div class='clearfix uiHeaderTop'>";
if (link != null) HeaderText = HeaderText + "<a href='" + link + "' class='uiHeaderActions rfloat'>" + linktext + "</a>";
HeaderText = HeaderText + "<div>";
if (stylestart != null) HeaderText = HeaderText + stylestart;
HeaderText = HeaderText + text;
if (styleend != null) HeaderText = HeaderText + styleend;
HeaderText = HeaderText + "</div></div></div>"
return HeaderText;
}
function DisplayDetail()
{
var TopBanner = getElementById("hgBanner");
if (TopBanner != null && !STATE.maintenance)
{
var sBackground = (SETTINGS.buttons ? " style='padding: 3px; background: url(" + IMAGE.background + ") no-repeat'" : "");
var sConfigOpen = "<a href='#' id='Config_Open' class='config_open_btn'><img" + sBackground + " src='" + IMAGE.config + "' border=0 title='Configuration' /></a>";
var sRefresh = "<a href='#' id='Refresh_Inventory' class='refresh_btn'><img" + sBackground + " src='" + IMAGE.refresh + "' border=0 title='Refresh Inventory' /></a>";
var sTravelOpen = "<a href='#' id='Travel_Open' class='config_open_btn'><img" + sBackground + " src='" + IMAGE.travel + "' border=0 title='Travel' /></a>";
var sCraftingOpen = "<a href='#' id='Crafting_Open' class='crafting_open_btn'><img" + sBackground + " src='" + IMAGE.craft + "' border=0 title='Crafting' /></a>";
var sPotionsOpen = "<a href='#' id='Potions_Open' class='potion_open_btn'><img" + sBackground + " src='" + IMAGE.potion + "' border=0 title='Potions' /></a>";
var sJournalOpen = "<a href='#' id='Journal_Open' class='journal_open_btn'><img" + sBackground + " src='" + IMAGE.journal + "' border=0 title='Journal' /></a>";
var sMHHButtons = "<div style=\"float: left\"><table id='MHH_Buttons' style='width: 245px'>";
sMHHButtons = sMHHButtons + "<tr height=\"25\"><th colspan=\"6\" style=\"text-align: center;\"><b><a target=\"_new\" href=\"http://www.facebook.com/pages/DSXCs-Mousehunt-Helper/134975893200179\">MouseHunt Helper</a></b></th></tr>";
//sMHHButtons = sMHHButtons + "<tr><td style='width: 20%; text-align: center'>" + sCraftingOpen + "</td><td style='width: 20%; text-align: center'>" + sTravelOpen + "</td><td style='width: 20%; text-align: center'>" + sJournalOpen + "</td><td style='width: 20%; text-align: center'>" + sRefresh + "</td><td style='width: 20%; text-align: center'>" + sConfigOpen + "</td></tr>";
sMHHButtons = sMHHButtons + "<tr><td style='width: 20%; text-align: center'>" + sCraftingOpen + "</td><td style='width: 20%; text-align: center'>" + sPotionsOpen + "</td><td style='width: 20%; text-align: center'>" + sTravelOpen + "</td><td style='width: 20%; text-align: center'>" + sJournalOpen + "</td><td style='width: 20%; text-align: center'>" + sRefresh + "</td><td style='width: 20%; text-align: center'>" + sConfigOpen + "</td></tr>";
//sMHHButtons = sMHHButtons + "<tr><td style='font-size: 8px; width: 20%; text-align: center'>Craft</td><td style='font-size: 8px; width: 20%; text-align: center'>Travel</td><td style='font-size: 8px; width: 20%; text-align: center'>Journal</td><td style='font-size: 8px; width: 20%; text-align: center'>Refresh</td><td style='font-size: 8px; width: 20%; text-align: center'>Config</td></tr>";
sMHHButtons = sMHHButtons + "<tr><td style='font-size: 8px; width: 20%; text-align: center'>Craft</td><td style='font-size: 8px; width: 20%; text-align: center'>Potion</td><td style='font-size: 8px; width: 20%; text-align: center'>Travel</td><td style='font-size: 8px; width: 20%; text-align: center'>Journal</td><td style='font-size: 8px; width: 20%; text-align: center'>Refresh</td><td style='font-size: 8px; width: 20%; text-align: center'>Config</td></tr>";
sMHHButtons = sMHHButtons + "</table><p /></div>";
var sMHHTimers = "<div style=\"float: right\"><table id='MHH_Buttons' style='width: 450px'>";
sMHHTimers = sMHHTimers + "<tr height=\"25\"><th colspan=\"5\" style=\"text-align: center; font-size: 9px;\">";
if (STATE.userobject != null && STATE.userobject.has_shield)
{
var expiry = new Date(STATE.userobject.shield_expiry);
var now = new Date();
var days = days_between(expiry, now);
if (days > 0)
sMHHTimers = sMHHTimers + "Lucky shield expires in " + days + " days";
else
sMHHTimers = sMHHTimers + "Lucky shield expires today!";
}
sMHHTimers = sMHHTimers + "</th></tr><tr>";
var ColumnWidth = 100 / LOCATION_TIMERS.length;
for (iCount1 = 0; iCount1 < LOCATION_TIMERS.length; iCount1++)
{
sMHHTimers = sMHHTimers + "<td style=\"font-size: 9px;\"><b>" + LOCATION_TIMERS[iCount1][0] + "</b><br>";
sMHHTimers = sMHHTimers + " State: <span id='MHH_Location_" + iCount1 + "_State'></span><br>";
sMHHTimers = sMHHTimers + " Changes: <span id='MHH_Location_" + iCount1 + "_Change'>the future</span></td>";
}
sMHHTimers = sMHHTimers + "</tr></table><p /></div>";
TopBanner.innerHTML = sMHHButtons + sMHHTimers + "<div style=\"clear: both\"></div>";
TopBanner.id = 'MHH_modified';
if (document.getElementById('Crafting_Open') != null) document.getElementById('Crafting_Open').addEventListener("click", ShowCraftingWindow, false);
if (document.getElementById('Potions_Open') != null) document.getElementById('Potions_Open').addEventListener("click", ShowPotionsWindow, false);
if (document.getElementById('Travel_Open') != null) document.getElementById('Travel_Open').addEventListener("click", ShowTravelWindow, false);
if (document.getElementById('Journal_Open') != null) document.getElementById('Journal_Open').addEventListener("click", ShowJournalWindow, false);
if (document.getElementById('Refresh_Inventory') != null) document.getElementById('Refresh_Inventory').addEventListener("click", ForceRefresh, false);
if (document.getElementById('Config_Open') != null) document.getElementById('Config_Open').addEventListener("click", ShowConfigWindow, false);
}
}
function days_between(date1, date2)
{
// The number of milliseconds in one day
var ONE_DAY = 1000 * 60 * 60 * 24;
// Convert both dates to milliseconds
var date1_ms = date1.getTime() + (date2.getTimezoneOffset() * 60 * 1000);
var date2_ms = date2.getTime();
// Calculate the difference in milliseconds
var difference_ms = Math.abs(date1_ms - date2_ms);
// Convert back to days and return
return Math.round(difference_ms / ONE_DAY);
}
function AlertSound(sound)
{
var SoundAlert = document.createElement("div");
SoundAlert.innerHTML = '<embed src="' + sound + '" height="50" width="200" hidden=true autostart="true" loop="false"></embed>';
if (document.getElementById('hgAppContainer') != null)
document.getElementById('hgAppContainer').appendChild(SoundAlert);
else
document.body.appendChild(SoundAlert);
}
function SoundHorn()
{
if (!DSXC_getValue('Alert - Sound', false))
{
DSXC_setValue('Alert - Sound', true);
if (SETTINGS.horn & STATE_SOUND)
{
AlertSound(AUDIO.horn);
}
if (SETTINGS.horn & STATE_MESSAGE)
{
alert('The horn is ready to be sounded');
}
}
}
function UpdateTimer(timeleft, inhours)
{
var ReturnValue = "";
var FirstPart;
var SecondPart;
var Size;
if (timeleft > 0)
{
if (inhours != null && inhours == true)
{
FirstPart = Math.floor(timeleft / (60 * 60));
SecondPart = Math.floor(timeleft / 60) % 60;
Size = 'hrs';
}
else
{
FirstPart = Math.floor(timeleft / 60);
SecondPart = timeleft % 60;
Size = 'mins';
}
if (SecondPart < 10)
{
SecondPart = '0' + SecondPart;
}
ReturnValue = FirstPart + ':' + SecondPart + ' ' + Size;
}
else
{
ReturnValue = 'Soon...';
}
return ReturnValue;
}
function Get(url, callback)
{
// DO NOT OPEN OTHER PAGES DURING KINGS REWARD OR MAINTENANCE
if (!STATE.king && !STATE.maintenance)
{
DSXC_log('Get - ' + url);
try
{
DSXC_xmlHttpRequest({
method: 'GET',
url: url,
onload: function(result) {
if (result.status != 200)
{
throw("GET failed - " + url + " " + Flatten(result));
}
else
{
if (url.startsWith(STATE.baseurl))
{
InitUserObject(result.responseText);
DetermineHash();
if (result.responseText.indexOf("Claim Your Reward!") != -1)
{
window.location = STATE.baseurl;
}
else
{
callback(result.responseText);
}
}
else
{
callback(result.responseText);
}
}
}
});
}
catch (ex)
{
DSXC_log(ex);
}
}
}
function Post(url, data, callback)
{
// DO NOT OPEN OTHER PAGES DURING KINGS REWARD OR MAINTENANCE
if (!STATE.king && !STATE.maintenance)
{
DSXC_log('Post - ' + url + ' - ' + data);
if (!data)
data = {}
data.hg_is_ajax = 1;
// the window.parent is not accessible by the fb apps page due to cross site
// security, this is the only way to check if someone is using the fb version
try
{
window.parent.location.toString();
data.sn = 'Hitgrab';
}
catch (ex)
{
data.sn = 'Facebook';
}
try
{
DSXC_xmlHttpRequest({
method: 'POST',
data: serialize(data).replace(" ", "+"),
headers: { "Content-Type": "application/x-www-form-urlencoded" },
url: url,
onload: function(result) {
if (result.status != 200)
{
throw("POST failed - " + url);
}
else
{
if (url.startsWith(STATE.baseurl))
{
responseData = JSON.parse(result.responseText);
InitUserObject(responseData.user);
if (document.getElementById('headerTop') != null)
document.getElementById('headerTop').style.backgroundImage = "url(\'" + STATE.userobject.location_header + "\')";
DetermineHash();
if (STATE.userobject.has_puzzle)
{
window.location = STATE.baseurl;
}
else
{
callback(responseData);
}
}
else
{
callback(responseData);
}
}
}
});
}
catch (ex)
{
DSXC_log(ex);
}
}
}
function CheckTimeout(timer, minutes, hours)
{
var Today = new Date();
var iReturnValue = 0;
var szLastCheck = DSXC_getValue(timer, 'never');
if (minutes == null) minutes = 0;
if (hours == null) hours = 0;
var WaitLength = ((minutes * 60) + (hours * 60 * 60));
if (szLastCheck != 'never')
{
var CurrentTime = Today.getTime();
var PreviousTime = new Date(szLastCheck).getTime();
var Interval = Math.floor((CurrentTime - PreviousTime) / 1000);
if (Interval >= WaitLength)
{
iReturnValue = 0;
}
else
{
iReturnValue = (WaitLength - Interval);
}
}
else
{
iReturnValue = 0;
}
return iReturnValue;
}
function ResetTimeout(timer)
{
var Today = new Date();
DSXC_setValue(timer, String(Today));
}
function ResetInventory()
{
var MaxItemID = DSXC_getValue('Inventory - Max ID', -1);
for (iCount1 = 0; iCount1 < MaxItemID; iCount1++)
{
var InventoryDetail = DSXC_getValue('Inventory Item - ' + iCount1, 'INVALID');
if (InventoryDetail != 'INVALID')
{
var InvValues = InventoryDetail.split(',');
DSXC_setValue('Inventory Item - ' + iCount1, InvValues[0] + ',' + InvValues[1] + ',' + InvValues[2] + ',0');
}
}
}
function ForceRefresh()
{
CheckInventory(0);
}
function CheckInventory(when)
{
if (when == 0 || SETTINGS.auto)
{
if (CheckTimeout('Update - Inventory', when) == 0)
{
ResetTimeout('Update - Inventory');
ResetInventory();
ShowMessageWindow('<div class="pagemessage s"><div class="messagetop"></div><div class="messagebody"><div class="messagetitle">Updating Inventory</div><div class="messagecontent">This window will disappear once the update has occurred.</div></div><div class="messagebottom"></div></div></div>');
Get(STATE.baseurl + "inventory.php", UpdateInventory);
}
}
}
function UpdateInventoryQuantity(item_id, quantity)
{
INVENTORY[item_id][INVQTY] = Number(quantity);
DSXC_setValue('Inventory Item - ' + item_id, INVENTORY[item_id][INVTYPE] + ',' + INVENTORY[item_id][INVNAME] + ',' + INVENTORY[item_id][INVDETAIL] + ',' + INVENTORY[item_id][INVQTY]);
}
function UpdateCraftingQuantity(item_id, quantity)
{
CRAFTING[item_id][CRAFTQTY] = Number(quantity);
DSXC_setValue('Crafting Item - ' + item_id, CRAFTING[item_id][CRAFTNAME] + ',' + CRAFTING[item_id][CRAFTDETAIL] + ',' + CRAFTING[item_id][CRAFTQTY]);
}
function UpdateInventory(data)
{
if (typeof data == "object")
{
if (data.items != null)
{
for (var detail in data.items)
{
UpdateInventoryDetail(data.items[detail]);
}
}
if (data.inventory != null)
{
for (var detail in data.inventory)
{
if (data.inventory[detail].classification == "crafting_item")
{
var mat_id = CraftingLookup(data.inventory[detail].type);
if (mat_id != -1)
UpdateCraftingQuantity(mat_id, data.inventory[detail].quantity);
}
else
{
UpdateInventoryDetail(data.inventory[detail]);
}
}
}
LoadCrafting();
LoadInventory();
}
else if (data == null)
{
params = { "classifications": [ "map_piece", "bait", "skin", "weapon", "base", "trinket", "potion", "stat", "quest", "convertible", "collectible", "message_item", "torn_page" ], "action": "get_items_by_classification", "uh": STATE.hash };
Post(STATE.baseurl + "managers/ajax/users/userInventory.php", params, function(response)
{
for (var item = 0; item < response.items.length; item++)
{
UpdateInventoryDetail(response.items[item]);
}
ShowMessageWindow('');
LoadInventory();
});
}
else
{
var ItemText = "";
var StartPos = data.indexOf('CraftingInstance.init');
var EndPos = 0;
if (StartPos != -1)
{
var MaxItemID = -1;
DSXC_log('Update Crafting Items');
StartPos = data.indexOf('[', StartPos);
EndPos = data.indexOf('], ', StartPos);
var ExtractedData = data.substring(StartPos, EndPos + 1);
var ItemArray = JSON.parse(ExtractedData);
for (id = 0; id < ItemArray.length; id++)
{
DSXC_setValue('Crafting Item - ' + id, ItemArray[id].name + ',' + ItemArray[id].type + ',' + ItemArray[id].quantity);
if (id > MaxItemID)
{
MaxItemID = id;
}
}
if (MaxItemID > DSXC_getValue('Crafting - Max ID', -1))
DSXC_setValue('Crafting - Max ID', MaxItemID);
LoadCrafting();
}
UpdateInventory();
}
}
function UpdateInventoryDetail(inventory_item)
{
switch (inventory_item.classification)
{
case INVENTORY_TYPES_TEXT[INV_TYPE_POTION]:
{
var PotionDetails = inventory_item.produced_item.name;
if (inventory_item.is_enabled)
{
for (iCount = 0; iCount < inventory_item.recipe_list.length; iCount++)
{
PotionDetails = PotionDetails + "#" + inventory_item.recipe_list[iCount].item.name + "_" + inventory_item.recipe_list[iCount].yield + "_" + inventory_item.recipe_list[iCount].cost;
}
}
else
{
PotionDetails = 'disabled';
}
DSXC_setValue('Inventory Item - ' + inventory_item.item_id, inventory_item.classification + ',' + inventory_item.name + ',' + inventory_item.type + ',' + inventory_item.quantity + ',' + PotionDetails);
} break;
case INVENTORY_TYPES_TEXT[INV_TYPE_BASE]:
case INVENTORY_TYPES_TEXT[INV_TYPE_WEAPON]:
{
DSXC_setValue('Inventory Item - ' + inventory_item.item_id, inventory_item.classification + ',' + inventory_item.name + ',' + inventory_item.type + ',' + inventory_item.quantity + ',' + inventory_item.power_type_name + '_' + inventory_item.power + '_' + inventory_item.power_bonus + '_' + inventory_item.attraction_bonus + '_' + inventory_item.luck + '_' + inventory_item.cheese_effect);
} break;
default:
{
DSXC_setValue('Inventory Item - ' + inventory_item.item_id, inventory_item.classification + ',' + inventory_item.name + ',' + inventory_item.type + ',' + inventory_item.quantity);
}
}
var item_id = parseInt(inventory_item.item_id);
if (item_id > DSXC_getValue('Inventory - Max ID', -1))
DSXC_setValue('Inventory - Max ID', item_id);
}
Array.prototype.indexOf = function(test)
{
var ReturnValue = -1;
for (iCount = 0; iCount < this.length && ReturnValue == -1; iCount++)
{
if (this[iCount] == test)
{
ReturnValue = iCount;
}
}
return ReturnValue;
}
Array.prototype.has = function(test)
{
var ReturnValue = false;
for (iCount = 0; iCount < this.length && !ReturnValue; iCount++)
{
if (this[iCount] == test)
{
ReturnValue = true;
}
}
return ReturnValue;
}
function Flatten(obj)
{
var flat = "{ ";
for (var key in obj)
{
if (flat != "{ ") flat = flat + ", ";
if (obj.hasOwnProperty(key))
{
var value = obj[key];
if (null === value || undefined === value)
{
continue;
}
else
{
if (typeof value == "object")
{
flat = flat + key + ": " + Flatten(value);
}
else
{
flat = flat + key + ": " + value;
}
}
}
}
return flat + " }";
}
function Craft()
{
var crafting_item = this.id.substring(8);
if (crafting_item != -1)
{
var total_to_craft = document.getElementById('Craft_Qty').innerHTML;
ShowCraftingWindow(false);
CraftItem(crafting_item, total_to_craft);
}
}
function CraftItem(pattern, qty)
{
params = { "parts": PATTERNS[pattern][PINGREDIENTS], "uh": STATE.hash, "craftQty": qty };
Post(STATE.baseurl + "managers/ajax/users/crafting.php", params, function(response)
{
ShowCraftingMessage(response);
if (response.success == 1)
{
if (response.inventory != null || response.items != null)
UpdateInventory(response);
}
});
}
function TravelTo(destination)
{
if (destination == 0)
{
Get(STATE.baseurl + 'travel.php?freeTravel=true?&uh=' + STATE.hash, function() { STATE.location = 0; });
}
else
{
if (STATE.location == -1)
STATE.location = 0;
params = { "origin": LOCATION.detail[STATE.location][LLINK], "destination": LOCATION.detail[destination][LLINK], "uh": STATE.hash };
Post(STATE.baseurl + "managers/ajax/users/changeenvironment.php", params, function() { STATE.location = destination; });
}
}
function Travel()
{
var destintation_location = this.className.substring(4);
if (this.className.indexOf('Buy_') != -1)
{
STATE.redirect = 'generalstore.php';
}
if (destintation_location != -1)
{
CalculateRouteCosts();
ShowCraftingWindow(false);
ShowTravelWindow(false);
if (destintation_location != STATE.location)
{
if (STATE.location != -1 && LOCATION.detail[STATE.location][LWARNING])
{
var continue_travel = confirm("WARNING: You are in a special location, are you sure you want to leave?");
if (continue_travel == false)
return;
}
if (STATE.location != -1 && !SETTINGS.direct)
{
STATE.route = CalculateRoute(STATE.location, destintation_location);
}
else
{
STATE.route = [ destintation_location ];
}
SetDisplayText(3, 'Travelling');
TravelTo(STATE.route[0]);
setTimeout(AutoTravel, 1000);
}
}
}
var auto_count = 0;
function AutoTravel()
{
if (auto_count >= 5)
{
auto_count = 0;
SetDisplayText(3, 'Travelling');
}
else
{
auto_count++;
SetDisplayText(3, GetDisplayText(3) + '.');
}
DetermineLocation();
if (STATE.location == STATE.route[0])
{
STATE.route.shift();
if (STATE.route.length == 0)
{
SetDisplayText(3, '');
ShowMessageWindow('<div class="pagemessage s"><div class="messagetop"></div><div class="messagebody"><div class="messagetitle">Travel</div><div class="messagecontent">You have arrived at your destination.</div></div><div class="messagebottom"></div></div></div>', 5);
return;
}
else
{
TravelTo(STATE.route[0]);
}
}
setTimeout(AutoTravel, 1000);
}
function SortCraftingArray(a, b)
{
var x = a[CRAFTNAME];
var y = b[CRAFTNAME];
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
function ShowCraftingWindow(display)
{
var CraftingWindow = CreatePopupWindow('Crafting', 325, 420, display);
if (CraftingWindow != null)
{
var WindowTable = "<TABLE CELLSPACING='0' CELLPADDING='1'>";
var MaxToCraft = 0;
var pattern_is_craftable = new Array();
var travel_craftable = new Array();
for (count1 = 0; count1 < PATTERNS.length; count1++)
{
var can_craft = true;
var missing_item = -1;
var total_to_craft = 10000000; // 10 million
var total_mats = 0;
var ingredients = PATTERNS[count1][PINGREDIENTS];
DSXC_log("Cratable State: " + PATTERNS[count1][PNAME]);
for (var key in ingredients)
{
if (ingredients.hasOwnProperty(key))
{
var mat_name = key;
var mat_id = CraftingLookup(mat_name);
var mat_qty = Number(ingredients[key]);
total_mats++;
if (mat_id != -1)
{
var current_qty = Number(CRAFTING[mat_id][CRAFTQTY]);
if (current_qty < mat_qty)
{
DSXC_log(" - low quantity of " + mat_name + " (" + CRAFTING[mat_id][CRAFTQTY] + ")");
total_to_craft = 0;
can_craft = false;
}
else
{
mat_to_craft = Math.floor(current_qty / mat_qty);
total_to_craft = Math.min(mat_to_craft, total_to_craft);
DSXC_log(" - enough of " + mat_name + " (" + mat_to_craft + ")");
}
}
else
{
DSXC_log(" - unknown material " + mat_name);
total_to_craft = 0;
can_craft = false;
}
}
}
if (can_craft || SETTINGS.showall)
{
MaxToCraft = Math.max(MaxToCraft, total_to_craft);
if ((STATE.level + 1) >= total_mats)
{
pattern_is_craftable.push( [ count1, total_to_craft ] );
}
}
}
if (pattern_is_craftable.length > 0)
{
var PatternTable = "<TR><TH COLSPAN='2'><I>Craftable</I><br /><br /></TH></TR>";
PatternTable += "<TR><TD><DIV ID='Craft_Scroll'></DIV><br /></TD><TD STYLE='text-align: right;'><SPAN ID='Craft_Qty'>1</SPAN><br /></TD></TH></TR>";
for (count1 = 0; count1 < pattern_is_craftable.length; count1++)
{
if (pattern_is_craftable[count1][1] == 0)
{
PatternTable += "<TR STYLE='font-size: 8px'><TD WIDTH='240'><A HREF='#' ID='Pattern_" + pattern_is_craftable[count1][0] + "' STYLE='color: red'>" + PATTERNS[pattern_is_craftable[count1][0]][PNAME] + "</A></TD><TD STYLE='text-align: right; font-size: 7px; font-weight: bold' WIDTH='50'>" + pattern_is_craftable[count1][1] + "</TD></TR>";
}
else
{
PatternTable += "<TR STYLE='font-size: 8px'><TD WIDTH='240'><A HREF='#' ID='Pattern_" + pattern_is_craftable[count1][0] + "'>" + PATTERNS[pattern_is_craftable[count1][0]][PNAME] + "</A></TD><TD STYLE='text-align: right; font-size: 7px; font-weight: bold' WIDTH='50'>" + pattern_is_craftable[count1][1] + "</TD></TR>";
}
}
WindowTable += PatternTable;
WindowTable += "<TR><TD><BR></TD></TR>";
}
var IngredientsTable = "<TR><TH COLSPAN='2'><I>Ingredients</I></TH></TR>";
total_ingredients = 0;
var SortedArray = CRAFTING.slice(0, CRAFTING.length);
SortedArray.sort(SortCraftingArray);
for (count1 = 0; count1 < SortedArray.length; count1++)
{
if (SortedArray[count1][CRAFTQTY] > 0 || SETTINGS.showall)
{
total_ingredients++;
IngredientsTable += "<TR STYLE='font-size: 8px;'><TD WIDTH='190'><A HREF=\"" + STATE.baseurl + "item.php?item_type=" + SortedArray[count1][CRAFTDETAIL] + "\">" + SortedArray[count1][CRAFTNAME] + "</A></TD><TD STYLE='text-align: right; font-size: 7px; font-weight: bold' WIDTH='50'><SPAN ID='Crafting_Qty_" + SortedArray[count1][CRAFTID] + "'>" + SortedArray[count1][CRAFTQTY] + "</SPAN></TD></TR>";
}
}
if (total_ingredients > 0)
{
WindowTable += IngredientsTable;
}
WindowTable += "</TABLE>";
CraftingWindow.innerHTML = WindowTable;
if (document.getElementById('Craft_Scroll') != null)
{
CreateSlider('Craft_Scroll', 250, 1, Math.min(MaxToCraft, 100), 'Craft_Qty');
}
for (count1 = 0; count1 < pattern_is_craftable.length; count1++)
{
var Pattern = document.getElementById('Pattern_' + pattern_is_craftable[count1][0]);
if (Pattern != null)
{
Pattern.addEventListener("click", Craft, false);
Pattern.addEventListener("mouseover", ShowIngredients, false);
Pattern.addEventListener("mouseout", HideIngredients, false);
}
}
}
else
{
var RecipeWindows = getElementsByPartialId('PatternWindow_');
for (count1 = 0; count1 < RecipeWindows.length; count1++)
{
RecipeWindows[count1].parentNode.removeChild(RecipeWindows[count1]);
}
}
}
function ShowIngredients()
{
var pattern_id = -1;
if (this.id.indexOf('Pattern') != -1)
{
pattern_id = this.id.substring(8);
}
else if (this.id.indexOf('Cft') != -1)
{
pattern_id = this.id.substring(4);
}
if (pattern_id != -1)
{
if (document.getElementById('PatternWindow_' + pattern_id) == null)
{
var PopupWindow = document.createElement("div");
PopupWindow.style.position = 'absolute';
PopupWindow.style.top = (mousePos.y + 18) + "px";
PopupWindow.style.left = (mousePos.x) + "px";
PopupWindow.id = "PatternWindow_" + pattern_id;
var pattern_detail = "<B>" + PATTERNS[pattern_id][PNAME] + "</B><BR><TABLE><TR><TH WIDTH=\"180\">Ingredient</TH><TH WIDTH=\"35\" STYLE='text-align: center;'>Needs</TH><TH WIDTH=\"35\" STYLE='text-align: center;'>Stock</TH></TR>";
var total_mats = 0;
var ingredients = PATTERNS[pattern_id][PINGREDIENTS];
for (var key in ingredients)
{
if (ingredients.hasOwnProperty(key))
{
total_mats++;
var mat_name = key;
var mat_id = CraftingLookup(mat_name);
var mat_qty = Number(ingredients[key]);
if (mat_id != -1)
{
var current_qty = Number(CRAFTING[mat_id][CRAFTQTY]);
if (current_qty < mat_qty)
{
pattern_detail = pattern_detail + "<TR><TD STYLE='font: 6pt Verdana; color: red'>" + CRAFTING[mat_id][CRAFTNAME] + "</TD><TD STYLE='font: 6pt Verdana; text-align: center;'>" + mat_qty + "</TD><TD STYLE='font: 6pt Verdana; text-align: center;'>" + current_qty + "</TD></TR>";
}
else
{
pattern_detail = pattern_detail + "<TR><TD STYLE='font: 6pt Verdana; color: black'>" + CRAFTING[mat_id][CRAFTNAME] + "</TD><TD STYLE='font: 6pt Verdana; text-align: center;'>" + mat_qty + "</TD><TD STYLE='font: 6pt Verdana; text-align: center;'>" + current_qty + "</TD></TR>";
}
}
else
{
pattern_detail = pattern_detail + "<TR><TD STYLE='font: 6pt Verdana; color: red'>" + mat_name + "</TD><TD STYLE='font: 6pt Verdana; text-align: center;'>" + mat_qty + "</TD><TD STYLE='font: 6pt Verdana; text-align: center;'>0</TD></TR>";
}
}
}
pattern_detail = pattern_detail + "</TABLE>";
var height = 30 + (total_mats * 10);
var width = 250;
PopupWindow.innerHTML = "<DIV STYLE='position:absolute; z-index:912; background: white; padding: 0px 0px; color: black; border: 1px solid; font: 6pt Verdana; width: " + width + "px; height: " + height + "px;'><DIV STYLE='padding: 5px 5px; text-align: left; overflow: auto; height: 100%; font: 6pt Verdana;'>" + pattern_detail + "</DIV></DIV>";
document.body.appendChild(PopupWindow);
}
}
}
function HideIngredients()
{
var pattern_id = -1;
if (this.id.indexOf('Pattern') != -1)
{
pattern_id = this.id.substring(8);
}
else if (this.id.indexOf('Cft') != -1)
{
pattern_id = this.id.substring(4);
}
if (pattern_id != -1)
{
if (document.getElementById('PatternWindow_' + pattern_id) != null)
{
document.getElementById('PatternWindow_' + pattern_id).parentNode.removeChild(document.getElementById('PatternWindow_' + pattern_id));
}
}
}
function CraftingLookup(name)
{
var ReturnValue = -1;
for (counter = 0; counter < CRAFTING.length && ReturnValue == -1; counter++)
{
if (CRAFTING[counter][CRAFTDETAIL] == name)
{
ReturnValue = counter
}
}
return ReturnValue;
}
function InventoryLookup(name, detail)
{
var ReturnValue = -1;
for (counter = 0; counter < INVENTORY.length && ReturnValue == -1; counter++)
{
if (INVENTORY[counter][INVNAME] == name || INVENTORY[counter][INVDETAIL] == detail)
{
ReturnValue = counter;
}
}
return ReturnValue;
}
function ShowPotionsWindow(display)
{
var PotionsWindow = CreatePopupWindow('Potions', 250, 320, display);
if (PotionsWindow != null)
{
var PotionsAvailable = new Array();
var WindowTable = "<TABLE CELLSPACING='0' CELLPADDING='1'>";
var MaxToCraft = 0;
var PotionsTable = "<TR><TH COLSPAN='2'><I>Potions</I></TH></TR><TR><TD><DIV ID='Potion_Scroll'></DIV></TD><TD STYLE='text-align: right;'><SPAN ID='Potion_Qty'>1</SPAN></TD></TH></TR>";
var TotalPotions = 0;
for (count1 = 0; count1 < INVENTORY.length; count1++)
{
if (INVENTORY[count1][INVQTY] > 0 && INVENTORY[count1][INVTYPE] == INVENTORY_TYPES_TEXT[INV_TYPE_POTION])
{
MaxToCraft = Math.max(INVENTORY[count1][INVQTY], MaxToCraft);
PotionsTable += "<TR STYLE='font-size: 8px'><TD WIDTH='190'>" + INVENTORY[count1][INVNAME] + "</TD><TD STYLE='text-align: right; font-size: 7px; font-weight: bold' WIDTH='50'>" + INVENTORY[count1][INVQTY] + "</TD></TR>";
PotionsTable += "<TR><TD STYLE='font-size: 7px; font-weight: bold;'> ";
var PotionDetail = INVENTORY[count1][INVEXTRA];
if (PotionDetail == "disabled")
{
PotionsTable += " Not yet available";
}
else
{
var PotionsArray = PotionDetail.split('#');
for (count2 = 1; count2 < PotionsArray.length; count2++)
{
var ConvertDetail = PotionsArray[count2].split('_');
PotionsTable += " <A HREF='#' ID='Potion_" + count1 + "_" + (count2 - 1) + "' CLASS='" + ConvertDetail[0] + "_" + INVENTORY[count1][INVNAME] + "'>" + ConvertDetail[1] + "x" + ConvertDetail[0] + "</A>";
PotionsAvailable.push( [ count1, (count2 - 1) ] );
}
}
PotionsTable += "</TD><TD ID='Potion_Cost_" + count1 +"' STYLE='text-align: right; font-size: 7px; font-weight: bold' WIDTH='50'></TD></TR>";
TotalPotions++;
}
}
if (TotalPotions > 0)
{
WindowTable += PotionsTable;
WindowTable += "<TR><TD><BR></TD></TR>";
}
WindowTable += "</TABLE>";
PotionsWindow.innerHTML = WindowTable;
if (document.getElementById('Potion_Scroll') != null)
{
CreateSlider('Potion_Scroll', 200, 1, Math.min(MaxToCraft, 50), 'Potion_Qty');
}
for (count1 = 0; count1 < PotionsAvailable.length; count1++)
{
var PotionLink = document.getElementById('Potion_' + PotionsAvailable[count1][0] + '_' + PotionsAvailable[count1][1]);
if (PotionLink != null)
{
PotionLink.addEventListener("mouseover", UpdatePotionCost, false);
PotionLink.addEventListener("mouseout", UpdatePotionCost, false);
PotionLink.addEventListener("click", CraftPotion, false);
}
}
}
}
function UpdatePotionCost(ev)
{
var PotionType = Number(this.id.substring(7, this.id.indexOf('_', 7)));
var CheeseType = Number(this.id.substring(this.id.indexOf('_', 7) + 1));
if (ev.type == 'mouseover')
{
var PotionDetail = INVENTORY[PotionType][INVEXTRA];
if (PotionDetail != "disabled")
{
var PotionsArray = PotionDetail.split('#');
var ConvertDetail = PotionsArray[(CheeseType + 1)].split('_');
var ConvPrice = Number(ConvertDetail[2]);
var TotalCheese = Number(ConvertDetail[1]) * Number(document.getElementById('Potion_Qty').innerHTML);
if (ConvPrice > 0)
{
document.getElementById('Potion_Cost_' + PotionType).innerHTML = (TotalCheese * ConvPrice) + 'g';
}
else
{
document.getElementById('Potion_Cost_' + PotionType).innerHTML = TotalCheese + ' pieces';
}
}
}
else if (ev.type == 'mouseout')
{
if (document.getElementById('Potion_Cost_' + PotionType) != null)
document.getElementById('Potion_Cost_' + PotionType).innerHTML = '';
}
}
function CraftPotion()
{
var PotionType = this.id.substring(7, this.id.indexOf('_', 7));
var CheeseType = this.id.substring(this.id.indexOf('_', 7) + 1);
if (INVENTORY[PotionType][INVTYPE] == INVENTORY_TYPES_TEXT[INV_TYPE_POTION])
{
var TotalToCraft = document.getElementById('Potion_Qty').innerHTML;
ShowPotionsWindow(false);
UsePotion(INVENTORY[PotionType][INVDETAIL], CheeseType, TotalToCraft);
}
}
function UsePotion(potion, cheese, qty)
{
params = { "tab": 3, "potion": potion, "uh": STATE.hash, "num_potions": qty, "recipe_index": cheese };
Post(STATE.baseurl + "managers/ajax/users/usepotion.php", params, function(response)
{
ShowCraftingMessage(response);
if (response.success == 1)
{
if (response.inventory != null || response.items != null)
UpdateInventory(response);
}
});
}
function ShowCraftingMessage(response)
{
if (response.success == 1)
{
ShowMessageWindow('<div class="pagemessage msgsuccess"><div class="messagetop"></div><div class="messagebody"><div class="messagetitle">' + response.jsDialog.tokens.title.value + '</div><div class="messagecontent">' + response.jsDialog.tokens.content.value + '</div></div><div class="messagebottom"></div></div></div>', 5);
}
else
{
ShowMessageWindow('<div class="pagemessage msgerror"><div class="messagetop"></div><div class="messagebody"><div class="messagetitle">' + response.jsDialog.tokens.title.value + '</div><div class="messagecontent">' + response.jsDialog.tokens.content.value + '</div></div><div class="messagebottom"></div></div></div>');
}
}
function ResetWindows()
{
DSXC_setValue("Position - Configuration", "90px_300px");
DSXC_setValue("Position - Crafting", "90px_300px");
DSXC_setValue("Position - Potions", "90px_300px");
DSXC_setValue("Position - Travel", "90px_300px");
}
function CheckMap(mapdetail)
{
var MapAvailable = false;
if (mapdetail instanceof Array)
{
for (var count = 0; count < mapdetail.length && !MapAvailable; count++)
{
MapAvailable = CheckMap(mapdetail[count]);
}
}
else
{
if (mapdetail != -1 && INVENTORY[mapdetail] != null && INVENTORY[mapdetail][INVQTY] > 0)
{
MapAvailable = true;
}
}
return MapAvailable;
}
function GetLocationID(locationname)
{
var locationid = -1;
for (count = 0; count < LOCATION.detail.length && locationid == -1; count++)
{
if (CheckLocation(locationname, LOCATION.detail[count][LNAME]))
{
locationid = count;
}
}
return locationid;
}
function CheckLocation(locationname, locations)
{
if (locations instanceof Array)
{
for (var count = 0; count < locations.length; count++)
{
if (CheckLocation(locationname, locations[count]))
{
return true;
}
}
}
else
{
if (locationname == locations)
{
return true;
}
}
return false;
}
function ShowTravelWindow(display)
{
var TravelWindow = CreatePopupWindow('Travel', 250, 320, display);
if (TravelWindow != null)
{
CalculateRouteCosts();
var newHTML = "<TABLE>";
var region_name = "None";
var total_found;
for (count1 = 0; count1 < LOCATION.region.length; count1++)
{
newHTML = newHTML + "<TR><TH COLSPAN='2'><I>" + LOCATION.region[count1] + "</I></TH></TR>";
total_found = 0;
for (count2 = 0; count2 < LOCATION.detail.length; count2++)
{
if (LOCATION.detail[count2][LZONE] == count1 && count2 != STATE.location && LOCATION.detail[count2][LLVL] <= STATE.level && CheckMap(LOCATION.detail[count2][LMAP]))
{
var LocationName = LOCATION.detail[count2][LNAME];
if (LocationName instanceof Array)
{
LocationName = LOCATION.detail[count2][LNAME][0];
}
var travel_cost = 0;
if (STATE.location == -1)
{
// force travel via Meadow
travel_cost = LOCATION.costs[0][count2];
}
else if (SETTINGS.direct)
{
travel_cost = LOCATION.costs[STATE.location][count2];
}
else
{
travel_cost = LOCATION.distance[STATE.location][count2];
}
if (LOCATION.distance[STATE.location][count2] != -99)
{
newHTML = newHTML + "<TR STYLE='font-size: 8px'><TD WIDTH='170'><A HREF='#' ID='Loc_" + count2 + "' CLASS='Loc_" + count2 + "'>" + LocationName + "</A></TD><TD STYLE='text-align: right; font-size: 7px; font-weight: bold' WIDTH='70'>" + travel_cost + " gold</TD></TR>";
total_found++;
}
}
}
if (total_found == 0)
{
newHTML = newHTML + "<TR><TD COLSPAN='2'>Not available<P></TD></TR>";
}
else
{
newHTML = newHTML + "<TR><TD><BR></TD></TR>";
}
}
newHTML = newHTML + "</TABLE>";
TravelWindow.innerHTML = newHTML;
for (count1 = 0; count1 < LOCATION.detail.length; count1++)
{
if (document.getElementById('Loc_' + count1) != null) document.getElementById('Loc_' + count1).addEventListener("click", Travel, false);
}
}
}
function CheckHornState()
{
var HornState = getElementsByPartialClass("hornready");
if (HornState.length > 0)
{
if (STATE.hornstate != 1)
{
if (SETTINGS.title)
{
document.title = 'Now! | ' + STATE.title;
}
else
{
document.title = STATE.title;
}
document.getElementById('MHH_Horn_Timer').innerHTML = '<B>Now!</B>';
SoundHorn();
STATE.hornstate = 1;
}
}
else
{
DSXC_setValue('Alert - Sound', false);
HornState = getElementsByPartialClass("hornsounding");
if (HornState.length > 0)
{
if (STATE.hornstate != 2)
{
STATE.hornstate = 2;
}
}
else
{
if (STATE.hornstate != 0)
setTimeout(ResetUserObject, 10000);
STATE.hornstate = 0;
}
}
setTimeout(CheckHornState, 500);
}
function ResetUserObject()
{
InitUserObject(unsafeWindow.user);
}
function GetTimeout()
{
return new Date().valueOf(); // milliseconds since 1 Jan 1970
}
function KingsRewardTimer()
{
var TimeLeft = CheckTimeout('Update - Kings Reward', 0, 3);
var KRTimerString = UpdateTimer(TimeLeft, true);
var KRTimer = document.getElementById('MHH_Kings_Reward_Timer');
if (KRTimer != null) KRTimer.innerHTML = KRTimerString;
if (TimeLeft > 0)
{
setTimeout(KingsRewardTimer, 10000);
}
}
function InventoryTimer()
{
CheckInventory(SETTINGS.length);
setTimeout(InventoryTimer, 30000);
}
function CurrentTimeStamp()
{
return parseInt(new Date().getTime().toString().substring(0, 10));
}
function HornCountdownTimer()
{
var Start = GetTimeout();
if (STATE.hornstate == 0)
{
if (STATE.userobject != null)
{
if (STATE.userobject.has_puzzle)
{
STATE.king = true;
DSXC_setValue('Alert - Sound', false);
if (!DSXC_getValue('Alert - Kings Reward', false))
{
DSXC_setValue('Alert - Kings Reward', true);
if (SETTINGS.king & STATE_SOUND)
{
AlertSound(AUDIO.reward);
}
if (SETTINGS.king & STATE_MESSAGE)
{
alert('Claim a King\'s Reward to continue hunting');
}
}
}
else
{
DSXC_setValue('Alert - Kings Reward', false);
}
var TimeRemaining = STATE.userobject.activeturn_wait_seconds - (CurrentTimeStamp() - STATE.userobject.last_activeturn_timestamp);
var HornTimerString = UpdateTimer(TimeRemaining, false);
if (SETTINGS.title)
{
document.title = HornTimerString + ' | ' + STATE.title;
}
else
{
document.title = STATE.title;
}
var HornTimer = document.getElementById('MHH_Horn_Timer');
if (HornTimer != null) HornTimer.innerHTML = HornTimerString;
}
}
var End = GetTimeout();
setTimeout(HornCountdownTimer, ((SETTINGS.length * 1000) - (End - Start)));
}
function HornSoundedEvent(aEvent)
{
var newData = JSON.parse(aEvent.newValue);
if (newData.last_read_journal_entry_id != 0)
DSXC_setValue('STATE.lastjournal', newData.last_read_journal_entry_id);
if (newData.user != null)
InitUserObject(newData.user);
}
function BaitTimer()
{
var BaitValue = document.getElementById('hud_baitName');
if (BaitValue != null)
{
if (BaitValue.innerHTML.indexOf('None!') != -1)
{
if (!DSXC_getValue('Alert - Cheese', false))
{
DSXC_setValue('Alert - Cheese', true);
if (SETTINGS.cheese & STATE_SOUND)
{
AlertSound(AUDIO.cheese);
}
if (SETTINGS.cheese & STATE_MESSAGE)
{
alert('You are out of cheese. Rebait to continue hunting.');
}
}
}
else
{
DSXC_setValue('Alert - Cheese', false);
}
}
setTimeout(BaitTimer, (SETTINGS.length * 1000));
}
var CurrentURLTimer = -1;
function LocationCheckTimer()
{
if (SETTINGS.washed > 0)
{
if (STATE.userobject != null)
{
var ExpectedLocation = DSXC_getValue('STATE.location', 'None');
if (ExpectedLocation == 'Balack\'s Cove' && ExpectedLocation != STATE.userobject.location)
{
if (!DSXC_getValue('Alert - Washed Away', false))
{
DSXC_setValue('Alert - Washed Away', true);
if (SETTINGS.washed & STATE_SOUND)
{
AlertSound(AUDIO.washed);
}
if (SETTINGS.washed & STATE_MESSAGE)
{
alert('You have been washed away from Balack\'s Cove. I would recomend changing your bait before continuing to hunt.');
}
}
}
else
{
DSXC_setValue('Alert - Washed Away', false);
}
}
}
var CurrentTime = CurrentTimeStamp();
for (iCount1 = 0; iCount1 < LOCATION_TIMERS.length; iCount1++)
{
if (typeof LOCATION_TIMERS[iCount1][1].url != 'undefined')
{
// retrieve from script values, check for timeout, request url
var Remaining = CheckTimeout(LOCATION_TIMERS[iCount1][0] + ' - Last Update', 10, 0)
if (CurrentURLTimer == -1 && Remaining == 0)
{
CurrentURLTimer = iCount1;
ResetTimeout(LOCATION_TIMERS[iCount1][0] + ' - Last Update');
// read from URL
//Post(LOCATION_TIMERS[iCount1][1].url, null, function(text) {
Get(LOCATION_TIMERS[iCount1][1].url, function(text) {
if (text != 'Can\'t connect to MySQL')
{
var LocationData = JSON.parse(text);
if (typeof LocationData.next_move != 'undefined')
{
var TimeRemaining = LocationData.next_move;
if (LocationData.location == '???')
TimeRemaining = -1;
DSXC_setValue(LOCATION_TIMERS[CurrentURLTimer][0] + ' - Location', LocationData.location);
DSXC_setValue(LOCATION_TIMERS[CurrentURLTimer][0] + ' - Next Move', UpdateTimer(TimeRemaining, true));
}
else if (typeof LocationData.level != 'undefined')
{
// update the current level to be able to travel
LOCATION.detail[15][LLVL] = GetLevel(LocationData.level);
DSXC_setValue(LOCATION_TIMERS[CurrentURLTimer][0] + ' - Location', LocationData.level);
if (LocationData.percent == -1)
DSXC_setValue(LOCATION_TIMERS[CurrentURLTimer][0] + ' - Next Move', 'Unknown');
else
DSXC_setValue(LOCATION_TIMERS[CurrentURLTimer][0] + ' - Next Move', (100 - LocationData.percent) + '%');
}
}
else
{
DSXC_setValue(LOCATION_TIMERS[CurrentURLTimer][0] + ' - Location', '???');
}
CurrentURLTimer = -1;
});
}
document.getElementById('MHH_Location_' + iCount1 + '_State').innerHTML = '<font color="green">' + DSXC_getValue(LOCATION_TIMERS[iCount1][0] + ' - Location') + '</font>';
document.getElementById('MHH_Location_' + iCount1 + '_Change').innerHTML = DSXC_getValue(LOCATION_TIMERS[iCount1][0] + ' - Next Move');
}
else
{
var CurrentName = -1;
var CurrentBreakdown = 0;
var TotalBreakdown = 0;
for (iCount2 = 0; iCount2 < LOCATION_TIMERS[iCount1][1].breakdown.length; iCount2++)
{
TotalBreakdown += LOCATION_TIMERS[iCount1][1].breakdown[iCount2];
}
var CurrentValue = Math.floor((CurrentTime - LOCATION_TIMERS[iCount1][1].first) / LOCATION_TIMERS[iCount1][1].length) % TotalBreakdown;
for (iCount2 = 0; iCount2 < LOCATION_TIMERS[iCount1][1].breakdown.length && CurrentName == -1; iCount2++)
{
CurrentBreakdown += LOCATION_TIMERS[iCount1][1].breakdown[iCount2];
if (CurrentValue < CurrentBreakdown)
{
CurrentName = iCount2;
}
}
var SeasonLength = (LOCATION_TIMERS[iCount1][1].length * LOCATION_TIMERS[iCount1][1].breakdown[CurrentName]);
var CurrentTimer = (CurrentTime - LOCATION_TIMERS[iCount1][1].first);
var SeasonRemaining = 0;
while (CurrentTimer > 0)
{
for (iCount2 = 0; iCount2 < LOCATION_TIMERS[iCount1][1].breakdown.length && CurrentTimer > 0; iCount2++)
{
SeasonRemaining = CurrentTimer;
CurrentTimer -= (LOCATION_TIMERS[iCount1][1].length * LOCATION_TIMERS[iCount1][1].breakdown[iCount2])
}
}
SeasonRemaining = SeasonLength - SeasonRemaining;
document.getElementById('MHH_Location_' + iCount1 + '_State').innerHTML = '<font color="' + LOCATION_TIMERS[iCount1][1].color[CurrentName] + '">' + LOCATION_TIMERS[iCount1][1].name[CurrentName] + '</font>';
if (LOCATION_TIMERS[iCount1][1].effective != null)
{
document.getElementById('MHH_Location_' + iCount1 + '_State').innerHTML += ' (' + LOCATION_TIMERS[iCount1][1].effective[CurrentName] + ')';
}
document.getElementById('MHH_Location_' + iCount1 + '_Change').innerHTML = UpdateTimer(SeasonRemaining, true);
}
}
if (STATE.userobject != null)
{
if (STATE.userobject.location == 'Seasonal Garden')
{
if (STATE.userobject.viewing_atts.zzt_amplifier == STATE.userobject.viewing_atts.zzt_max_amplifier)
{
if (!DSXC_getValue('Alert - Max Amplifier', false))
{
DSXC_setValue('Alert - Max Amplifier', true);
if (SETTINGS.season & STATE_SOUND)
{
AlertSound(AUDIO.maxamp);
}
if (SETTINGS.season & STATE_MESSAGE)
{
alert('You have reached your maximum for Zugzwang\'s Tower Amplifier. Time to head inside!');
}
}
}
else
{
DSXC_setValue('Alert - Max Amplifier', false);
}
}
var SeasonIcon = document.getElementById('hud_seasonIcon');
if (SeasonIcon != null)
{
var CurrentSeason = DSXC_getValue('Current Season', 'none');
if (CurrentSeason != 'none' && CurrentSeason != SeasonIcon.className)
{
if (!DSXC_getValue('Alert - Season Change', false))
{
DSXC_setValue('Alert - Season Change', true);
if (SETTINGS.season & STATE_SOUND)
{
AlertSound(AUDIO.season);
}
if (SETTINGS.season & STATE_MESSAGE)
{
var AlertText = 'The season has changed, make sure you change your trap. ';
switch (SeasonIcon.className)
{
case ' seasonicon sr': AlertText = AlertText + 'It is now Summer, using a Tactical trap is most effective.'; break;
case ' seasonicon fl': AlertText = AlertText + 'It is now Fall, using a Shadow trap is most effective.'; break;
case ' seasonicon wr': AlertText = AlertText + 'It is now Winter, using a Hydro trap is most effective.'; break;
case ' seasonicon sg': AlertText = AlertText + 'It is now Spring, using a Physical or Tactical trap is most effective.'; break;
}
alert(AlertText);
}
}
}
else
{
DSXC_setValue('Alert - Season Change', false);
}
DSXC_setValue('Current Season', SeasonIcon.className);
}
}
else
{
DSXC_setValue('Current Season', 'none');
}
setTimeout(LocationCheckTimer, 10000);
}
function StartTimers()
{
if (STATE.maintenance)
{
// if in maintenance, do nothing
}
else
{
// check every 30 seconds
InventoryTimer();
UpdateQuestProgress();
// check every 10 seconds
KingsRewardTimer();
LocationCheckTimer();
// check every second
BaitTimer();
HornCountdownTimer();
TournamentTimer();
// background timer for horn sounding
CheckHornState();
}
}
function GetDisplayText(id)
{
var DisplayWindowText = 'MHH_Display_' + id;
var DisplayWindow = document.getElementById(DisplayWindowText);
if (DisplayWindow != null)
{
return DisplayWindow.innerHTML;
}
else
{
return '';
}
}
function SetDisplayText(id, text)
{
var DisplayWindowText = 'MHH_Display_' + id;
var DisplayWindow = document.getElementById(DisplayWindowText);
if (DisplayWindow != null)
{
DisplayWindow.innerHTML = text;
}
else
{
DisplayState();
DisplayTimers();
SetDisplayText(id, text);
}
}
function UpdatePercentage(percent)
{
var DisplayProgress = document.getElementById('hud_titlePercentage');
if (DisplayProgress != null) DisplayProgress.innerHTML = percent;
}
function ShowJournalWindow(display)
{
var JournalWindow = CreatePopupWindow('Journal Summary', 275, 380, display);
if (JournalWindow != null)
{
STATE.lastjournal = DSXC_getValue('STATE.lastjournal', 51);
JournalWindow.innerHTML = "<B>Catches:</B><BR /><DIV ID=\"MH_Journal_Catches\" STYLE=\"font: 8pt Verdana\"><I>Updating...</I></DIV><BR /><B>Gold and Points:</B><BR /><DIV ID=\"MH_Journal_Gains\" STYLE=\"font: 8pt Verdana\"><I>Updating...</I></DIV><BR /><B>Loot:</B><BR /><DIV ID=\"MH_Journal_Loot\" STYLE=\"font: 8pt Verdana\"><I>Updating...</I></DIV><BR />";
JournalSummary();
}
}
function JournalSummary()
{
DSXC_log("UpdateJournalSummary");
var journal = STATE.lastjournal - 50;
if (journal < 1)
journal = 1;
params = { "last_read_journal_entry_id": journal, "uh": STATE.hash };
Post(STATE.baseurl + "managers/ajax/turns/activeturn.php", params, UpdateJournalSummary);
}
var TotalCatches;
var TotalGold;
var TotalGoldStolen;
var TotalPoints;
var TotalPointsLost;
var TotalWeight;
var ArrayMouse;
var ArrayLoot;
function UpdateJournalSummary(response)
{
STATE.lastjournal = response.last_read_journal_entry_id;
DSXC_setValue('STATE.lastjournal', STATE.lastjournal);
DSXC_log(" - last journal read " + response.last_read_journal_entry_id);
if (response.journal_markup != null && response.journal_markup.length > 0)
{
DSXC_log(" - found " + response.journal_markup.length + " journal entries");
TotalCatches = 0;
TotalMisses = 0;
TotalFailures = 0;
TotalGold = 0;
TotalGoldStolen = 0;
TotalPoints = 0;
TotalPointsLost = 0;
TotalWeight = 0;
ArrayMouse = Array();
ArrayLoot = Array();
for (var count = 0; count < response.journal_markup.length; count++)
{
var journal_entry = response.journal_markup[count];
if (journal_entry.publish_data != null)
{
var szJournalType = journal_entry.publish_data.attachment.name;
var szJournalText = journal_entry.publish_data.attachment.description;
if (szJournalType.indexOf('I caught ') != -1 && szJournalType.indexOf('I caught an elusive Relic Hunter') == -1 && szJournalType.indexOf(' in a row!') == -1 && szJournalType.indexOf(' and was pulled through') == -1)
{
TotalCatches++;
iJournalStartPos = szJournalText.indexOf('I caught a') + 11;
iJournalEndPos = szJournalText.indexOf(' lb.', iJournalStartPos);
if (iJournalEndPos != -1)
{
TotalWeight = TotalWeight + (Number(szJournalText.substring(iJournalStartPos, iJournalEndPos)) * 16);
iJournalStartPos = iJournalEndPos + 5;
}
iJournalEndPos = szJournalText.indexOf(' oz.', iJournalStartPos);
TotalWeight = TotalWeight + Number(szJournalText.substring(iJournalStartPos, iJournalEndPos));
iJournalStartPos = iJournalEndPos + 5;
iJournalEndPos = szJournalText.indexOf(' worth', iJournalStartPos);
szCurrentMouse = szJournalText.substring(iJournalStartPos, iJournalEndPos);
AddMouse(szCurrentMouse);
iJournalStartPos = szJournalText.indexOf(' worth ', iJournalEndPos) + 7;
iJournalEndPos = szJournalText.indexOf(' points and ', iJournalStartPos);
TotalPoints = TotalPoints + Number(szJournalText.substring(iJournalStartPos, iJournalEndPos).replace(/,/g, ""));
iJournalStartPos = iJournalEndPos + 12;
iJournalEndPos = szJournalText.indexOf(' gold', iJournalStartPos);
TotalGold = TotalGold + Number(szJournalText.substring(iJournalStartPos, iJournalEndPos).replace(/,/g, ""));
iJournalStartPos = szJournalText.indexOf('dropped the following loot:', iJournalEndPos)
if (iJournalStartPos != -1)
{
var LootText = szJournalText.substring(iJournalStartPos + 27);
var LootItems = Array();
if (LootText.indexOf(" and ") != -1)
{
var TempLootItems = LootText.split(" and ");
LootItems.push(TempLootItems[1]);
if (LootText.indexOf(", ") != -1)
LootItems.concat(TempLootItems[0].split(", "));
else
LootItems.push(TempLootItems[0]);
}
else
{
LootItems.push(LootText);
}
for (var count2 = 0; count2 < LootItems.length; count2++)
{
iJournalStartPos = LootItems[count2].indexOf(' ');
iQuantity = Number(LootItems[count2].substring(0, iJournalStartPos));
szItemName = LootItems[count2].substring(iJournalStartPos);
AddLoot(szItemName, iQuantity);
}
}
}
else if (szJournalType.indexOf('I failed to catch ') != -1)
{
TotalMisses++;
if (szJournalText.indexOf('Additionally, ') != -1)
{
iJournalStartPos = szJournalText.indexOf(' pillaged ');
if (iJournalStartPos != -1)
{
iJournalStartPos = iJournalStartPos + 10;
iJournalEndPos = szJournalText.indexOf(' gold');
TotalGoldStolen = TotalGoldStolen + Number(szJournalText.substring(iJournalStartPos, iJournalEndPos).replace(/,/g, ""));
}
iJournalStartPos = szJournalText.indexOf(' setting me back ');
if (iJournalStartPos != -1)
{
iJournalStartPos = iJournalStartPos + 17;
iJournalEndPos = szJournalText.indexOf(' points!');
TotalPointsLost = TotalPointsLost + Number(szJournalText.substring(iJournalStartPos, iJournalEndPos).replace(/,/g, ""));
}
}
}
else if (szJournalType.indexOf('I failed to attract ') != -1)
{
TotalFailures++;
}
}
}
UpdateJournalDisplay();
}
}
function UpdateJournalDisplay()
{
ArrayMouse.sort(compare);
szJournalText = "";
for (iCount = 0; iCount < ArrayMouse.length; iCount++)
{
if (iCount > 0)
szJournalText = szJournalText + ", ";
szJournalText = szJournalText + ArrayMouse[iCount].value + " " + ArrayMouse[iCount].name;
}
szJournalText = szJournalText + "<BR /><BR />Total catches: " + TotalCatches + "<BR />Total misses: " + TotalMisses + "<BR />FTA / Stale: " + TotalFailures + "<BR />Average weight: " + Math.round(TotalWeight / TotalCatches) + " oz.";
if (document.getElementById('MH_Journal_Catches') != null) document.getElementById('MH_Journal_Catches').innerHTML = szJournalText;
szJournalText = addCommas(TotalGold) + " gold gained, " + addCommas(TotalGoldStolen) + " gold lost<BR />";
szJournalText = szJournalText + addCommas(TotalPoints) + " points gained, " + addCommas(TotalPointsLost) + " points lost<BR />";
szJournalText = szJournalText + addCommas((TotalGold - TotalGoldStolen)) + " net gold, " + addCommas((TotalPoints - TotalPointsLost)) + " net points<BR />";
if (document.getElementById('MH_Journal_Gains') != null) document.getElementById('MH_Journal_Gains').innerHTML = szJournalText;
szJournalText = "None";
if (ArrayLoot.length > 0)
{
ArrayLoot.sort(compare);
szJournalText = "";
for (iCount = 0; iCount < ArrayLoot.length; iCount++)
{
szJournalText = szJournalText + ArrayLoot[iCount].name + " (x" + ArrayLoot[iCount].quantity + ")<BR />";
}
}
if (document.getElementById('MH_Journal_Loot') != null) document.getElementById('MH_Journal_Loot').innerHTML = szJournalText;
}
function AddMouse(szMouseName)
{
var MouseIndex = -1;
for (var count = 0; count < ArrayMouse.length && MouseIndex == -1; count++)
{
if (ArrayMouse[count].name == szMouseName)
MouseIndex = count;
}
if (MouseIndex == -1)
ArrayMouse.push({ name: szMouseName, value: 1 });
else
ArrayMouse[MouseIndex].value++;
}
function AddLoot(szItemName, iQty)
{
if (iQty > 1)
{
if (szItemName.substr(-3) == "ies")
szItemName = szItemName.substr(0, szItemName.length - 3)+"y";
if (szItemName.substr(-2) == "'s")
szItemName = szItemName.substr(0, szItemName.length - 2);
if (szItemName.substr(-1) == "s")
szItemName = szItemName.substr(0, szItemName.length - 1);
}
var LootIndex = -1;
for (var count = 0; count < ArrayLoot.length && LootIndex == -1; count++)
{
if (ArrayLoot[count].name == szItemName)
LootIndex = count;
}
if (LootIndex == -1)
ArrayLoot.push({ name: szItemName, quantity: iQty });
else
ArrayLoot[LootIndex].quantity += iQty;
}
function compare(a, b)
{
if (a.name < b.name)
return -1;
if (a.name > b.name)
return 1;
return 0;
}
function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
function TournamentTimer()
{
setTimeout(TournamentTimer, 10000);
if (SETTINGS.tourney != STATE_OFF)
{
if (STATE.userobject != null && typeof(STATE.userobject.viewing_atts.tournament) != 'undefined')
{
var tournament = STATE.userobject.viewing_atts.tournament;
if (STATE.tourney == -1)
STATE.tourney = tournament.seconds_remaining;
else
STATE.tourney = STATE.tourney - 10;
if (tournament.status == "pending" && STATE.tourney > 0)
{
if (STATE.tourney < 300)
{
var lastAlert = DSXC_getValue("Alert - Tournament", -1);
if (lastAlert != tournament.tournament_id)
{
DSXC_setValue('Alert - Tournament', tournament.tournament_id);
if (SETTINGS.tourney & STATE_SOUND)
{
AlertSound(AUDIO.tourney);
}
if (SETTINGS.tourney & STATE_MESSAGE)
{
alert('Your tournament is about to start');
}
}
}
else if (STATE.tourney < 1200)
{
var lastAlert = DSXC_getValue("Alert - Tournament Early Warning", -1);
if (lastAlert != tournament.tournament_id)
{
DSXC_setValue('Alert - Tournament Early Warning', tournament.tournament_id);
if (SETTINGS.tourney & STATE_SOUND)
{
AlertSound(AUDIO.tourney);
}
if (SETTINGS.tourney & STATE_MESSAGE)
{
alert('Your tournament will start in around 20 minutes');
}
}
}
}
}
}
}
function IcebergProgress()
{
var progress = getElementById('MHH_Iceberg_Progress');
if (progress == null)
{
var iceberg = getElementsByPartialClass("depth");
var depth = iceberg[0];
if (depth != null)
{
var progress = document.createElement("div");
progress.id = "MHH_Iceberg_Progress";
progress.style.fontSize = "10px";
depth.appendChild(progress);
}
}
return progress;
}
function UpdateIcebergProgress()
{
var quest = STATE.userobject.quests.QuestIceberg;
var turnsTaken = quest.turns_taken;
var currentDepth = quest.user_progress;
var maxTurns = quest.max_turns;
var maxDepth = quest.max_depth;
if (quest.in_bonus)
{
var avgPerHunt = currentDepth / turnsTaken;
var currentRate = turnsTaken + ((2000 - currentDepth) / avgPerHunt);
var status = "Current rate " + avgPerHunt.toFixed(2) + "', complete by #" + Math.ceil(currentRate) + "<BR>";
var color = "Lime";
if (Math.abs(currentRate - 250) <= 2)
color = "Yellow";
else if (avgPerHunt < reqPerHunt)
color = "Red";
var reqPerHunt = (2000 - currentDepth) / (250 - turnsTaken);
status = "<FONT COLOR='" + color + "'>Hidden Depths: " + reqPerHunt.toFixed(2) + "'</FONT> ";
}
else
{
var avgPerHunt = currentDepth / turnsTaken;
var currentRate = turnsTaken + ((maxDepth - currentDepth) / avgPerHunt);
var status = "Current rate " + avgPerHunt.toFixed(2) + "', complete by #" + Math.ceil(currentRate) + "<BR>";
var totalShown = 0;
if (turnsTaken < quest.chests[0].turn)
{
if (quest.chests.length < 4)
quest.chests.push({"id":4,"name":"Hidden Depths","turn":250,"active":(turnsTaken <= 250),"position":400});
for (var count = (quest.chests.length - 1); count >= 0 && totalShown < 2; count--)
{
if (turnsTaken < quest.chests[count].turn)
{
var reqPerHunt = maxDepth / quest.chests[count].turn;
var color = "Lime";
if (Math.abs(avgPerHunt - reqPerHunt) <= 0.1)
color = "Yellow";
else if (avgPerHunt < reqPerHunt)
color = "Red";
status = status + "<FONT COLOR='" + color + "'>" + quest.chests[count].name + ": " + reqPerHunt.toFixed(2) + "'</FONT> ";
totalShown++;
}
}
}
if (totalShown == 0)
{
status = status + "<FONT COLOR='Red'><B>Better luck next time!</B></FONT>";
}
}
var progress = IcebergProgress();
if (progress != null)
progress.innerHTML = status;
}
function UpdateEssences(essences, essence)
{
if (essence == null) essence = 'essence_a_crafting_item';
var addon = 0;
var prisms = 0;
var reached = false;
var essence_name = "A";
for (var count = 0; count < essences.length; count++)
{
var spanElement = getElementById('MHH_' + essences[count].type);
if (typeof(spanElement) != "undefined")
{
if (reached)
{
spanElement.innerHTML = essences[count].quantity;
}
else
{
if (addon > 0)
essence_name = essences[count].type.substring(8, 9).toUpperCase()
prisms += addon;
if (essences[count].type == essence)
{
reached = true;
spanElement.innerHTML = (essences[count].quantity + addon);
if (addon > 0)
spanElement.parentNode.title = spanElement.parentNode.currentTitle + ' - needs ' + prisms + ' prisms';
addon = 0;
}
else
{
var quantity = essences[count].quantity + addon;
spanElement.innerHTML = (quantity % 3);
addon = Math.floor(quantity / 3);
}
}
}
}
}
function UpdateLivingGardenProgress(quest)
{
var progress = getElementsByPartialId('MHH_essence_');
if (progress.length == 0)
{
var essences = quest.essences;
for (var count = 0; count < essences.length; count++)
{
var essence = getElementsByClass("item " + essences[count].type);
if (essence.length == 1)
{
if (typeof(essence[0].currentTitle) == "undefined")
essence[0].currentTitle = essence[0].title;
essence[0].innerHTML = '<span id="MHH_' + essences[count].type + '">' + essences[count].quantity + '</span>';
essence[0].onmouseover = function()
{
UpdateEssences(essences, this.className.substring(5));
};
essence[0].onmouseout = function()
{
UpdateEssences(essences);
};
}
}
}
}
function UpdateQuestProgress()
{
if (STATE.userobject != null && typeof(STATE.userobject.quests) != "undefined")
{
if (typeof(STATE.userobject.quests.QuestIceberg) != "undefined")
{
UpdateIcebergProgress();
}
else if (typeof(STATE.userobject.quests.QuestLivingGarden) != "undefined")
{
UpdateLivingGardenProgress(STATE.userobject.quests.QuestLivingGarden);
}
else if (typeof(STATE.userobject.quests.QuestLostCity) != "undefined")
{
UpdateLivingGardenProgress(STATE.userobject.quests.QuestLostCity);
}
else if (typeof(STATE.userobject.quests.QuestSandDunes) != "undefined")
{
UpdateLivingGardenProgress(STATE.userobject.quests.QuestSandDunes);
}
}
setTimeout(UpdateQuestProgress, 5000);
}
function UpdateScript()
{
window.location = SCRIPT.scripturl;
}
function CheckForUpdate()
{
var szPageText;
var szOnlineVersion = 'none';
var fCurrentVersion, fOnlineVersion, fLastVersion;
// check for an update every 30 minutes
if (CheckTimeout('Update - Script', 30) == 0)
{
ResetTimeout('Update - Script');
var today = new Date();
var current_time = today.getTime();
Get(SCRIPT.versionurl + '?' + current_time, function(text) {
szPageText = text;
szOnlineVersion = text.substring(text.indexOf('@version') + 13, text.indexOf('@version') + 17);
fLastVersion = parseFloat(DSXC_getValue('Script - Last Revision', '0.0'));
fOnlineVersion = parseFloat(szOnlineVersion);
fCurrentVersion = parseFloat(SCRIPT.version);
if (fOnlineVersion > fCurrentVersion && fOnlineVersion != fLastVersion)
{
DSXC_setValue('Script - Last Revision', szOnlineVersion);
var szMessageText = 'DSXC\'s MouseHunt Helper (' + szOnlineVersion + ') is available!\n\n';
var iStartPos = text.indexOf('@revision');
var iEndPos;
while (iStartPos != -1)
{
iEndPos = text.indexOf('//', iStartPos);
szMessageText = szMessageText + text.substring(iStartPos + 10, iEndPos);
iStartPos = text.indexOf('@revision', iEndPos);
}
szMessageText = szMessageText + '\nDo you want to upgrade now?';
if (window.confirm(szMessageText))
{
UpdateScript();
}
}
});
}
}