您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Planets.nu plugin for "FC sweep"
/* Copyright (C) 2017-2019 Thomas Horn This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ // ==UserScript== // @name nuSweepFC // @description Planets.nu plugin for "FC sweep" // @version 0.01.08 // @date 2019-06-11 // @author drgirasol // @include http://planets.nu/* // @include https://planets.nu/* // @include http://play.planets.nu/* // @include https://play.planets.nu/* // @include http://test.planets.nu/* // @include https://test.planets.nu/* // @supportURL https://github.com/drgirasol/nusweepfc/issues // @homepageURL https://github.com/drgirasol/nusweepfc/wiki // @grant none // @namespace https://gf.qytechs.cn/users/91175 // ==/UserScript== function wrapper () { // wrapper for injection /* * * FC Sweeper * */ let sweepfc = { getRaceAdjectives: function() { return vgap.races.map(function(r) { return r.adjective; }); }, getPotentialRaceAdjectives: function(raceAdjectives) { return vgap.relations.filter(function (r) { return r.relationfrom < 2 && r.playertoid !== r.playerid; }).map(function (r) { return raceAdjectives[r.playertoid]; }); }, getScannerId: function(m) { let matchId = m.headline.match(/ID#(\d+)/); if (matchId) { return matchId[1]; } else { return false; } }, injectShipFC: function(m, ship) { let lines = m.body.split("<br/>"); let newBody = []; lines.forEach(function (line) { newBody.push(line); if (line.match(/AT:\s\(/)) newBody.push("FC: " + ship.friendlycode); }); m.body = newBody.join("<br/>"); }, scanReports: function() { console.warn("Scanning mine scan reports for 'friendly' enemies..."); vgap.messageTypes.push("FC Sweep"); //vgap.messageTypeCount.push(1); let raceAdjectives = sweepfc.getRaceAdjectives(); let potEnemies = sweepfc.getPotentialRaceAdjectives(raceAdjectives); //console.log(potEnemies); let mineScanReports = vgap.messages.filter(function (m) { let match = m.body.match(/\(([A-Za-z]+)\) has granted us safe passage/); //if (m.messagetype === 19 && m.body.match(/has granted us safe passage/) !== null) console.log(m.body); return m.messagetype === 19 && match !== null && potEnemies.indexOf(match[1]) > -1; }); //console.log(mineScanReports); let sfcReportIds = vgap.messages.filter(function (m) { return m.messagetype === 23; }).map(function (m) { return m.id; }); if (mineScanReports.length > 0) { mineScanReports.forEach(function (m) { if (sfcReportIds.indexOf(m.id) === -1) { let shipId = sweepfc.getScannerId(m); if (shipId) { let curShip = vgap.getShip(shipId); if (curShip) { sweepfc.injectShipFC(m, curShip); } else { console.error("Ship data for s'%s' could not be accessed!", shipId); } } else { console.error("Ship ID could not be determined from report!", m); } vgap.messages.push({ body: m.body, headline: m.headline, id: m.id, messagetype: 23, ownerid: m.ownerid, target: m.target, turn: m.turn, x: m.x, y: m.y }); } }); } else { if (sfcReportIds.indexOf(11223344) === -1) { vgap.messages.push({ body: "Nothing to report", headline: "FC Sweep", id: 11223344, messagetype: 23, ownerid: vgap.player.id, target: false, turn: vgap.game.turn, x: 0, y: 0 }); } } }, /* * DRAWING */ // draw: executed on any click or drag on the starmap draw: function() { //console.log("Draw: plugin called."); }, // /* * UI - Hooks */ // processload: executed whenever a turn is loaded: either the current turn or an older turn through time machine processload: function() { //console.log(vgap); sweepfc.scanReports(); // check reports for destroyed vessels }, // loaddashboard: executed to rebuild the dashboard content after a turn is loaded loaddashboard: function() { //console.log("LoadDashboard: plugin called."); }, // showdashboard: executed when switching from starmap to dashboard showdashboard: function() { //console.log("ShowDashboard: plugin called."); }, // showsummary: executed when returning to the main screen of the dashboard showsummary: function() { //console.log("ShowSummary: plugin called."); }, // loadmap: executed after the first turn has been loaded to create the map loadmap: function() { //console.log("LoadMap: plugin called."); }, // showmap: executed when switching from dashboard to starmap showmap: function() { //console.log("ShowMap: plugin called."); }, // loadplanet: executed when a planet is selected on dashboard or starmap loadplanet: function() { //console.log("LoadPlanet: plugin called."); }, // loadstarbase: executed when a starbase is selected on dashboard or starmap loadstarbase: function() { //console.log("LoadStarbase: plugin called."); }, // loadship: executed when a planet is selected on dashboard or starmap loadship: function() { //console.log("LoadShip: plugin called."); } }; // register your plugin with NU vgap.registerPlugin(sweepfc, "sweepfcPlugin"); console.log("nuSweepFC plugin registered"); } //wrapper for injection var script = document.createElement("script"); script.type = "application/javascript"; script.textContent = "(" + wrapper + ")();"; document.body.appendChild(script);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址