您需要先安装一个扩展,例如 篡改猴、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.5 // @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: Ships in deep space could not open shipscreen. //v0.3 Fixed bug: Now correctly targets foreign ships, not just highest ID foreign ship. // Added: "Changed Target" warning added. Cargo in old beam now dropped to surface. // Updated: crossBeamTarget() now more consistant with other code //v0.3.1 Updated: lets you overload target cargo bay to destroy cargo //v0.3.2 Updated: lets you overload target fuel tank to destroy fuel //v0.4 Optimised transfer() code //v0.5 Horwasp fixes //To-do: //Toggle overload beam on/off?? function wrapper () { // wrapper for injection if (vgap.version < 3) { console.log("Cross beam needs Nu version 3 or above"); return; }//if //Can't beam cargo to Horwasp ships/pods var horwaspHulls = [115, 117, 118, 119, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211]; var plugin = { draw: function() { //check for possible crossbeam if (vgap.shipScreenOpen && !$("#CrossBeamButton").length) { var ships= vgap.shipScreen.ships; var planet= vgap.shipScreen.planet; var me= vgap.player.id; //are we over one of my planets with other ships? if (!defined(planet) || planet.ownerid !== me || ships.length===1) return; //check for valid foreign targets for (var i = 0; i < ships.length; i+=1) { var ship= ships[i]; //exclude my ships if (ship.ownerid === me) continue; //exclude Horwasp hulls var validTarget= true; for (var wasp=0; wasp<horwaspHulls.length; wasp+=1) { var waspHull= horwaspHulls[wasp]; if (ship.hullid === waspHull) { validTarget= false; break; }//if }//for if (!validTarget) continue; //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(); } ); return; }//for }//if },//draw };//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+=1) { var ship= ships[i]; //ignore my ships if (ship.ownerid === me) continue; //ignore Horwasp hulls var validTarget= true; for (var wasp=0; wasp<horwaspHulls.length; wasp+=1) { var waspHull= horwaspHulls[wasp]; if (ship.hullid === waspHull) { validTarget= false; break; }//if }//for if (!validTarget) continue; //add ship to list of possible targets count+=1; toShip= ship; var select = function (viaShipID, toShipID, fromPlanetID) { return function () { crossBeam(viaShipID, toShipID, fromPlanetID); }; }; $(shtml.shipTransferView(ships[i])).tclick(select(viaShip.id, toShip.id, fromPlanet.id)).appendTo("#SelectLocation"); }//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 viaShip= vgap.getShip(viaShipID); var toShip= vgap.getShip(toShipID); var fromPlanet = vgap.getPlanet(fromPlanetID); var hulldata= vgap.getHull(toShip.hullid); var rightCargo= hulldata.cargo; var rightFueltank= hulldata.fueltank; //check for warning var warning= ""; var beamInProgress= (sumCargoBeam(viaShip) || viaShip.transferneutronium); if (beamInProgress && (viaShip.transfertargetid != toShipID || viaShip.transfertargettype != 2)) { //give warning warning = "<br/>Warning: You have changed transfer target. "; warning += "You can only transfer to one foreign ship or planet per turn, or jettison. "; warning += "Any jettison or transfer you were doing to another foreign ship or planet has been cancelled.<br/>"; //cancel old beam transfer by dropping cargo to the surface fromPlanet.neutronium+= viaShip.transferneutronium; fromPlanet.duranium+= viaShip.transferduranium; fromPlanet.tritanium+= viaShip.transfertritanium; fromPlanet.molybdenum+= viaShip.transfermolybdenum; fromPlanet.supplies+= viaShip.transfersupplies; fromPlanet.clans+= viaShip.transferclans; viaShip.transferneutronium= 0; viaShip.transferduranium= 0; viaShip.transfertritanium= 0; viaShip.transfermolybdenum= 0; viaShip.transfersupplies= 0; viaShip.transferclans= 0; }//if //initiate new transfer viaShip.transfertargettype= 2; viaShip.transfertargetid= toShip.id; viaShip.changed= 1; toShip.changed= 1; fromPlanet.changed= 1; //make screen var html = "<div id='TransferScreen'>"; html += "<h1>Cross beam</h1>"; html += "<table width='100%' class='TransferTitle'><tr><td>" + fromPlanet.id + ": " + fromPlanet.name + "</td>"; html += "<td style='padding: 0 0 0 20px;text-align:right;'>" + toShip.id + ": " + toShip.name + "</td></tr></table>"; html += "<table width='100%'>"; html += "<tr><td>Neutronium: </td><td class='TransferVal'>" + fromPlanet.neutronium + "</td>"; html += "<td></td><td><div id='NeutroniumTransfer'></div></td><td class='TransferVal'>" + viaShip.transferneutronium + "</td>"; html += "<td class='valsup'>/" + rightFueltank + "</td></tr>"; html += "<tr><td>Duranium: </td><td class='TransferVal'>" + fromPlanet.duranium + "</td>"; html += "<td></td><td><div id='DuraniumTransfer'></div></td>"; html += "<td class='TransferVal'>" + viaShip.transferduranium + "</td><td class='valsup'></td></tr>"; html += "<tr><td>Tritanium: </td><td class='TransferVal'>" + fromPlanet.tritanium + "</td>"; html += "<td></td><td><div id='TritaniumTransfer'></div></td>"; html += "<td class='TransferVal'>" + viaShip.transfertritanium + "</td><td class='valsup'></td></tr>"; html += "<tr><td>Molybdenum: </td><td class='TransferVal'>" + fromPlanet.molybdenum + "</td>"; html += "<td></td><td><div id='MolybdenumTransfer'></div></td>"; html += "<td class='TransferVal'>" + viaShip.transfermolybdenum + "</td><td class='valsup'></td></tr>"; if (vgap.player.raceid !== 12) { html += "<tr><td>Supplies: </td><td class='TransferVal'>" + fromPlanet.supplies + "</td>"; html += "<td></td><td><div id='SuppliesTransfer'></div></td>"; html += "<td class='TransferVal'>" + viaShip.transfersupplies + "</td><td class='valsup'></td></tr>"; }//if html += "<tr><td>Clans: </td><td class='TransferVal'>" + fromPlanet.clans + "</td>"; html += "<td></td><td><div id='ClansTransfer'></div></td>"; html += "<td class='TransferVal'>" + viaShip.transferclans + "</td><td class='valsup'></td></tr>"; html += "<tr><td></td><td></td><td></td>"; html += "<td class='TransferTotalText'>Total:</td><td class='TransferVal'>" + sumCargoBeam(viaShip) + "</td>"; html += "<td class='valsup'>/" + rightCargo + "</td></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("neutronium", change, viaShip, toShip, fromPlanet); }, 1000); $("#DuraniumTransfer").leftRight(function (change) { transfer("duranium", change, viaShip, toShip, fromPlanet); }, 1000); $("#TritaniumTransfer").leftRight(function (change) { transfer("tritanium", change, viaShip, toShip, fromPlanet); }, 1000); $("#MolybdenumTransfer").leftRight(function (change) { transfer("molybdenum", change, viaShip, toShip, fromPlanet); }, 1000); $("#SuppliesTransfer").leftRight(function (change) { transfer("supplies", change, viaShip, toShip, fromPlanet); }, 1000); $("#ClansTransfer").leftRight(function (change) { transfer("clans", change, viaShip, toShip, fromPlanet); }, 1000); vgap.showMore(580); vgap.save(); }//crossBeam function transfer(type, change, viaShip, toShip, fromPlanet) { var transferType= "transfer"+type; //planet to ship: maximum is what is on surface if (change > 0 && fromPlanet[type] < change) change = fromPlanet[type]; //ship to planet: maximum is what is on ship if (change < 0 && viaShip[transferType] < Math.abs(change)) change = -1 * viaShip[transferType]; /* //dont beam more than receiving ship can hold if (type==="neutronium") { var toShipfueltank= vgap.getHull(toShip.hullid).fueltank; if (change + viaShip[transferType] > toShipfueltank) change= toShipfueltank- viaShip[transferType]; } else change = checkTotalRight(change, viaShip, toShip); */ //make it so! fromPlanet[type] -= change; viaShip[transferType] += change; 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或关注我们的公众号极客氢云获取最新地址