プラグインorスクリプトを探しています

ねつし

ユーザー
・攻撃速度補正を通常攻撃以外のスキルにも適応させる方法(リンク先の動画参照)
・能力弱体有効度・・・ではなく能力「強化」有効度を弄る方法
・敵モンスターの「運」のパラメータを変数などを用いて一律で変更する方法
・攻撃と同時に味方を回復したり、状態異常を治したりできるスキルを作成する方法
・対象がランダムなスキル発動中に途中で敵が倒れても残り弾が打ち止めにならない方法

が分かりません。RPGツクールMZもしくはMVでこれらを実現できるプラグインかスクリプトをご存知の方が居ましたら、ご教授お願い致します
 
どうも、こん**は。
質問にお答えします。

>・攻撃速度補正を通常攻撃以外のスキルにも適応させる方法(リンク先の動画参照)
これは当該スキルの速度補正をそれぞれ変更すればよろしいのでは?
それとも何か別の問題がありますでしょうか。
もし、「通常攻撃以外のスキルでも、速度補正を通常攻撃の物と同じにする」なら、
以下のコードで可能です。これをプラグイン化して使ってください。
JavaScript:
/*:
  @target MZ
*/
(() => {
const _Game_Action_speed = Game_Action.prototype.speed;
Game_Action.prototype.speed = function() {
  let speed = _Game_Action_speed.call(this);
  if (!this.isAttack()) {
    // ignore item's speed set at database
    if (this.item()) {
      speed -= this.item().speed;
    }
    // add attack speed
    if (this.subject()) {
      const attackId= this.subject().attackSkillId();
      if (attackId) {
        const attackSkill = $dataSkills[attackId];
        speed += attackSkill ? attackSkill.speed : 0;
      }
    };
  }
  return speed;
};
})();

>・能力弱体有効度・・・ではなく能力「強化」有効度を弄る方法
これは今いじっていますが、ちょっとややこしいです。
プラグインを作ることも考えています。

>・敵モンスターの「運」のパラメータを変数などを用いて一律で変更する方法
以下をプラグイン化してください。
JavaScript:
/*:
*  @target MZ
*/
(() => {
Object.defineProperties(Game_Enemy.prototype, {
  luk: {
    get: function() {
      // by changing this, you can configure easily.
      return $gameVariables.value(1);
     },
     configurable: true
  }
});
})();
上記の $gameVariables.value(1) を変更することで自由に設定できます。

>・攻撃と同時に味方を回復したり、状態異常を治したりできるスキルを作成する方法
トリアコンタンさんの「スキルの副作用プラグイン」で可能になります。
僕もお世話になりました。
MV用ですが、相談すればMZにも対応してもらえるかも?

>・対象がランダムなスキル発動中に途中で敵が倒れても残り弾が打ち止めにならない方法
もしかして「発動→連続回数」で回数を設定していませんか?
「基本設定→スキル範囲」で「陣営」を敵、数をランダム(1~4)にすれば
全滅するまで打ち止めになりません。
さらに「8回攻撃が作りたい」場合、範囲を「敵へランダム2回」、連続回数を4にすれば
打ち止めになりません。

今は以上です。能力強化有効度の設定は、もう少しお待ちください。
 
最後に編集:
お待たせしました。
>・能力弱体有効度・・・ではなく能力「強化」有効度を弄る方法

こちらの為にプラグインを準備しました。
適当な名前を付けて保存、★★のところをダブルクォーテーションで括ってプラグイン名にしてくだい。
(例: BuffInvalid というプラグイン名なら、’BuffInvalid’)

JavaScript:
/*:
* @target MZ
* @plugindesc 実験用
*
* @command buffRate
* @text 強化有効度の設定
* @desc 強化の成功率を設定します。
*
* @arg target
* @text 対象アクター
* @desc 強化有効度を変更するアクターです
* @type actor
* @default 1
*
* @arg param
* @text パラメータ
* @desc 強化有効度を変更するパラメータです
* @type select
* @option 最大HP
* @value 0
* @option 最大MP
* @value 1
* @option 攻撃力
* @value 2
* @option 防御力
* @value 3
* @option 魔法力
* @value 4
* @option 魔法防御
* @value 5
* @option 敏捷性
* @value 6
* @option 運
* @value 7
* @default 0
*
* @arg rate
* @text 変更倍率%
* @desc 強化有効度の値を%で設定します
* @type number
* @min 0
* @default 100
*/
(() => {
//
// define buff rate
//
Game_BattlerBase.TRAIT_BUFF_RATE = 103;

Game_BattlerBase.prototype.buffRate = function(paramId) {
    return this.traitsPi(Game_BattlerBase.TRAIT_BUFF_RATE, paramId);
};

const _Game_Action_itemEffectAddBuff = Game_Action.prototype.itemEffectAddBuff;
Game_Action.prototype.itemEffectAddBuff = function(target, effect) {
  let chance = target.buffRate(effect.dataId) * this.lukEffectRate(target);
  if (Math.random() < chance) {
    _Game_Action_itemEffectAddBuff.call(this, target, effect);
  }
};

//
// proces plugin command
//
PluginManager.registerCommand(★ここにプラグイン名を入れる★, 'buffRate', args => {
  const target = $gameActors.actor(+args.target);
  if (target) {
    const dataTarget = target.actor();
    dataTarget.traits.push({code:103, data:+args.param,
      value:+args.rate}
    );
  }
});
})();
 
最後に編集:

ねつし

ユーザー
ツクールMZでは打ち止めになる事なく全弾命中する仕様に改良されていたんですね。MVで検証していたので気付きませんでした。トリアコンタンさんの「スキルの副作用プラグイン」も早速試してみます。教えて下さってありがとうございます!
それと、早速3種類のコードをプラグイン化して読み込もうとしたら、「能力強化有効度」プラグインでエラーが生じました。他二つはエラーが生じる事は無かったのですが、動作しませんでした。もしかしたら他のプラグインとの競合で動作しなかった可能性が考えられるので、制作中のデータをGoogledriveにアップロードします。お時間のある時で構いませんので確認して頂けると助かります↓
 

Attachments

  • ミスチックリーチャー2 - RPGツクールMZ 2021_02_01 10_53_42.png
    ミスチックリーチャー2 - RPGツクールMZ 2021_02_01 10_53_42.png
    209.2 KB · 閲覧: 5
  • ミスチックリーチャー2 - RPGツクールMZ 2021_02_01 10_53_52.png
    ミスチックリーチャー2 - RPGツクールMZ 2021_02_01 10_53_52.png
    30 KB · 閲覧: 4
  • ミスチックリーチャー2 2021_02_01 10_54_12.png
    ミスチックリーチャー2 2021_02_01 10_54_12.png
    9 KB · 閲覧: 5
  • Screenshot 2021_02_01 10_54_40.png
    Screenshot 2021_02_01 10_54_40.png
    58.3 KB · 閲覧: 6
どうも、お役に立てたようで幸いです。
さて、エラーの件ですが、3つ目のプラグインにある、ここに気づきましたか。
>★ここにプラグイン名を入れる★,
ここに正しいプラグイン名(ファイル名から.jsを取り除いたもの)を入れないと正常動作しません。

どうやらプラグイン名を S_Status_Buff_MZ とされていますが、これだと変数だと判断されてしまうので、
”S_Status_Buff_MZ” のようにダブルクォーテーションで括ってください。
これでうまくいくと思います。

ここがちゃんとなっているか確認して下さい。
僕の方ではそれでちゃんとうごいていますので。
 
最後に編集:

munokura

ユーザー
質問者への返信でないマナー違反をお許しください。

どうも、お役に立てたようで幸いです。
さて、エラーの件ですが、3つ目のプラグインにある、ここに気づきましたか。
>★ここにプラグイン名を入れる★,
ここに正しいプラグイン名(ファイル名から.jsを取り除いたもの)を入れないと正常動作しません。

ここがちゃんとなっているか確認して下さい。
僕の方ではそれでちゃんとうごいていますので。
神無月サスケ氏のプラグインを、参考に読ませていただくことが多いのですが、古くから今でもファイル名をハードコーディングされていますよね。

自分は(最近は)下記を参考にして、ファイル名を変更しても動作するようにするように心がけることにしています。


プラグインパラメータの取得には次のコードを使います。

const PLUGIN_NAME = document.currentScript.src.split("/").pop().replace(/\.js$/, "");
const PARAMS = PluginManager.parameters(PLUGIN_NAME);

プラグインパラメータの取得にはプラグインのファイル名と同じ文字列が必要なため、 以前はプラグイン名をソースコード内にハードコーディングしていましたが、 Document.currentScriptが使用可能になったことで、 多少無理やりながらもファイル名を取得できるようになりました。

今回の事例では、まさにこれを使えば防げるケースだと思うのですが、意図的に使用していない理由があるのでしょうか?
プラグイン作者によって、これを使用/不使用の人が完全に分かれている気がしていて、理由があるのでしたら、ご教授いただければ幸いです。
 
どうも、ムノクラさん。
僕がpluginNameをハードコード化しているのは、可読性のためです。
僕の偏執的なこだわりと捉えていただいて結構です。
確かにプラグイン名を変える時に書き換える必要がありますが、
僕はプログラムは可読性を一番に置きます。
そうなると、pluginName に複雑な処理を入れると、
そこで解読を躓く人が多いだろうな、とも思っています。

皆から読まれることを前提に、可能な限りシンプルに、が僕のモットーです。
 

munokura

ユーザー
どうも、ムノクラさん。
僕がpluginNameをハードコード化しているのは、可読性のためです。
僕の偏執的なこだわりと捉えていただいて結構です。
確かにプラグイン名を変える時に書き換える必要がありますが、
僕はプログラムは可読性を一番に置きます。
そうなると、pluginName に複雑な処理を入れると、
そこで解読を躓く人が多いだろうな、とも思っています。

皆から読まれることを前提に、可能な限りシンプルに、が僕のモットーです。
神無月サスケ氏のポリシー的判断ということですね。
回答頂き、ありがとうございました。
 

fspace

ユーザー
さらに脇道に逸れる話で申し訳ないんですが、実はMZで@base@orderBefore/@orderAfterが入ったことで、安易にプラグインのリネームができなくなりました。そのため、currentScriptから取得する方法も以前ほどの利点はなくなってしまいました。

MVではcurrentScriptの方がいいと思っていますが、MZだとハードコーディングとどっちがいいか微妙なところですね。
 

ねつし

ユーザー
どうも、お役に立てたようで幸いです。
さて、エラーの件ですが、3つ目のプラグインにある、ここに気づきましたか。
>★ここにプラグイン名を入れる★,
ここに正しいプラグイン名(ファイル名から.jsを取り除いたもの)を入れないと正常動作しません。

どうやらプラグイン名を S_Status_Buff_MZ とされていますが、これだと変数だと判断されてしまうので、
”S_Status_Buff_MZ” のようにダブルクォーテーションで括ってください。
これでうまくいくと思います。

ここがちゃんとなっているか確認して下さい。
僕の方ではそれでちゃんとうごいていますので。
・敵モンスターの運を一律で変更するプラグインは正常に作動しました!懇切丁寧に教えて下さってありがとうございます。
・攻撃速度補正プラグインは、ターン制で作動を確認できました・・・が、タイムプログレス制だと読み込めているのかどうかよく分かりませんでした。装備の特徴に付与された攻撃速度補正は反映されないのでしょうか?
・能力強化有効度プラグインもダブルクォーテーションで括る事で、エラーを起こさず読み込めました。ところで、このプラグインを用いて添付画像のような(特徴欄の「弱体」の部分を「強化」に置き換えた効果)ステートを実装する事は可能でしょうか?もし不可能でしたら無理にとは言いませんので、お返事待ってます
 

Attachments

  • ミスチックリーチャー2 - RPGツクールMZ 2021_02_02 18_19_46.png
    ミスチックリーチャー2 - RPGツクールMZ 2021_02_02 18_19_46.png
    207.5 KB · 閲覧: 6
どうも。お役に立てたようで幸いです。
・攻撃速度補正プラグインは、ターン制で作動を確認できました・・・が、タイムプログレス制だと読み込めているのかどうかよく分かりませんでした。装備の特徴に付与された攻撃速度補正は反映されないのでしょうか?
これはタイムプログレス戦闘の仕様によるものだと思います。
速度補正がマイナスの場合はそれだけ発動に時間がかかりますが、
プラスの場合、0と同様、即発動になるため、分かりづらいのでしょうね。
・能力強化有効度プラグインもダブルクォーテーションで括る事で、エラーを起こさず読み込めました。ところで、このプラグインを用いて添付画像のような(特徴欄の「弱体」の部分を「強化」に置き換えた効果)ステートを実装する事は可能でしょうか?
「メモに記述する」ようにすることは可能です。
ただ、ここまで踏み込んでしまうと、「プラグイン化してください」の域を
大きく逸脱してしまう(大規模化する)ので、個別に新しいプラグイン作るのが賢明ですね。
今すぐは無理ですが、数日中に仕上げることが出来ます。
 
お待たせしました。ちゃちゃっと作らせていただきました。
現在、プラグインコマンドで、アクターとステートでの有効度を変更可能にしました。
厳密に作るなら、装備や職業など、すべてで有効にすべきなんでしょうが、
それだとコードが長くなるので必要最低限のものに限らせていただきました。

もし「この機能が欲しい!(例:装備での設定もしたい)」などがありましたら
お伝えください。
 

Attachments

  • S_Status_Buff_MZ.zip
    1.4 KB · 閲覧: 8

ねつし

ユーザー
遂に理想のステートを実現する事が出来ました・・・てっきり「青鬼2016」の制作に関わったほどのベテランスクラー、神無月サスケさんの手にかかれば弱体有効度を弄って強化有効度も調整できる筈だからスクリプトで済むかと思っていたもので、まさか本格的なプラグインを提供されるとは予想外でした。プラグインを作成する過程は想像以上に大変な作業だという事を理解致しました・・・この度は勝手なワガママに答えて下さって本当にありがとうございました!
この動画の通り正常に作動しました(Google drive)
 
どうも、まずはご要望にお応え出来てよかったです。
このプラグインは僕くらいのスキルがある人だったら
皆「ちゃちゃっと作れる」ものなので、あまり気にしないでください。

さて、今プラグイン見ていて気付いたのですが、
この変更、セーブしてロードするとリセットされてしまうようです。
可能なら、バフ封じが行われる戦闘の前でプラグインコマンドを
毎回呼び出していただければ問題ないのですが、
もしそれでは困る、という場合、何とかします。
 
最後に編集:
トップ