do-disciplinary-committee-m.../www/js/plugins/LightSaveData.js
2025-05-04 14:43:03 -05:00

203 lines
8.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// 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));
}
}
};
})();