Nexus Clash Improved Pet Status (B4)

Adds color to pet status pane based on remaining AP

当前为 2020-03-25 提交的版本,查看 最新版本

// ==UserScript==
// @name Nexus Clash Improved Pet Status (B4)
// @description Adds color to pet status pane based on remaining AP
// @namespace https://roadha.us
// @author haliphax
// @version 1.2
// @include https://www.nexusclash.com/modules.php?name=Game*
// @include https://nexusclash.com/modules.php?name=Game*
// ==/UserScript==

//------ constants ------

var AP_LOW = 60, // threshold for "low" AP (yellow)
  AP_VERY_LOW = 30; // threshold for "very low" AP (red)

//------ process ------

var i = 0;

// get pets table
var queryEls = document.querySelectorAll('b'),
  petTable = null;

for (i = 0; i < queryEls.length; i++) {
  var e = queryEls[i];

  if (e.innerHTML == 'ACTIVE PETS') {
    petTable = e.parentNode.parentNode.parentNode;
    break;
  }
}

// no pets; bail
if (petTable === null) {
  return;
}

// add Decay column header
var petHeader = document.createElement('td');

petHeader.innerText = 'Decay';
petTable.querySelector('tr:nth-child(2)').appendChild(petHeader);

// loop through pets and handle any status events
var now = new Date(),
  lastTick = new Date(now - Math.round(now % (60 * 15 * 1000))),
  petRows = petTable.querySelectorAll('tr:nth-child(n+3)');

for (i = 0; i < petRows.length; i++) {
  var el = petRows[i],
    cols = Array.prototype.slice.call(el.querySelectorAll('td:nth-child(n+3)'), 0, 3);

  // not a pet row ("Set all pets..."); skip
  if (cols.length !== 3) {
    continue;
  }

  var p = {
    ap: Math.round(cols[0].innerText),
    mp: Math.round(cols[1].innerText),
    hp: Math.round(cols[2].innerText)
  };

  // AP check
  if (p.ap <= AP_VERY_LOW) {
    el.style = 'color:white;background-color:red';
  }
  else if (p.ap <= AP_LOW) {
    el.style = 'background-color:yellow';
  }

  // show decay time
  var decay = document.createElement('td'),
    decayTime = new Date(lastTick),
    decayTimeStr = null;

  decayTime.setMinutes(decayTime.getMinutes() + (p.ap * 15));
  decayTimeStr = decayTime.toUTCString();
  decay.innerText = /(\d+:\d+):\d/.exec(decayTimeStr)[1];
  decay.setAttribute('title', '0 AP at ' + decayTimeStr);
  el.appendChild(decay);
}