NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Mission Queue // @namespace http://unidomcorp.com // @description Put "Mission Commands" in the fleet notes. // @include http://*.war-facts.com/fleet_navigation.php* // @grant GM_xmlhttpRequest // @version 1.2 // ==/UserScript== /* 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, and 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> */ /* Greasemonkey 20080112 workaround */ function wrap(f) { return function () { setTimeout.apply(window, [f, 0].concat([].slice.call(arguments))); }; } /* End of workaround */ function main() { if (document.evaluate("//b[text()='In Transit']", document, null, XPathResult.BOOLEAN_TYPE, null).booleanValue) { return; } var notes = document.getElementsByName('note')[0]; var note_submit = notes.parentNode.getElementsByTagName('input')[2]; var t; var b; var s; var p; var form2; var mnum; var gets = 0; var restypes = new Array('iron', 'copper', 'silver', 'titanium', 'gold', 'uranium', 'platinum', 'diamonds', 'oil', 'water', 'food'); var fleetid = window.location.href.match(/fleet=(\d+)/); if (fleetid) { fleetid = fleetid[1]; } else { return; } var mission_notes = notes.value.match(/<MISSION step=(\d+)>\n([\s\S]+?)\n<\/MISSION>/); 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; form2 = document.getElementsByName('form2')[0]; p = document.createElement('p'); p.appendChild(t); p.appendChild(b); p.appendChild(document.createElement('br')); p.appendChild(s); form2.insertBefore(p, form2.childNodes[0]); updateMission(); } function updateMission() { var missions = mission_notes[2].split("\n"); mnum = mnum != undefined ? mnum : mission_notes[1] - 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 url = 'http://' + window.location.hostname + '/'; var type; var subtype; var marray = mission.split(';'); for (var i = 0, len = marray.length; i < len; i++) { 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': url += '&tworld2=' + m[1]; break; case 'system': url += '&tsystem=' + m[1]; break; case 'colony': url += '&tcolony2=' + m[1]; 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); } 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 () { s.value += 'Done.'; 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(); // ==UserScript== // @name Mission Queue // @namespace http://unidomcorp.com // @description Put "Mission Commands" in the fleet notes. // @include http://*.war-facts.com/fleet_navigation.php* // @grant GM_xmlhttpRequest // @version 1.2 // ==/UserScript== /* 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, and 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> */ /* Greasemonkey 20080112 workaround */ function wrap(f) { return function () { setTimeout.apply(window, [f, 0].concat([].slice.call(arguments))); }; } /* End of workaround */ function main() { if (document.evaluate("//b[text()='In Transit']", document, null, XPathResult.BOOLEAN_TYPE, null).booleanValue) { return; } var notes = document.getElementsByName('note')[0]; var note_submit = notes.parentNode.getElementsByTagName('input')[2]; var t; var b; var s; var p; var form2; var mnum; var gets = 0; var restypes = new Array('iron', 'copper', 'silver', 'titanium', 'gold', 'uranium', 'platinum', 'diamonds', 'oil', 'water', 'food'); var fleetid = window.location.href.match(/fleet=(\d+)/); if (fleetid) { fleetid = fleetid[1]; } else { return; } var mission_notes = notes.value.match(/<MISSION step=(\d+)>\n([\s\S]+?)\n<\/MISSION>/); 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; form2 = document.getElementsByName('form2')[0]; p = document.createElement('p'); p.appendChild(t); p.appendChild(b); p.appendChild(document.createElement('br')); p.appendChild(s); form2.insertBefore(p, form2.childNodes[0]); updateMission(); } function updateMission() { var missions = mission_notes[2].split("\n"); mnum = mnum != undefined ? mnum : mission_notes[1] - 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 url = 'http://' + window.location.hostname + '/'; var type; var subtype; var marray = mission.split(';'); for (var i = 0, len = marray.length; i < len; i++) { 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': url += '&tworld2=' + m[1]; break; case 'system': url += '&tsystem=' + m[1]; break; case 'colony': url += '&tcolony2=' + m[1]; 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); } 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 () { s.value += 'Done.'; 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();