Planets.nu - Message Links Plugin

Adds links to ships/planets/bases in reports and messages.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name          Planets.nu - Message Links Plugin
// @description   Adds links to ships/planets/bases in reports and messages.
// @include       http://*.planets.nu/*
// @include       http://planets.nu/*
// @version 1.0
// @namespace https://greasyfork.org/users/7189
// ==/UserScript==

/*------------------------------------------------------------------------------
This add-on improves inter-player communications by adding links into the 
message to replace strings of the following formats:

s#XXX
p#XXX
b#XXX

where s, p, b are for ship, planet, base respectively, and XXX is the id 
number of the object. The # may be omitted. If the object is found, 
the text is replace by a link including the name, that when clicked
selects the object on the map. 

Example, the string:

s#42

will be replaced by a link similar to "S#42: GOBRIE CLASS BATTLE CARRIER", 
which will also select that ship when clicked.

Version History:
0.3 Adds notes to bottom of ship and planet screens. Applies same link format.
0.4 Adds links to system messages too, searching for "ID#XXX". Simple mided
    implementation, will likely give strange results in some corner cases,
    such as a planet and a ship having both the same ID *and* name, or a ship
    having a name set to the name and ID of a different ship/planet.
0.5 Fixes system message links to handle ship names with special chars.
0.7 Changes link color for new version
1.0 Major update for new version
    - now uses plugin toolkit
    - fixed some links to stuff owned by others
    - added map highlighting of object when selected
    - added parsing of formats without the # sign in between, ie. s42 or p123
      (this seems to be a more common usage)
    - links are now also added to activity feed
    - activity feed is detachable, can be viewed as movable window and is visible
      on map and other screens
------------------------------------------------------------------------------*/

function wrapper () { // wrapper for injection

    
var pluginName = "MessageLinks";
var mintoolkit = 5;

if (!vgap) return;
if (vgap.version < 3) return;

if (!vgap.toolkit || !vgap.toolkit.version || vgap.toolkit.version < mintoolkit) {
    var html = "<div class=ToolkitWarning style='width: 600px; height: 200px; position: absolute; top: 50%; left: 50%; margin-left: -310px; margin-top: -110px; padding: 20px; background-color: #888888'>";
    html    += "<div style='width: 100%; text-align: right;'><a onclick='$(\"div.ToolkitWarning\").remove(); return false;'><span style='padding: 5px; background-color: #aaaaaa; cursor: pointer;'>X</span></a></div>";
    html    += "WARNING: Toolkit Not Installed or Needs Update<br><br>";
    html    += "The plugin <span style='font-style: italic;'>" + pluginName + "</span> requires the Planets.nu Plugin Toolkit to be installed.<br><br>";
    html    += "To install the latest toolkit, click <a href='http://planets.nu/_library/toolkit/install.html' target='_blank'>HERE</a><br>";
    html    += "(You will need to exit any open game and refresh your browser after installing)<br><br>";    
    html    += "Note: If you have installed the toolkit and are still getting this error, you may need to adjust the script execution order so that the toolkit is run first.</div>";
    $("body").append(html);
    return;
}
    
var plugin = {
    name: pluginName,
    
    detachActivityPane: function () {
        $("#DetachActivity").remove();
        nu.modal($("<div id='ActivityFloat'></div>"), "Activity", 380, true, function () { if ($("#GameActivity").length == 0) vgap.dash.summary(); } );
        nu.overlay.hide();
        var ga = $("#GameActivity");
        var offset = ga.offset();
        offset.left -= 2;
        offset.top -= 22;
        nu.modalwin.offset( offset );
        $(".esimplewincontent").css( {padding: 0, position: "relative"} ).height(ga.height);
        ga.css({"background-color": "#555", "border-radius": 0}).appendTo("#ActivityFloat");
        $("#GameActivity .ecancelbutton").tclick( function () {vgap.plugins.MessageLinks.activityupdated = true; vgap.dash.summary();} );
        
    },

    // Actual functions moved to toolkit, just re-reference here to avoid changing a lot of code.
    addLinksToText: vgap.addLinksToText,
    addLinksToMessage: vgap.addLinksToMessage,    

    drawNoteOnActiveScreen: function (note) {
        if (note != null) {
            $("#Notes").html(note.body.replace(/\n/g, "<br/>"));
            $("#Notes").html(this.addLinksToText);
        }
    },

    loadship: function () {

        $("#ShipOrders").after("<div class='SepContainer' id='Notes'/>");
        this.drawNoteOnActiveScreen(vgap.getNote(vgap.shipScreen.ship.id, 2));

    },

    loadplanet: function () {

        $("#Colony").after("<div class='SepContainer' id='Notes'/>");
        this.drawNoteOnActiveScreen(vgap.getNote(vgap.planetScreen.planet.id, 1));

    },
    
    showsummary: function () {
        if ($("#ActivityFloat").length > 0) {
            if (this.activityupdated) {
                $("#ActivityFloat").empty();
                $("#GameActivity").css({"background-color": "#555", "border-radius": 0}).appendTo("#ActivityFloat");
                $("#GameActivity .ecancelbutton").tclick( function () {vgap.plugins.MessageLinks.activityupdated = true; vgap.dash.summary();} );
            }
            else {
                $("#PlanetsContainer #GameActivity").remove();
            }
        }
        else {
            $("#PlanetsContainer #GameActivity").prepend("<div id='DetachActivity' style='color: cyan; text-align: center; height: 20px; width: 100%;'><a onclick='vgap.plugins.MessageLinks.detachActivityPane();'>DETACH</a></div>");        
        }
        vgap.plugins.MessageLinks.activityupdated = false;
    }

}
vgap.toolkit.registerPlugin(plugin);


    //Legacy Overrides
    var old_saveNote = vgaPlanets.prototype.saveNote;
    vgaPlanets.prototype.saveNote = function (id, noteType) {

        old_saveNote.apply(this, arguments);

        if ( (noteType == 2 && this.shipScreenOpen && this.shipScreen.ship.id == id) || (noteType == 1 && this.planetScreenOpen && this.planetScreen.planet.id == id))
            drawNoteOnActiveScreen(vgap.getNote(id, noteType));

    };

    var oldShowPlayerMessages = vgapDashboard.prototype.showPlayerMessages;
    vgapDashboard.prototype.showPlayerMessages = function () {

        oldShowPlayerMessages.apply(this, arguments);

        $("#MessageInbox td").html(vgap.plugins.MessageLinks.addLinksToText);
        //return "Beefer";

    };

    var oldShowMessages = vgapDashboard.prototype.showMessages;
    vgapDashboard.prototype.showMessages = function (messagetype) {

        oldShowMessages.apply(this, arguments);

        $("#MessageInbox td").html(vgap.plugins.MessageLinks.addLinksToMessage);
        //return "Beefer";

    };
    
    var old_massageActivity = vgaPlanets.prototype.massageActivity;
    vgaPlanets.prototype.massageActivity = function (item, isreply) {

        old_massageActivity.apply(this, arguments);    
        
        item.message = vgap.plugins.MessageLinks.addLinksToText(item.message);
        item.excerpt = vgap.plugins.MessageLinks.addLinksToText(item.excerpt);
        
    };
    
    var old_processActivity = vgaPlanets.prototype.processActivity;
    vgaPlanets.prototype.processActivity = function (item, isreply) {

        old_processActivity.apply(this, arguments);    
        
        vgap.plugins.MessageLinks.activityupdated = true;
        
    };
    
    var old_showActivity = vgapDashboard.prototype.showActivity;
    vgapDashboard.prototype.showActivity = function () {

        old_showActivity.apply(this, arguments);

        $("#ecancelbutton").tclick( function () {vgap.plugins.MessageLinks.activityupdated = true; vgap.dash.summary();} );

    };    
    
    
    
} //wrapper for injection

var script = document.createElement("script");
script.type = "application/javascript";
script.textContent = "(" + wrapper + ")();";

document.body.appendChild(script); 
document.body.removeChild(script);