Light Rising AutoFuel

Adds an 'Add Fuel 10x' button to Light Rising Browser Game

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        Light Rising AutoFuel
// @namespace   http://userscripts.org/users/125692
// @description Adds an 'Add Fuel 10x' button to Light Rising Browser Game 
// @grant       GM_getValue
// @grant       GM_setValue
// @include     *lightrising.com*game.cgi
// @version     1.1
// ==/UserScript==
//this script adds a 10x add fuel button to light rising browser game.
//button appears only if player has enough sticks and ap. 
//currently requires at least 10 of each for button to appear.
//derived from Simons auto search script for SHARTAK browser game.
(function() {
//alert("ffs");

//console.log("AutoFuel Script up and running");
//FIRST SEE IF SCRIPT SHOULD BE RUN
var fuelbutton=document.evaluate( "//input[@value='Add Fuel']", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
if(!fuelbutton){
return;//stop if the fuelbuttons not there.
};
//console.log("Have Fuel button");


//THEN DO SCRIPT
//constants
var MAXNUMFUELS=10;


if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported")>-1)) {
	this.GM_getValue=function (key,def) {
		return localStorage[key] || def;
	};
	this.GM_setValue=function (key,value) {
		return localStorage[key]=value;
	};
	this.GM_deleteValue=function (key) {
		return delete localStorage[key];
	};
}

//variables
var resourcelvl=-1;//current pages resource lvl (assuming we have fuel results)
var fuelresult;//currentpages fuel result (assuming we have fuel results)
var arewefueling;//boolean are we?



//functions
function outputfuelresults(texttoadd){   
    //texttoadd='ddd';
    var gib=document.getElementsByClassName("gamebox infobox")[0];
    var fueltextelement=gib.getElementsByTagName('b')[0];
    var divwewant=gib.firstElementChild;
    var rawtext=GM_getValue('GMallfuelresults','');
    GM_setValue('GMallfuelresults','');
    //var rawtext='text\nline1\nline2\nline3\nline4';
    var arraytext=rawtext.split('\n');
    arraytext[0]=texttoadd;//this can be over written as its not a fuel result
    var textline= document.createElement("p")//where we will place the results
    for (i=0;i<arraytext.length;i++){//populating results
        textline.innerHTML=textline.innerHTML+arraytext[i]+'<br>';
    }
    divwewant.insertBefore(textline,fueltextelement.nextSibling );
}

function cleanupforexit(){
    GM_setValue('GMarewefueling',false);//not fueling
    GM_setValue('GMallfuelresults','');//clear old results
    GM_setValue('GMnumoffuelsleft',0);
    return 1
}

//SCRIPT START
	var numberoffuels=MAXNUMFUELS;//this is the actual number of refuel attempts
	
	//we have to store another GM value. number of attempts if we do this. too hard for now
	//get number of sticks we have.
	var ginvbox=document.getElementsByClassName("gamebox invbox")[0];
    //we are looking for      <div title="a sturdy wooden stick">
	var stickdiv=document.evaluate( "//div[@title='a sturdy wooden stick']", ginvbox, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
	if(!stickdiv){//no sticks. whats the point. abort!
		return;
	}
	//otherwise we set number of time to repeat to min of 10 or number of sticks.(unless one stick
	var numofsticks=Number(stickdiv.textContent.match(/(\d+)/)[1]);
	/*if (numofsticks==1){
		return;
	}
	else{
		numberoffuels=Math.min(numofsticks,MAXNUMFUELS);
	}*/
	
//setupthebutton
    //grab ap as we make the button invisible if not enough ap to do whole fuel
    var gsb=document.getElementsByClassName("gamebox statsbox")[0];
    var fueltextelement=gsb.getElementsByTagName('b');
    var aptext=fueltextelement[1];//second bold thing is ap.
    var test=aptext.innerHTML.match(/(\d+)[^0-9]*(\d+)/) // extract the first 2 numbers
    var availableap=Number(test[1]);
//console.log("running ap=",availableap);  
	//make new autofuel button by cloning fuel button 
    fuel10buttonform=fuelbutton.parentNode.cloneNode(true);//make a new copy of the fuel button
    fuelbutton.parentNode.parentNode.insertBefore(fuel10buttonform,fuelbutton.parentNode.nextSibling);
    fuel10button=fuel10buttonform.firstElementChild;
    fuel10button.setAttribute("value", "Add Fuel "+numberoffuels+ "x");
    if (numberoffuels>availableap||numberoffuels>numofsticks){//we don't have enough ap or sticks so hide button
		fuel10button.style.display='none';
    }
    fuel10buttonform.id="AutoFuelForm";//id so we can easy find it later
    fuel10button.addEventListener("click", function(event) {GM_setValue('GMarewefueling',true);
                    GM_setValue('GMnumoffuelsleft',numberoffuels);},true);

//console.log("button set up");
	var arewefueling=GM_getValue('GMarewefueling',false);
//console.log("are we fueling=",arewefueling);

if(arewefueling){
//console.log("fueling");
    //well then there aught to be results to gather.
    var gib=document.getElementsByClassName("gamebox infobox")[0];
    var fueltextelement=gib.getElementsByTagName('b');
	if (fueltextelement.length>0){//foundsomething
//console.log("found fuel text");  
		var fueltext=fueltextelement[0].innerHTML;
        var foundtext=fueltext.match(/([^.]+.)/);//finds the first sentence
//console.log("found fuel text:",foundtext[1]);
        if (GM_getValue("GMallfuelresults",false)) {
            GM_setValue("GMallfuelresults", GM_getValue("GMallfuelresults","GM_getValue Error") + 
					"\n" + foundtext[1]);
        } 
        else{
            GM_setValue("GMallfuelresults", "\n" + foundtext[1]);
        }
//console.log("attempted to store fuel results");		
		var numoffuelsleft=Number(GM_getValue('GMnumoffuelsleft',0));//so we only get it once
		var outstring="";
		var fueled=(numberoffuels-numoffuelsleft+1);
//console.log("testing reasons to stop. numoffuelsleft=",numoffuelsleft);
        if (gib.innerHTML.match(/too hot to approach/)){//stop fueling as too hot
 //console.log("too hot");           
			if (fueled==1){//we tried to add fuel but it was too hot on the first attempt
				outstring="You tried to add a lot of fuel but couldn't even begin as the fire is too hot.";
			}
			else{
			outstring="You added fuel " + ((fueled-1)==1?'once':(fueled-1)+' times') + " before stopping as the fire became too hot.";
            }//outstring=outstring.replace(/1 times/,'once');
            outputfuelresults(outstring);
            return cleanupforexit();//quit script
        }
		else if (numoffuelsleft==1){//time to stop on 1 because fuel then reduce counter
 //console.log("done full ammount");   
			//alert("2");
            outputfuelresults("You added fuel " + (numberoffuels-numoffuelsleft+1) + " times.");       
            return cleanupforexit();//quit script
        }
		else if (gib.innerHTML.match(/have any sticks/)){
            //alert("3");
 //console.log("out of sticks");   			
            outputfuelresults("You added fuel " + (fueled==1?'once':fueled+' times') + " before stopping as you have run out of fuel.");        
            return cleanupforexit();//quit script        
        }
		else{//we should fuel again!
 //console.log("TRY REFUELING"); 		
            GM_setValue('GMnumoffuelsleft',numoffuelsleft-1)//decrement fuelcounter
            document.getElementById('AutoFuelForm').submit();//fuel
        }
   
	}
}

//console.log("at the end");
//EOF
})();