您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a next planet button for probes which launches fleet to next planet. For www.war-facts.com .
当前为
- // ==UserScript==
- // @name WF Explorer Next Planet Button
- // @namespace https://greasyfork.org/en/users/10321-nikitas
- // @description Adds a next planet button for probes which launches fleet to next planet. For www.war-facts.com .
- // @include http://*.war-facts.com/fleet.php*
- // @version 4
- // @grant none
- // ==/UserScript==
- //Configuration Options:
- //Change this if you do not want Auto Launch when Next Button is Pressed, or if you don't want to Auto Select Next Explorer
- unsafeWindow.AutoLaunch = true;
- unsafeWindow.AutoSelectNextExplorer = true;
- // Change this if you wish to exclude Fleets whose names contain the excludeString from being auto Selected as next explorer.
- unsafeWindow.useExcludeString = false;
- // Change this to what you would like to put into a fleet's name in order to exclude it from being auto selected.
- unsafeWindow.excludeString = "#NotAuto#";
- // Change this if you wish to auto Select Fleets as next explorer ONLY if their names contain the includeString.
- unsafeWindow.useIncludeString = false;
- // Change this to what you would like to put into a fleet's name in order to include it into being auto selected.
- unsafeWindow.includeString = "#Auto#";
- //Script
- $(window).load(function(){
- var classificationNode = document.getElementById('fleetClass');
- var isExplorer = document.evaluate("//text()[contains(.,'Explorer') or contains(.,'Sentry') or contains(.,'Probe Rush')]", classificationNode, null, XPathResult.BOOLEAN_TYPE, null).booleanValue;
- if (isExplorer){
- var info = document.getElementById('navData').getElementsByTagName('div')[4];
- var infoSpan = info.getElementsByTagName('span')[0];
- // not containing world in the span.
- var isAtSystemEntrance = ! (document.evaluate("//text()[contains(.,'World:')]", infoSpan, null, XPathResult.BOOLEAN_TYPE, null).booleanValue);
- //alert("Is explorer = " + isExplorer);
- //alert("Is at system Entrance = " + isAtSystemEntrance);
- var currentPlanet = info.getElementsByTagName('a')[0].innerHTML;
- //alert(currentPlanet);
- var optionGroup = document.getElementById('target1').getElementsByTagName('optgroup')[0].getElementsByTagName('option');
- var i = 0 , found = false, optionsLength = optionGroup.length;
- var nextPlanetOption, finishedSystem = false;
- //if I am at system entrance
- if (isAtSystemEntrance){
- found = true;
- nextPlanetOption = optionGroup[0].value;
- }
- //if PlanetLess system
- if (optionsLength == 0 ) {
- found = true;
- finishedSystem = true;
- }
- // If I am at a planet, Find next planet through the local target option list
- while ( (i < optionsLength) && (found == false) ) {
- if (optionGroup[i].innerHTML == currentPlanet ){
- found = true;
- if ( i == optionsLength -1 ){
- finishedSystem = true;
- } else {
- nextPlanetOption = optionGroup[i+1].value;
- }
- }
- i++;
- }
- // alert("finished system = " + finishedSystem);
- // alert("next planet = " + nextPlanetOption);
- // alert("Reached finished System");
- if (finishedSystem) {
- // alert("Inside finished System");
- document.getElementById('missionData').innerHTML += '<input class = "greenbutton darkbutton" type="button" id="nextPlanetButton" value = "Done" onclick="openStarMap()" />';
- document.getElementById('nextPlanetButton').addEventListener('click', openStarMap, false);
- } else {
- // alert("Inside NOT finished System");
- document.getElementById('missionData').innerHTML += '<input class = "greenbutton darkbutton" type="button" id="nextPlanetButton" value = "Next Planet" onclick="selectNextPlanet()" />';
- document.getElementById('nextPlanetButton').addEventListener('click', selectNextPlanet, false);
- }
- }
- function selectNextPlanet(){
- jQuery('#target1').val(nextPlanetOption).trigger ('change');
- if (unsafeWindow.AutoLaunch){
- unsafeWindow.hasLaunched = false;
- window.setTimeout(launchFleet,100);
- }
- }
- function openStarMap(){
- var starMapLink;
- if (isAtSystemEntrance){
- starMapLink = document.getElementById('navData').getElementsByTagName('div')[10].getElementsByTagName('a')[0].href;
- } else {
- starMapLink = document.getElementById('navData').getElementsByTagName('div')[11].getElementsByTagName('a')[0].href;
- }
- starMapLink = starMapLink.substring(19, starMapLink.length - 3 ); //Keep only the link, throw away the functions
- // mapWin is war-facts.com function to open javascript map
- mapWin(starMapLink);
- }
- function launchFleet(){
- var launchButton = document.getElementById('mButton').getElementsByTagName('input')[0];
- if (launchButton) { //So Button has been created
- getMission('launch'); //Launch Fleet
- unsafeWindow.hasLaunched = true;
- if (unsafeWindow.AutoSelectNextExplorer){
- var explorerList = document.getElementById('fc_Explorer').children;
- var index = 0;
- var explorerListLength = explorerList.length;
- while(index < explorerListLength){
- if (explorerList[index].children[0].style.color == "rgb(242, 242, 242)"){
- var link = explorerList[index].children[0].href;
- var name = explorerList[index].children[0].innerHTML;
- if ( ( ( ! unsafeWindow.useIncludeString) || ( name.indexOf( unsafeWindow.includeString ) > -1 ) ) //If not using include string or String is in name
- && ( ( ! unsafeWindow.useExcludeString) || ( name.indexOf( unsafeWindow.excludeString) == -1 ) ) //If not using exclude string or String is NOT in name
- )
- {
- if (link != window.location.href){ //Make sure we are not chosing ourselve as this fleet is still "white"
- index = explorerListLength; //To make sure if load doesn't happen immediately it stops running through fleet list
- window.open(link, "_self");
- }
- }
- }
- index++ ;
- }
- }
- } else {
- window.setTimeout(launchFleet,100);
- }
- }
- });
- /*---
- From https://gist.github.com/BrockA/2625891
- waitForKeyElements(): A utility function, for Greasemonkey scripts,
- that detects and handles AJAXed content.
- Usage example:
- waitForKeyElements (
- "div.comments"
- , commentCallbackFunction
- );
- //--- Page-specific function to do what we want when the node is found.
- function commentCallbackFunction (jNode) {
- jNode.text ("This comment changed by waitForKeyElements().");
- }
- IMPORTANT: This function requires your script to have loaded jQuery.
- */
- function waitForKeyElements (
- selectorTxt, /* Required: The jQuery selector string that
- specifies the desired element(s).
- */
- actionFunction, /* Required: The code to run when elements are
- found. It is passed a jNode to the matched
- element.
- */
- bWaitOnce, /* Optional: If false, will continue to scan for
- new elements even after the first match is
- found.
- */
- iframeSelector /* Optional: If set, identifies the iframe to
- search.
- */
- ) {
- var targetNodes, btargetsFound;
- if (typeof iframeSelector == "undefined")
- targetNodes = $(selectorTxt);
- else
- targetNodes = $(iframeSelector).contents ()
- .find (selectorTxt);
- if (targetNodes && targetNodes.length > 0) {
- btargetsFound = true;
- /*--- Found target node(s). Go through each and act if they
- are new.
- */
- targetNodes.each ( function () {
- var jThis = $(this);
- var alreadyFound = jThis.data ('alreadyFound') || false;
- if (!alreadyFound) {
- //--- Call the payload function.
- var cancelFound = actionFunction (jThis);
- if (cancelFound)
- btargetsFound = false;
- else
- jThis.data ('alreadyFound', true);
- }
- } );
- }
- else {
- btargetsFound = false;
- }
- //--- Get the timer-control variable for this selector.
- var controlObj = waitForKeyElements.controlObj || {};
- var controlKey = selectorTxt.replace (/[^\w]/g, "_");
- var timeControl = controlObj [controlKey];
- //--- Now set or clear the timer as appropriate.
- if (btargetsFound && bWaitOnce && timeControl) {
- //--- The only condition where we need to clear the timer.
- clearInterval (timeControl);
- delete controlObj [controlKey]
- }
- else {
- //--- Set a timer, if needed.
- if ( ! timeControl) {
- timeControl = setInterval ( function () {
- waitForKeyElements ( selectorTxt,
- actionFunction,
- bWaitOnce,
- iframeSelector
- );
- },
- 300
- );
- controlObj [controlKey] = timeControl;
- }
- }
- waitForKeyElements.controlObj = controlObj;
- }