Code:
/*============================================================================
* ## Plugin Info
*----------------------------------------------------------------------------
* # Plugin Name
* DoubleX RMMV Dynamic Data
*----------------------------------------------------------------------------
* # Terms Of Use
* You shall keep this plugin's Plugin Info part's contents intact
* You shalln't claim that this plugin's written by anyone other than
* DoubleX or his aliases
* None of the above applies to DoubleX or his aliases
*----------------------------------------------------------------------------
* # Prerequisites
* Abilities:
* 1. Thorough comprehensions to the other custom plugins to edit their
* data loaded and cached during game executions
*----------------------------------------------------------------------------
* # Links
* This plugin:
* 1. http://pastebin.com/6qxskYb9
* Mentioned Patreon Supporters:
* https://www.patreon.com/posts/71738797
*----------------------------------------------------------------------------
* # Author
* DoubleX
*----------------------------------------------------------------------------
* # Changelog
* v1.01d(GMT 1400 27-1-2016):
* 1. Fixed undefined DD and DoubleX_RMMV.Dynamic_Data in defining latter
* 2. Fixed caching original data before they're completed loaded bug
* v1.01c(GMT 0100 26-12-2015):
* 1. Fixed corupting the database upon reloading it on the title screen
* 2. Fixed some syntax errors due to typos
* v1.01b(GMT 0900 25-11-2015):
* 1. Fixed missing param dynamic_data_states in the plugin manager bug
* 2. Fixed accessing private variables inside $gameSystem bug
* 3. The aliased function names becomes more unique to this plugin
* v1.01a(GMT 1200 16-11-2015):
* 1. Lets users set which part of the database changes will be saved
* 2. The aliased functions can be accessed by other custom plugins now
* v1.00b(GMT 0800 11-11-2015):
* 1. Added descriptions that will be shown in the plugin manager
* v1.00a(GMT 0100 31-10-2015):
* 1. 1st version of this plugin finished
*============================================================================*/
/*:
* @plugindesc Stores the database changes done by users during game executions
* Can't be used with data read from the database files upon use
* Can't be used with any map data
* @author DoubleX
*
* @param dynamicDataActors
* @desc Saves the actors part of the database changes in savefiles if and only
* if dynamicDataActors is set as true
* @default false
*
* @param dynamicDataClasses
* @desc Saves the classes part of the database changes in savefiles if and only
* if dynamicDataClasses is set as true
* @default false
*
* @param dynamicDataSkills
* @desc Saves the skills part of the database changes in savefiles if and only
* if dynamicDataSkills is set as true
* @default false
*
* @param dynamicDataItems
* @desc Saves the items part of the database changes in savefiles if and only
* if dynamicDataItems is set as true
* @default false
*
* @param dynamicDataWeapons
* @desc Saves the weapons part of the database changes in savefiles if and only
* if dynamicDataWeapons is set as true
* @default false
*
* @param dynamicDataArmors
* @desc Saves the armors part of the database changes in savefiles if and only
* if dynamicDataArmors is set as true
* @default false
*
* @param dynamicDataEnemies
* @desc Saves the enemies part of the database changes in savefiles if and only
* if dynamicDataEnemies is set as true
* @default false
*
* @param dynamicDataTroops
* @desc Saves the troops part of the database changes in savefiles if and only
* if dynamicDataTroops is set as true
* @default false
*
* @param dynamicDataStates
* @desc Saves the states part of the database changes in savefiles if and only
* if dynamicDataStates is set as true
* @default false
*
* @param dynamicDataAnimations
* @desc Saves the animations part of the database changes in savefiles if and
* only if dynamicDataAnimations is set as true
* @default false
*
* @param dynamicDataTilesets
* @desc Saves the tilesets part of the database changes in savefiles if and
* only if dynamicDataTilesets is set as true
* @default false
*
* @param dynamicDataCommonEvents
* @desc Saves the common events part of the database changes in savefiles if
* and only if dynamicDataCommonEvents is set as true
* @default false
*
* @param dynamicDataSystem
* @desc Saves the system part of the database changes in savefiles if and only
* if dynamicDataSystem is set as true
* @default false
*
* @help
* In the default RMMV setting, you can edit the loaded parts of the database
* but you can't save those changes, as the database's always loaded from the
* raw json files upon game start
* With this plugin, all the loaded parts of the database will be saved in
* savefiles and loaded from those savefiles upon loading those savefiles
* The default plugin file name is DoubleX RMMV Dynamic Data v101d
* If you want to change that, you must edit the value of
* DoubleX_RMMV.Dynamic_Data_File, which must be done via opening the plugin
* js file directly
*/
"use strict";
var DoubleX_RMMV = DoubleX_RMMV || {};
DoubleX_RMMV["Dynamic Data"] = "v1.01d";
// The plugin file name must be the same as DoubleX_RMMV.Dynamic_Data_File
DoubleX_RMMV.Dynamic_Data_File = "DoubleX RMMV Dynamic Data v101d";
/*============================================================================
* ## Plugin Implementations
* You need not edit this part as it's about how this plugin works
*----------------------------------------------------------------------------
* # Plugin Support Info:
* 1. Prerequisites
* - Some Javascript coding proficiency to fully comprehend this
* plugin
* 2. Function documentation
* - The 1st part describes why this function's rewritten/extended for
* rewritten/extended functions or what the function does for new
* functions
* - The 2nd part describes what the arguments of the function are
* - The 3rd part informs which version rewritten, extended or created
* this function
* - The 4th part informs whether the function's rewritten or new
* - The 5th part informs whether the function's a real or potential
* hotspot
* - The 6th part describes how this function works for new functions
* only, and describes the parts added, removed or rewritten for
* rewritten or extended functions only
* Example:
* /*----------------------------------------------------------------------
* * Why rewrite/extended/What this function does
* *----------------------------------------------------------------------*/
/* // arguments: What these arguments are
* functionName = function(arguments) { // Version X+; Hotspot
* // Added/Removed/Rewritten to do something/How this function works
* functionContents
* //
* } // functionName
*----------------------------------------------------------------------------*/
DoubleX_RMMV.Dynamic_Data = {
// Stores all this plugin's parameters that are shown in the plugin manager
params: PluginManager.parameters(DoubleX_RMMV.Dynamic_Data_File),
baseData: {}
};
(function(DD) {
Object.keys(DD.params).forEach(function(param) {
DD[param] = DD.params[param] === "true";
});
DD.storeBaseData = function() {
var data = [$dataActors, $dataClasses, $dataSkills, $dataItems];
data = data.concat([$dataWeapons, $dataArmors, $dataEnemies]);
data = data.concat([$dataTroops, $dataStates, $dataAnimations]);
data = data.concat([$dataTilesets, $dataCommonEvents, $dataSystem]);
var params = Object.keys(DD.params);
var baseData = DD.baseData;
for (var index = 0, length = data.length; index < length; index++) {
baseData[params[index]] = data[index];
}
}; // DD.storeBaseData
DD.restoreBaseData = function() {
var baseData = DD.baseData;
$dataActors = baseData.dynamicDataActors;
$dataClasses = baseData.dynamicDataClasses;
$dataSkills = baseData.dynamicDataSkills;
$dataItems = baseData.dynamicDataItems;
$dataWeapons = baseData.dynamicDataWeapons;
$dataArmors = baseData.dynamicDataArmors;
$dataEnemies = baseData.dynamicDataEnemies;
$dataTroops = baseData.dynamicDataTroops;
$dataStates = baseData.dynamicDataStates;
$dataAnimations = baseData.dynamicDataAnimations;
$dataTilesets = baseData.dynamicDataTilesets;
$dataCommonEvents = baseData.dynamicDataCommonEvents;
$dataSystem = baseData.dynamicDataSystem;
}; // DD.restoreBaseData
DD.DataManager = {};
var DM = DD.DataManager;
DM.saveGameWithoutRescue = DataManager.saveGameWithoutRescue;
DataManager.saveGameWithoutRescue = function(savefileId) {
DM.saveDynamicData.call(this); // Added
DM.saveGameWithoutRescue.apply(this, arguments);
}; // DataManager.saveGameWithoutRescue
DM.extractSaveContents = DataManager.extractSaveContents;
DataManager.extractSaveContents = function(savefileId) {
DM.extractSaveContents.apply(this, arguments);
DM.loadDynamicData.call(this); // Added
}; // DataManager.extractSaveContents
DM.saveDynamicData = function() { // New
var data = [$dataActors, $dataClasses, $dataSkills, $dataItems];
data = data.concat([$dataWeapons, $dataArmors, $dataEnemies]);
data = data.concat([$dataTroops, $dataStates, $dataAnimations]);
data = data.concat([$dataTilesets, $dataCommonEvents, $dataSystem]);
var params = Object.keys(DD.params);
if (params.length !== data.length) {
throw new Error("Errors in reading params from the plugin manager");
}
for (var index = 0, length = data.length; index < length; index++) {
if (DD[params[index]]) { $gameSystem[params[index]] = data[index]; }
}
}; // DM.saveDynamicData
DM.loadDynamicData = function() { // New
if (DD.dynamicDataActors) {
$dataActors = $gameSystem.dynamicDataActors;
}
if (DD.dynamicDataClasses) {
$dataClasses = $gameSystem.dynamicDataClasses;
}
if (DD.dynamicDataSkills) {
$dataSkills = $gameSystem.dynamicDataSkills;
}
if (DD.dynamicDataItems) {
$dataItems = $gameSystem.dynamicDataItems;
}
if (DD.dynamicDataWeapons) {
$dataWeapons = $gameSystem.dynamicDataWeapons;
}
if (DD.dynamicDataArmors) {
$dataArmors = $gameSystem.dynamicDataArmors;
}
if (DD.dynamicDataEnemies) {
$dataEnemies = $gameSystem.dynamicDataEnemies;
}
if (DD.dynamicDataTroops) {
$dataTroops = $gameSystem.dynamicDataTroops;
}
if (DD.dynamicDataStates) {
$dataStates = $gameSystem.dynamicDataStates;
}
if (DD.dynamicDataAnimations) {
$dataAnimations = $gameSystem.dynamicDataAnimations;
}
if (DD.dynamicDataTilesets) {
$dataTilesets = $gameSystem.dynamicDataTilesets;
}
if (DD.dynamicDataCommonEvents) {
$dataCommonEvents = $gameSystem.dynamicDataCommonEvents;
}
if (DD.dynamicDataSystem) {
$dataSystem = $gameSystem.dynamicDataSystem;
}
}; // DM.loadDynamicData
/*------------------------------------------------------------------------
* New public instance variables
*------------------------------------------------------------------------*/
// The copies of all database parts that will be saved into save files
Object.keys(DD.params).forEach(function(param) {
Object.defineProperty(Game_System.prototype, param, {
get: function() { return this["_" + param]; },
set: function(data) { this["_" + param] = data; },
configurable: true
});
});
DD.Scene_Boot = {};
var SB = DD.Scene_Boot;
SB.start = Scene_Boot.prototype.start;
Scene_Boot.prototype.start = function() {
SB.start.apply(this, arguments);
DD.storeBaseData(); // Added to allow using original data for new game
}; // Scene_Boot.prototype.start
DD.Scene_Title = {};
var ST = DD.Scene_Title;
ST.start = Scene_Title.prototype.start;
Scene_Title.prototype.start = function(savefileId) {
ST.start.apply(this, arguments);
DD.restoreBaseData(); // Added to use the original data for new game
}; // Scene_Title.prototype.start
})(DoubleX_RMMV.Dynamic_Data);
/*============================================================================*/