您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
FindCard, Show Bounty, Hide charm and Hide rates in one script
/* This is a collection of small scripts for Estiah (http://www.estiah.com) - Filter (search) charms on the gears page - Show bounty on players on the pvp pages - Hide charms of which you already have 5 (in shops, auction, guild showcase) - Hide extra text on dungeon pages - Hide exchange rates on the market page Code by: - WL (http://wl.attrib.org/estiah/allinone) - HideCharms - Walbur (https://userscripts-mirror.org/scripts/show/68502) - FindCard - Gitface (https://userscripts-mirror.org/scripts/show/69552) - ShowBounty - Ant - HideText */ // ==UserScript== // @name Estiah - Scriptlets // @description FindCard, Show Bounty, Hide charm and Hide rates in one script // @include https://www.estiah.com/* // @version 110826 // @namespace https://greasyfork.org/users/878935 // ==/UserScript== //////////////////////////////////////////////////////////////////////// // SETTINGS //////////////////////////////////////////////////////////////////////// // // Turn modules on/off // Find_Cards = 1; // Filter (search) charms on the gears page Show_Bounty = 1; // Show bounty on players on the pvp pages Hide_Charms = 1; // Hide charms of which you have 5 (in shops, auction, guild showcase) Hide_Dungeon_Text = 1; // Hide extra text on dungeon pages Hide_Market_Rates = 1; // Hide exchange rates on the market page //////////////////////////////////////////////////////////////////////// // FUNCTIONS & VARIABLES //////////////////////////////////////////////////////////////////////// // // function for HideText // function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } // // functions for ShowBounty // function getBountyAmount(userid) { var e = document.evaluate("//div[@id='SystemInfoCharacter" + userid + "']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); if (! e) return 0; var thehtml = e.singleNodeValue.innerHTML.replace(/\n/g, ''); if (thehtml.indexOf("WANTED") >= 0) { return parseInt(thehtml.replace(/.*WANTED\!\s*(\d+)g.*/,'$1')); } return 0; } function addBountyToMobList() { var mobnodes = document.getElementsByClassName("mob opacity outline BV_system_highlight"); for (var i = 0; i < mobnodes.length; i++) { var thehtml = mobnodes[i].innerHTML.replace(/\n/g, ''); var charid = thehtml.replace(/.*character\/(\d+).*/,'$1'); bounty = getBountyAmount(charid); if (bounty) { var classdiv = mobnodes[i].getElementsByClassName("name"); if (classdiv.length != 1) continue; var text = document.createElement("text"); text.className = "pow"; // red text.style.fontSize = "smaller"; text.innerHTML = bounty + "g"; classdiv[0].appendChild(text); } } } function ShowBounty() { // cache a pointer to the original VsList.change function var origVsListChangeFunction = unsafeWindow.VsList.change; var delay = 100; // milliseconds // create my new VsList.change function var myVsListChangeFunction = function() { // call the original change function then do my stuff origVsListChangeFunction(); // Wait for moblist to get cleared and says 'loading' // Then call the next function after that happens setTimeout(myVsListChangeFunctionMid, delay) }; // second part of my new VsList.change function var myVsListChangeFunctionMid = function() { // poll the VsMoblist to see if it still says "loading..." var thediv = document.getElementById("VsMobList"); if (thediv.innerHTML.indexOf("loading...") >= 0) { setTimeout(myVsListChangeFunctionMid, delay); return; } // give a delay to finish update of moblist setTimeout(myVsListChangeFunctionEnd, delay); } // last part of my new VsList.change function var myVsListChangeFunctionEnd = function() { // VsMoblist has updated - add my stuff to the mob list addBountyToMobList(); } // overwrite existing VsList.change to point to mine unsafeWindow.VsList.change = myVsListChangeFunction; addBountyToMobList(); } // // functions for FindCard // var match; function updateCards() { var userinput = document.getElementById('findcharm_userinput').value; var property = document.getElementById('findcharm_property').selectedIndex; var gt = document.getElementById('findcharm_gt').checked; var lt = document.getElementById('findcharm_lt').checked; var eq = document.getElementById('findcharm_eq').checked; var compval = parseInt(document.getElementById('findcharm_compval').value); var op; if (gt == 1) { op = 0; } else if (lt == 1) { op = 1; } else if (eq == 1) { op = 2; } var cardFWs = document.getElementsByClassName('common_file floating opacity bd1'); // floating windows for (var i = 0; i < cardFWs.length; i++) { var cardFW = cardFWs[i]; var card = document.getElementById('CollectionCard' + cardFW.id.substring(14)) if (card != null) { var properties = new Array(); var title1 = cardFW.getElementsByClassName('title ccraft'); var title2 = cardFW.getElementsByClassName('title ctreasure'); var title3 = cardFW.getElementsByClassName('title crare'); var title4 = cardFW.getElementsByClassName('title cclass'); var title5 = cardFW.getElementsByClassName('title cvendor'); var title6 = cardFW.getElementsByClassName('title cepic'); properties[0] = cardFW.getElementsByClassName('melee'); properties[1] = cardFW.getElementsByClassName('magic'); properties[2] = cardFW.getElementsByClassName('spirit'); properties[3] = cardFW.getElementsByClassName('armor'); properties[4] = cardFW.getElementsByClassName('ward'); properties[5] = cardFW.getElementsByClassName('willpower'); var special = cardFW.getElementsByClassName('special'); var desc = cardFW.getElementsByClassName('description'); match = 0; testString(title1, userinput); testString(title2, userinput); testString(title3, userinput); testString(title4, userinput); testString(title5, userinput); testString(title6, userinput); testString(desc, userinput); if (property != 0 && match == 1) { if (property <= 6) { if (properties[property - 1] == null || properties[property - 1].length == 0) { match = 0; } else { testCompare(properties[property - 1], op, compval); } } if (property == 7) // % pierce match = match & testValue(desc, /([0-9]+)% P\)/, op, compval); } if (!match) { card.style.display = 'none'; } else { card.style.display = ''; } } } } function testValue(desc, pat, op, thresh) { var res = desc[0].innerHTML.match(pat); var prop = parseInt(res); if (res == null || prop == -1 || prop == null) return 0; if (op == 0 && prop < thresh && prop >= 0) return 0; if (op == 1 && prop > thresh && prop >= 0) return 0; if (op == 2 && prop != thresh && prop >= 0) return 0; GM_log(res); return 1; } function testString(toTest, pattern) { patternLC = pattern.toLowerCase(); pats = patternLC.split(" "); for (var p = 0; p < toTest.length; p ++) { toTestLC = toTest[p].innerHTML.toLowerCase(); var miss = 0; for (var i = 0; i < pats.length; i ++) { var end = toTestLC.indexOf(pats[i]); if (end < 0) { miss = 1; } } if (miss == 0) { match = 1; } } } function testCompare(str, op, compval) { var prop = -1; var end = str[0].innerHTML.indexOf('</strong>'); if (end > -1) { var findStart = end - 12; if (findStart < 0) findStart = 0; var start = str[0].innerHTML.indexOf('<strong>', findStart); if (start > -1) { prop = parseInt(str[0].innerHTML.substring(start + 8, end)); } } if (prop == -1) match = 0; if (op == 0 && prop < compval && prop >= 0) match = 0; if (op == 1 && prop > compval && prop >= 0) match = 0; if (op == 2 && prop != compval && prop >= 0) match = 0; } // // searchbox for FindCard // var OperationDiv = document.createElement("div"); OperationDiv.innerHTML = ` <div class="common_filter outline"> <div class="group_title lhp">Filter by</div> <div class="content"> <form id="PatternForm"> charm text: <input name="pat" value="" id="findcharm_userinput" size="30" /> <br> property: <select name="prop" class="select" id="findcharm_property"> <option label="none" value="none" selected="selected">none</option> <option label="melee" value="melee">melee</option> <option label="magic" value="magic">magic</option> <option label="spirit" value="spirit">spirit</option> <option label="armor" value="armor">armor</option> <option label="ward" value="ward">ward</option> <option label="willpower" value="willpower">willpower</option> <option label="% pierce" value="pierce">% pierce</option> </select> <label><input type="radio" name="cond" value="0" id="findcharm_gt" checked="checked" class="radio" />>=</label> <label><input type="radio" name="cond" value="1" id="findcharm_lt" class="radio" /><=</label> <label><input type="radio" name="cond" value="2" id="findcharm_eq" class="radio" />=</label> <input name="compval" value="0" id="findcharm_compval" size="5"/> </form> </div> </div>`; //////////////////////////////////////////////////////////////////////// // MODULES //////////////////////////////////////////////////////////////////////// // // Hide charms of which you already have 5 (in shops, auction, guild showcase) // // Code by WL (http://wl.attrib.org/estiah/allinone) // if (Hide_Charms) { if (top.document.title == "Craft - Estiah" || top.document.title == "Auction - Estiah" || top.document.title == "Showcase - Estiah") { var temp = document.evaluate('//div[substring-before(@class, " ")="card_lr" and div[substring-before(@class, " ")="count"]=5]/../..', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < temp.snapshotLength; i++) { temp.snapshotItem(i).parentNode.removeChild(temp.snapshotItem(i)); } } } // // Hide extra text on dungeon pages // if (Hide_Dungeon_Text) { if (top.document.title == "Dungeon - Estiah") { // addGlobalStyle(".section_text { display: none ! important}"); addGlobalStyle(".paragraph_text { display: none ! important }"); } } // // Hide exchange rates on the market page // if (Hide_Market_Rates) { if (top.document.title == "Market - Estiah") { addGlobalStyle(".paragraph_text { display: none ! important }"); addGlobalStyle(".ratelist { display: none ! important }"); } } // // Show bounty on players on the pvp pages // // Code by Gitface (https://userscripts-mirror.org/scripts/show/69552) // if (Show_Bounty) { if (top.document.title == "Player Versus Player - Estiah") { window.addEventListener('load', ShowBounty, false); } } // // Filter (search) charms on the gears page // // Code by Walbur (https://userscripts-mirror.org/scripts/show/68502) // if (Find_Cards) { if (top.document.title == "Gear - Estiah") { OperationDiv.id = "PatternDiv"; var cardlist = document.getElementsByClassName("common_filter"); // was "cardlist" cardlist[1].parentNode.insertBefore(OperationDiv, cardlist[1]); var input_desc = document.getElementById("findcharm_userinput"); input_desc.addEventListener("keyup",updateCards,false); var input_comp = document.getElementById("findcharm_compval"); input_comp.addEventListener("keyup",updateCards,false); var input_prop = document.getElementById("findcharm_property"); input_prop.addEventListener("change",updateCards,false); var input_gt = document.getElementById("findcharm_gt"); input_gt.addEventListener("click",updateCards,false); var input_lt = document.getElementById("findcharm_lt"); input_lt.addEventListener("click",updateCards,false); var input_eq = document.getElementById("findcharm_eq"); input_eq.addEventListener("click",updateCards,false); } } //////////////////////////////////////////////////////////////////////// // END OF FILE ////////////////////////////////////////////////////////////////////////