Planets.nu ship templates

Adds saving to and building from ship templates

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

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

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

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

你需要先安裝一款使用者腳本管理器擴展,比如 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);