您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在市集和拍卖页面显示物品出售给NPC的价格,大致的利润等信息。
// ==UserScript== // @name WoD N价显示 // @icon http://info.world-of-dungeons.org/wod/css/WOD.gif // @namespace WOD_Tools // @description 在市集和拍卖页面显示物品出售给NPC的价格,大致的利润等信息。 // @author Christophero // @include http*://*.world-of-dungeons.org/wod/spiel/trade/trade.php* // @license MIT License // @require https://code.jquery.com/jquery-3.3.1.min.js // @connect www.christophero.xyz // @modifier Christophero // @version 2022.08.21.1 // ==/UserScript== (function () { "use strict"; if (!String.prototype.hasOwnProperty("replaceAll")) { String.prototype.replaceAll = function (s1, s2) { return this.replace(new RegExp(s1, "gm"), s2); }; } const ifAuction = $('div.box_container>h1:contains("拍卖")').length; const $searchBtn = $('a:contains("开始搜索")'); const $fetchNpcPriceBtn = $( '<button type="button" class="button">获取最新N价</button>' ); // 拉取最新N价 $fetchNpcPriceBtn.click(() => { fetch("https://www.christophero.xyz/wod/item/fetchAllNpcPrice", { method: "POST", headers: { "User-Agent": "Apipost client Runtime/+https://www.apipost.cn/", "Content-Type": "application/json", }, }) .then((response) => { return response.json(); }) .then((res) => { if (!(res && res.code === 200)) { alert("获取最新N价时出现问题"); return; } const allItems = res.data; const priceMap = allItems .map((item) => { return { name: item.name, npcPrice: item.npcPrice }; }) .reduce((map, item) => { map[item.name] = item.npcPrice; return map; }, new Object()); localStorage.setItem("priceMap", JSON.stringify(priceMap)); alert("已获取最新N价"); }); }); $searchBtn.after($fetchNpcPriceBtn); // 插入最新N价列 const $trs = $("table.content_table>tbody>tr"); let map = localStorage.getItem("priceMap"); if (!map || !$trs.length) return; map = JSON.parse(map); $("table.content_table>thead>tr.header>th:eq(3)").after( $('<th class="">N价</th><th class="">利润</th>') ); $("table.content_table>tfoot>tr.header>th:eq(3)").after( $('<th class="">N价</th><th class="">利润</th>') ); $trs.each(function (i, tr) { const itemName = $(tr).find("td:eq(1) a").text(); const $td = $(tr).find("td:eq(3)"); if (!map.hasOwnProperty(itemName)) { $td.after( $( '<td align="right" nowrap="">-</td><td align="right" nowrap="">-</td>' ) ); return; } let npcPrice = map[itemName] || 0; const numStr = $(tr) .find("td:eq(1)") .text() .trim() .replace(itemName, "") .trim(); if (numStr) { const numArr = numStr.replace(/^\(/, "").replace(/\)$/, "").split("/"); npcPrice = Math.round( (parseFloat(npcPrice) * parseFloat(numArr[0])) / parseFloat(numArr[1]) ); } let price = 0; if ($(tr).find("td:eq(3) input").length) { price = parseFloat($(tr).find("td:eq(3) input").val()); } else { price = parseFloat( $(tr) .find("td:eq(3)") .text() .replace(/^.+\n/, "") .replace(/无人出价$/, "") .replace(/来自.+$/, "") .replaceAll(",", "") || 0 ); } let diff = Math.floor((1 - 0.1) * price - npcPrice - (ifAuction ? 50 : 10)); let rate = Math.round((diff * 100) / npcPrice); let $diffTd = $('<td align="right" nowrap="">-</td>'); let diffColor = "#FFFFFF"; if (diff > 50 && rate > 100) { diffColor = "#CC3333"; } else if (diff > 50 && rate > 50) { diffColor = "#FFCF00"; } else if (diff < 0) { diffColor = "#4dbb7c"; } $diffTd.css("color", diffColor); $diffTd.text(`${diff}(${rate}%)`); $td.after($diffTd); $td.after( $( '<td align="right" nowrap="">' + npcPrice + '<img alt="" src="/wod/css//skins/skin-4/images/icons/lang/cn/gold.gif" title="金币" border="0"></td>' ) ); }); })();