Jump to content
Sign in to follow this  
wariolandgoldpiramid

[SOLVED IT MYSELF] SumRndmDde's Tilte Command Plugin question (how to add custom shutdown)

Recommended Posts

I'm using SumRndmDde's "Title Command Plugin"  and I need some help setting it up.

I kind of don't like the way the Shutdown command is handled, with it simply closing the window.

I would much rather have the command activate the custom shutdown plugin I have downloaded.

 

Here's the code of that custom shutdown plugin.

 

 

 

/******************************************************************************
 * CXJ_Exit.js                                                                *
 ******************************************************************************
 * Exit v1.0.1                                                                *
 * By G.A.M. Kertopermono, a.k.a. GaryCXJk                                    *
 * License: CC0 1.0 Universal                                                 *
 *          https://creativecommons.org/publicdomain/zero/1.0/                *
 ******************************************************************************/
var Imported = Imported || {};
Imported.CXJ_Exit = "1.0.1";

/*:
 * @plugindesc Adds an exit option to desktop versions of the game
 * @author G.A.M. Kertopermono
 *
 * @param Text - Exit
 * @desc The exit text.
 * @default Exit
 *
 * @param Text - To Desktop
 * @desc The exit to desktop text.
 * @default To Desktop
 *
 * @param Add to title
 * @desc Add the exit option to the title screen?
 * Values: true || false
 * @default true
 *
 * @param Add to Game End
 * @desc Add the exit option to the Game End window?
 * Values: true || false
 * @default true
 *
 * @help
 * ============================================================================
 * = About                                                                    =
 * ============================================================================
 *
 * As you all know HTML5 games don't generally need exit buttons. Neither do
 * mobile versions, as you can just Back or Home your way out. But with desktop
 * that's a whole different thing. You do want to get out without having to
 * resort to using CTRL+F4 or something similar.
 *
 * This plugin adds this option to both the title screen as well as the Game
 * End option.
 *
 * ============================================================================
 * = Usage                                                                    =
 * ============================================================================
 *
 * After you add the plugin, you can set the parameters. They're pretty much
 * self-explanatory. "Text - Exit" and "Text - To Desktop" are the text labels
 * for each respective button. The first appears in the title screen, the
 * latter in the Game End window.
 *
 * "Add to title" and "Add to Game End" both are boolean values, and determine
 * whether or not the new buttons should be added.
 *
 * On non-desktop browsers the game won't add the exit options. They could be
 * made visible, but they don't work, so it's pretty useless to keep them.
 * 
 * ============================================================================
 * = Plugin Commands                                                          =
 * ============================================================================
 *
 * This plugin contains Plugin Commands. These are as followed:
 *
 * Exit
 * ----
 * Exits the game. This can be executed for both desktop and browser-based
 * clients, but it would only work on desktop.
 *
 * ============================================================================
 * = Compatibility                                                            =
 * ============================================================================
 * 
 * This plugin overwrites the functions listed below, but still uses the old
 * version, either as the basis for the function or as a fallback. It is
 * advised to place this script below other scripts that use these functions.
 *
 * - Scene_Title.prototype.createCommandWindow
 * - Window_TitleCommand.prototype.makeCommandList
 * - Scene_GameEnd.prototype.createCommandWindow
 * - Window_GameEnd.prototype.makeCommandList
 * - Game_Interpreter.prototype.pluginCommand
 *
 * ============================================================================
 * = Changelog                                                                =
 * ============================================================================
 *
 * 1.0.1 (2015-10-27)
 * ------------------
 *
 * * Added script rename fallback
 *
 * 1.0.0 (2015-10-26)
 * ------------------
 *
 * * Initial release
 *
 * ============================================================================
 * = License                                                                  =
 * ============================================================================
 *
 * CC0 1.0 Universal (CC0 1.0)
 * Public Domain Dedication
 *
 * The person who associated a work with this deed has dedicated the work to
 * the public domain by waiving all of his or her rights to the work worldwide
 * under copyright law, including all related and neighboring rights, to the
 * extent allowed by law.
 *
 * You can copy, modify, distribute and perform the work, even for commercial
 * purposes, all without asking permission.
 *
 * https://creativecommons.org/publicdomain/zero/1.0/
 * ============================================================================
 */
 
+function() {
  if(Utils.isNwjs()) {
    var _pluginName = 'CXJ_Exit';
    var _propNames = ['Text - Exit', 'Text - To Desktop', 'Add to title', 'Add to Game End'];
    var _defaultParams = {
      'Text - Exit' : 'Exit',
      'Text - To Desktop' : 'To Desktop',
      'Add to title' : 'true',
      'Add to Game End' : 'true'
    };

    var _getParameters = function(pluginName, propNames, defaultParams) {
      
      /* Private function that checks plugin content */
      var _checkPluginContent = function(parameters) {
        for(var prop in parameters) {
          if(parameters.hasOwnProperty(prop)) {
            return true;
          }
        }
        return false;
      }
      
      var parameters = PluginManager.parameters(pluginName);
      
      if(_checkPluginContent(parameters)) {
        return parameters;
      }
      var currentScript = document.currentScript;
      if(currentScript) {
        var scriptName = document.currentScript.src;
        scriptName = scriptName.substr(scriptName.indexOf('js/plugins/') + 11);
        scriptName = scriptName.substr(0, scriptName.lastIndexOf('.js'));
        parameters = PluginManager.parameters(scriptName);
      }
      
      if(_checkPluginContent(parameters)) {
        return parameters;
      }

      for(var idx = 0; idx < $plugins.length; idx++) {
        var plugin = $plugins[idx];
        var params = plugin.parameters;
        if(plugin.description.indexOf('<' + pluginName + '>') > -1) {
          return params;
        }
        var hasFound = true;
        for(var idx = 0; idx < _propNames.length; idx++) {
          if(!params.hasOwnProperty(propNames[idx])) {
            hasFound = false;
            break;
          }
        }
        if(hasFound) {
          return params;
        }
      }
      return _defaultParams;
    }
    
    var parameters = _getParameters(_pluginName, _propNames, _defaultParams);
    
    TextManager.cxjExit = parameters['Text - Exit'];
    TextManager.cxjToDesktop = parameters['Text - To Desktop'];
    
    /*----------------*
     *- Title screen -*
     *----------------*/
    if(parameters['Add to title'].toLowerCase() != 'false') {
      +function() {
        var oldCreateCommandWindow = Scene_Title.prototype.createCommandWindow;
        Scene_Title.prototype.createCommandWindow = function() {
          oldCreateCommandWindow.apply(this, arguments);
          this._commandWindow.setHandler('exit',  this.commandExit.bind(this));
        }
        
        Scene_Title.prototype.commandExit = function() {
          this._commandWindow.close();
          this.fadeOutAll();
          SceneManager.exit();
        }
        
        var oldMakeCommandList = Window_TitleCommand.prototype.makeCommandList;
        Window_TitleCommand.prototype.makeCommandList = function() {
          oldMakeCommandList.apply(this, arguments);
          this.addCommand(TextManager.cxjExit, 'exit');
        }
      }();
    }
    
    /*------------*
     *- Game End -*
     *------------*/
     
    if(parameters['Add to Game End'].toLowerCase() != 'false') {
      +function() {
        var oldCreateCommandWindow = Scene_GameEnd.prototype.createCommandWindow;
        Scene_GameEnd.prototype.createCommandWindow = function() {
          oldCreateCommandWindow.call(this);
          this._commandWindow.setHandler('exit',  this.commandExit.bind(this));
        }
        
        Scene_GameEnd.prototype.commandExit = function() {
          this._commandWindow.close();
          this.fadeOutAll();
          SceneManager.exit();
        }
        
        var oldMakeCommandList = Window_GameEnd.prototype.makeCommandList;
        Window_GameEnd.prototype.makeCommandList = function() {
          oldMakeCommandList.call(this);
          for(var idx = 0; idx < this._list.length; idx++) {
            if(this._list[idx].symbol == 'cancel') {
              this._list.splice(idx, 0, {name: TextManager.cxjToDesktop, symbol: 'exit', enabled: true, ext: null});
              break;
            }
          }
        }
      }();
    }
    
    /*------------------*
     *- Plugin Command -*
     *------------------*/

    +function() {
      var oldPluginCommand = Game_Interpreter.prototype.pluginCommand;
      Game_Interpreter.prototype.pluginCommand = function(command, args) {
        oldPluginCommand.call(this, command, args);
        if (command === 'Exit') {
          SceneManager.exit();
        }
      };
    }();
  }
}();

 

 

 

I need to know what Action (JS eval that binds a function to 'this') I need to use in order for this command to work, and activate said plugin.

 

EDIT:

Well, looks like I solved it already. I'm still new to analyzing MV plugins code, and I don't know JS that well. But, analyzing the code, I was able to find the code I needed, "this.commandExit.bind(this)".

 

I gotta stop making new topics so quickly, I should try harder to find the solutions myself...

Edited by wariolandgoldpiramid
  • Like 1

Share this post


Link to post
Share on other sites

This thread is closed, due to problem being solved. If for some reason anybody would like to reopen this thread, just notify a moderator or report the first post on this thread and ask for reopening in the reason box stating why. Thank you! =)

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
Top ArrowTop Arrow Highlighted