//============================================================================= // RPG Maker MZ - CriticalPowerChange v1.0.0 // Copyright (c) 2020 いっつ // このプラグインは、MITライセンスの条件の下で使用する事が出来ます。 // https://opensource.org/licenses/mit-license.php //============================================================================= /*: * @target MZ * @plugindesc 会心威力を変更します。 * @author いっつ * * @help 使い方 *  1.プラグイン管理画面のパラメータで、 *   会心威力のパーセンテージを指定します。 *   デフォルト値は、300(%)です。つまり、3倍のダメージ。 *   この値は、ゲーム全体に適用されます。 * *  2.メモ欄に上記にプラス(または、マイナス)する値の追記が出来ます。 *    または、 の書式で *   メモ欄に記入します。\V[変数番号]では、変数の値に置き換わります。 *   \V[n]以外の制御文字は、使用出来ません。 *   値は、パーセンテージとして読み取られます。 *   例えば、パラメータに300が設定されていて、 *   武器のメモ欄にと書かれていた場合、 *   300%+100%で400%(4倍)ダメージになります。 * * 例 *  ・デフォルト会心威力を2倍、アクターID3番の会心威力を2.5倍、 *   職業ID4番を会心威力+50%とする。 *    パラメータ 200 *    アクターID3番のメモ欄 *    職業ID4番のメモ欄 * *  ・デフォルト会心威力は、デフォルト(300)のままで、 *   エネミーID5番の会心威力を5倍、スキルID18番を会心威力+50%、 *   アイテムID2番を会心威力+50%、ステートID25番を会心威力+100%とする。 *    敵キャラID5番のメモ欄 *    スキルID18番のメモ欄  *    アイテムID2番のメモ欄 *    ステートID25番のメモ欄 * *  ・アクターや、敵キャラの会心威力を変数で管理したい。 *    アクターや、敵キャラのメモ欄に を記述。 *     の記述は、パラメータの設定値にプラスされる値 *    なので、パラメータの値を見ながら調整して下さい。 * *  ・特定のマップだけ会心威力を上げ(下げ)たい。 *    マップのメモ欄に を記述して会心威力を調整するか、 *    マップで使っているタイルセットのメモ欄に を記述 *    して会心威力を調整します。両方のメモ欄に書くと *    両方プラス(マイナス)されます。 * *  ・デフォルト会心威力を4倍にして、アクターID7番の会心威力を2倍、 *   タイルセットID4番の会心威力-150%とする。 *    パラメータ 400 *    アクターID7番のメモ欄 *    タイルセットID4番のメモ欄 *    *  このように、パラメータの設定値が基本値となり、メモ欄での記述は、 *  それにプラス(マイナス値ならマイナス)される値になります。 * * メモ欄への の記述は、ステート、アクター、職業、スキル、 * アイテム、武器、防具、敵キャラ、マップ、タイルセットの全てに可能です。 * アクター、職業は、そのアクターや職業の時に適用されます。 * 武器、防具は、装備中に適用されます。 * 敵キャラのメモ欄は、その敵キャラに適用されます。 * スキル、アイテムは、それらの使用時に適用されます。 * ステートは、そのステートに掛かっている間、適用されます。 * マップは、そのマップでの戦闘時に敵味方共に適用されます。 * タイルセットは、そのタイルセットが使われているマップでの戦闘時に * 敵味方共に適用されます。 * * @param criticalPower * @desc 会心威力の基本値の設定。ゲーム全体に適用されます。 * 初期値:300(%) この値にメモ欄の値がプラスされます。 * @type number */ (() => { 'use strict'; const pluginName = "CriticalPowerChange"; // パラメータ読み込み function loardParameters(key) { const parameters = PluginManager.parameters(pluginName); return eval(parameters[key]); }; // 会心威力変更プラグイン用のプロパティ設定 値の保存用 const _Game_System_initialize = Game_System.prototype.initialize; Game_System.prototype.initialize = function() { _Game_System_initialize.apply(this, arguments); this.setCriticalPowerChange(); }; Game_System.prototype.setCriticalPowerChange = function() { this._criticalPower = loardParameters("criticalPower"); // パラメータの会心威力 }; // メモを設定出来るオブジェクトの取得 バトラーベースクラス Game_BattlerBase.prototype.memoObjects = function() { return this.states(); // ステート }; // メモを設定出来るオブジェクトの取得 アクタークラス Game_Actor.prototype.memoObjects = function() { const objects = Game_Battler.prototype.memoObjects.call(this); // ステート objects.push(this.actor(), this.currentClass()); // アクター 職業 for (const item of this.equips()) { // 装備品配列 if (item) { // 装備が存在 objects.push(item); // 装備品objを配列に追加 }; }; return objects; // ステート、アクター、職業、武器、防具 }; // メモを設定出来るオブジェクトの取得 エネミークラス Game_Enemy.prototype.memoObjects = function() { return Game_Battler.prototype.memoObjects.call(this).concat(this.enemy()); // ステートとエネミー }; // applyCriticalメソッド 追記 const _Game_Action_applyCritical = Game_Action.prototype.applyCritical; Game_Action.prototype.applyCritical = function(damage) { let result = _Game_Action_applyCritical.apply(this, arguments) // デフォルト値 if ($gameSystem._criticalPower) { // パラメータの設定がある const value = $gameSystem._criticalPower; // 値取得 result = Math.round(damage * value / 100); // パラメータ値適用 }; this.memoObjects().forEach(object => { // メモ欄のあるオブジェクト if (object && object.meta.criPower) { // オブジェクトが存在、かつ、メモ欄にクリティカル威力設定がある const criPower = object.meta.criPower if (/\\V\[(\d+)]/i.test(criPower)) { // \V[n]で変数が指定されている const value = $gameVariables.value(parseInt(RegExp.$1)); // 変数値取得 result += Math.round(damage * value / 100); // 適用 } else { // 数値指定 result += Math.round(damage * Number(criPower) / 100); }; }; }); return result; // 結果を返す }; // メモ欄のあるオブジェクトを取得 Game_Action.prototype.memoObjects = function() { return this.subject().memoObjects().concat(this.item(), $dataMap, $gameMap.tileset()); }; })();