您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Test Plugin: Add warp circles to homeworld before Turn #010
// ==UserScript== // @name HomeWorldWarpCircles // @namespace http://tampermonkey.net/ // @version 0.07 // @description Test Plugin: Add warp circles to homeworld before Turn #010 // @author Hijk // @include http://planets.nu/* // @include https://planets.nu/* // @include http://*.planets.nu/* // @include https://*.planets.nu/* // @grant none // ==/UserScript== /*- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - - --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - Test script to understand plugin elements. Uses code blocks from Map Draw, Show Notes, and Planetary Management Plugin. A grateful thanks goes to the authors of those plugins for the work they invested in developing their scripts and tools. OBJ: At TURN #001 of a new game, create a note using the "MapDraw" format for 3 warp circles around HomeWorld @ 81 (green), 162 (green), and 243 (yellow) ly. Given that the note body string for vgaMapMarkUp should look like: "body": "[{\"active\":true,\"name\":\"HOME\",\"markups\":[{\"type\":\"circle\",\"x\":2363,\"y\":2690,\"r\":81,\"attr\":{\"stroke\":\"#669966\"},\"color\":\"#669966\",\"zmin\":0,\"zmax\":0},{\"type\":\"circle\",\"x\":2363,\"y\":2690,\"r\":161,\"attr\":{\"stroke\":\"#669966\"},\"color\":\"#669966\",\"zmin\":0,\"zmax\":0}]}]", NOTE: Function is dependanet upon the vgaMapMarkUp plugin. v0.07 - fixed a key error issue (float value instead on integer was being stored) - added 450ly demarcation = nearest neighbors likely boundary (190321) v0.06 - bug fix that prevented new Map Draw markups from being saved. v0.05 - Put small circle at center of star map v0.04 - Use "vgap.addOns.vgapMapMarkUp.overlays" to perform redraw. v0.03 - Instead of using a hard-coded "note" string, create a real "overlay" object defining the warp circles so that the map can be refreshed with the new display elements. v0.02 - The Planetary Management Plugin loads first and generates 5 Notes. Thus, the next 'open' note should be id == 6. A check has been added to ensure that the note number will be >= 6 so that there is no chance of PMP overwriting the warpcircle note data. *** Does not work unless PMP has executed first. >> Just use a hard-coded ID value of 6. hijk.190316 - --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - - --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- -*/ function wrapper() { // . . . . . . . . . . . wrapper for injection var debug = false; var plgname = "HomeWorldWarpCircles"; var plgversion = 0.07; var hwwc_show = true; // display option for left menu bar var hwwc_autorun = true; // auto-run the add Note function on game load var drawNoteType = -133919; // MapDraw type code used by vgaMapMarkUp var wradius = [81, 162, 243, 450] // warp distances (ly) var wcolor = ["#669966", "#669966", "#ffcc00", "#990033"] // warp ring colors //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - // START PLUGIN BLOCK . . . . . . . . . . . . . . . . var drawWarpCircles = { addDrawNote: function () { //- --- --- - - --- --- ---- - - --- --- --- // 1. Get Homeworld planet by finding planet with Starbase within first 10 turns . . . . . var pid = vgap.player.id; if (vgap.settings.turn < 10) { for (var i = 0; i < vgap.planets.length; i++) { var planet = vgap.planets[i]; if (pid == planet.ownerid && planet.isbase) { if (debug) {console.log(" >>> HW location = ("+planet.x+","+planet.y+")");} //- --- --- - - --- --- ---- - - --- --- --- // 2. Create NOTE object using the MapDraw data structure . . . . . . . . . . . // Create two overlay layers, 0 = HOME and 1 = ENEMY . . . . . var warpz = [{"active":true,"name":"HOME","markups":[]},{"active":true,"name":"ENEMY","markups":[]}]; for (var j = 0; j < wradius.length; j++){ warpz[0].markups[j] = {"type":"circle","x":planet.x,"y":planet.y,"r":wradius[j],"attr":{"stroke":wcolor[j]},"color":wcolor[j],"zmin":0,"zmax":0} } // Add a reference point in the map center . . . . . var center = {'x': 0, 'y': 0} var pcount = 0 for (var k = 0; k < vgap.planets.length; k++) { if (vgap.planets[k].debrisdisk == 0) { center.x += vgap.planets[k].x; center.y += vgap.planets[k].y; pcount += 1; } } // close loops center.x = (center.x/pcount + 0.5); center.y = (center.y/pcount + 0.5); var cx = Math.round(center.x); var cy = Math.round(center.y); if (debug) {console.log(" >>> Map Center = ("+cx+","+cy+")");} warpz[1].markups[0] = {"type":"circle","x":cx,"y":cy,"r":8,"attr":{"stroke":"#ffcc00"},"color":"#ffcc00","zmin":0,"zmax":0} //- --- --- - - --- --- ---- - - --- --- --- // 3. Save as NoteObject and queue for draw on starmap . . . . var IDnum = drawWarpCircles.getNoteIDnum(); vgaPlanets.prototype.saveObjectAsNote(IDnum, drawNoteType, warpz); vgap.addOns.vgapMapMarkUp.overlays.push(warpz[0]); vgap.addOns.vgapMapMarkUp.overlays.push(warpz[1]); hwwc_show = false; drawWarpCircles.loaddashboard(); //- --- --- - - --- --- ---- - - --- --- --- } } } // end nested loops }, //- --- --- - - --- --- ---- - - --- --- --- processload: function() { if (debug) { console.log(" >>> drawWarpCircles: plugin start");} hwwc_show = true; }, //- --- --- - - --- --- ---- - - --- --- --- loaddashboard: function() { if (debug) {console.log(" >>> drawWarpCircles: plugin dashboard");} if(hwwc_autorun && vgap.settings.turn < 10 && drawWarpCircles.checkNoteNull(drawNoteType)) { drawWarpCircles.addDrawNote(); hwwc_show = false; } if(hwwc_show && vgap.settings.turn < 10 && drawWarpCircles.checkNoteNull(drawNoteType)) { vgap.dash.addLeftMenuItem(" Add HW Warps »", drawWarpCircles.addDrawNote, $("#DashboardMenu").find("ul:eq(3)")); } }, //- --- --- - - --- --- ---- - - --- --- --- checkNoteNull: function(type) { var doesNotExist = 1; for (var i = 0; i < vgap.notes.length; i++){ var note = vgap.notes[i]; if (note.id > 0){ if (debug) {console.log(" >>> type = >"+note.targettype+"< and id = "+note.id);} if (note.body.indexOf("HOME") != -1 && note.targettype == type ) { doesNotExist = 0; // false, warp circle note already exists if (debug) {console.log(" >>> HW Warp Circles already exists");} } } } // close all loops if (doesNotExist == 1 && debug) { console.log(" >>> HW WarpCircles NOTE does not exist."); } return doesNotExist; }, //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - getNoteIDnum: function() { var newNoteIDnum = 0; for (var i = 0; i < vgap.notes.length; i++){ var note = vgap.notes[i]; if (note.id == 0) { newNoteIDnum = i+1; break; } } // close loops if (debug) {console.log(" >>> New Draw Note id# ="+newNoteIDnum);} return newNoteIDnum; }, //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - //showmap: executed when switching from dashboard to starmap showmap: function() { vgap.map.drawOverlays(); }, }; // end of plugin block //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - // Need to access this vgap function to save NOTE data . . . . . . . . . . . . vgaPlanets.prototype.saveObjectAsNote = function (idnum, type, object) { var note = vgap.getNote(idnum, type); if (note == null) note = vgap.addNote(idnum, type); note.changed = 1; note.body = JSON.stringify(object); //note.body = object; note.targettype = type; note.color = ""; note.targetid = 0; note.ownerid = vgap.player.id; note.id = idnum; vgap.save(); if (debug) {console.log(" >>> warp circles saved as note . . . . \nNOTEstart>\n"+note.body+"\n<endNote\n");} }; //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - // register plugin @ NU vgap.registerPlugin(drawWarpCircles, plgname); console.log("Draw HomeWorldWarpCircles: v" + plgversion + " registered vgap(v"+vgap.version+")" ); } //end wrapper for injection . . . . . . . . . . . . . . . . . . . . . . //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - var script = document.createElement("script"); script.type = "application/javascript"; script.textContent = "(" + wrapper + ")();"; document.body.appendChild(script); // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // . . . . . . B O N E Y A R D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // noteType = function (name) { // // as computed by bigintHash in https://greasyfork.org/en/scripts/6685-planets-nu-plugin-toolkit/code // return -parseInt(name.replace(/[_\W]/g, ""), 36) % 2147483648; // } // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // var overlay = JSON.parse(warpCircles) // if (debug) {console.log(" >>> draw circle = "+overlay);} // for (var j=0; j<3; j++) { // if (debug) {console.log(" >>> draw circle = "+overlay.markups[j]);} // var markup = overlay.markups[j]; // vgapMap.prototype.drawScaledCircle(markup.x, markup.y, markup.r, markup.attr, overlay); // } // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- //- --- --- - - --- --- ---- - - --- --- --- // NOTE: not needed when using a hard-coded note position to avoid conflict with PMP ID numbers. // newNoteNum: function() { // for (var i = 0; i < 20; i++){ // var note = vgap.notes[i]; // if (debug) {console.log(" >>> Note ID = "+note.id+" ("+i+")");} // if (note.body === ""){ return i+1;} // } // return 111; // }, // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- //var xycenter = "\"x\":"+planet.x+",\"y\":"+planet.y; //var warpCircles = "[{\"active\":true,\"name\":\"HOME\",\"markups\":[{\"type\":\"circle\","+xycenter+",\"r\":81,\"attr\":{\"stroke\":\"#669966\"},\"color\":\"#669966\",\"zmin\":0,\"zmax\":0},{\"type\":\"circle\","+xycenter+",\"r\":162,\"attr\":{\"stroke\":\"#669966\"},\"color\":\"#669966\",\"zmin\":0,\"zmax\":0},{\"type\":\"circle\","+xycenter+",\"r\":243,\"attr\":{\"stroke\":\"#ffff00\"},\"color\":\"#ffff00\",\"zmin\":0,\"zmax\":0}]}]"; // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - // var overlays = vgap.addOns.vgapMapMarkUp.overlays; // for (j=0; j<3; j++) { // var mk = warpz[0].markups[j]; // vgapMap.prototype.drawScaledCircle(mk.x, mk.y, mk.r, mk.attr, this.overlays); // } // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // for (j=0; j<3; j++) { // var mk = warpz[0].markups[j]; // if (debug) { console.log(" >>> Draw warp circle: "+mk.r+" ly");} // vgap.map.drawScaledCircle(mk.x, mk.y, mk.r, mk.attr, vgap.map.ctx); // } // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - // //showmap: executed when switching from dashboard to starmap // showmap: function() { // console.log("My ShowMap: plugin called."); // //console.log("Test: length of warpz = "+warpz.length); // if (typeof(warpz) !== 'undefined') { // drawWarpCircles.draw(warpz[0].markups); // } // }, // //- --- --- - - --- --- ---- - - --- --- --- ---- - - - --- - -- -- ---- - - --- - // //showmap: executed when switching from dashboard to starmap // draw: function(markups) { // console.log("My draw: function called."); // console.log("\nmarkups>\n"+markups+"\n<end\n"); // if (typeof(markups) !== 'undefined') { // for (var j=0; j<3; j++) { // var mk = markups[j]; // if (debug) { console.log(" >>> xDraw warp circle: "+mk.r+" ly");} // drawWarpCircles.hwScaledCircle(mk.x, mk.y, mk.r, mk.attr, vgap.map.ctx); // } // if (debug) {console.log(" >>> xStarMap updated with new warp circles.");} // } // }, // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // // Draw warp circles . . . . . . . . . . . . // hwScaledCircle : function(x, y, radius, attr, paperset) { // radius *= vgap.map.zoom; // if (radius < 1){ radius = 1; } // paperset.strokeStyle = attr.stroke; // paperset.lineWidth = 3; // paperset.beginPath(); // paperset.arc(vgap.map.screenX(x), vgap.map.screenY(y), radius, 0, Math.PI * 2, false); // paperset.stroke(); // }, // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- -- // - --- -- --- - - - - --- --- - - - - - -- - --- - --- - - - -- ----- - - - - - -- - --- --