// ==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.8 // @revision - Added support for the Relic Hunter and Toxic Spill timers to work on the secure sites. // @revision - Fixed issues with the journal summary sometimes not parsing correctly. // @downloadURL none // ==/UserScript== //=============================================================================== var SCRIPT = { scripturl: 'https://greasyfork.org/scripts/3770-mousehunt-helper/code/Mousehunt%20Helper.user.js', version: '14.8', versionurl: 'https://greasyfork.org/scripts/3770-mousehunt-helper/code/Mousehunt%20Helper.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 ], [ 'Sunken City', 7, 'sunken_city', 12, 1512, 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 ], [ 'Burroughs Rift', 10, 'rift_burroughs', 13, 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', 'Omelette Factory' ], 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 SnkCty CapeC ElubS NergP DerrD Dread Draco BCove Fiery MMark LGard LCity SDune GnRift BuRift 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, 3510, 4010, 4010, 4010, 4510, 6510, 6510, 2200, 4100, 6300, 8650, 8650, 2400, 4640, 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, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 2210, 4110, 6310, 8660, 8660, 2410, 4650, 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, 3250, 3750, 3750, 3750, 4250, 6250, 6250, 2460, 4360, 6560, 8910, 8910, 2660, 4900, 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, 3000, 3500, 3500, 3500, 4000, 6000, 6000, 2710, 4610, 6810, 9160, 9160, 2910, 5150, 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, 4500, 5000, 5000, 5000, 5500, 7500, 7500, 3210, 5110, 7310, 9660, 9660, 3410, 3650, 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, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 3210, 5110, 7310, 9660, 9660, 3410, 5650, 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, 3550, 4050, 4050, 4050, 4550, 6550, 6550, 3260, 5160, 7360, 9710, 9710, 3460, 5700, 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, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 3210, 5110, 7310, 9660, 9660, 3410, 5650, 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, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 3210, 5110, 7310, 9660, 9660, 3410, 5650, 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, 3760, 4260, 4260, 4260, 4760, 6760, 6760, 1950, 3850, 6050, 8400, 8400, 2650, 4910, 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, 4010, 4510, 4510, 4510, 5010, 7010, 7010, 1700, 3600, 5800, 8150, 8150, 2900, 5160, 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, 4510, 5010, 5010, 5010, 5510, 7510, 7510, 1200, 3100, 5300, 7650, 7650, 3400, 5660, 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, 4010, 4510, 4510, 4510, 5010, 7010, 7010, 2200, 4100, 6300, 8650, 8650, 2900, 5160, 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, 4260, 4760, 4760, 4760, 5260, 7260, 7260, 2450, 4350, 6550, 8900, 8900, 3150, 5410, 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, 5500, 6000, 6000, 6000, 6500, 8500, 8500, 4210, 6110, 8310, 10660, 10660, 4410, 2650, 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, 5750, 6250, 6250, 6250, 6750, 8750, 8750, 4460, 6360, 8560, 10910, 10910, 4660, 2900, 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, 6000, 6500, 6500, 6500, 7000, 9000, 9000, 4710, 6610, 8810, 11160, 11160, 4910, 3150, 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, 6000, 6500, 6500, 6500, 7000, 9000, 9000, 4710, 6610, 8810, 11160, 11160, 4910, 2650, 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, 5750, 6250, 6250, 6250, 6750, 8750, 8750, 4460, 6360, 8560, 10910, 10910, 4660, 2400, 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, 7000, 7500, 7500, 7500, 8000, 10000, 10000, 5710, 7610, 9810, 12160, 12160, 5910, 3650, 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, 7025, 7525, 7525, 7525, 8025, 10025, 10025, 5735, 7635, 9835, 12185, 12185, 5935, 3675, 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, 7050, 7550, 7550, 7550, 8050, 10050, 10050, 5760, 7660, 9860, 12210, 12210, 5960, 3700, 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, 7150, 7650, 7650, 7650, 8150, 10150, 10150, 5860, 7760, 9960, 12310, 12310, 6060, 3800, 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, 7500, 8000, 8000, 8000, 8500, 10500, 10500, 6210, 8110, 10310, 12660, 12660, 6410, 4150, 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, 10000, 10500, 10500, 10500, 11000, 13000, 13000, 7210, 9110, 11310, 13660, 13660, 7410, 5150, 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, 8000, 8500, 8500, 8500, 9000, 11000, 11000, 5210, 7110, 9310, 11660, 11660, 5410, -99, 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, 1500, 2000, 2000, 2000, 2500, 4500, 4500, 4210, 6110, 8310, 10660, 10660, 4410, 6650, 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, 3500, 4000, 4000, 4000, 4500, 6500, 6500, 6210, 8110, 10310, 12660, 12660, 6410, 8650, 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, 8500, 9000, 9000, 9000, 9500, 11500, 11500, 11210, 13110, 15310, 17660, 17660, 11410, 13650, 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, 9200, 9700, 9700, 9700, 10200, 12200, 12200, 11910, 13810, 16010, 18360, 18360, 12110, 14350, 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, 4000, 4500, 4500, 4500, 5000, 7000, 7000, 6710, 8610, 10810, 13160, 13160, 6910, 9150, 4010, 4550 ], // Iceberg [ 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, 4000, 0, 3510, 4500, 4500, 4500, 5000, 7000, 7000, 6710, 8610, 10810, 13160, 13160, 6910, 7150, 4010, 4550 ], // Sunken City [ 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, 3510, 0, 500, 500, 500, 1000, 3000, 3000, 5710, 7610, 9810, 12160, 12160, 5910, 8150, 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, 500, 0, 1000, 1000, 1500, 3500, 3500, 6210, 8110, 10310, 12660, 12660, 6410, 8650, 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, 500, 1000, 0, 1000, 1500, 3500, 3500, 6210, 8110, 10310, 12660, 12660, 6410, 8650, 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, 500, 1000, 1000, 0, 1500, 3500, 3500, 6210, 8110, 10310, 12660, 12660, 6410, 8650, 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, 1000, 1500, 1500, 1500, 0, 2000, 2000, 6710, 8610, 10810, 13160, 13160, 6910, 9150, 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, 3000, 3500, 3500, 3500, 2000, 0, 4000, 8710, 10610, 12810, 15160, 15160, 8910, 11150, 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, 3000, 3500, 3500, 3500, 2000, 4000, 0, 8710, 10610, 12810, 15160, 15160, 8910, 11150, 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, 5710, 6210, 6210, 6210, 6710, 8710, 8710, 0, 1900, 4100, 6450, 6450, 4600, 6860, 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, 7610, 8110, 8110, 8110, 8610, 10610, 10610, 1900, 0, 2200, 4550, 4550, 6500, 8760, 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, 9810, 10310, 10310, 10310, 10810, 12810, 12810, 4100, 2200, 0, 2350, 2350, 8700, 10960, 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, 12160, 12660, 12660, 12660, 13160, 15160, 15160, 6450, 4550, 2350, 0, 2350, 11050, 13310, 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, 12160, 12660, 12660, 12660, 13160, 15160, 15160, 6450, 4550, 2350, 2350, 0, 11050, 13310, 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, 5910, 6410, 6410, 6410, 6910, 8910, 8910, 4600, 6500, 8700, 11050, 11050, 0, 7060, 2920, -99 ], // Gnawnia Rift [ 0, 4650, 4900, 5150, 3650, 5650, 5700, 5650, 5650, 4910, 5160, 5660, 5160, 5410, 2650, 2900, 3150, 2650, 2400, 3650, 3675, 3700, 3800, 4150, 5150, -99, 6650, 8650, 13650, 14350, 9150, 7150, 8150, 8650, 8650, 8650, 9150, 11150, 11150, 6860, 8760, 10960, 13310, 13310, 7060, 0, -99, -99 ], // Burroughs 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, 3010, 3510, 3510, 3510, 4010, 6010, 6010, 2720, 4620, 6720, 9070, 9070, 2920, -99, 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, 3550, 4050, 4050, 4050, 4550, 6550, 6550, 2260, 4160, 6360, 8710, 8710, -99, -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 SnkCty CapeC ElubS NergP DerrD Dread Draco BCove Fiery MMark LGard LCity SDune GnRift BuRift 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 String 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_COLLECTIBLE = 3, INV_TYPE_CONVERT = 4, INV_TYPE_CRAFTING = 5, INV_TYPE_MAPS = 6, INV_TYPE_MESSAGE_ITEM = 7, INV_TYPE_POTION = 8, INV_TYPE_QUEST = 9, INV_TYPE_SKIN = 10, INV_TYPE_STAT = 11, INV_TYPE_TRINKET = 12, INV_TYPE_TORN_PAGE = 13, INV_TYPE_WEAPON = 14, INV_TYPE_NONE = 15; var INVENTORY_TYPES_TEXT = [ 'bait', 'base', 'breakable', 'collectible', 'covertible', 'crafting_item', 'map_piece', 'message_item', 'potion', 'quest', 'skin', 'stat', 'trinket', 'torn_page', '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: 'https://deceptivestudios.com/proxy.php?url=http%3A%2F%2Fhorntracker.com%2Fbackend%2Frelichunter.php%3FfunctionCall%3Drelichunt', length: 86400 } ], [ 'Toxic Spill', { url: 'https://deceptivestudios.com/proxy.php?url=http%3A%2F%2Fhorntracker.com%2Fbackend%2Fnew%2Ftoxic.php%3FfunctionCall%3Dspill' } ] ]; 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) { console.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 = "X"; 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 = "
 " + name + "
" + CloseButton + "
"; 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 = '
'; 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('
0) { MessageTimeout = setTimeout(ShowMessageWindow, (time * 1000)); } } } function ShowConfigWindow(display) { var ConfigWindow = CreatePopupWindow('Configuration', 275, 350, display); if (ConfigWindow != null) { ConfigWindow.innerHTML = "
AlertsSnd   Msg
   Horn Ready
   King's Reward
   Cheese Empty
   Washed Away
   Season Change / Tower Amp
   Tournament Soon
Direct Travel
Display Timers
Timer in Title
Show All Crafting Items
Automatic Inventory Update
Change Button Style
Update Timer Length
Version " + SCRIPT.version + "           Like    Defaults
"; 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, 'Reward:  '); var MHHornTimer = getElementsByClass('hunttimer')[0]; MHHornTimer.style.display = 'none'; var HornTimer = document.createElement('div'); HornTimer.id = 'MHH_Display_1'; HornTimer.className = 'hunttimer'; HornTimer.innerHTML = 'Next:\n'; MHHornTimer.parentNode.insertBefore(HornTimer, MHHornTimer); } } } function HeaderDetail(text, stylestart, styleend, link, linktext) { var HeaderText = "
"; if (link != null) HeaderText = HeaderText + "" + linktext + ""; HeaderText = HeaderText + "
"; if (stylestart != null) HeaderText = HeaderText + stylestart; HeaderText = HeaderText + text; if (styleend != null) HeaderText = HeaderText + styleend; HeaderText = HeaderText + "
" 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 = ""; var sRefresh = ""; var sTravelOpen = ""; var sCraftingOpen = ""; var sPotionsOpen = ""; var sJournalOpen = ""; var sMHHButtons = "
"; sMHHButtons = sMHHButtons + ""; //sMHHButtons = sMHHButtons + ""; sMHHButtons = sMHHButtons + ""; //sMHHButtons = sMHHButtons + ""; sMHHButtons = sMHHButtons + ""; sMHHButtons = sMHHButtons + "
MouseHunt Helper
" + sCraftingOpen + "" + sTravelOpen + "" + sJournalOpen + "" + sRefresh + "" + sConfigOpen + "
" + sCraftingOpen + "" + sPotionsOpen + "" + sTravelOpen + "" + sJournalOpen + "" + sRefresh + "" + sConfigOpen + "
CraftTravelJournalRefreshConfig
CraftPotionTravelJournalRefreshConfig

"; var sMHHTimers = "
"; sMHHTimers = sMHHTimers + ""; var ColumnWidth = 100 / LOCATION_TIMERS.length; for (iCount1 = 0; iCount1 < LOCATION_TIMERS.length; iCount1++) { sMHHTimers = sMHHTimers + ""; } sMHHTimers = sMHHTimers + "
"; 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 + "
" + LOCATION_TIMERS[iCount1][0] + "
"; sMHHTimers = sMHHTimers + "  State:
"; sMHHTimers = sMHHTimers + "  Changes: the future

"; TopBanner.innerHTML = sMHHButtons + sMHHTimers + "
"; 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 = ''; 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('
Updating Inventory
This window will disappear once the update has occurred.
'); 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) { UpdateInventoryDetail(data.inventory[detail]); } } LoadCrafting(); LoadInventory(); } else { params = { "classifications": INVENTORY_TYPES_TEXT, "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(''); LoadCrafting(); LoadInventory(); }); } } 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; case INVENTORY_TYPES_TEXT[INV_TYPE_CRAFTING]: { var mat_id = CraftingLookup(inventory_item.type); if (mat_id != -1) { DSXC_setValue('Crafting Item - ' + mat_id, inventory_item.name + ',' + inventory_item.type + ',' + inventory_item.quantity); } else { var mat_id = Number(DSXC_getValue('Crafting - Max ID', 0)) + 1; DSXC_setValue('Crafting Item - ' + mat_id, inventory_item.name + ',' + inventory_item.type + ',' + inventory_item.quantity); DSXC_setValue('Crafting - Max ID', mat_id); } } 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('
Travel
You have arrived at your destination.
', 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 = ""; 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 = ""; PatternTable += ""; for (count1 = 0; count1 < pattern_is_craftable.length; count1++) { if (pattern_is_craftable[count1][1] == 0) { PatternTable += ""; } else { PatternTable += ""; } } WindowTable += PatternTable; WindowTable += ""; } var IngredientsTable = ""; 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 += ""; } } if (total_ingredients > 0) { WindowTable += IngredientsTable; } WindowTable += "
Craftable


1
" + PATTERNS[pattern_is_craftable[count1][0]][PNAME] + "" + pattern_is_craftable[count1][1] + "
" + PATTERNS[pattern_is_craftable[count1][0]][PNAME] + "" + pattern_is_craftable[count1][1] + "

Ingredients
" + SortedArray[count1][CRAFTNAME] + "" + SortedArray[count1][CRAFTQTY] + "
"; 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 = "" + PATTERNS[pattern_id][PNAME] + "
"; 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 + ""; } else { pattern_detail = pattern_detail + ""; } } else { pattern_detail = pattern_detail + ""; } } } pattern_detail = pattern_detail + "
IngredientNeedsStock
" + CRAFTING[mat_id][CRAFTNAME] + "" + mat_qty + "" + current_qty + "
" + CRAFTING[mat_id][CRAFTNAME] + "" + mat_qty + "" + current_qty + "
" + mat_name + "" + mat_qty + "0
"; var height = 30 + (total_mats * 10); var width = 250; PopupWindow.innerHTML = "
" + pattern_detail + "
"; 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 = ""; var MaxToCraft = 0; var PotionsTable = ""; 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 += ""; PotionsTable += ""; TotalPotions++; } } if (TotalPotions > 0) { WindowTable += PotionsTable; WindowTable += ""; } WindowTable += "
Potions
1
" + INVENTORY[count1][INVNAME] + "" + INVENTORY[count1][INVQTY] + "
 "; 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 += "    " + ConvertDetail[1] + "x" + ConvertDetail[0] + ""; PotionsAvailable.push( [ count1, (count2 - 1) ] ); } } PotionsTable += "

"; 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('
' + response.jsDialog.tokens.title.value + '
' + response.jsDialog.tokens.content.value + '
', 5); } else { ShowMessageWindow('
' + response.jsDialog.tokens.title.value + '
' + response.jsDialog.tokens.content.value + '
'); } } 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 = ""; var region_name = "None"; var total_found; for (count1 = 0; count1 < LOCATION.region.length; count1++) { newHTML = newHTML + ""; 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 + ""; total_found++; } } } if (total_found == 0) { newHTML = newHTML + ""; } else { newHTML = newHTML + ""; } } newHTML = newHTML + "
" + LOCATION.region[count1] + "
" + LocationName + "" + travel_cost + " gold
Not available


"; 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 = 'Now!'; 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 = '' + DSXC_getValue(LOCATION_TIMERS[iCount1][0] + ' - Location') + ''; 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 = '' + LOCATION_TIMERS[iCount1][1].name[CurrentName] + ''; 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 = "Catches:
Updating...

Gold and Points:
Updating...

Loot:
Updating...

"; 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 (szJournalText.indexOf('lb.') != -1 || szJournalText.indexOf('oz.') != -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 + "

Total catches: " + TotalCatches + "
Total misses: " + TotalMisses + "
FTA / Stale: " + TotalFailures + "
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
"; szJournalText = szJournalText + addCommas(TotalPoints) + " points gained, " + addCommas(TotalPointsLost) + " points lost
"; szJournalText = szJournalText + addCommas((TotalGold - TotalGoldStolen)) + " net gold, " + addCommas((TotalPoints - TotalPointsLost)) + " net points
"; 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 + ")
"; } } 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) + "
"; var color = "Lime"; if (Math.abs(currentRate - 250) <= 2) color = "Yellow"; else if (avgPerHunt < reqPerHunt) color = "Red"; var reqPerHunt = (2000 - currentDepth) / (250 - turnsTaken); status = "Hidden Depths: " + reqPerHunt.toFixed(2) + "' "; } else { var avgPerHunt = currentDepth / turnsTaken; var currentRate = turnsTaken + ((maxDepth - currentDepth) / avgPerHunt); var status = "Current rate " + avgPerHunt.toFixed(2) + "', complete by #" + Math.ceil(currentRate) + "
"; 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 + "" + quest.chests[count].name + ": " + reqPerHunt.toFixed(2) + "' "; totalShown++; } } } if (totalShown == 0) { status = status + "Better luck next time!"; } } 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 = '' + essences[count].quantity + ''; 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(); } } }); } }