sol-rui-after-mini/www/js/plugins/JsScript51Set.js
2024-01-30 18:01:34 -06:00

377 lines
15 KiB
JavaScript

// License : MIT License(http://opensource.org/licenses/mit-license.php)
/*:
* @plugindesc
* @author T.Akatsuki
*
* @param Target Switches
* @desc Set target switch index number.
* If you want to set multiple, put comma between indexes.
* Using "-", the range can be specified.
* (ex) 1-3,11,12,13,20,21
* @default
*
* @param Target Variables
* @desc Set target variable index number.
* If you want to set multiple, put comma between indexes.
* Using "-", the range can be specified.
* (ex) 1-5,11,12,13,23,24
* @default
*
* @param Is Auto
* @desc Automatically to set save / load common save data on save / load timing.
* true : Automatically common save data is saved/loaded on save / load timing.
* false : Save and load of common save data you do manually.
* @default true
*
* @param Auto on Gameover
* @desc If auto saving common save data is enabled , it automatically saves common save data on gameover.
* true : It save common save data on game over.
* false : It do nothing on game over.
* @default false
*
* @param Show Trace
* @desc Set state traces display.
* true : Show trace., false : Don't show trace.
* @default false
*
* @help
*/
/*: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('JsScript51Set');
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);
};
})();