您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
面向团商,康叔对Tomy的MarketStall做了修改,使之支持中文。作用是分类整理物品,并形成论坛BBCode
// ==UserScript== // @id ChineseMarketStall@UncleKang // @name [wod]小市场(团商利器)Ver 1.2 // @description 面向团商,康叔对Tomy的MarketStall做了修改,使之支持中文。作用是分类整理物品,并形成论坛BBCode // @namespace UncleKang // @version 1.2 // @include http://*.world-of-dungeons.*/wod/spiel/hero//csvexport.php* // @include http://*.world-of-dungeons.*/wod/spiel/hero/items.php* // ==/UserScript== (function() { //----------------------------------------------------------------------------- // auxiliary functions //----------------------------------------------------------------------------- String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); } Array.prototype.contains = function (element) { for (var i = 0; i < this.length; i++) { if (this[i] == element) { return true; } } return false; } // Usage: dump(object) function dump(object, pad){ var indent = '\t'; if (!pad) pad = ''; var out = ''; if (object == undefined) { out += "undefined"; } else if (object.constructor == Array) { out += '[\n'; for (var i = 0; i < object.length; ++i) { out += pad + indent + '[' + i + '] = ' + dump(object[i], pad + indent) + '\n'; } out += pad + ']'; } else if (object.constructor == Object || typeof object == 'object') { out += '{\n'; for (var i in object) { if (typeof object[i] != 'function') out += pad + indent + i + ': ' + dump(object[i], pad + indent) + '\n'; } out += pad + '}'; } else { out += object; } return out; } function DebugMsg(Data) { if (DEBUG) alert(dump(Data)); } //----------------------------------------------------------------------------- // "global" variables //----------------------------------------------------------------------------- var DEBUG = true; var VER = "1.2"; var TempWeaponType; var ConsumablesType; var globalVars = { "en" : { titleConsumable: "Consumables" , titleTreasury: "Treasury" , linkMarket: "market" , copyright: "Created with Market Stall" , order: [ "head", "face", "ears", "neck", "torso", "cloak", "gloves", "arms", "legs", "feet", "ring", "right hand", "left hand", "both hands", "either hand", "belt", "pocket", "medal", "unequipable" ] } , "cn" : { titleConsumable: "消耗品" , titleTreasury: "装备" , linkMarket: "市场" , copyright: "由康叔小卖部工具生成,祝快乐生活每一天!" , order: [ "头", "眼镜", "耳", "颈", "身体", "披风", "肩膀", "手", "臂", "腿", "脚", "戒指", "右手", "左手", "双手", "单手", "腰带", "口袋", "勋章", "不可装备", "不可装备物品" ] } , "fr" : { titleConsumable: "Consommables" , titleTreasury: "Trésors" , linkMarket: "marché" , copyright: "Créé avec Market Stall" , order: [ "tete", "visage", "oreilles", "cou", "torse", "cape", "gants", "bras", "jambes", "pied", "anneau", "main droite", "main gauche", "les deux mains", "d'une main", "ceinture", "sac", "décoration", "Non équipable" ] } , "de" : { titleConsumable: "Verbrauchsmaterial" , titleTreasury: "Treasury" , linkMarket: "markt" , copyright: "Erstellt mit Market Stall" , order: [ "Kopf", "Ohren", "Brille", "Halskette", "Torso", "Gürtel", "Umhang", "Schultern", "Arme", "Handschuhe", "Beide Hände", "Waffenhand", "Schildhand", "Einhändig", "Beine", "Füße", "Orden", "Tasche", "Ring", "Nicht tragbar" ] } , "it" : { titleConsumable: "Materiale di consumo" , titleTreasury: "Tesoro" , linkMarket: "mercato" , copyright: "Creato con Market Stall" , order: [ "testa", "orecchie", "viso", "collo", "torace", "cinta", "mantello", "braccia", "guanti", "due mani", "mano destra", "mano sinistra", "una mano", "gambe", "piedi", "medaglie", "tasche", "anelli", "non equipaggiabile" ] } , "es" : { titleConsumable: "Materiales consumibles" , titleTreasury: "Tesoro" , linkMarket: "mercado" , copyright: "Creado con el Market Stall" , order: [ "Cabeza", "Rostro", "Oídos", "Collar", "Torso", "Capa", "Guantes", "Brazos", "Piernas", "Pies", "Companero", "Anillo", "Mano derecha", "Mano izquierda", "Las dos manos", "Izqu. o derecha", "Condecoración", "Cinturón", "Bolso", "No equipable" ] } , "pl" : { titleConsumable: "Materialy eksploatacyjne" , titleTreasury: "Skarbu" , linkMarket: "rynek" , copyright: "Stworzony z Market Stall" , order: [ "head", "face", "ears", "neck", "torso", "cloak", "gloves", "arms", "legs", "feet", "ring", "right hand", "left hand", "both hands", "either hand", "belt", "pocket", "medal", "unequipable" ] } , "hr" : { titleConsumable: "Potrosni materijal" , titleTreasury: "Trezor" , linkMarket: "pijaca" , copyright: "Napravljeno sa Market Stall-om" , order: [ "Glava", "Uši", "Naočale", "Lančić", "Torzo", "Pojas", "Ogrtač", "Ruke", "Rukavice", "Obje ruke", "Ruka za oružje", "Ruka za štit", "Jednoruk", "Noge", "Stopala", "Medalja", "Torba", "Prsten", "Ne može se nositi" ] } }; // init local vars var localVars = globalVars["en"]; //----------------------------------------------------------------------------- // "initialization" functions //----------------------------------------------------------------------------- function Main() { if (/\/wod\/spiel\/hero\/\/csvexport.php?.*&is_tomy=1/.test(document.URL)) { var match = new RegExp("&tomy_lang=([^&]+)", "g").exec(document.URL); localVars = globalVars[match ? match[1] : "en"]; // alert(JSON.stringify(localVars)); var Pre = document.body.removeChild(document.body.firstChild); var items = ParseTreasure( Pre.innerHTML ); var newPre = document.createElement("pre"); newPre.innerHTML = ConvertToBB(items); document.body.appendChild(newPre); } else if (/\/wod\/spiel\/hero\/items.php/.test(document.URL)) { var meta = document.querySelector("meta[http-equiv='Content-Language']"); var lang = meta ? meta.getAttribute("content") : "en"; if (!globalVars.hasOwnProperty(lang)) lang = "en"; localVars = globalVars[lang]; // alert(JSON.stringify(localVars)); var allA = document.getElementsByTagName("a"); for (var i = 0; i < allA.length; ++i) { var link = allA[i]; if (link.textContent.trim() == "csv" && /csvexport.php/.test(link.getAttribute("href")) ) { var newA = document.createElement("a"); if ( link.hasAttribute("onclick") ){ newA.setAttribute("onclick", link.getAttribute("onclick").replace("&IS_POPUP=1", "&IS_POPUP=1&is_tomy=1&tomy_lang=" + lang)); }; newA.setAttribute("href", link.getAttribute("href").replace("&IS_POPUP=1", "&IS_POPUP=1&is_tomy=1&tomy_lang=" + lang)); newA.setAttribute("target", link.getAttribute("target")); newA.innerHTML = localVars.linkMarket; link.parentNode.appendChild(newA); } } } } //----------------------------------------------------------------------------- // "functionality" functions //----------------------------------------------------------------------------- function ParseTreasure(text) { var ret = new Object(); ret.Treasury = new Object(); ret.Consumables = new Object(); var lines = text.split("\n"); for (var i = 1; i < lines.length; ++i) { var data = lines[i].split(";"); if (data.length < 8) continue; for (var j = 0; j < data.length; ++j) { data[j] = data[j].substring(1, data[j].length - 1); } var tmpData = {Name:data[0], Count:parseInt(data[1]),ClassType:((data[5].split(","))[0]),FullClassType:data[5], Unique:data[6], Grafting:""}; // var tmpData = {Name:data[0], Count:parseInt(data[1]),ClassType:data[5], Unique:data[6], Grafting:""}; if (data.length > 9) tmpData.Grafting = data[9]; var ccount = data[2]; var place = data[4]; if (ccount.length > 0) { // consumables if (!ret.Consumables.hasOwnProperty(place)) ret.Consumables[place] = new Array(); var count = ccount.split("/"); tmpData.MaxCCount = parseInt(count[1]); tmpData.CCount = parseInt(count[0]) * tmpData.Count; var found = false; for (var j = 0; j < ret.Consumables[place].length; ++j) { if (tmpData.Name == ret.Consumables[place][j].Name && tmpData.MaxCCount == ret.Consumables[place][j].MaxCCount && tmpData.Grafting == ret.Consumables[place][j].Grafting) { ret.Consumables[place][j].Count += tmpData.Count; ret.Consumables[place][j].CCount += tmpData.CCount; found = true; break; } } if (!found) { ret.Consumables[place].push(tmpData); } } else { // treasury if (!ret.Treasury.hasOwnProperty(place)) ret.Treasury[place] = new Array(); var hitpoints = data[3].split("/"); if (hitpoints.length < 2) { tmpData.MaxHitpoints = undefined; tmpData.Hitpoints = undefined; } else { tmpData.MaxHitpoints = parseInt(hitpoints[1]); tmpData.Hitpoints = parseInt(hitpoints[0]); } var found = false; for (var j = 0; j < ret.Treasury[place].length; ++j) { if (tmpData.Name == ret.Treasury[place][j].Name && tmpData.Hitpoints == ret.Treasury[place][j].Hitpoints && tmpData.MaxHitpoints == ret.Treasury[place][j].MaxHitpoints && tmpData.Grafting == ret.Treasury[place][j].Grafting) { ret.Treasury[place][j].Count += tmpData.Count; found = true; break; } } if (!found) { ret.Treasury[place].push(tmpData); } } } return ret; } function ConvertToBB(items) { var lastSize = 0; var totalRet = "\r\n[size=20]" + localVars.titleTreasury + "[/size]" + "\r\n[url=http://userscripts.org/scripts/show/105123][size=9]" + localVars.copyright + " v" + VER + "[/size][/url]\r\n"; for (var k = 0; k < localVars.order.length; ++k) { var ret = ""; var i = localVars.order[k]; if (!items.Treasury.hasOwnProperty(i)) continue; var count = 0; for (var j = 0; j < items.Treasury[i].length; ++j) count += items.Treasury[i][j].Count; ret += "\r\n\r\n[size=15][color=orange][b]" + i + "[/b][/color][/size] -> [i]" + count + "[/i]"; //if(i=="右手") TempWeaponType=new Array(); for(var j=0;j< items.Treasury[i].length; ++j) { if(!TempWeaponType.contains(items.Treasury[i][j].ClassType)) { TempWeaponType.push(items.Treasury[i][j].ClassType); } } for(var lhy=0;lhy< TempWeaponType.length; ++lhy) { ret += "\r\n\t[size=12][color=palegreen][b]"+TempWeaponType[lhy]+"[/b][/color][/size]"; ret +="\r\n[table border=1]\r\n\t"; for(var j=0;j<items.Treasury[i].length; ++j) { if(items.Treasury[i][j].ClassType==TempWeaponType[lhy]) { ret +="[tr]" + "[td]" + items.Treasury[i][j].Count +"x " + "[item: " + items.Treasury[i][j].Name + "] "; if (items.Treasury[i][j].Grafting.length > 0) { for (var l = 0; l < items.Treasury[i][j].Grafting.length; ++l) ret += ":g" + items.Treasury[i][j].Grafting[l] + ":"; ret += " "; } ret +="[/td][td]"; ret += (items.Treasury[i][j].Unique.length > 0 ? "[color=lime]" + items.Treasury[i][j].Unique + "[/color] " : ""); ret +="[/td][td]"; // ret += (items.Treasury[i][j].MaxHitpoints != items.Treasury[i][j].Hitpoints ? "[color=tomato](" + items.Treasury[i][j].Hitpoints + "/" + items.Treasury[i][j].MaxHitpoints + ")[/color] " : ""); ret +="[color=tomato](" + items.Treasury[i][j].Hitpoints + "/" + items.Treasury[i][j].MaxHitpoints + ")[/color] " ret +="[/td][td]"; ret +="[color=gold]"+items.Treasury[i][j].FullClassType+"[/color]"; ret +="[/td]"; ret +="[/tr]"; } } ret +="\r\n[/table]"; } if (lastSize + ret.length > 65000) { totalRet += "\r\n\r\n====================================================================================================\r\n" + "\r\n[url=http://userscripts.org/scripts/show/105123][size=9]" + localVars.copyright + " v" + VER + "[/size][/url]"; totalRet += ret; lastSize = ret.length; } else { totalRet += ret; lastSize += ret.length; } } totalRet += "\r\n\r\n====================================================================================================\r\n"; var lastSize = 0; totalRet += "\r\n\r\n\r\n\r\n[size=20]" + localVars.titleConsumable + "[/size]" + "\r\n[url=http://userscripts.org/scripts/show/105123][size=9]" + localVars.copyright + " v" + VER + "[/size][/url]\r\n"; for (var k = 0; k < localVars.order.length; ++k) { var ret = ""; var i = localVars.order[k]; if (!items.Consumables.hasOwnProperty(i)) continue; var count = 0; for (var j = 0; j < items.Consumables[i].length; ++j) count += items.Consumables[i][j].Count; ret += "\r\n\r\n[size=15][color=orange][b]" + i + "[/b][/color][/size] -> [i]" + count + "[/i]"; if(true) { ConsumablesType=new Array(); for(var j=0;j< items.Consumables[i].length; ++j) { if(!ConsumablesType.contains(items.Consumables[i][j].FullClassType)) { ConsumablesType.push(items.Consumables[i][j].FullClassType); } } for(var lhy=0;lhy< ConsumablesType.length; ++lhy) { ret += "\r\n\t[size=12][color=palegreen][b]"+ConsumablesType[lhy]+"[/b][/color][/size]"; ret +="\r\n[table border=1]\r\n\t"; for(var j=0;j<items.Consumables[i].length; ++j) { if(items.Consumables[i][j].FullClassType==ConsumablesType[lhy]) { ret +="[tr][td]" + "\r\n\t" + items.Consumables[i][j].Count +"x " + "[item: " + items.Consumables[i][j].Name + "] " if (items.Consumables[i][j].Grafting.length > 0) { for (var l = 0; l < items.Consumables[i][j].Grafting.length; ++l) ret += ":g" + items.Consumables[i][j].Grafting[l] + ":"; ret += " "; } ret +="[/td][td]"; ret += "[color=tomato](" + items.Consumables[i][j].CCount + "/" + items.Consumables[i][j].Count * items.Consumables[i][j].MaxCCount + "/~" + Math.floor(items.Consumables[i][j].CCount / items.Consumables[i][j].Count) + ")[/color]"; ret +="[/td][/tr]" } } ret +="\r\n[/table]"; } } if (lastSize + ret.length > 65000) { totalRet += "\r\n\r\n====================================================================================================\r\n" + "\r\n[url=http://userscripts.org/scripts/show/93164][size=9]" + localVars.copyright + " v" + VER + "[/size][/url]"; totalRet += ret; lastSize = ret.length; } else { totalRet += ret; lastSize += ret.length; } } return totalRet; } //----------------------------------------------------------------------------- // "main" //----------------------------------------------------------------------------- try {Main();} catch(e) {alert("Main(): " + e);} })();