//============================================================================= // IM_MPP_StateLevelUtils.js // ---------------------------------------------------------------------------- // author : Umu //============================================================================= /*: * @target MZ * @plugindesc MPP_StateLevel 用ユーティリティ関数集(ver.1.0.0) * @author Umu * * @help * ▼グローバル関数(イベントのスクリプトから使用) * SL_getStateLevel(actorId, stateId) // スタック数取得(無いとき 0) * SL_setStateLevel(actorId, stateId, n) // スタック数上書き (n<=0 で解除) * * 例)変数10番にアクター1の毒(ID:4)スタック数を取得 * $gameVariables.setValue(10, SL_getStateLevel(1, 4)); * * 例)アクター3の毒を 5 スタックに強制 * SL_setStateLevel(3, 4, 5); * * ●プラグインコマンドはありません。 * ●前提プラグイン: MPP_StateLevel.js (v1.0.0 以上) */ (() => { "use strict"; //------------------------------------------------------------------------- // Math.clamp ― ポリフィル //------------------------------------------------------------------------- if (!Math.clamp) { /** * v を a〜b の範囲に収めて返す * @param {number} v * @param {number} a * @param {number} b * @returns {number} */ Math.clamp = (v, a, b) => Math.max(a, Math.min(b, v)); } //------------------------------------------------------------------------- // 内部ヘルパー const actorById = id => $gameActors.actor(Number(id)) || null; //------------------------------------------------------------------------- // Game_BattlerBase 拡張(既にあれば上書きしない) if (!Game_BattlerBase.prototype.getStateLevel) { Game_BattlerBase.prototype.getStateLevel = function(stateId) { stateId = Number(stateId); return (this._stateLevels && this._stateLevels[stateId]) || 0; }; } if (!Game_BattlerBase.prototype.setStateLevel) { Game_BattlerBase.prototype.setStateLevel = function(stateId, level) { stateId = Number(stateId); level = Number(level); const max = this.maxStateLevel ? this.maxStateLevel(stateId) : 99; level = Math.clamp(level, 0, max); if (level <= 0) { // 解除 this.eraseState(stateId); return; } if (!this._stateLevels) { this._stateLevels = {}; } // ここでステートレベルをlevelで打つとMPP_StateLevelの処理で // 後のaddStateで指定レベル+1になってしまうので補正 // (リセットの中で暗黙にインクリメントされてる) this._stateLevels[stateId] = level - 1; if (!this.isStateAffected(stateId)) { this.resetStateCounts(stateId); } else if (this.resetMaxStateTurn) { this.resetMaxStateTurn(stateId); } }; } //------------------------------------------------------------------------- // グローバル関数 window.SL_getStateLevel = function(actorId, stateId) { const actor = actorById(actorId); return actor ? actor.getStateLevel(stateId) : 0; }; window.SL_setStateLevel = function(actorId, stateId, level) { const actor = actorById(actorId); if (actor) actor.setStateLevel(stateId, level); }; })();