Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[MV] [AYUDA] Options Creator (SumRndmDde)

Ver el tema anterior Ver el tema siguiente Ir abajo

RMMV [MV] [AYUDA] Options Creator (SumRndmDde)

Mensaje por Oscar92player el 2018-02-06, 18:02

¡Hola a todos otra vez!

Necesito un poco de ayuda intentando arreglar un error con el plugin Options Creator del usuario SumRndmDde (es un add-on del plugin Options Upgrade). Ya había reportado este error a su autor original hace meses, en su página web, pero se ve que ya no trabaja más en plugins y ha desaparecido casi completamente de la red (como parece que les está pasando a muchos últimamente).

Por eso necesito vuestra ayuda para arreglarlo, ya que yo no tengo suficiente conocimiento sobre JavaScript como para ver dónde está fallando el código.

El error consiste en que una vez que se habilita este plugin, los comandos de las opciones no reaccionan como deberían cuando pulsas las teclas o botones derecho e izquierdo. Por defecto, el RPG Maker MV usa la tecla izquierda para reducir una cifra en las opciones, y la derecha para aumentarla (o en caso de activar o desactivar una opción, la tecla izquierda será para ponerla en OFF, y la derecha en ON). También puede usarse la tecla o el botón de Confirmar para aumentar la cifra o cambiar la variable a ON/OFF.

Pero habilitando este plugin, si por ejemplo, tienes la opción de cambiar el volumen del juego, pulses la tecla que pulses, éste aumentará, pero no podrá reducirse. Una vez llegue al máximo, que es el 100%, al pulsar de nuevo cualquiera de las teclas, éste descenderá directamente al 0%.

Básicamente, las funciones de las teclas y botones de derecha a izquierda se las carga, y casualmente nadie había reportado antes este error, ni el creador de este plugin se molestó en testearlo lo suficiente o reaccionar a tiempo para arreglarlo (y mucho menos responder al reporte detallado que le hice), lo que me parece una chapuza por su parte, teniendo en cuenta que este plugin permite añadir variables nuevas al menú de opciones del juego.

El código de plugin en concreto es éste:
Código:
/*:
 * @plugindesc Provides developers with the ability to add "options" to the Options Menu.
 * @author SumRndmDde
 *
 * @param Options
 * @type Struct<Options>[]
 * @desc This is a list of all the options created through this plugin.
 * @default []
 *
 * @help
 *
 * Options Creator
 * Version 1.00
 * SumRndmDde
 *
 *
 * This plugin requires the Game Upgrade plugin:
 * http://sumrndm.site/game-upgrade/
 *
 * This plugin requires the Options Upgrade plugin:
 * http://sumrndm.site/options-upgrade/
 *
 *
 * This plugin provides developers with the ability to add "options" to the
 * Options Menu.
 *
 *
 * =============================================================================
 *  Option Explanations
 * =============================================================================
 *
 * To add an option, one must add to the "Options" list parameter.
 * Each piece of the list has the following properties:
 *
 *
 * ----------------
 * Name
 * ----------------
 * The name of the option that will appear in the option menu.
 *
 *
 * ----------------
 * Category
 * ----------------
 * The category the option will fall into for the Options Upgrade plugin.
 *
 *
 * ----------------
 * Description
 * ----------------
 * The description used for this option in the Options Upgrade set up.
 *
 *
 * ----------------
 * Position
 * ----------------
 * The position of the option on the options menu.
 *
 * Above  -  Above all the default options
 * Middle -  Between the general and volume options
 * Below  -  Below all the default options
 *
 *
 * ----------------
 * Condition
 * ----------------
 * This JavaScript evaluation that must be true for this option to
 * appear in the menu. If you wish to not use any condition, you
 * can simply set this to "true". Keep in mind this condition
 * is only checked and applied upon initialization.
 *
 *
 * ----------------
 * Variable ID
 * ----------------
 * The variable that stores the result of the option.
 * This variable will persist through all save files!
 *
 *
 * ----------------
 * Default Value
 * ----------------
 * The default value used for the option if none is specified.
 *
 *
 * ----------------
 * On Change Eval
 * ----------------
 * The JavaScript code that is run when this option is changed.
 * The option's current value is stored in "value".
 *
 * This means if you change the option to its second option, then
 * the eval will run and "value" will be 2.
 *
 *
 * ----------------
 * Options
 * ----------------
 * These are all the option names.
 * Each option name corresponds to the index listed on the left.
 * For example, if the player choose the first option, then the value 1 will
 * be stored in the variable. The second option would result in the value
 * of 2, the third would be 3, etc..
 *
 *
 * =============================================================================
 *  End of Help File
 * =============================================================================
 *
 * Welcome to the bottom of the Help file.
 *
 *
 * Thank you for reading! Please submit any bugs here:
 * http://sumrndm.site/report-bug/
 *
 *
 * Check out more of my content in these places:
 * http://sumrndm.site/
 * https://www.youtube.com/SumRndmDde
 *
 *
 * Until next time!
 *   ~ SumRndmDde
 *
 */

/*~struct~Options:
 *
 * @param Name
 * @desc The name of the option that will appear in the option menu.
 * @default
 *
 * @param Category
 * @desc The category the option will fall into for the Options Upgrade plugin.
 * @default General
 *
 * @param Description
 * @type note
 * @desc The description used for this option in the Options Upgrade set up.
 * @default ""
 *
 * @param Position
 * @type select
 * @option Above
 * @option Middle
 * @option Below
 * @desc The position of the option on the options menu.
 * @default Above
 *
 * @param Condition
 * @desc This JavaScript evaluation that must be true for this option to appear in the menu.
 * @default true
 *
 * @param Variable ID
 * @type variable
 * @desc The variable that stores the result of the option.
 * This variable will persist through all save files!
 * @default 1
 *
 * @param Default Value
 * @type number
 * @desc The default value used for the option if none is specified.
 * @default 1
 *
 * @param On Change Eval
 * @type note
 * @desc The JavaScript code that is run when this option is changed.
 * The option's current value is stored in "value".
 * @default ""
 *
 * @param Options
 * @type text[]
 * @desc These are all the option names. Each option name corresponds to the index listed on the left.
 * @default []
 *
 */

var SRD = SRD || {};
SRD.OptionsCreator = SRD.OptionsCreator || {};

var Imported = Imported || {};
Imported["SumRndmDde Options Creator"] = 1.00;

(function(_) {

"use strict";

//-----------------------------------------------------------------------------
// SRD.Requirements
//-----------------------------------------------------------------------------

_.alertNeedGameUpgrade = function() {
 alert("The 'SRD_GameUpgrade' plugin is required for using the 'SRD_OptionsCreator' plugin.");
 if(confirm("Do you want to open the download page to 'SRD_GameUpgrade'?")) {
 window.open('http://sumrndm.site/game-upgrade/');
 }
};

if(!Imported["SumRndmDde Game Upgrade"]) {
 _.alertNeedGameUpgrade();
 return;
}

if(SRD.requirePlugin(
 'SumRndmDde Options Upgrade',
 'SRD_OptionsCreator',
 'SRD_OptionsUpgrade',
 'http://sumrndm.site/options-upgrade/')) return;

//-----------------------------------------------------------------------------
// SRD.OptionsCreator
//-----------------------------------------------------------------------------

_.data = SRD.parse(PluginManager.parameters('SRD_OptionsCreator')['Options'], true);

_.varsUsed = {};

_.setup = function($) {
 for(var i = 0; i < _.data.length; i++) {
 _.varsUsed[String(_.data[i]['Variable ID'])] = i;
 $.commands.push('option-creator-' + i);
 $.comCategories.push(String(_.data[i]['Category']));
 $.comDescriptions.push(String(_.data[i]['Description']));
 }
};

_.setup(SRD.OptionsUpgrade);

//-----------------------------------------------------------------------------
// ConfigManager
//-----------------------------------------------------------------------------

ConfigManager._customData = [];

ConfigManager.getCustomData = function(id) {
 return this._customData[id];
};

ConfigManager.setCustomData = function(id, value) {
 try {
 eval(_.data[id]['On Change Eval']);
 } catch(e) {
 console.error(e);
 }
 this._customData[id] = value;
 if($gameMap) {
 $gameMap.requestRefresh();
 }
};

_.ConfigManager_makeData = ConfigManager.makeData;
ConfigManager.makeData = function() {
 var config = _.ConfigManager_makeData.apply(this, arguments);
 for(var i = 0; i < _.data.length; i++) {
 config['custom-data-' + i] = this.getCustomData(i);
 }
 return config;
};

_.ConfigManager_applyData = ConfigManager.applyData;
ConfigManager.applyData = function(config) {
 _.ConfigManager_applyData.apply(this, arguments);
 for(var i = 0; i < _.data.length; i++) {
 this.setCustomData(i, this.readCustomData(config, i));
 }
};

ConfigManager.readCustomData = function(config, index) {
 var value = config['custom-data-' + index];
 if (value !== undefined) {
 return parseInt(value);
 } else {
 return parseInt(_.data[index]['Default Value']);
 }
};

//-----------------------------------------------------------------------------
// Game_Variables
//-----------------------------------------------------------------------------

_.Game_Variables_value = Game_Variables.prototype.value;
Game_Variables.prototype.value = function(variableId) {
 var configIndex = _.varsUsed[String(variableId)];
 if(configIndex !== undefined) {
 return ConfigManager.getCustomData(configIndex);
 }
    return _.Game_Variables_value.apply(this, arguments);
};

_.Game_Variables_setValue = Game_Variables.prototype.setValue;
Game_Variables.prototype.setValue = function(variableId, value) {
 var configIndex = _.varsUsed[String(variableId)];
 if(configIndex !== undefined) {
 ConfigManager.setCustomData(configIndex, value);
 this.onChange();
 } else {
 _.Game_Variables_setValue.apply(this, arguments);
 }
};

//-----------------------------------------------------------------------------
// Window_Options
//-----------------------------------------------------------------------------

_.Window_Options_makeCommandList = Window_Options.prototype.makeCommandList;
Window_Options.prototype.makeCommandList = function() {
 this.makeCustomCommands('Above');
 _.Window_Options_makeCommandList.apply(this, arguments);
 this.makeCustomCommands('Below');
};

_.Window_Options_addGeneralOptions = Window_Options.prototype.addGeneralOptions;
Window_Options.prototype.addGeneralOptions = function() {
 _.Window_Options_addGeneralOptions.apply(this, arguments);
 this.makeCustomCommands('Middle');
};

Window_Options.prototype.makeCustomCommands = function(position) {
 for(var i = 0; i < _.data.length; i++) {
 if(this.getCustomCondition(i) && _.data[i]['Position'] === position) {
 this.addCommand(_.data[i]['Name'], 'option-creator-' + i);
 }
 }
};

Window_Options.prototype.getCustomCondition = function(index) {
 try {
 return !!eval(_.data[index]['Condition'])
 } catch(e) {
 console.error(e);
 return false;
 }
};

_.Window_Options_getConfigValue = Window_Options.prototype.getConfigValue;
Window_Options.prototype.getConfigValue = function(symbol) {
 if(this.isCustomSymbol(symbol)) {
 var customIndex = parseInt(symbol.substring(15));
 return ConfigManager.getCustomData(customIndex);
 } else {
 return _.Window_Options_getConfigValue.apply(this, arguments);
 }
};

_.Window_Options_setConfigValue = Window_Options.prototype.setConfigValue;
Window_Options.prototype.setConfigValue = function(symbol, value) {
 if(this.isCustomSymbol(symbol)) {
 var customIndex = parseInt(symbol.substring(15));
 ConfigManager.setCustomData(customIndex, value);
 } else {
 _.Window_Options_setConfigValue.apply(this, arguments);
 }
};

_.Window_Options_statusText = Window_Options.prototype.statusText;
Window_Options.prototype.statusText = function(index) {
 var symbol = this.commandSymbol(index);
 var value = this.getConfigValue(symbol);
 if (this.isCustomSymbol(symbol)) {
 var customIndex = parseInt(symbol.substring(15));
 return _.data[customIndex]['Options'][value - 1];
 } else {
 return _.Window_Options_statusText.apply(this, arguments);
 }
};

Window_Options.prototype.isCustomSymbol = function(symbol) {
 return symbol.contains('option-creator-');
};

_.Window_Options_processOk = Window_Options.prototype.processOk;
Window_Options.prototype.processOk = function() {
 var index = this.index();
 var symbol = this.commandSymbol(index);
 var value = this.getConfigValue(symbol);
 if (this.isCustomSymbol(symbol)) {
 var customIndex = parseInt(symbol.substring(15));
 value += 1;
 if(!_.data[customIndex]['Options'][value - 1]) {
 value = 1;
 }
 this.changeValue(symbol, value);
 } else {
 _.Window_Options_processOk.apply(this, arguments);
 }
};

Window_Options.prototype.cursorRight = function(wrap) {
 var index = this.index();
 var symbol = this.commandSymbol(index);
 var value = this.getConfigValue(symbol);
 if (this.isCustomSymbol(symbol)) {
 var customIndex = parseInt(symbol.substring(15));
 value += 1;
 if(value > _.data[customIndex]['Options'].length) {
 value = _.data[customIndex]['Options'].length;
 }
 this.changeValue(symbol, value);
 } else {
 _.Window_Options_processOk.apply(this, arguments);
 }
};

Window_Options.prototype.cursorLeft = function(wrap) {
 var index = this.index();
 var symbol = this.commandSymbol(index);
 var value = this.getConfigValue(symbol);
 if (this.isCustomSymbol(symbol)) {
 var customIndex = parseInt(symbol.substring(15));
 value -= 1;
 if(value < 1) value = 1;
 this.changeValue(symbol, value);
 } else {
 _.Window_Options_processOk.apply(this, arguments);
 }
};

})(SRD.OptionsCreator);

¡Por favor, necesito vuestra ayuda para arreglarlo! En los foros oficiales han hecho caso omiso, y parece que tampoco nadie va a estar interesado en meterle mano al asunto.
avatar
Oscar92player
Principiante
Principiante

0/3

Créditos 336

Gracias : 33

Volver arriba Ir abajo

RMMV Re: [MV] [AYUDA] Options Creator (SumRndmDde)

Mensaje por Oscar92player el 2018-02-07, 10:44

Hola a todos, sólo quería avisar de que me han dado la solución que buscaba.

En el plugin, entre las líneas 388 y 416, hay que sustituir lo escrito, por esto otro:
Código:
_.Window_Options_cursorRight = Window_Options.prototype.cursorRight;
Window_Options.prototype.cursorRight = function(wrap) {
    var index = this.index();
    var symbol = this.commandSymbol(index);
    var value = this.getConfigValue(symbol);
    if (this.isCustomSymbol(symbol)) {
        var customIndex = parseInt(symbol.substring(15));
        value += 1;
        if(value > _.data[customIndex]['Options'].length) {
            value = _.data[customIndex]['Options'].length;
        }
        this.changeValue(symbol, value);
    } else {
        _.Window_Options_cursorRight.apply(this, arguments);
    }
};

_.Window_Options_cursorLeft = Window_Options.prototype.cursorLeft;
Window_Options.prototype.cursorLeft = function(wrap) {
    var index = this.index();
    var symbol = this.commandSymbol(index);
    var value = this.getConfigValue(symbol);
    if (this.isCustomSymbol(symbol)) {
        var customIndex = parseInt(symbol.substring(15));
        value -= 1;
        if(value < 1) value = 1;
        this.changeValue(symbol, value);
    } else {
        _.Window_Options_cursorLeft.apply(this, arguments);
    }
};

De ese modo, el manejo de activación/desactivación y los dígitos de todas las opciones volverán a funcionar como deberían.

@Wecoc, por favor, cierra el tema. Ya puedo darlo por resuelto.
avatar
Oscar92player
Principiante
Principiante

0/3

Créditos 336

Gracias : 33

Volver arriba Ir abajo

RMMV Re: [MV] [AYUDA] Options Creator (SumRndmDde)

Mensaje por orochii el 2018-02-07, 16:14

Me alegra que hayas logrado solucionarlo. Iba a abrir el MV por investigar, mira que tenía la intención xD. Cofcof.

Eso de que van desapareciendo poco a poco la gente del internet se oye un poco preocupante. SRD recuerdo que empezó a estresarle el scene o algo así, no sé si se convertirá en algo más grande eso 🤔. Quiza Discord es un mal innecesario, xD.

Algún día eso podría convertirse en el nuevo tema de debate, que reemplazará a la pregunta sin respuesta: ¿cuál es el mejor maker? xD.

Salut.
avatar
orochii
Reportero

0/3

Créditos 7583

Gracias : 403

Volver arriba Ir abajo

RMMV Re: [MV] [AYUDA] Options Creator (SumRndmDde)

Mensaje por Oscar92player el 2018-02-07, 19:20

@orochii escribió:Me alegra que hayas logrado solucionarlo. Iba a abrir el MV por investigar, mira que tenía la intención xD. Cofcof.

Eso de que van desapareciendo poco a poco la gente del internet se oye un poco preocupante. SRD recuerdo que empezó a estresarle el scene o algo así, no sé si se convertirá en algo más grande eso 🤔. Quiza Discord es un mal innecesario, xD.

Algún día eso podría convertirse en el nuevo tema de debate, que reemplazará a la pregunta sin respuesta: ¿cuál es el mejor maker? xD.

Salut.

Uy, pues yo ya estaba empezando a pensar en añadirte a la lista de desaparecidos en acto de servicio xD

No sé, hay muchos scripters que desde que tengo memoria, se empeñan en hacer cientos de scripts o plugins para los RPG Maker desde el mismo día de salida (o incluso antes, como Yanfly con el MV), y que poco a poco, o desaparecen, o hacen acto de presencia nada más que para comentar o actualizar su estado en la web oficial.

Pero ya verás... cuando salga un nuevo RPG Maker, saldrán de nuevo de debajo de las piedras xD

Y me viene a la memoria... tú y yo tenemos un asunto pendiente todavía con cierto tema (cof cof, este tema, cof cof), referente al RPG Maker VX. ¬3¬
avatar
Oscar92player
Principiante
Principiante

0/3

Créditos 336

Gracias : 33

Volver arriba Ir abajo

RMMV Re: [MV] [AYUDA] Options Creator (SumRndmDde)

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.