203 lines
8.8 KiB
JavaScript
203 lines
8.8 KiB
JavaScript
//=============================================================================
|
||
// LightSaveData.js
|
||
// ----------------------------------------------------------------------------
|
||
// Copyright (c) 2016 Triacontane
|
||
// This software is released under the MIT License.
|
||
// http://opensource.org/licenses/mit-license.php
|
||
// ----------------------------------------------------------------------------
|
||
// Version
|
||
// 1.1.0 2016/11/21 削除対象外のアクターIDを指定できる機能を追加
|
||
// 1.0.0 2016/11/21 初版
|
||
// ----------------------------------------------------------------------------
|
||
// [Blog] : http://triacontane.blogspot.jp/
|
||
// [Twitter]: https://twitter.com/triacontane/
|
||
// [GitHub] : https://github.com/triacontane/
|
||
//=============================================================================
|
||
|
||
/*:
|
||
* @plugindesc LightSaveDataPlugin
|
||
* @author triacontane
|
||
*
|
||
* @param SaveOnlyInParty
|
||
* @desc 一度抜けたアクターの情報も含めて破棄して、セーブ時点でパーティに加わっているアクター情報のみを残します。(ON/OFF)
|
||
* @default OFF
|
||
*
|
||
* @param 例外アクターID
|
||
* @desc 報削除の対象外になるアクターIDをカンマ区切りで指定してください。(1,2,3)
|
||
* @default
|
||
*
|
||
* @help セーブ実行時に、アクター情報の中から「今まで一度もパーティに加わっていない」
|
||
* アクターの情報を削除することでセーブデータの容量を減らします。
|
||
*
|
||
* セーブ時に「Save data too big!」という警告ログが出力されたり、
|
||
* セーブ時の硬直が長い場合に、当プラグインを使用すると状況が改善する可能性があります。
|
||
*
|
||
* 注意!
|
||
* 1. 本プラグインはあらゆるセーブデータの肥大化に対して有効とは限りません。
|
||
* 削除するのはアクター情報のみなので、原因が他に存在する場合は対処できません。
|
||
*
|
||
* 2. 導入しているプラグインによっては、必要なデータが消される可能性があります。
|
||
*
|
||
* このプラグインにはプラグインコマンドはありません。
|
||
*/
|
||
/*:ja
|
||
* @plugindesc セーブデータ軽量化プラグイン
|
||
* @author トリアコンタン
|
||
*
|
||
* @param 現パーティのみ保持
|
||
* @desc 一度抜けたアクターの情報も含めて破棄して、セーブ時点でパーティに加わっているアクター情報のみを残します。(ON/OFF)
|
||
* @default OFF
|
||
*
|
||
* @param ExceptionActorIds
|
||
* @desc 削除の対象外になるアクターIDをカンマ区切りで指定してください。(1,2,3)
|
||
* @default
|
||
*
|
||
* @help セーブ実行時に、アクター情報の中から「今まで一度もパーティに加わっていない」
|
||
* アクターの情報を削除することでセーブデータの容量を減らします。
|
||
*
|
||
* セーブ時に「Save data too big!」という警告ログが出力されたり、
|
||
* セーブ時の硬直が長い場合に、当プラグインを使用すると状況が改善する可能性があります。
|
||
*
|
||
* 注意!
|
||
* 1. 本プラグインはあらゆるセーブデータの肥大化に対して有効とは限りません。
|
||
* 削除するのはアクター情報のみなので、原因が他に存在する場合は対処できません。
|
||
*
|
||
* 2. 導入しているプラグインによっては、必要なデータが消される可能性があります。
|
||
*
|
||
* このプラグインにはプラグインコマンドはありません。
|
||
*
|
||
* 利用規約:
|
||
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
|
||
* についても制限はありません。
|
||
* このプラグインはもうあなたのものです。
|
||
*/
|
||
|
||
(function() {
|
||
'use strict';
|
||
var pluginName = 'LightSaveData';
|
||
|
||
var getParamOther = function(paramNames) {
|
||
if (!Array.isArray(paramNames)) paramNames = [paramNames];
|
||
for (var i = 0; i < paramNames.length; i++) {
|
||
var name = PluginManager.parameters(pluginName)[paramNames[i]];
|
||
if (name) return name;
|
||
}
|
||
return null;
|
||
};
|
||
|
||
var getParamString = function(paramNames) {
|
||
var value = getParamOther(paramNames);
|
||
return value === null ? '' : value;
|
||
};
|
||
|
||
var getParamBoolean = function(paramNames) {
|
||
var value = getParamOther(paramNames);
|
||
return (value || '').toUpperCase() === 'ON';
|
||
};
|
||
|
||
var getParamArrayString = function(paramNames) {
|
||
var values = getParamString(paramNames).split(',');
|
||
for (var i = 0; i < values.length; i++) values[i] = values[i].trim();
|
||
return values;
|
||
};
|
||
|
||
var getParamArrayNumber = function(paramNames, min, max) {
|
||
var values = getParamArrayString(paramNames);
|
||
if (arguments.length < 2) min = -Infinity;
|
||
if (arguments.length < 3) max = Infinity;
|
||
for (var i = 0; i < values.length; i++) {
|
||
if (!isNaN(parseInt(values[i], 10))) {
|
||
values[i] = (parseInt(values[i], 10) || 0).clamp(min, max);
|
||
} else {
|
||
values.splice(i--, 1);
|
||
}
|
||
}
|
||
return values;
|
||
};
|
||
|
||
//=============================================================================
|
||
// パラメータの取得と整形
|
||
//=============================================================================
|
||
var paramSaveOnlyInParty = getParamBoolean(['SaveOnlyInParty', '現パーティのみ保持']);
|
||
var paramExceptionActorIds = getParamArrayNumber(['ExceptionActorIds', '例外アクターID']);
|
||
|
||
//=============================================================================
|
||
// Game_System
|
||
// パーティに加わっていないアクター情報を破棄します。
|
||
//=============================================================================
|
||
var _Game_System_onAfterLoad = Game_System.prototype.onAfterLoad;
|
||
Game_System.prototype.onAfterLoad = function() {
|
||
_Game_System_onAfterLoad.apply(this, arguments);
|
||
$gameParty.initValidActors();
|
||
};
|
||
|
||
var _Game_System_onBeforeSave = Game_System.prototype.onBeforeSave;
|
||
Game_System.prototype.onBeforeSave = function() {
|
||
_Game_System_onBeforeSave.apply(this, arguments);
|
||
$gameActors.deleteActorNeverInParty();
|
||
};
|
||
|
||
//=============================================================================
|
||
// Game_Party
|
||
// 一度でもパーティに加わったアクターを保持します。
|
||
//=============================================================================
|
||
var _Game_Party_initialize = Game_Party.prototype.initialize;
|
||
Game_Party.prototype.initialize = function() {
|
||
_Game_Party_initialize.apply(this, arguments);
|
||
this.initValidActors();
|
||
};
|
||
|
||
var _Game_Party_setupStartingMembers = Game_Party.prototype.setupStartingMembers;
|
||
Game_Party.prototype.setupStartingMembers = function() {
|
||
_Game_Party_setupStartingMembers.apply(this, arguments);
|
||
$dataSystem.partyMembers.forEach(function(actorId) {
|
||
this.addValidActor(actorId);
|
||
}, this);
|
||
};
|
||
|
||
var _Game_Party_addActor = Game_Party.prototype.addActor;
|
||
Game_Party.prototype.addActor = function(actorId) {
|
||
_Game_Party_addActor.apply(this, arguments);
|
||
this.addValidActor(actorId);
|
||
};
|
||
|
||
Game_Party.prototype.addValidActor = function(actorId) {
|
||
if (!this._validActors.contains(actorId)) {
|
||
this._validActors.push(actorId);
|
||
}
|
||
};
|
||
|
||
Game_Party.prototype.initValidActors = function() {
|
||
this._validActors = this._validActors || [];
|
||
};
|
||
|
||
Game_Party.prototype.isValidActors = function(actorId) {
|
||
return this._validActors.contains(actorId) || this._actors.contains(actorId);
|
||
};
|
||
|
||
var _Game_Party_removeActor = Game_Party.prototype.removeActor;
|
||
Game_Party.prototype.removeActor = function(actorId) {
|
||
_Game_Party_removeActor.apply(this, arguments);
|
||
this.removeValidActor(actorId);
|
||
};
|
||
|
||
Game_Party.prototype.removeValidActor = function(actorId) {
|
||
if (this._validActors.contains(actorId) && paramSaveOnlyInParty) {
|
||
this._validActors.splice(this._validActors.indexOf(actorId), 1);
|
||
}
|
||
};
|
||
|
||
//=============================================================================
|
||
// Game_Actors
|
||
// パーティに加わっていないアクター情報を破棄します。
|
||
//=============================================================================
|
||
Game_Actors.prototype.deleteActorNeverInParty = function() {
|
||
for (var i = 0; i < this._data.length; i++) {
|
||
if (!$gameParty.isValidActors(i) && this._data[i] && !paramExceptionActorIds.contains(i)) {
|
||
delete this._data[i];
|
||
if ($gameTemp.isPlaytest()) console.log('Actor[%1] Deleted!!'.format(i));
|
||
}
|
||
}
|
||
};
|
||
})();
|
||
|