Greasy Fork is available in English.

Estiah - Scriptlets

FindCard, Show Bounty, Hide charm and Hide rates in one script

当前为 2022-04-04 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

/*

 

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" />&gt=</label>&nbsp; 

    <label><input type="radio" name="cond" value="1" id="findcharm_lt" class="radio" />&lt=</label>&nbsp; 

    <label><input type="radio" name="cond" value="2" id="findcharm_eq" class="radio" />=</label>&nbsp; 

    <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

////////////////////////////////////////////////////////////////////////