您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows a ship to beam from planet to foreign ship directly
当前为
// ==UserScript== // @name SINGULARITY'S Cross beam // @description Allows a ship to beam from planet to foreign ship directly // @author Singularity // @include http://planets.nu/home // @include http://planets.nu/games/* // @include http://*.planets.nu/* // @include http://planets.nu/* // @version 0.2 // @namespace https://gf.qytechs.cn/users/15085 // ==/UserScript== //History //v0.1 Experimental Cross beam app. Works for NDTMSC. Button is buggy. //v0.2 Fixed bug preventing ships in deep space from opening shipscreen. //To-do: //HIGH Bug: If we have multiple foreign ships in orbit, crossBeamTarget will select the highest ID //HIGH Addition: Drop all cargo to surface if we change target? //Stop multiple ships cross beaming to one target? In excess of cargo bay? //Better button on shipScreen //warning text only if needed //optimise transfer() function //add beam target text //is it possible to transfer torps and fighters to foreign ships? function wrapper () { // wrapper for injection if (vgap.version < 3) { console.log("Cross beam needs Nu version 3 or above"); return; }//if var plugin = { loadship: function() { //check for possible crossbeam var ship= vgap.shipScreen.ship; var ships= vgap.shipScreen.ships; var planet= vgap.shipScreen.planet; var me= vgap.player.id; //quick checks if (!defined(planet) || ships.length===1) return; //find foreign ships at same location (not Horwasp) var count= 0; for (var i = 0; i < ships.length; i++) if (ships[i].ownerid !== me && (ships[i].hullid < 200 || ships[i].hullid > 300)) count++; //Are we over one of my planets with a foreign ship? if (planet.ownerid === me && count) { console.log("Add crossbeam"); //add cross beam button var html = '<input name="CrossBeamButton" id="CrossBeamButton" type="button" class="SepButton" value="Cross Beam">'; $('#ShipCargo').append(html); $('#CrossBeamButton').click( function(event) { crossBeamTarget(); } ); }//if },//loadship };//plugin function crossBeamTarget () { var viaShip= vgap.shipScreen.ship; var ships= vgap.shipScreen.ships; var fromPlanet= vgap.shipScreen.planet; var me= vgap.player.id; vgap.more.empty(); $("<div id='SelectLocation'><h1>" + nu.t.selecttransfertarget + "</h1></div>").appendTo(vgap.more); vgap.transferScreen.onchange = function () { vgap.shipScreen.screen.refresh(); vgap.loadWaypoints(); vgap.map.draw(); }; var count = 0; var toShip = null; //keep track of the last foreign ship in case we only have one for (var i = 0; i < ships.length; i++) { if (ships[i].ownerid !== me && (ships[i].hullid < 200 || ships[i].hullid > 300)) { count++; toShip = ships[i]; var select = function (ship, foreignShip, planet) { return function () { crossBeam(viaShip.id, toShip.id, fromPlanet.id); }; }; $(shtml.shipTransferView(ships[i])).tclick(select(viaShip.id, toShip.id, fromPlanet.id)).appendTo("#SelectLocation"); }//if }//for shtml.moreBack(); if (count === 1) { crossBeam(viaShip.id, toShip.id, fromPlanet.id); return; }//if vgap.showMore(340); if ($("#SelectLocation").height() > ($(window).height() - 100)) $("#SelectLocation").height($(window).height() - 100); $("#SelectLocation").jScrollPane(); vgap.action(); }//crossBeamTarget function crossBeam(viaShipID, toShipID, fromPlanetID) { var via= vgap.getShip(viaShipID); var to= vgap.getShip(toShipID); var from = vgap.getPlanet(fromPlanetID); var hulldata= vgap.getHull(to.hullid); var rightCargo= hulldata.cargo; var rightFueltank= hulldata.fueltank; var showFighters= false; var showTorps= false; //check for warning var warning= ""; if (via.transfertargetid != toShipID && via.transfertargettype != 2 && via.transfertargettype > 0) warning= "<br/>Warning: You have changed transfer target. You can only transfer to one foreign ship or planet per turn, or jettison. Any jettison or transfer you were doing to another foreign ship or planet has been cancelled.<br/>"; //initiate transfer via.transfertargettype= 2; via.transfertargetid= to.id; via.changed= 1; to.changed= 1; from.changed= 1; //make screen var html = "<div id='TransferScreen'>"; html += "<h1>Cross beam</h1>"; html += "<table width='100%' class='TransferTitle'><tr><td>" + from.id + ": " + from.name + "</td><td style='padding: 0 0 0 20px;text-align:right;'>" + to.id + ": " + to.name + "</td></tr></table>"; html += "<table width='100%'>"; html += "<tr><td>Neutronium: </td><td class='TransferVal'>" + from.neutronium + "</td>"; html += "<td></td>"; html += "<td><div id='NeutroniumTransfer'></div></td><td class='TransferVal'>" + via.transferneutronium + "</td>"; html += "<td class='valsup'>/" + rightFueltank + "</td>"; //xxx html += "</tr>"; html += "<tr><td>Duranium: </td><td class='TransferVal'>" + from.duranium + "</td><td></td><td><div id='DuraniumTransfer'></div></td><td class='TransferVal'>" + via.transferduranium + "</td><td class='valsup'></td></tr>"; html += "<tr><td>Tritanium: </td><td class='TransferVal'>" + from.tritanium + "</td><td></td><td><div id='TritaniumTransfer'></div></td><td class='TransferVal'>" + via.transfertritanium + "</td><td class='valsup'></td></tr>"; html += "<tr><td>Molybdenum: </td><td class='TransferVal'>" + from.molybdenum + "</td><td></td><td><div id='MolybdenumTransfer'></div></td><td class='TransferVal'>" + via.transfermolybdenum + "</td><td class='valsup'></td></tr>"; if (vgap.player.raceid != 12) html += "<tr><td>Supplies: </td><td class='TransferVal'>" + from.supplies + "</td><td></td><td><div id='SuppliesTransfer'></div></td><td class='TransferVal'>" + via.transfersupplies + "</td><td class='valsup'></td></tr>"; html += "<tr><td>Clans: </td><td class='TransferVal'>" + from.clans + "</td><td></td><td><div id='ClansTransfer'></div></td><td class='TransferVal'>" + via.transferclans + "</td><td class='valsup'></td></tr>"; // if (showFighters && vgap.player.raceid != 12) // html += "<tr><td>Fighters: </td><td class='TransferVal'>" + from.ammo + "</td><td></td><td><div id='FighterTransfer'></div></td><td class='TransferVal'>" + via.transferammo + "</td><td class='valsup'></td></tr>"; // if (showTorps && vgap.player.raceid != 12) // html += "<tr><td>Torpedos: </td><td class='TransferVal'>" + from.ammo + "</td><td></td><td><div id='TorpedoTransfer'></div></td><td class='TransferVal'>" + via.transferammo + "</td><td class='valsup'></td></tr>"; html += "<tr><td></td><td></td><td></td>"; html += "<td class='TransferTotalText'>Total:</td><td class='TransferVal'>" + sumCargoBeam(via) + "</td><td class='valsup'>/" + rightCargo + "</td>"; html += "</tr>"; html += "</table>"; html += "<div class='NeutralText'>" + warning + "</div>"; html += "</div>"; vgap.more.empty(); $(html).appendTo(vgap.more); $("<a class='MoreBack'>OK</a>").tclick(function () { vgap.loadWaypoints(); vgap.map.draw(); vgap.closeMore(); return false; }).appendTo(vgap.more); $("#NeutroniumTransfer").leftRight(function (change) { transfer("N", change, via, to, from); }, 1000); $("#DuraniumTransfer").leftRight(function (change) { transfer("D", change, via, to, from); }, 1000); $("#TritaniumTransfer").leftRight(function (change) { transfer("T", change, via, to, from); }, 1000); $("#MolybdenumTransfer").leftRight(function (change) { transfer("M", change, via, to, from); }, 1000); $("#SuppliesTransfer").leftRight(function (change) { transfer("S", change, via, to, from); }, 1000); $("#ClansTransfer").leftRight(function (change) { transfer("C", change, via, to, from); }, 1000); // $("#FighterTransfer").leftRight(function (change) { vgap.transferScreen.transferFighters(change); }, 1000); // $("#TorpedoTransfer").leftRight(function (change) { vgap.transferScreen.transferTorps(change); }, 1000); vgap.showMore(580); vgap.save(); }//crossBeam function transfer(type, change, viaShip, toShip, fromPlanet) { if (type==="N") { //from planet to ship if (change > 0 && fromPlanet.neutronium < change) change = fromPlanet.neutronium; //from toShip to planet if (change < 0 && viaShip.transferneutronium < Math.abs(change)) change = -1 * viaShip.transferneutronium; //limit by max fueltank on toShip var toShipfueltank= vgap.getHull(toShip.hullid).fueltank; if (change + viaShip.transferneutronium > toShipfueltank) change= toShipfueltank- viaShip.transferneutronium; //make the change fromPlanet.neutronium -= change; viaShip.transferneutronium += change; }//N if (type==="D") { //from planet to ship if (change > 0 && fromPlanet.duranium < change) change = fromPlanet.duranium; //from toShip to planet if (change < 0 && viaShip.transferduranium < Math.abs(change)) change = -1 * viaShip.transferduranium; //limit by max cargo on toShip change = checkTotalRight(change, viaShip, toShip); //make the change fromPlanet.duranium -= change; viaShip.transferduranium += change; }//D if (type==="T") { //from planet to ship if (change > 0 && fromPlanet.tritanium < change) change = fromPlanet.tritanium; //from toShip to planet if (change < 0 && viaShip.transfertritanium < Math.abs(change)) change = -1 * viaShip.transfertritanium; //limit by max cargo on toShip change = checkTotalRight(change, viaShip, toShip); //make the change fromPlanet.tritanium -= change; viaShip.transfertritanium += change; }//T if (type==="M") { //from planet to ship if (change > 0 && fromPlanet.molybdenum < change) change = fromPlanet.molybdenum; //from toShip to planet if (change < 0 && viaShip.transfermolybdenum < Math.abs(change)) change = -1 * viaShip.transfermolybdenum; //limit by max cargo on toShip change = checkTotalRight(change, viaShip, toShip); //make the change fromPlanet.molybdenum -= change; viaShip.transfermolybdenum += change; }//M if (type==="S") { //from planet to ship if (change > 0 && fromPlanet.supplies < change) change = fromPlanet.supplies; //from toShhip to planet if (change < 0 && viaShip.transfersupplies < Math.abs(change)) change = -1 * viaShip.transfersupplies; //limit by max cargo on toShip change = checkTotalRight(change, viaShip, toShip); //make the change fromPlanet.supplies -= change; viaShip.transfersupplies += change; }//S if (type==="C") { //from planet to ship if (change > 0 && fromPlanet.clans < change) change = fromPlanet.clans; //from toShhip to planet if (change < 0 && viaShip.transferclans < Math.abs(change)) change = -1 * viaShip.transferclans; //limit by max cargo on toShip change = checkTotalRight(change, viaShip, toShip); //make the change fromPlanet.clans -= change; viaShip.transferclans += change; }//C //refresh screen crossBeam(viaShip.id, toShip.id, fromPlanet.id); }//transfer function checkTotalRight (change, viaShip, toShip) { var totalCargo= sumCargoBeam(viaShip); var cargoSize= vgap.getHull(toShip.hullid).cargo; if ((totalCargo + change) > cargoSize) change= cargoSize - totalCargo; return change; }//checkTotalRight function sumCargoBeam(ship) { //add up cargo in transfer beam var total= 0; total+= ship.transferduranium; total+= ship.transfertritanium; total+= ship.transfermolybdenum; total+= ship.transfersupplies; total+= ship.transferclans; total+= ship.transferammo; return total; }//sumCargoBeam function isNull(variable) { if(variable === null && typeof variable === "object") return true; else return false; }//isNull function defined(variable) { if (typeof variable !== 'undefined') return true; else return false; }//defined // register your plugin with NU vgap.registerPlugin(plugin, "Cross beam"); } //wrapper for injection var script = document.createElement("script"); script.type = "application/javascript"; script.textContent = "(" + wrapper + ")();"; document.body.appendChild(script);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址