Estiah - Scriptlets

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" />&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

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