您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
identifieds DoD potions. KOL
- // ==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
- // ==/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<len;i++)
- {
- var attr = arguments[i].split('|')
- if (attr[0] == 'text')
- node.textContent = attr[1]
- else
- node.setAttribute(attr[0], attr[1])
- }
- return node
- }
- function $(selector, all, scope)
- {
- scope = scope || document
- if (selector.indexOf(':contains') != -1)
- {
- var test = selector.match(/([^:]+):contains\(["'](.+)["']\)/)
- var res = scope.querySelectorAll(test[1])
- for (a in res) {
- if (res[a].textContent && res[a].textContent.indexOf(test[2]) != -1)
- return res[a]
- }
- }
- else if (all)
- return Array.slice.call(scope.querySelectorAll(selector))
- else
- return scope.querySelector(selector)
- }