159 lines
7.6 KiB
JavaScript
159 lines
7.6 KiB
JavaScript
//=============================================================================
|
||
// 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.メモ欄に上記にプラス(または、マイナス)する値の追記が出来ます。
|
||
* <criPower:値> または、<criPower:\V[変数番号]> の書式で
|
||
* メモ欄に記入します。\V[変数番号]では、変数の値に置き換わります。
|
||
* \V[n]以外の制御文字は、使用出来ません。
|
||
* 値は、パーセンテージとして読み取られます。
|
||
* 例えば、パラメータに300が設定されていて、
|
||
* 武器のメモ欄に<criPower:100>と書かれていた場合、
|
||
* 300%+100%で400%(4倍)ダメージになります。
|
||
*
|
||
* 例
|
||
* ・デフォルト会心威力を2倍、アクターID3番の会心威力を2.5倍、
|
||
* 職業ID4番を会心威力+50%とする。
|
||
* パラメータ 200
|
||
* アクターID3番のメモ欄 <criPower:50>
|
||
* 職業ID4番のメモ欄 <criPower:50>
|
||
*
|
||
* ・デフォルト会心威力は、デフォルト(300)のままで、
|
||
* エネミーID5番の会心威力を5倍、スキルID18番を会心威力+50%、
|
||
* アイテムID2番を会心威力+50%、ステートID25番を会心威力+100%とする。
|
||
* 敵キャラID5番のメモ欄 <criPower:200>
|
||
* スキルID18番のメモ欄 <criPower:50>
|
||
* アイテムID2番のメモ欄 <criPower:50>
|
||
* ステートID25番のメモ欄 <criPower:100>
|
||
*
|
||
* ・アクターや、敵キャラの会心威力を変数で管理したい。
|
||
* アクターや、敵キャラのメモ欄に <criPower:\V[変数番号]> を記述。
|
||
* <criPower:値> の記述は、パラメータの設定値にプラスされる値
|
||
* なので、パラメータの値を見ながら調整して下さい。
|
||
*
|
||
* ・特定のマップだけ会心威力を上げ(下げ)たい。
|
||
* マップのメモ欄に <criPower:値> を記述して会心威力を調整するか、
|
||
* マップで使っているタイルセットのメモ欄に <criPower:値> を記述
|
||
* して会心威力を調整します。両方のメモ欄に書くと
|
||
* 両方プラス(マイナス)されます。
|
||
*
|
||
* ・デフォルト会心威力を4倍にして、アクターID7番の会心威力を2倍、
|
||
* タイルセットID4番の会心威力-150%とする。
|
||
* パラメータ 400
|
||
* アクターID7番のメモ欄 <criPower:-200>
|
||
* タイルセットID4番のメモ欄 <criPower:-150>
|
||
*
|
||
* このように、パラメータの設定値が基本値となり、メモ欄での記述は、
|
||
* それにプラス(マイナス値ならマイナス)される値になります。
|
||
*
|
||
* メモ欄への <criPower:値> の記述は、ステート、アクター、職業、スキル、
|
||
* アイテム、武器、防具、敵キャラ、マップ、タイルセットの全てに可能です。
|
||
* アクター、職業は、そのアクターや職業の時に適用されます。
|
||
* 武器、防具は、装備中に適用されます。
|
||
* 敵キャラのメモ欄は、その敵キャラに適用されます。
|
||
* スキル、アイテムは、それらの使用時に適用されます。
|
||
* ステートは、そのステートに掛かっている間、適用されます。
|
||
* マップは、そのマップでの戦闘時に敵味方共に適用されます。
|
||
* タイルセットは、そのタイルセットが使われているマップでの戦闘時に
|
||
* 敵味方共に適用されます。
|
||
*
|
||
* @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());
|
||
};
|
||
})();
|