NeoQuest II Trainer

Automatically battles and moves left and right for you.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name           NeoQuest II Trainer
// @namespace      http://nq2guy.tz/
// @description    Automatically battles and moves left and right for you.
// @grant          GM_log
// @grant          GM_addStyle
// @grant          GM_getValue
// @grant          GM_setValue
// @grant          GM_openInTab
// @grant          GM_deleteValue
// @grant          GM_xmlhttpRequest
// @grant          GM_getResourceText
// @include        http://www.neopets.com/games/nq2/nq2.phtml*
// @version 0.0.1.20151225125032
// ==/UserScript==

//script licensed under, GNU GPL V3 , see http://www.gnu.org/licenses/gpl.txt for details
//uncomment these lines to initialize variables

//Check for annoying server hiccup before bothering to make any more variables
var i = 0;
var hiccup=1;
var divs = document.getElementsByTagName('div');
for(i=0;i<divs.length;i++)
{
	if(divs[i].className=="contentModuleHeader")
	{
		hiccup=0;
	}
}

if(hiccup)
{
	document.location.href="http://www.neopets.com/games/nq2/nq2.phtml";
}
else
{
//begin real battling!!
var useid=-1; // use special item??
var nxactor=1; // who fightsS??' default =1: rohane
var fact=3; // default is attack , will override for low health
var hitTarget = GM_getValue("hitTarget",5); //hittargets 1-4 are reserved for allies
var healingItem = GM_getValue("healingItem",30011); // get the healing item in case HP turns red or yellow
var isHasted = GM_getValue("isHasted",false);
var j=0; // used for looping to find out whose turn is it
var elements = document.getElementsByTagName('img');
for(i=0;i<elements.length;i++)
{
	switch(elements[i].src)
	{
	case "http://images.neopets.com/nq2/x/com_begin.gif":
		GM_setValue("hitTarget",5);
		GM_setValue("isHasted",false);
		document.location.href="http://www.neopets.com/games/nq2/nq2.phtml?start=1";
		break;
	case "http://images.neopets.com/nq2/x/com_atk.gif":
		var texts = document.getElementsByTagName("font");
		var doMultipleTargets = 0;
		for(j=0;j<texts.length;j++)
		{
			//check to increment target
			if(((texts[j].innerHTML.search(/for it has already been defeated!/)) != -1) || (texts[j].innerHTML=="You must select a valid target to cast on!<BR>"))
			{
				hitTarget++;
				if(hitTarget>=9)
				{
				GM_setValue("hitTarget",5);
				}
				else
				{
				GM_setValue("hitTarget",hitTarget);
				}
			}
			//check character's status
			switch(texts[j].innerHTML)
			{
			case "<b>Rohane</b>":
				if((texts[j+1].color=="#d0d000") || (texts[j+1].color=="red"))
				{
					fact=5;
					useid = healingItem;
				}
				break;
			case "<b>Mipsy</b>":
				nxactor=2;
				fact=9201; //use direct damage
				if(!isHasted)
				{
					fact=9203;
					GM_setValue("isHasted",true);
				}
				if((texts[j+1].color=="#d0d000") || (texts[j+1].color=="red"))
				{
					fact=5;
					useid = healingItem;
				}
				break;
			case "<b>Talinia</b>":
				var multipleTargets = /Multiple Targets/;
				var k=0;
				var links = document.getElementsByTagName('a');
				for(k=0;k<links.length;k++)
				{
					if((links[k].innerHTML.search(multipleTargets)) != -1)
					{	
						fact = 9302;
					}
				}
				nxactor=3;
				if((texts[j+1].color=="#d0d000") || (texts[j+1].color=="red"))
				{
					fact=5;
					useid = healingItem;
				}
				break;
			case "<b>Velm</b>":
				var l=0; // loops to see if velm is wasting his time healing
				var fullhp = 0; //if its 4 then all 4 people are fully healed
				var allies = false;
				//loop through all pictures if it's velm's turn
				for(l=0;l<elements.length;l++)
				{
					//makes sure the script isn't checking enemies hp
					if(elements[l].src=="http://images.neopets.com/nq2/x/donothing.gif")
					{
						allies = true;
					}
					//if checking allies HP
					if(allies)
					{
						//is the picture a health bar?
						if(elements[l].src=="http://images.neopets.com/nq2/x/exp_green.gif")
						{
							if(elements[l].width == 45) //45 is full health
							{
								fullhp++;
							}
						}
					}
				}
				nxactor=4;
				fact=9402; // velm heals, trust me you will need this
				if(fullhp == 4)
				{
					fact = GM_getValue("VelmAction",9403);
				}
				if((texts[j+1].color=="#d0d000") || (texts[j+1].color=="red"))
				{
					fact=5;
					useid = healingItem;
				}

				break;
				
			}
		}
		document.location.href="http://www.neopets.com/games/nq2/nq2.phtml?&fact=" + fact + "&target=" + hitTarget + "&use_id=" + useid + "&nxactor=" + nxactor;
		break;
	case "http://images.neopets.com/nq2/x/com_next.gif":
		document.location.href="javascript:setaction(1); document.ff.submit();";
		break;
	case "http://images.neopets.com/nq2/x/com_end.gif":
		document.location.href="javascript:setaction(2); document.ff.submit();";
		break;
	case "http://images.neopets.com/nq2/x/tomap.gif":
		GM_setValue("hitTarget",5);
		GM_setValue("isHasted",false);
		document.location.href="http://www.neopets.com/games/nq2/nq2.phtml?finish=1";
		break;
	case "http://images.neopets.com/nq2/x/nav.gif":
		if(GM_getValue("goLeft"))
		{
			document.location.href="javascript:dosub(3)";
			GM_setValue("goLeft",false);
		}
		else	
		{
			document.location.href="javascript:dosub(4)";
			GM_setValue("goLeft",true);
		}
		break;
	}

}
}
window.setTimeout(function() { document.location.href="http://www.neopets.com/games/nq2/nq2.phtml" }, 10000);