您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Counts trophies and shows missing trophies in Kingdom of Loathing.
- // ==UserScript==
- // @name Trophy Counter
- // @namespace kol.interface.unfinished
- // @description Counts trophies and shows missing trophies in Kingdom of Loathing.
- // @include https://*kingdomofloathing.com/showplayer.php*
- // @include http://kol.coldfront.net/thekolwiki/index.php/Trophy*
- // @version 1.13
- // @grant GM_getValue
- // @grant GM_setValue
- // ==/UserScript==
- //Version 1.13
- // - fix it so it works again given minor wiki changes to table sorting, and switch to https
- //Version 1.12
- // - add @grant
- //Version 1.1
- // - make impossible trophies dimmer
- //Version 1.0
- function doPage() {
- // find table root of area interested in
- var yourTrophies = {};
- var count = 0;
- var c = document.evaluate('//center[text()="Trophies:"]',document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
- if (c.singleNodeValue) {
- var ts = document.evaluate('.//img',c.singleNodeValue.nextSibling,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
- for (var i=0;i<ts.snapshotLength;i++) {
- var t = ts.snapshotItem(i).getAttribute('title');
- yourTrophies[t] = true;
- count++;
- }
- GM_setValue('yourtrophies',JSON.stringify(yourTrophies));
- addButton(c.singleNodeValue,count);
- if (GM_getValue('showmissing',''))
- showMissing();
- }
- }
- function addButton(c,count) {
- var total = GM_getValue('knowntrophycount','?');
- c.appendChild(document.createTextNode('\u00A0'+count+'/'+total));
- var v = document.createElement('a');
- v.setAttribute('href','#');
- v.setAttribute('id','showmissingtrophybutton');
- v.setAttribute('style','font-size:x-small;vertical-align:middle;');
- fixupButton(v);
- v.addEventListener('click',bHandler,false);
- c.appendChild(document.createTextNode('\u00a0\u00a0\u00a0'));
- c.appendChild(v);
- var goWiki = document.createElement('a');
- goWiki.setAttribute('title','Click to go to the full list of trophies on the KoL wiki.');
- goWiki.setAttribute('target','_blank');
- goWiki.setAttribute('id','trophywikilink');
- goWiki.setAttribute('style','font-size:x-small;vertical-align:middle;');
- goWiki.setAttribute('href','http://kol.coldfront.net/thekolwiki/index.php/Trophy');
- goWiki.appendChild(document.createTextNode('[Load trophy list]'));
- c.appendChild(document.createTextNode('\u00A0'));
- c.appendChild(goWiki);
- }
- function fixupButton(v) {
- if (GM_getValue('showmissing','')) {
- v.setAttribute('title','Click to hide all missing trophies.');
- if (v.firstChild)
- v.replaceChild(document.createTextNode('[Hide Missing]'),v.firstChild);
- else
- v.appendChild(document.createTextNode('[Hide Missing]'));
- } else {
- v.setAttribute('title','Click to display all missing trophies.');
- if (v.firstChild)
- v.replaceChild(document.createTextNode('[Show Missing]'),v.firstChild);
- else
- v.appendChild(document.createTextNode('[Show Missing]'));
- }
- }
- function showMissing() {
- var v = document.getElementById('showmissingtrophybutton');
- if (GM_getValue('showmissing','')) {
- missing();
- } else {
- var xx = document.getElementsByClassName('showmissingaddition');
- for (var i=xx.length-1;i>=0;i--) {
- var x = xx[i];
- x.parentNode.removeChild(x);
- }
- }
- fixupButton(v);
- }
- function bHandler(e) {
- var b = GM_getValue('showmissing','');
- GM_setValue('showmissing', (b ? '' : 'true'));
- showMissing();
- }
- // locate all missing recipes
- function missing() {
- if (!GM_getValue('knowntrophycount'))
- return;
- var c = document.evaluate('//center[text()="Trophies:"]',document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
- if (c.singleNodeValue && c.singleNodeValue.nextSibling) {
- var t = c.singleNodeValue.nextSibling;
- var r = t.insertRow(-1);
- r.setAttribute('class','showmissingaddition');
- var ctr = document.createElement('center');
- ctr.appendChild(document.createTextNode('Missing Trophies'));
- r.insertCell(-1).appendChild(ctr);
- r = t.insertRow(-1);
- r.setAttribute('class','showmissingaddition');
- td = r.insertCell(-1);
- td.setAttribute('align','center');
- var lastrc = 0;
- var alltrophies = JSON.parse(GM_getValue('knowntrophies','[]'));
- var yourtrophies = JSON.parse(GM_getValue('yourtrophies','{}'));
- var parity = 1;
- for (var i=0;i<alltrophies.length;i++) {
- if (!alltrophies[i])
- continue;
- if (!yourtrophies[alltrophies[i].name]) {
- if (lastrc==0) {
- td.appendChild(document.createElement('br'));
- parity = 1-parity;
- }
- lastrc = (lastrc+1) % (5+parity);
- var img = document.createElement('img');
- img.setAttribute('src','http://images.kingdomofloathing.com/otherimages/trophy/'+alltrophies[i].img);
- img.setAttribute('width','100');
- img.setAttribute('height','100');
- img.setAttribute('title',i+'. '+alltrophies[i].name+': '+alltrophies[i].cause);
- if (alltrophies[i].name.match(/^Silver Yeti$/) ||
- alltrophies[i].name.match(/^Golden Yeti$/) ||
- alltrophies[i].name.match(/^This Lousy Trophy$/) ||
- alltrophies[i].name.match(/^Friend of Elves$/) ||
- alltrophies[i].name.match(/^Reindeer Hunter$/) ||
- alltrophies[i].name.match(/^Look, Ma! No Pants!$/)) {
- img.setAttribute('style','opacity:0.4');
- img.setAttribute('title',i+'. '+alltrophies[i].name+': '+alltrophies[i].cause+' [note: no longer obtainable]');
- }
- td.appendChild(img);
- }
- }
- r = t.insertRow(-1);
- r.setAttribute('class','showmissingaddition');
- td = r.insertCell(-1);
- td.setAttribute('bgcolor','black');
- td.setAttribute('height','1');
- }
- return true;
- }
- // return a new copy of the master list
- function retrieveCopy(page) {
- var r = JSON.parse(GM_getValue('knowntrophies','[]'));
- return r;
- }
- function strip(s) {
- if (!s)
- return '';
- return s.replace(/^\s+/,'').replace(/\s+$/,'');
- }
- function removeHTML(s) {
- if (!s)
- return '';
- return s.replace(/<[^>]*>/g,'');
- }
- // gather data from a kol wiki page
- function gather() {
- var trophies = [];
- var count=0;
- var ts = document.evaluate('//table[@class="sortable"]',document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
- var t = ts.singleNodeValue;
- if (t) {
- for (var i=1;i<t.rows.length;i++) {
- var r = t.rows[i];
- var tnum = Number(r.cells[0].innerHTML);
- if (tnum) {
- if (r.cells[1] && r.cells[1].firstChild) {
- var tname = strip(r.cells[1].firstChild.innerHTML);
- var timg = strip(r.cells[3].innerHTML);
- var tcause = strip(removeHTML(r.cells[4].innerHTML));
- if (tname && timg) {
- timg = timg.replace(/ /g,'_')+'.gif';
- count++;
- trophies[tnum] = {'name':tname,'img':timg,'cause':tcause};
- }
- }
- }
- }
- }
- console.log('Loaded '+count+' trophies from the wiki');
- if (count>0) {
- GM_setValue('knowntrophycount',count);
- GM_setValue('knowntrophies',JSON.stringify(trophies));
- } else {
- console.log('t is '+((t==null) ? "null" : "ok"));
- }
- }
- if (window.location.href.indexOf('http://kol.coldfront.net/thekolwiki/index.php/')>=0) {
- gather();
- } else {
- doPage();
- }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址