340 lines
14 KiB
JavaScript
340 lines
14 KiB
JavaScript
// License : MIT License(http://opensource.org/licenses/mit-license.php)
|
|
/*:ja
|
|
* @plugindesc
|
|
* @author 赤月 智平
|
|
*
|
|
* @param Target Switches
|
|
* @desc 対象となるスイッチの番号を指定します。
|
|
* カンマ区切りで複数指定、ハイフンで範囲指定が可能です。
|
|
* (例) 1-3,11,12,13,20,21
|
|
* @default
|
|
*
|
|
* @param Target Variables
|
|
* @desc 対象となる変数の番号を指定します。
|
|
* カンマ区切りで複数指定、ハイフンで範囲指定が可能です。
|
|
* (例) 1-5,11,12,13,23,24
|
|
* @default
|
|
*
|
|
* @param Is Auto
|
|
* @desc セーブ・ロード時に自動的に共通セーブデータのセーブ・ロードを行うかを設定します。
|
|
* true : セーブ・ロード時に自動的に共有セーブデータにデータのセーブ・ロードを行う。
|
|
* false : 共通セーブデータのセーブ・ロードは手動で行う。
|
|
* @default true
|
|
*
|
|
* @param Auto on Gameover
|
|
* @desc 自動セーブ設定がONの時にゲームオーバー時に共有セーブデータの自動セーブを行うかを設定します。
|
|
* true : ゲームオーバー時に自動共有セーブを行う。
|
|
* false : ゲームオーバー時は自動共有セーブを行わない。
|
|
* @default false
|
|
*
|
|
* @param Show Trace
|
|
* @desc デバッグ用のトレースを出すかを設定します。
|
|
* true: トレースを表示, false: トレースを表示しない
|
|
* @default false
|
|
*
|
|
* @help
|
|
*/
|
|
var utakata = utakata || (utakata = {});
|
|
(function(utakata){
|
|
var CommonSaveManager = (function(){
|
|
function CommonSaveManager(){
|
|
this._targetSwitchList = [];
|
|
this._targetVariableList = [];
|
|
this._showTrace = false;
|
|
this._tr = null;
|
|
this.initialize();
|
|
}
|
|
CommonSaveManager.prototype.initialize = function(){
|
|
this.parameters = PluginManager.parameters('JsScript76Set');
|
|
this._showTrace = (String(this.parameters['Show Trace']) === "true");
|
|
this._tr = function(s){
|
|
if(!this._showTrace){ return; }
|
|
var str = "CommonSaveManager: " + s; console.log(str);
|
|
};
|
|
var targetSwitchStr = String(this.parameters['Target Switches']);
|
|
var targetVariableStr = String(this.parameters['Target Variables']);
|
|
this._targetSwitchList = this._parseTargetNumber(targetSwitchStr);
|
|
this._targetVariableList = this._parseTargetNumber(targetVariableStr);
|
|
};
|
|
CommonSaveManager.prototype._parseTargetNumber = function(str){
|
|
if(typeof str === "undefined" || str === "undefined"){ return []; }
|
|
str = str.replace(/\s+/g, "");
|
|
var split_str = ',';
|
|
var rgn_split_str = '-';
|
|
var indexes = str.split(split_str, -1);
|
|
var ret = [];
|
|
var parseTargetNumbersFromRegion = function(rgn_target){
|
|
var ret = [];
|
|
var target_number = rgn_target.split(rgn_split_str, -1);
|
|
if(typeof target_number[0] === "undefined" || typeof target_number[1] === "undefined"){ return []; }
|
|
var s_number = parseInt(target_number[0]);
|
|
if(s_number !== s_number){
|
|
this._tr("_parseTargetNumber getTargetNumbersFromRegion: Setting parameter is invalid.");
|
|
return [];
|
|
}
|
|
var e_number = parseInt(target_number[1]);
|
|
if(e_number !== e_number){
|
|
this._tr("_parseTargetNumber getTargetNumbersFromRegion: Setting parameter is invalid.");
|
|
return [];
|
|
}
|
|
for(var i = s_number; i <= e_number; i++){
|
|
ret.push(i);
|
|
}
|
|
return ret;
|
|
};
|
|
for(var i = 0; i < indexes.length; i++){
|
|
var rgn_target = indexes[i].match(/\d+-\d+/g);
|
|
if(!!rgn_target){
|
|
var parseIndexes = parseTargetNumbersFromRegion(rgn_target[0]);
|
|
if(parseIndexes.length <= 0){ continue; }
|
|
ret = ret.concat(parseIndexes);
|
|
}else{
|
|
var parseIndex = parseInt(indexes[i]);
|
|
if(parseIndex !== parseIndex){
|
|
this._tr("_parseTargetNumber: Setting parameter is invalid.");
|
|
continue;
|
|
}
|
|
ret.push(parseIndex);
|
|
}
|
|
}
|
|
return ret;
|
|
};
|
|
CommonSaveManager.prototype._getTargetSwitchJson = function(){
|
|
var json = { };
|
|
for(var i = 0; i < this._targetSwitchList.length; i++){
|
|
var idx = this._targetSwitchList[i].toString();
|
|
var value = $gameSwitches.value(idx);
|
|
json[idx] = value;
|
|
}
|
|
return json;
|
|
};
|
|
CommonSaveManager.prototype._getTargetVariableJson = function(){
|
|
var json = { };
|
|
for(var i = 0; i < this._targetVariableList.length; i++){
|
|
var idx = this._targetVariableList[i].toString();
|
|
var value = $gameVariables.value(idx);
|
|
json[idx] = value;
|
|
}
|
|
return json;
|
|
};
|
|
CommonSaveManager.prototype.setLoadSwitches = function(switches){
|
|
for(var key in switches){
|
|
var idx = parseInt(key);
|
|
var value = switches[key];
|
|
$gameSwitches.setValue(idx, value);
|
|
}
|
|
};
|
|
CommonSaveManager.prototype.setLoadVariables = function(variables){
|
|
for(var key in variables){
|
|
var idx = parseInt(key);
|
|
var value = variables[key];
|
|
$gameVariables.setValue(idx, value);
|
|
}
|
|
};
|
|
CommonSaveManager.prototype.load = function(){
|
|
this._tr("load common save data.");
|
|
if(!this.exists()){ return false; }
|
|
var loadData = DataManager.loadCommonSave();
|
|
if("gameSwitches" in loadData){
|
|
this.setLoadSwitches(loadData["gameSwitches"]);
|
|
}
|
|
if("gameVariables" in loadData){
|
|
this.setLoadVariables(loadData["gameVariables"]);
|
|
}
|
|
};
|
|
CommonSaveManager.prototype.save = function(){
|
|
this._tr("save common save data.");
|
|
var switchesJson = this._getTargetSwitchJson();
|
|
var variablesJson = this._getTargetVariableJson();
|
|
var json = { "gameSwitches": switchesJson,
|
|
"gameVariables": variablesJson };
|
|
DataManager.saveCommonSave(json);
|
|
};
|
|
CommonSaveManager.prototype.exists = function(){
|
|
this._tr("check exists common save data.");
|
|
return StorageManager.existsCommonSave();
|
|
};
|
|
CommonSaveManager.prototype.remove = function(){
|
|
this._tr("remove common save data.");
|
|
StorageManager.removeCommonSave();
|
|
};
|
|
CommonSaveManager.prototype.setShowTrace = function(args){
|
|
if(!args){ return; }
|
|
var enabled = String(args[1]) === "true" ? true : false;
|
|
this._tr("setShowTrace: " + this._showTrace);
|
|
this._showTrace = enabled;
|
|
};
|
|
CommonSaveManager.prototype.check = function(){
|
|
var str = "CommonSaveManager: \n";
|
|
str += " # Share switch targets : \n";
|
|
str += JSON.stringify(this._targetSwitchList);
|
|
str += "\n # Share variable targets : \n";
|
|
str += JSON.stringify(this._targetVariableList);
|
|
console.log(str);
|
|
};
|
|
CommonSaveManager.prototype.isAuto = function(){
|
|
return String(this.parameters['Is Auto']) === "true";
|
|
};
|
|
CommonSaveManager.prototype.isAutoOnGameOver = function(){
|
|
return String(this.parameters['Auto on Gameover']) === "true";
|
|
};
|
|
return CommonSaveManager;
|
|
})();
|
|
utakata.CommonSaveManager = new CommonSaveManager();
|
|
})(utakata || (utakata = {}));
|
|
(function(){
|
|
var _Game_Interpreter_pluginCommand =
|
|
Game_Interpreter.prototype.pluginCommand;
|
|
Game_Interpreter.prototype.pluginCommand = function(command, args){
|
|
_Game_Interpreter_pluginCommand.call(this, command, args);
|
|
if(command === 'CommonSave'){
|
|
switch(args[0]){
|
|
case 'load':
|
|
utakata.CommonSaveManager.load();
|
|
break;
|
|
case 'save':
|
|
utakata.CommonSaveManager.save();
|
|
break;
|
|
case 'exists':
|
|
utakata.CommonSaveManager.exists();
|
|
break;
|
|
case 'remove':
|
|
utakata.CommonSaveManager.remove();
|
|
break;
|
|
case 'setTrace':
|
|
utakata.CommonSaveManager.setShowTrace(args);
|
|
break;
|
|
case 'check':
|
|
utakata.CommonSaveManager.check();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
var _Data_Manager_loadGame = DataManager.loadGame;
|
|
DataManager.loadGame = function(savefileId){
|
|
var ret = _Data_Manager_loadGame.call(this, savefileId);
|
|
if(utakata.CommonSaveManager.isAuto()){ utakata.CommonSaveManager.load(); }
|
|
return ret;
|
|
};
|
|
var _Data_Manager_saveGame = DataManager.saveGame;
|
|
DataManager.saveGame = function(savefileId){
|
|
var ret = _Data_Manager_saveGame.call(this, savefileId);
|
|
if(utakata.CommonSaveManager.isAuto()){ utakata.CommonSaveManager.save(); }
|
|
return ret;
|
|
};
|
|
var _Data_Manager_setupNewGame = DataManager.setupNewGame;
|
|
DataManager.setupNewGame = function(){
|
|
_Data_Manager_setupNewGame.call(this);
|
|
if(utakata.CommonSaveManager.isAuto()){ utakata.CommonSaveManager.load(); }
|
|
};
|
|
DataManager.loadCommonSave = function(){
|
|
var json;
|
|
try{
|
|
json = StorageManager.loadCommonSave();
|
|
}catch(e){
|
|
console.error(e);
|
|
return [];
|
|
}
|
|
if(json){
|
|
var commonInfo = JSON.parse(json);
|
|
return commonInfo;
|
|
}else{
|
|
return [];
|
|
}
|
|
};
|
|
DataManager.saveCommonSave = function(json){
|
|
var jsonStr = JsonEx.stringify(json);
|
|
if(jsonStr.length >= 200000){
|
|
console.warn('Common Save too big!');
|
|
}
|
|
StorageManager.saveCommonSave(jsonStr);
|
|
return true;
|
|
};
|
|
StorageManager.loadCommonSave = function(){
|
|
if(this.isLocalMode()){
|
|
return this.loadFromLocalFileCommonSave();
|
|
}else{
|
|
return this.loadFromWebStorageCommonSave();
|
|
}
|
|
};
|
|
StorageManager.loadFromLocalFileCommonSave = function(){
|
|
var data = null;
|
|
var fs = require('fs');
|
|
var filePath = this.localFilePathCommonSave();
|
|
if (fs.existsSync(filePath)) {
|
|
data = fs.readFileSync(filePath, { encoding: 'utf8' });
|
|
}
|
|
return LZString.decompressFromBase64(data);
|
|
};
|
|
StorageManager.loadFromWebStorageCommonSave = function(){
|
|
var key = this.webStorageKeyCommonSave();
|
|
var data = localStorage.getItem(key);
|
|
return LZString.decompressFromBase64(data);
|
|
};
|
|
StorageManager.saveCommonSave = function(json){
|
|
if(this.isLocalMode()){
|
|
this.saveToLocalFileCommonSave(json);
|
|
}else{
|
|
this.saveToWebStorageCommonSave(json);
|
|
}
|
|
};
|
|
StorageManager.saveToLocalFileCommonSave = function(json){
|
|
var data = LZString.compressToBase64(json);
|
|
var fs = require('fs');
|
|
var dirPath = this.localFileDirectoryPath();
|
|
var filePath = this.localFilePathCommonSave();
|
|
if (!fs.existsSync(dirPath)) {
|
|
fs.mkdirSync(dirPath);
|
|
}
|
|
fs.writeFileSync(filePath, data);
|
|
};
|
|
StorageManager.saveToWebStorageCommonSave = function(json){
|
|
var key = this.webStorageKeyCommonSave();
|
|
var data = LZString.compressToBase64(json);
|
|
localStorage.setItem(key, data);
|
|
};
|
|
StorageManager.existsCommonSave = function(){
|
|
if(this.isLocalMode()){
|
|
return this.localFileExistsCommonSave();
|
|
}else{
|
|
return this.webStorageExistsCommonSave();
|
|
}
|
|
};
|
|
StorageManager.localFileExistsCommonSave = function(){
|
|
var fs = require('fs');
|
|
return fs.existsSync(this.localFilePathCommonSave());
|
|
};
|
|
StorageManager.webStorageExistsCommonSave = function(){
|
|
var key = this.webStorageKeyCommonSave();
|
|
return !!localStorage.getItem(key);
|
|
};
|
|
StorageManager.removeCommonSave = function(){
|
|
if(this.isLocalMode()){
|
|
this.removeLocalFileCommonSave();
|
|
}else{
|
|
this.removeWebStorageCommonSave();
|
|
}
|
|
};
|
|
StorageManager.removeLocalFileCommonSave = function(){
|
|
var fs = require('fs');
|
|
var filePath = this.localFilePathCommonSave();
|
|
if(fs.existsSync(filePath)){
|
|
fs.unlinkSync(filePath);
|
|
}
|
|
};
|
|
StorageManager.removeWebStorageCommonSave = function(){
|
|
var key = this.webStorageKeyCommonSave();
|
|
localStorage.removeItem(key);
|
|
};
|
|
StorageManager.localFilePathCommonSave = function(){ return this.localFileDirectoryPath() + 'common.rpgsave'; };
|
|
StorageManager.webStorageKeyCommonSave = function(){ return 'RPG Common'; };
|
|
var _Scene_Gameover_Start = Scene_Gameover.prototype.start;
|
|
Scene_Gameover.prototype.start = function(){
|
|
if(utakata.CommonSaveManager.isAutoOnGameOver()){
|
|
utakata.CommonSaveManager.save();
|
|
}
|
|
_Scene_Gameover_Start.call(this);
|
|
};
|
|
})();
|