nuSweepFC

Planets.nu plugin for "FC sweep"

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

/*
    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);