ページ 11

【解決済み】物理と魔法別の会心率(クリティカル率)の設定

Posted: 2025年2月21日(金) 10:31
by kamometrain
物理と魔法別の会心率(クリティカル率)の設定したいと思っています。
例えば、物理だけに会心率が高くなる装備アクセサリー、魔法だけに会心率が高くなるステートといったものを作りたいのです。

検索してみると、MV版は紹介されているようですが、MZ版は見当たりませんでした。
viewtopic.php?t=6970

そういう設定ができるものはありますでしょうか。

あと、もし追加機能として、物理の会心の場合のみダメージが1.5倍になるステートとかがあれば、なおいいのですが。

Re: 物理と魔法別の会心率(クリティカル率)の設定

Posted: 2025年2月22日(土) 08:10
by kamometrain
kamometrain さんが書きました:物理と魔法別の会心率(クリティカル率)の設定したいと思っています。
例えば、物理だけに会心率が高くなる装備アクセサリー、魔法だけに会心率が高くなるステートといったものを作りたいのです。

検索してみると、MV版は紹介されているようですが、MZ版は見当たりませんでした。
viewtopic.php?t=6970

そういう設定ができるものはありますでしょうか。

Re: 物理と魔法別の会心率(クリティカル率)の設定

Posted: 2025年2月22日(土) 22:48
by 名無し蛙
コードを検める限りそちらのプラグインをMZに転用しても問題無いと思いますよ。
自分が実装しても概ね似たような設計になりますね。
独自特徴の追加はゲーム起動直後に済ませた方が良いと思いますけど、支障無い範囲でしょう。

警告を消したい場合は@plugindescの直上に@target MZを

コード: 全て選択

@target MZ
@plugindesc 	魔法クリティカル別設定プラグイン
物理会心のみ1.5倍にしたい場合は終端の})(VW_MagicCritical);の直上に以下のコードを追加してください。

コード: 全て選択

    const _applyCritical = Game_Action.prototype.applyCritical;
    Game_Action.prototype.applyCritical = function(damage) {
        return this.isPhysical() ? damage * 1.5 : _applyCritical.apply(this, arguments);
    };

Re: 物理と魔法別の会心率(クリティカル率)の設定

Posted: 2025年2月24日(月) 08:39
by kamometrain
ありがとうございます
転用できることがわかり、また、警告の消し方まで教えていただき、
助かりました。
これで解決いたしました。

物理会心のみ1.5倍にしたい場合は終端の})(VW_MagicCritical);の直上に以下のコードを追加してください。
のところですが、

<魔法クリティカルダメージ:x>
<魔法会心ダメージ:x>
<MagicCriticaldamage:x>

とかで、
1.5倍とか2倍とかダメージの倍率を変えるようにしたいのです。
きちんと書けていませんでした。
と、ここまで書いて思ったのですが、
そもそも会心のダメージを増やすステートって通常ではつくれないのですよね。
そうだとすると、魔法だけなく、物理も分けて設定しないといけないので、
難しそうですね。

Re: 物理と魔法別の会心率(クリティカル率)の設定

Posted: 2025年2月24日(月) 23:18
by 名無し蛙
kamometrain さんが書きました:とかで、
1.5倍とか2倍とかダメージの倍率を変えるようにしたいのです。
きちんと書けていませんでした。
と、ここまで書いて思ったのですが、
そもそも会心のダメージを増やすステートって通常ではつくれないのですよね。
そうだとすると、魔法だけなく、物理も分けて設定しないといけないので、
難しそうですね。
改造する事自体は大して難しくも無いんですけど元が小型プラグインなので原型を留めなくなりそうですね。
思い切って最小限の仕様を残して再構成するとこんな感じですかね。

コード: 全て選択

/*:
 * @target MZ
 * @pluguindesc 会心設定の拡張
 * @help
 * 数値は全て実数で指定してください。
 * <魔法会心率:x>
 * 魔法会心率を加算します。
 * <魔法会心回避率:x>
 * 魔法会心回避率を加算します。
 * <物理会心ダメージ倍率:x>
 * 物理会心ダメージ倍率を設定します。ベース倍率の乗算になります。
 * <魔法会心ダメージ倍率:x>
 * 魔法会心ダメージ倍率を設定します。ベース倍率の乗算になります。
 *
 * なお、本プラグインで追加特徴データID10-11番及び
 * 特殊特徴データID10-11番を使用している事に注意してください。
 *
 * @param baseCriticalRate
 * @type number
 * @default 3
 * @desc クリティカル倍率のベースを設定します。
 *
 */

(function () {
    'use strict'
    const pluginName                = decodeURIComponent(document.currentScript.src).match(/^.*\/js\/plugins\/(.+)\.js$/)[1];
    const parameters                = PluginManager.parameters(pluginName);
    const baseCriticalRate          = Number(parameters['baseCriticalRate']) ?? 3;

	Object.defineProperties(Game_BattlerBase.prototype, {
		// Magical Critical Hit
	    mch: { get: function() { return this.xparam(10); }, configurable: true },
		// Magical Critical Eva
	    mce: { get: function() { return this.xparam(11); }, configurable: true },
        // Physical CRitical Rate
        pcrr: { get: function() { return this.sparam(10); }, configurable: true },
        // Magical CRitical Rate
        mcrr: { get: function() { return this.sparam(11); }, configurable: true },
	});

    const _extractMetadata = DataManager.extractMetadata;
    DataManager.extractMetadata = function(data) {
        _extractMetadata.apply(this, arguments);
        if (!('traits' in data)) return;
        if (data.meta['魔法会心率']) data.traits.push( {code: 22, dataId: 10, value: Number(data.meta['魔法会心率'])} );
        if (data.meta['魔法会心回避率']) data.traits.push( {code: 22, dataId: 11, value: Number(data.meta['魔法会心回避率'])} );
        if (data.meta['物理会心ダメージ倍率']) data.traits.push( {code: 23, dataId: 10, value: Number(data.meta['物理会心ダメージ倍率'])} );
        if (data.meta['魔法会心ダメージ倍率']) data.traits.push( {code: 23, dataId: 11, value: Number(data.meta['魔法会心ダメージ倍率'])} );
    };

    const _itemCri = Game_Action.prototype.itemCri;
	Game_Action.prototype.itemCri = function(target) {
		if(this.isMagical()) {
		    return this.item().damage.critical ? this.subject().mch * (1 - target.mce) : 0;
		} else {
			return _itemCri.apply(this, arguments);
		}
	};

    Game_Action.prototype.applyCritical = function(damage) {
        let rate = baseCriticalRate;
        if (this.isPhysical()) rate *= this.subject().pcrr;
        if (this.isMagical()) rate *= this.subject().mcrr;
        return damage * rate;
    };
})();

Re: 物理と魔法別の会心率(クリティカル率)の設定

Posted: 2025年2月24日(月) 23:47
by kamometrain
ありがとうございました。
作っていただいてありがとうございます。
ツクールmzでつくりはじめたところで
会心の攻撃の効果を増やしたかったので助かりました。