// ==UserScript== // @name Bang Identifier // @namespace KoLCtH // @include *kingdomofloathing.com/game.php* // @include *kingdomofloathing.com/charsheet.php* // @include *kingdomofloathing.com/fight.php* // @include *kingdomofloathing.com/inventory.php* // @include *kingdomofloathing.com/afterlife.php* // @include *127.0.0.1:*/game.php* // @include *127.0.0.1:*/charsheet.php* // @include *127.0.0.1:*/fight.php* // @include *127.0.0.1:*/inventory.php* // @include *127.0.0.1:*/afterlife.php* // @version 0.0.1.20140812160538 // @description identifieds DoD potions. KOL // @downloadURL https://update.greasyfork.icu/scripts/4148/Bang%20Identifier.user.js // @updateURL https://update.greasyfork.icu/scripts/4148/Bang%20Identifier.meta.js // ==/UserScript== switch(window.location.pathname) { case '/game.php': GM_deleteValue("CurrentCharName"); break case '/inventory.php': if (!$('table#potions')) return document.addEventListener('click', function (e) { //place event listener to break the link and get the results page directly so we can parse it if (e.target.tagName.toLowerCase() != 'a') return var itemNum = e.target.href.match(/\d+$/) if (!itemNum || itemNum < 818 || itemNum > 828) return e.preventDefault(); e.stopPropagation(); unsafeWindow.loadingDiv(); var URL = e.target.href.replace('which=3', 'ajax=1') GM_xmlhttpRequest({ method: 'GET', url: URL, onload: function (res) { stealThisBang(res.responseText, e.target, true) } }); }, true); $('td[id]', true).forEach(function (td) { var itemNum = parseInt(td.id.substr(1)) if (itemNum > 818 && itemNum < 828) { td.appendChild(CE("br")) //get bang effects from scriptval or place listener to catch them var effect = identifyBang(itemNum) var newNode = td.appendChild(CE("strong", 'style|color:blue', 'text|' + effect)) } }) break case '/fight.php': var bangUsed = $('img[src *= "exclam.gif"]') if (bangUsed) stealThisBang(null, bangUsed) break case "/charsheet.php": var charName = $('center>b>a').textContent GM_setValue('CurrentCharName', charName) var bangNames = ["milky", "swirly", "bubbly", "smoky", "cloudy", "effervescent", "fizzy", "dark", "murky"]; var knownBangs = GM_getValue(charName + '.bangs', '0|0|0|0|0|0|0|0|0').split('|') var insertPoint = $('p:contains("Current Familiar:")').parentNode var p = insertPoint.appendChild(CE('p')) p.appendChild(CE('b', 'text|Bang Potions:')) p.appendChild(CE('br')) var table = p.appendChild(CE('table', 'width|60%')) table.appendChild(CE('td', 'height|1', 'colspan|2', 'bgcolor|black')) for (var n=0;n<9;n++) { var tr = table.appendChild(CE('tr')) if (n & 1) tr.style.backgroundColor = '#ddd' var td1 = tr.appendChild(CE('td', 'align|left', 'text|' + bangNames[n] + ' potion:')) var bangEff = (knownBangs[n] == '0') ? 'unknown' : knownBangs[n] var td2 = tr.appendChild(CE('td', 'align|right', 'text|' + bangEff)) } table.appendChild(CE('td', 'height|1', 'colspan|2', 'bgcolor|black')) break case '/afterlife.php': GM_deleteValue(getCharName() + '.bangs') break } function identifyBang(itemNum) { var charName = getCharName() var whichBang = itemNum - 819; var knownBangs = GM_getValue(charName + '.bangs', "0|0|0|0|0|0|0|0|0").split("|"); if (knownBangs[whichBang] != 0) return knownBangs[whichBang]; else return 'unknown'; } function stealThisBang(txt, tgt, fromInv) { var charName = getCharName() txt = txt || tgt.parentNode.nextSibling.textContent var bangEffects = { 0:['Confused', 'looks confused', '-30% Mys (20 Adv)'], 1:['liquid fire', 'like a wino', 'Gain 1-3 Drunk'], 2:['hit points', 'feels better', 'Gain 14-16 HP/MP'], 3:["Izchak's Blessing", 'more stylish', '+25% Mox (10 Adv)'], 4:['Strength of Ten Ettins', 'much stronger', '+25% Mus (10 Adv)'], 5:['Strange Mental Acuity', 'much smarter', '+25% Mys (10 Adv)'], 6:['Object Detection', 'blink', '+12.5% Item Drops (10 Adv)'], 7:['Sleepy', 'yawns', '-30% Mus (20 Adv)'], 8:['Teleportitis', 'starts disappearing', 'Teleportitis (10 Adv)'] } var knownBangs = GM_getValue(charName + '.bangs', '0|0|0|0|0|0|0|0|0').split('|'); if (fromInv) //intercepts bang use from inventory { for (var n=0;n<9;n++) { if (txt.indexOf(bangEffects[n][0]) != -1) { var thisBangEffect = bangEffects[n][2] break } } var thisBangNum = tgt.href.match(/(\d+)$/)[1] - 819 //replace 'unknown' with correct effect tgt.parentNode.nextSibling.nextSibling.textContent = knownBangs[thisBangNum] = thisBangEffect; var frag = CE('div') frag.innerHTML = txt $('#effdiv').replaceChild($('center', false, frag), $('#effdiv').firstChild) unsafeWindow.top.charpane.location.href = "charpane.php" unsafeWindow.updateInv({itemNum:-1}) } else //detects bang use in combat { var bangNames = ["milky", "swirly", "bubbly", "smoky", "cloudy", "effervescent", "fizzy", "dark", "murky"]; for (var n=0;n<9;n++) { if (!thisBangNum) { if (txt.indexOf(bangNames[n]+' potion') != -1) var thisBangNum = n } if (!thisBangEffect) { if (txt.indexOf(bangEffects[n][1]) != -1) var thisBangEffect = bangEffects[n][2] } } knownBangs[thisBangNum] = thisBangEffect } GM_setValue(charName + '.bangs', knownBangs.join('|')); } function getCharName() { //can get charName from any other frame and save it to GM val for next time if (GM_getValue('CurrentCharName', null)) return GM_getValue('CurrentCharName') if (!window.top || !window.top.frames[1]) return false var charName = window.top.frames[1].document.querySelector('b') if (charName) charName = charName.textContent else return false GM_setValue('CurrentCharName', charName) return charName } function CE(tag/*,attributes*/) { var node = document.createElement(tag) for (i=1,len=arguments.length;i