您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
面向团商,康叔对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); } })();