Nexus Clash Improved Pet Status (B4)

Adds color to pet status pane based on remaining AP

目前為 2020-04-14 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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.3
// @include https://www.nexusclash.com/modules.php?name=Game*
// @include https://nexusclash.com/modules.php?name=Game*
// ==/UserScript==

(function(){
	'use strict';

	// constants
	var LOW_MP = 20;

	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 <= p.mp /* when AP is less than or equal to MP, pet will expire if it uses all of its attacks */
			|| p.mp <= LOW_MP /* low MP is a red flag */)
		{
			el.style = 'color:white;background-color:red';
		}
		else if (p.ap <= p.mp * 2) {
			// when AP is less than or equal to double pet MP, pet will not be able to travel far and still attack */
			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);
	}
}());