Planets.nu ship templates

Adds saving to and building from ship templates

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name          Planets.nu ship templates
// @description   Adds saving to and building from ship templates
// @include       http://planets.nu/*
// @version 0.7
// @namespace https://greasyfork.org/users/2874
// ==/UserScript==

/*------------------------------------------------------------------------------
 1. When at the Ship Assembly screen is displayed, if there is a hull selected,
    show a "Save Template" button. When selected, Save the currently ship config
    as a templatte.
 2. If no hull is selected, display the list of available templates. Options to
    build (if mineral/tech requirements met) or delete template. Highlights
    deficiencies if unable to build.
 3. (ver 0.3) Adds planet cash/minerals to display, tweaks formatting.
 4. Modified display/etc to be more compact. 
 5. Added sorting by hulltech and hullid and a clear assembly button for the build screen.
 6. Moved template storage to localStorage by race
 7. Removed nameclash with save/load functions
------------------------------------------------------------------------------*/


function wrapper () { // wrapper for injection
    
    if (vgap.version < 3.0) {
        console.log("vgapShipTemplates plugin requires at least NU version 3.0. Plugin disabled." );
        return;	
    }
    
    var plugin_version = 0.6;
    
    console.log("vgapShipTemplates plugin version: v" + plugin_version );
    
    vgaPlanets.prototype.setupAddOn = function (addOnName) {                
        if (vgaPlanets.prototype.addOns == null) 
            vgaPlanets.prototype.addOns = {};
        
        vgaPlanets.prototype.addOns[addOnName] = {};
        var settings = localStorage.getItem(addOnName + ".settings");
        if (settings != null)
            vgaPlanets.prototype.addOns[addOnName].settings = JSON.parse(settings);
        else
            vgaPlanets.prototype.addOns[addOnName].settings = {};
        
        vgaPlanets.prototype.addOns[addOnName].saveSettings = function () {
            localStorage.setItem(addOnName + ".settings", JSON.stringify(vgaPlanets.prototype.addOns[addOnName].settings));
        }
        
        vgaPlanets.prototype.addOns[addOnName].current = {};
    };
    
    vgaPlanets.prototype.setupAddOn("vgapShipTemplates");
    
    // Set to -USERSCRIPT_ID to try and prevent note type collisions
    vgaPlanets.prototype.addOns.vgapShipTemplates.notetype = 133678; 
    
    vgaPlanets.prototype.addOns.vgapShipTemplates.sortTemplates = function (a, b) {
        var hulla = vgap.getHull(a.buildhullid);
        var hullb = vgap.getHull(b.buildhullid);
        
        if (hulla.techlevel == hullb.techlevel) {
            return a.buildhullid - b.buildhullid;
        }
        
        return hulla.techlevel - hullb.techlevel;
    }
    
    
    vgaPlanets.prototype.addOns.vgapShipTemplates.saveTemplate = function () {
        var src = vgap.starbaseScreen.starbase;
        //console.log(src);
        trg = {};
        trg.buildhullid = src.buildhullid;
        trg.buildengineid = src.buildengineid;
        trg.buildbeamcount = src.buildbeamcount;
        trg.buildbeamid = src.buildbeamid;
        trg.buildtorpcount = src.buildtorpcount;
        trg.buildtorpedoid = src.buildtorpedoid;
        
        var hull = vgap.getHull(trg.buildhullid);
        var engine = vgap.getEngine(trg.buildengineid);
        var beam = vgap.getBeam(trg.buildbeamid);
        var torpedo = vgap.getTorpedo(trg.buildtorpedoid);
        trg.cost = hull.cost + (hull.engines * (engine != null ? engine.cost : 0)) + (trg.buildbeamcount * (beam != null ? beam.cost : 0))+ (trg.buildtorpcount * (torpedo != null ? torpedo.launchercost : 0));
        trg.duranium = hull.duranium + (hull.engines * (engine != null ? engine.duranium : 0)) + (trg.buildbeamcount * (beam != null ? beam.duranium : 0))+ (trg.buildtorpcount * (torpedo != null ? torpedo.duranium : 0));
        trg.tritanium = hull.tritanium + (hull.engines * (engine != null ? engine.tritanium : 0)) + (trg.buildbeamcount * (beam != null ? beam.tritanium : 0))+ (trg.buildtorpcount * (torpedo != null ? torpedo.tritanium : 0));
        trg.molybdenum = hull.molybdenum + (hull.engines * (engine != null ? engine.molybdenum : 0)) + (trg.buildbeamcount * (beam != null ? beam.molybdenum : 0))+ (trg.buildtorpcount * (torpedo != null ? torpedo.molybdenum : 0));
        console.log(trg);
        vgap.addOns.vgapShipTemplates.templates.push(trg);
        vgap.addOns.vgapShipTemplates.saveObjectLocal(vgap.addOns.vgapShipTemplates.templates);
        $("#SaveTemplate").hide();
    };
    
    vgaPlanets.prototype.addOns.vgapShipTemplates.deleteTemplate = function (index) {
        vgap.addOns.vgapShipTemplates.templates.splice(index, 1);   
        vgap.addOns.vgapShipTemplates.saveObjectLocal(vgap.addOns.vgapShipTemplates.templates);
    };
    
    vgaPlanets.prototype.addOns.vgapShipTemplates.buildFromTemplate = function (index) {        
        // console.log("buildFromTemplate");
        
        var template = vgap.addOns.vgapShipTemplates.templates[index];
        var hull = vgap.getHull(template.buildhullid);
        vgap.starbaseScreen.buyHull(1, template.buildhullid);
        if (template.buildengineid > 0)
            vgap.starbaseScreen.buyEngine(hull.engines, template.buildengineid);
        if (template.buildbeamcount > 0)
            vgap.starbaseScreen.buyBeam(template.buildbeamcount, template.buildbeamid);
        if (template.buildtorpcount > 0)
            vgap.starbaseScreen.buyLauncher(template.buildtorpcount, template.buildtorpedoid);
        
        var src = template;
        var trg = vgap.starbaseScreen.starbase;
        trg.buildhullid = src.buildhullid;
        trg.buildengineid = src.buildengineid;
        trg.buildbeamcount = src.buildbeamcount;
        trg.buildbeamid = src.buildbeamid;
        trg.buildtorpcount = src.buildtorpcount;
        trg.buildtorpedoid = src.buildtorpedoid;
        
        vgap.starbaseScreen.showAssembly();
        $("#SaveTemplate").hide();        
    };
    
    vgaPlanets.prototype.addOns.vgapShipTemplates.clearAssembly = function () {
        vgap.starbaseScreen.clearAssembly();
        console.log("Clear Assembly");
    };
    
    vgap.addOns.vgapShipTemplates.saveObjectLocal = function (obj) {        
        localStorage.removeItem("vgapShipTemplates" + vgap.player.raceid);
        localStorage.setItem("vgapShipTemplates" + vgap.player.raceid, JSON.stringify(obj)); 
        //console.log("setTemplates: " + "vgapShipTemplates" + vgap.player.raceid + " : " + localStorage.getItem("vgapShipTemplates" + vgap.player.raceid));
        
    };
    
    
    vgap.addOns.vgapShipTemplates.getObjectLocal = function () {    
        //console.log("getTemplates");
        return JSON.parse(localStorage.getItem("vgapShipTemplates" + vgap.player.raceid));        
    };
    
    
    var old_processLoad = vgaPlanets.prototype.processLoad; 
    vgaPlanets.prototype.processLoad = function (result) {      
        // console.log("processLoad: " + result);
        // console.log("      apply: " + arguments);
        old_processLoad.apply(this, arguments);
        
        if (result.success) {
            var templates = vgap.addOns.vgapShipTemplates.getObjectLocal();
            //console.log("   template: " + templates);
            if (templates == null)
                templates = [];
            this.addOns.vgapShipTemplates.templates = templates;
        }        
    };
    
    var old_showAssembly = vgapStarbaseScreen.prototype.showAssembly;
    vgapStarbaseScreen.prototype.showAssembly = function () {        
        console.log("showAssembly");
        
        old_showAssembly.apply(this, arguments);
        
        var starbase = this.starbase;7
        if (starbase.buildhullid > 0) {
            var html = "<div><table class='CleanTable'>" +
                "<tr><td><div id='SaveTemplate' class='MoreActionButton' onclick='vgap.addOns.vgapShipTemplates.saveTemplate();'>Save Template</div></td></tr>" + 
                "<tr><td><div id='ClearAssembly' class='MoreActionButton' onclick='vgap.addOns.vgapShipTemplates.clearAssembly();'>Clear Assembly</div></td></tr></table></div>";
            $("#AssemblyBack").after(html);
            //console.log("showAssembly - Save");
        }
        else{
            
            //console.log("showAssembly - List");
            
            var templist = "<div id='TemplateList'><table class='CleanTable'>";
            
            
            vgap.addOns.vgapShipTemplates.templates.sort(vgaPlanets.prototype.addOns.vgapShipTemplates.sortTemplates);
            /*var temps = vgap.addOns.vgapShipTemplates.templates;
            if (temps.length > 1) {
                for (i=0; i < temps.length; i++) {                          
                    for (j=0; j < temps.length -1; j++) {
                        if (temps[j].buildhullid > temps[j+1].buildhullid) {
                            var tempTemp = temps[j+1];
                            temps[j+1] = temps[j];
                            temps[j] = tempTemp;
                        }
                    }  
                }
            }*/
            
            for (i=0; i<vgap.addOns.vgapShipTemplates.templates.length; i++) {
                var template = vgap.addOns.vgapShipTemplates.templates[i];
                var hull = vgap.getHull(template.buildhullid);
                var engine = vgap.getEngine(template.buildengineid);
                var beam = vgap.getBeam(template.buildbeamid);
                var torpedo = vgap.getTorpedo(template.buildtorpedoid);
                var planet = vgap.getPlanet(starbase.planetid);           
                var ok_cost = planet.megacredits >= template.cost;
                var ok_duranium = planet.duranium >= template.duranium;
                var ok_tritanium = planet.tritanium >= template.tritanium;
                var ok_molybdenum = planet.molybdenum >= template.molybdenum;
                var ok_techhull = (starbase.hulltechlevel >= hull.techlevel);
                var ok_techengine = (engine == null || starbase.enginetechlevel >= engine.techlevel);
                var ok_techbeam = (beam == null || starbase.beamtechlevel >= beam.techlevel);
                var ok_techtorpedo = (torpedo == null || starbase.torptechlevel >= torpedo.techlevel);
                var ok_all = ok_cost && ok_duranium && ok_tritanium && ok_molybdenum && ok_techhull && ok_techengine && ok_techbeam && ok_techtorpedo;
                
                console.log(hull + engine + beam + torpedo);
                
                templist += "<tr>" + 
                    "<td>" 		  + (ok_all ? "<div class='MoreActionButton' onclick='vgap.addOns.vgapShipTemplates.buildFromTemplate(" + i + ");'>Build </div>" : "<span class='BadText'>Can't Build </span>") + "</td>" +                    
                    "<td colspan=4class='" + (!ok_techhull ?  "BadText" : "") + "'>" + hull.name.toUpperCase() + "</td>" +
                    
                    "</tr>";
                
                templist += "<tr>" +
                    "<td><div class='MoreActionButton' onclick='vgap.addOns.vgapShipTemplates.deleteTemplate(" + i + ");vgap.starbaseScreen.showAssembly();'>Del  </div></td>" + 
                    "<td class='" + (!ok_techengine ? "BadText" : "") + "'>" + (engine != null ? hull.engines + "x " + engine.name : "") + "</td>" +
                    "<td class='" + (!ok_techbeam ? "BadText" : "") + "'>" + (beam != null ? template.buildbeamcount + "x " + beam.name : "") + "</td>" +
                    "<td class='" + (!ok_techtorpedo ? "BadText" : "") + "'>" + (torpedo != null ? template.buildtorpcount + "x " + torpedo.name : (hull.fighterbays>0 ? hull.fighterbays + "x Fighter Bays" : "")) + "</td>" +                    
                    "</tr>";
                
                templist += "<tr>" +
                    "<td></td>" +
                    "<td class='" + (!ok_cost ? "BadText" : "") + "'> M: " + template.cost + "(" + planet.megacredits + ")</td>" + 
                    "<td class='" + (!ok_duranium ? "BadText" : "") + "'> D: " + template.duranium + "(" + planet.duranium + ")</td>" +                    
                    "<td class='" + (!ok_tritanium ? "BadText" : "") + "'> T: " + template.tritanium + "(" + planet.tritanium + ")</td>" +                    
                    "<td class='" + (!ok_molybdenum ? "BadText" : "") + "'> M: " + template.molybdenum + "(" + planet.molybdenum + ")</td>" +
                    "</tr>";
                
                templist += "<tr><td colspan=5><hr></td></tr>";          
            }
            templist += "</table></div>";
            
            $(templist).appendTo("#MoreScreen");
            $("#TemplateList td").attr("style", "padding-right: 10px;");
            $("#TemplateList").height($(window).height() - 100);
            //console.log($("*").queue());
            setTimeout(function () {$("#TemplateList").jScrollPane();}, 500);
        }
        
    };
    
}


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