您需要先安装一个扩展,例如 篡改猴、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://greasyfork.org/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);