//=============================================================================
// Theo_RealTimeStates.js
//=============================================================================
var Imported = Imported || {};
Imported.Theo_RealTimeStates = true;
var Theo = Theo || {};
Theo.RTS = Theo.RTS || {};
Theo.RTS.version = 1.01;
//=============================================================================
/*:
* @plugindesc v1.01 经过指定时间后自动消失的状态
* @author TheoAllen(原作者写的乃是va用的rb版本, 现转译成mv用的js版, 在mz上应该也能用)
*
* @param Message Pause
* @desc 是否在出现对话框时暂停状态的计时。
* @default true
*
* @param Pause Switch ID
* @desc 暂停状态计时的开关。
* @default 0
*
* @help
* ============================================================================
* 介绍
* ============================================================================
*
* 本脚本可以设定基于时间的状态,例如在地图上10秒后中毒状态自动消失。
*
* ============================================================================
* 使用方法
* ============================================================================
*
* 状态备注
* <Expired Time: n>
*
* n替换为数字,代表持续时间(秒)
* 比如要持续一分钟, 就填写<Expired Time: 60>
*
* ============================================================================
* 使用条款
* ============================================================================
*
* 署名脚本作者, TheoAllen.
* 你可以自由编辑此脚本,只要你不声明你是脚本的原作者.
*
* ============================================================================
* 更新日志
* ============================================================================
*
* Version 1.01:
* - Can now be applied to enemies!
*
* Version 1.00:
* - Finished plugin!
*/
//=============================================================================
//=============================================================================
// Parameter Variables
//=============================================================================
Theo.SetupParameters = function () {
Theo.Parameters = PluginManager.parameters('Theo_RealTimeStates');
Theo.Param = Theo.Param || {};
Theo.Param.RTSMsgPause = Boolean(Theo.Parameters['Message Pause'] === "true" ? true : false);
Theo.Param.RTSPauseSID = Number(Theo.Parameters['Pause Switch ID'] || 0);
};
Theo.SetupParameters();
//=============================================================================
// DataManager
//=============================================================================
Theo.RTS.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function () {
if (!Theo.RTS.DataManager_isDatabaseLoaded.call(this)) return false;
if (!Theo._loaded_RealTimeStates) {
this.processRTSNotetags1($dataStates);
Theo._loaded_RealTimeStates = true;
}
return true;
};
DataManager.processRTSNotetags1 = function (group) {
var note1 = /<(?:EXPIRED TIME):[ ]*(\d+)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.stateRealTime = 0;
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(note1)) {
obj.stateRealTime = parseInt(RegExp.$1) * 60;
}
}
}
};
//=============================================================================
// Game_System
//=============================================================================
Theo.RTS.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function () {
Theo.RTS.Game_System_initialize.call(this);
this.initStateRealTime();
};
Game_System.prototype.initStateRealTime = function () {
this._stateRealTime = 0;
};
Game_System.prototype.updateStateRealTime = function () {
this._stateRealTime++;
};
Game_System.prototype.stateRealTime = function () {
return this._stateRealTime;
};
//=============================================================================
// Game_Battler
//=============================================================================
Theo.RTS.Game_Battler_initialize = Game_Battler.prototype.initialize;
Game_Battler.prototype.initialize = function (actorId) {
Theo.RTS.Game_Battler_initialize.call(this, actorId);
this.initRealTimeStates();
};
Game_Battler.prototype.initRealTimeStates = function () {
this._rtStates = {};
};
Theo.RTS.Game_Battler_resetStateCounts = Game_Battler.prototype.resetStateCounts;
Game_Battler.prototype.resetStateCounts = function (stateId) {
Theo.RTS.Game_Battler_resetStateCounts.call(this, stateId);
var time = $dataStates[stateId].stateRealTime;
if (time <= 0) return;
this._rtStates[stateId] = $gameSystem.stateRealTime() + time;
};
Game_Battler.prototype.checkRealTimeStates = function () {
for (var i = 0; i < this._states.length; i++) {
var stateId = this._states[i];
if ($dataStates[stateId].stateRealTime <= 0) continue;
if (this.isRealTimeStateTimeUp(stateId)) {
this.removeState(stateId);
if ($gameParty.inBattle()) {
BattleManager.refreshStatus();
}
}
}
};
Game_Battler.prototype.isRealTimeStateTimeUp = function (stateId) {
if (!!this._rtStates[stateId]) {
return $gameSystem.stateRealTime() >= this._rtStates[stateId];
} else {
return false;
}
};
//=============================================================================
// Scene_Base
//=============================================================================
Theo.RTS.Scene_Base_update = Scene_Base.prototype.update;
Scene_Base.prototype.update = function () {
Theo.RTS.Scene_Base_update.call(this);
if (this instanceof Scene_Map || this instanceof Scene_Battle) {
if ($gameSwitches.value(Theo.Param.RTSPauseSID)) return;
if (!this.isMessagePause()) {
this.updateStateRealTime();
this.checkRealTimeStates();
}
}
};
Scene_Base.prototype.updateStateRealTime = function () {
$gameSystem.updateStateRealTime();
};
Scene_Base.prototype.checkRealTimeStates = function () {
for (var i = 0; i < $gameParty.members().length; i++) {
$gameParty.members()[i].checkRealTimeStates();
}
if ($gameParty.inBattle()) {
for (var i = 0; i < $gameTroop.members().length; i++) {
$gameTroop.members()[i].checkRealTimeStates();
}
}
};
Scene_Base.prototype.isMessagePause = function () {
var isSceneChangeOk = this.isActive() && !$gameMessage.isBusy();
return Theo.Param.RTSMsgPause && !isSceneChangeOk;
};
//=============================================================================
// End of File
//=============================================================================