您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Put "Mission Commands" in the fleet notes.
// ==UserScript== // @name Mission Queue // @namespace http://bitbucket/odahviing // @description Put "Mission Commands" in the fleet notes. // @include http://*.war-facts.com/fleet.php* // @grant GM_xmlhttpRequest // @version 2.0 // ==/UserScript== // Version 1.0, 1.1, 1.2 - Carabas Amazing Script // Version 2.0 - Cohenman - Basic support in the new user interface, many bugs still /* To create a mission, start with the MISSION tags in the fleet notes. <MISSION step=1> </MISSION> They must both be on seperate lines. The mission tags are there to a) let you have other notes b) give a place for the script to save the current "step". The step=# is the current "step" of the mission queue. There are two ways to manually set the step. The first, obviously, is to edit the <MISSION> tag and press the "Take note!" button. The second, is to enter step:# into the current mission text box and press the button. There are two mission types. They are "mission" and "trade". Basic syntax: mission:[[restart]transfer|explore|colonize|jump];[planet|system|global|local]:[planetid|systemid|globalcoords|localcoords] trade:[buy|sell|buyall|sellall|refuel];outpost:outpostid;ship:shipid[;resource:amount[;resource:amount]etc] trade:buyall, trade:sellall and trade:refuel do not require the resource:amount. outpost and ship are always require for resource trades, however only outpost is required for the refuel command. The resource:all syntax is also supported. ex: trade:sell;outpost:123;ship:122456;oil:all;iron:50000;gold:all Please pay extra attention to the syntax. Each command is made up of several field:value pairs. Each part of the pair is seperated by a colon. Each pair is seperated by a semi-colon. Here are some examples: Basic trade mission: <MISSION step=1> mission:transfer;planet:12234 trade:buyall;outpost:123;ship:293458 mission:transfer;planet:12322 trade:sellall;outpost:123;ship:293458 mission:restart </MISSION> Colonize mission passing through a wormhole, refueling at a warpnet, and colonizing a planet: <MISSION step=1> mission:transfer;planet:12345 mission:transfer;planet:12346 mission:transfer;planet:12347 mission:jump;local:85,-20,6 mission:transfer;global:12234,-32468,560 trade:refuel;outpost:123 mission:colonize;planet:12348 </MISSION> */ var fleetid = window.location.href.match(/fleet=(\d+)/); if (fleetid) fleetid = fleetid[1]; else return; var notes = document.getElementById('fleetNoteContent'); var url = 'http://' + window.location.hostname + '/fleet.php?fleet=' + fleetid; var missions = []; var currentMission = 0; function parseNote() { let allLines = notes.innerHTML.split('\n'); if (allLines[0].indexOf('<MISSION') != 0) return undefined; for (let i = 1; i < allLines.length -1; i++) { missions.push({ topic: allLines[i].split(';')[0].split(':')[0], type: allLines[i].split(';')[0].split(':')[1], details: allLines[i].split(';')[1].split(':') }); } let getNum = allLines[0].substring(allLines[0].indexOf('step')+5, allLines[0].indexOf('>')); currentMission = parseInt(getNum); return true; } function doMission() { let Mission = missions[currentMission]; if (Mission == undefined) { console.log('No Mission'); return; } console.log('Topic:' + Mission.topic); if (Mission.topic == 'mission') { let action = Mission.details[0]; document.getElementById('objective').value = Mission.type; console.log('action:' + action); switch (action) { case 'planet': runExploreMission(Mission.details[1]); break; case 'system': runMissionbyUrl(Mission.type, '&tsystem=' + Mission.details[1]); break; case 'global': break; case 'local': break; } // updateMissionFinish(); } } function updateMissionFinish() { currentMission++; var newNotes = notes.value.replace(/step=\d+/, 'step=' + currentMission); updateNoteServer(newNotes); } function updateNoteServer(textNotes) { var url = 'http://' + window.location.hostname + '/notemanager.php'; var pars = 'type=fleet&id=' + fleetid + '¬e=' + encodeURIComponent(textNotes); GM_xmlhttpRequest({ method : 'POST', url : url, headers : { 'User-agent' : 'Mozilla/4.0 (compatible) Greasemonkey', 'Accept' : 'application/atom+xml,application/xml,text/xml,text/html', 'Content-Type' : 'application/x-www-form-urlencoded' }, data : pars, onload : function () { notes.value = textNotes } }); } function runExploreMission(wantedPlanet) { let optionsElements = document.getElementById('target1') optionsElements.value='tworld,' + wantedPlanet; getMission("verify", "target1") setTimeout(getMission('launch'),200); } function loadButtons() { let newButton = document.createElement('input'); newButton.type = 'button' newButton.style = 'width: 130px;' newButton.className = 'darkbutton dangerbutton'; newButton.addEventListener("click", doMission); document.getElementsByClassName('iBlock tbborder padding5 fullwidth light')[0].insertBefore(newButton, null); } function runMissionbyUrl(type, Url) { window.location = url + Url; document.getElementById('objective').value = type; } function updateMissionStatus() { var missions = mission_notes[2].split("\n"); mnum = mnum != undefined ? mnum : mission_notes[1]; mnum = (missions[mnum] && missions[mnum].indexOf('restart') == 8) ? 0 : mnum; var current_mission = missions[mnum] ? missions[mnum] : 'done'; if (current_mission.indexOf('done') == 0) { b.value = "Restart"; } else if (current_mission.indexOf('mission') == 0) { b.value = "Launch"; } else if (current_mission.indexOf('trade') == 0) { b.value = "Trade"; } t.value = current_mission; } function missionDo(mission) { // Do Mission stuff var type; var subtype; var marray = mission.split(';'); for (var i = 0, len = marray.length; i < len; i++) { console.log(marray); var m = marray[i].split(':'); // Step if (m[0] == 'step') { mnum = m[1] - 1; saveMission(mnum); updateMission(); return; } // Done if (m[0] == 'done') { mnum = 0; updateMission(); return; } // Mission if (type == 'mission') { switch (m[0]) { case 'planet': runPlanetMission(m[1]); //url += '&tworld2=' + m[1]; break; case 'system': url += '&tsystem=' + m[1]; runMissionbyUrl(url); break; case 'colony': url += '&tcolony2=' + m[1]; runMissionbyUrl(url); break; case 'global': url += '&tpos=global&rawcoords=' + encodeURIComponent(m[1]); break; case 'local': url += '&tpos=local&rawcoords=' + encodeURIComponent(m[1]); break; default: break; } } if (m[0] == 'mission') { url += 'fleet_navigation.php?fleet=' + fleetid; switch (m[1]) { case 'transfer': case 'explore': case 'transport': case 'colonize': case 'jump': break; default: m[1] = 'transfer'; } url += '&verify=1&mtype=' + m[1]; type = 'mission'; } // Trade if (m[0] == 'trade') { var outpost; var colony; var ship; switch (m[1]) { case 'refuel': type = 'refuel'; case 'buy': case 'buyall': case 'sell': case 'sellall': break; default: s.value = "Syntax Error!"; return; } subtype = m[1]; } if ((outpost && ship) || colony) { type = 'trade'; } if (type != 'trade') { switch (m[0]) { case 'outpost': outpost = m[1]; url += 'outposttrade.php?fleet=' + fleetid + '&outpost=' + m[1]; outpost = 1; if (type == 'refuel') { execMission('trade', url + '&refuel=1'); return; } break; case 'ship': ship = m[1]; /*url += '&shipselect='+m[1]; ship=1;*/ break; case 'colony': colony = m[1]; break; } } if (((outpost && ship) || colony) && subtype && subtype != 'load' && subtype != 'unload') { if (outpost) { url += 'outposttrade.php?fleet=' + fleetid + '&outpost=' + outpost + '&shipselect=' + ship; } else if (colony) { url += 'cargo_fleet.php?posted=1&fleet=' + fleetid + '&colony=' + colony; } if (mission.indexOf('all') != -1 || mission.indexOf('%') != -1) { getResources(subtype, url, mission); return; } switch (subtype) { case 'refuel': break; case 'sell': subtype = 'unload'; break; case 'buy': subtype = 'load'; break; //case 'sellall': getResources('sell',url,mission);return; //case 'buyall': getResources('buy',url,mission);return; default: s.value = 'Syntax Error!'; return; } } if (type == 'trade') { if (subtype == 'load' || subtype == 'unload') { switch (m[0]) { case 'iron': case 'copper': case 'silver': case 'titanium': case 'gold': case 'uranium': case 'platinum': case 'diamonds': case 'oil': case 'water': case 'food': break; default: s.value = 'Syntax Error!'; return; } // Grab trade URL in the background. if (outpost) { execMission(type, url + '&cargo_type=' + m[0] + '&lu' + m[0] + '=' + subtype + '&' + m[0] + '=' + m[1]); } else if (colony) { url += '&lu' + m[0] + '=' + subtype + '&' + m[0] + '=' + m[1]; } } } } // Mission Stuff // Go to mission URL // execMission(type, url); } function main() { if (document.evaluate("//b[text()='In Transit']", document, null, XPathResult.BOOLEAN_TYPE, null).booleanValue) { return; } hasNotes = parseNote(); if (hasNotes == undefined) { console.log('No Mission Log') return; } setTimeout(loadButtons, 50); return; //var note_submit = notes.parentNode.getElementsByTagName('input')[2]; var t; var b; var s; var p; var form2; var gets = 0; var restypes = new Array('iron', 'copper', 'silver', 'titanium', 'gold', 'uranium', 'platinum', 'diamonds', 'oil', 'water', 'food'); var mission_notes = notes.value.match(/<MISSION step=(\d+)>\n([\s\S]+?)\n<\/MISSION>/); //console.log(mission_notes); if (mission_notes) { t = document.createElement('input'); b = document.createElement('input'); s = document.createElement('input'); t.setAttribute('class', 'text'); t.setAttribute('type', 'text'); t.setAttribute('id', 'missionbox'); t.setAttribute('size', '50'); b.setAttribute('class', 'warn'); b.setAttribute('type', 'button'); b.setAttribute('id', 'missiondo'); b.setAttribute('onclick', 'missionDo(document.getElementById("missionbox").value)'); s.setAttribute('class', 'text'); s.setAttribute('type', 'text'); s.setAttribute('id', 'statusbox'); s.setAttribute('size', '60'); s.disabled = true; var fleetFrame = document.getElementById('fleetNote'); form2 = fleetFrame.getElementsByClassName('highlight fullwidth padding5')[0]; p = document.createElement('p'); p.appendChild(t); p.appendChild(b); p.appendChild(document.createElement('br')); p.appendChild(s); form2.appendChild(p); updateMissionStatus(); } exportFunction(missionDo, unsafeWindow, {defineAs: "missionDo"}); window.saveMission = wrap(function (mnum) { mnum++; //s.value += 'Saving Mission... '; var new_notes = notes.value.replace(/step=\d+/, 'step=' + mnum); var url = 'http://' + window.location.hostname + '/notemanager.php'; var pars = 'type=fleet&id=' + fleetid + '¬e=' + encodeURIComponent(new_notes); GM_xmlhttpRequest({ method : 'POST', url : url, headers : { 'User-agent' : 'Mozilla/4.0 (compatible) Greasemonkey', 'Accept' : 'application/atom+xml,application/xml,text/xml,text/html', 'Content-Type' : 'application/x-www-form-urlencoded' }, data : pars, onload : function () { notes.value = new_notes } }); }); window.execMission = wrap(function (type, url) { if (type == 'mission') { mnum++; saveMission(mnum); /*updateMission();*/ s.value = 'Launching...'; window.location = url; } else if (type == 'trade') { pars = url.split('?')[1]; url = url.split('?')[0]; gets++; s.value = 'Background Processes: ' + gets; GM_xmlhttpRequest({ method : 'POST', url : url, data : pars, headers : { 'User-agent' : 'Mozilla/4.0 (compatible) Greasemonkey', 'Accept' : 'application/atom+xml,application/xml,text/xml,text/html', 'Content-Type' : 'application/x-www-form-urlencoded' }, onload : function (responseDetails) { gets--; s.value = 'Background Processes: ' + gets; if (gets == 0) { mnum++; s.value = ''; updateMission(); saveMission(mnum); } } }); } }); window.getResources = wrap(function (buysell, url, mission) { s.value = 'Obtaining Data...'; mission = mission.replace('buyall', 'buy').replace('sellall', 'sell'); var resources = new Array(); var marray = mission.split(';'); var new_mission = new Array(); for (var i = 0, len = marray.length; i < len; i++) { var res = marray[i].split(':'); if (restypes.indexOf(res[0]) != -1) { if (res[1].indexOf('%') != -1) { res[1] = res[1].replace('%', '') / 100; } resources[res[0]] = res[1]; } else { new_mission.push(res[0] + ':' + res[1]); } } mission = new_mission.join(';'); if (buysell == 'buyall' || buysell == 'sellall') { for (i in restypes) { resources[i] = 'all'; } } GM_xmlhttpRequest({ method : 'GET', url : url, headers : { 'User-agent' : 'Mozilla/4.0 (compatible) Greasemonkey', 'Accept' : 'application/atom+xml,application/xml,text/xml,text/html', 'Content-Type' : 'application/x-www-form-urlencoded' }, onload : function (responseDetails) { var text = responseDetails.responseText; //GM_log(text); var station = text.match(/document\.getElementById\('lo\w+'\)\.checked = true; document\.getElementById\('\w+'\)\.value = \d+/g); var cargo = text.match(/document\.getElementById\('ul\w+'\)\.checked = true; document\.getElementById\('\w+'\)\.value = \d+/g); var res = (buysell.indexOf('buy') != -1) ? station : cargo; if (res) { //var resources = new Array(); for (var i = 0, len = res.length; i < len; i++) { var thisres = res[i].match(/document\.getElementById\('(\w+)'\)\.value = (\d+)/); if (buysell == 'buyall' || buysell == 'sellall' || resources[thisres[1]] == 'all') { resources[thisres[1]] = thisres[2]; } if (resources[thisres[1]] < 1 && resources[thisres[1]] > 0) { resources[thisres[1]] = Math.round(resources[thisres[1]] * thisres[2]); } } res = new Array(); for (i in resources) { if (resources[i] > 0) { res.push(i + ':' + resources[i]); } } if (res == '') { s.value = 'The station seems to be empty! '; mnum++; updateMission(); saveMission(mnum); return; } mission += ';' + res.join(';'); // Finally recall missionDo() window.missionDo(mission); } else { s.value = 'Your cargo holds are empty! '; mnum++; updateMission(); saveMission(mnum); return } } }); }); } main();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址