(解決済み)ツクールmzで原神のような元素反応を実現したい。

けると

ユーザー
初めてツクールmzでRPGを作ろうとしています。
今回、タイトルのようなことをやろうとしてチャットgptとやりとりをしていますが、どうもうまく行きません。
やりたいことは、以下です。

①FTKR_AddOriginalParametersプラグインで新たな元素熟知のようなパラメータ(code nma)を設定。
②炎属性攻撃を行うと敵が炎ステート(ID40)となる。
③炎ステートの敵に氷属性攻撃(ID3)を当てると、凝華反応が発生して、固定倍率+nma×倍率の分だけ乗算してダメージが増加する。
④凝華反応が起きたら、敵は炎ステートが解除され凝華ステート(ID45)が2ターン付与され、その間炎ステートも氷ステート(ID41)も付与されない。
⑤敵に炎ステートが付与されておらず、凝華反応が起きなかった場合は氷ステートを付与する。

その他、今回について導入したプラグインは、

NRP_TraitsEX.js ver1.07

です。上記二つのプラグインを用いて、データベース上ステートのメモ欄にスクリプトを記載すると可能だということだったのですが、どうもできないようで、コモンイベントを活用するという方向になりそうなのですが、スクリプトの知識などもなくコモンイベントも初めてです。
このような挙動が可能か、またどうすればよいか、アドバイスをお願いしたいです。
よろしくお願いします。
 
執筆者:神凪洸
ちょうど先程まで、似たようなシステムを作ってたので参考になれば……。
自作の方は色々もっとめんどくさいことしてるので、最低限の説明になるようにまとめたました……

こちらのプラグインもいいかもしれません。
ステートの機能を色々拡張
ステート付加された時に追加ダメージが発生します。
計算式も使えるので「凝華ステート」が付与された際に追加ダメージになります。

リアクションスキル
発生条件を作る為に利用。


1、リアクション登録
  属性反応ステート付与実行スキル、タイミング後、相手条件敵からのみ、発動条件スクリプト、発動率の設定
//発動条件スクリプトにはこう
elems == 属性ID && b.isStateAffected(付与属性ステートID) || elems == 属性ID && b.isStateAffected(付与属性ステートID);
これで「炎属性攻撃で氷ステートが付与されていたら、もしくは氷属性攻撃で炎ステートが付与されていたら」という条件になります。
つまり、炎攻撃と炎ステートの組み合わせでは発生しません。

2、属性反応ステートを作り、メモタグ「ステート付与時ダメージ」と付与属性ステートを無効に設定。
3、付与属性(炎ステートや氷ステート)に対応する属性反応ステートの有効度を120%とかに設定。
  これで20%の確率で凝華ステートが付与できるという感じ。
  リアクションスキルタグを反応ステート分設定します。<リアクション: 凝華><リアクション: 炎上>てな具合
  他の付与属性ステート無効設定
4、攻撃スキルの使用効果は炎ステート付与のみ
5、属性反応ステート付与実行スキルの作成


これでとりあえず、付与属性が付与されていない状態では属性反応は発生しない。
付与属性がある時に初めて属性反応が付与でき、属性反応に設定された追加ダメージが発生する。
そして付与属性ステートは解除され、属性反応ステートが付与されている間は付与属性ステートは付与されない。
付与属性ステートがなければ、他の属性の付与属性ステートが付与できる。

となる……と思います。

スキル例:
炎攻撃の使用効果、炎ステート
氷攻撃の使用効果、氷ステート
水攻撃の使用効果、水ステート
草攻撃の使用効果、草ステート
凝華付与用スキル、範囲使用者
炎上付与用スキル、範囲使用者
凍結付与用スキル、範囲使用者

ステート例:
炎ステート、炎以外の付与属性ステート無効、リアクション凝華、リアクション炎上
氷ステート、氷以外の付与属性ステート無効、リアクション凝華、リアクション凍結
水ステート、水以外の付与属性ステート無効、リアクション凍結
草ステート、草以外の付与属性ステート無効、リアクション炎上
凝華ステート、全付与属性ステート無効、ステート付与時ダメージタグ
炎上ステート、全付与属性ステート無効、ステート付与時ダメージタグ

最低限できるはず……。

なんならステート付与時ダメージ使わなくとも、リアクションスキルで属性反応ステートを付与するので
そのスキルでダメージ計算やってもいいですね。ただ、属性攻撃スキル→属性反応スキルと2回攻撃することになるので
テンポ悪くなります。なので【スピードスターバトル】も導入しないと……ってなってくるかも、
というか自作品システムの場合なりましたので入れた方がいいかもです。
ただ、あまりスピードをあげるとステートの付与解除とかの処理が間に合わないので
リアクションスキルの登録設定にある「バトルウェイト-自分(敵)」とスピードスターバトルの基本ポップウェイト等の設定で
調整する必要があります。

つまり、わりと作るのめんどくさいシステムでした(遠い目)
 
執筆者:神凪洸
ちょうど先程まで、似たようなシステムを作ってたので参考になれば……。
自作の方は色々もっとめんどくさいことしてるので、最低限の説明になるようにまとめたました……

こちらのプラグインもいいかもしれません。
ステートの機能を色々拡張
ステート付加された時に追加ダメージが発生します。
計算式も使えるので「凝華ステート」が付与された際に追加ダメージになります。

リアクションスキル
発生条件を作る為に利用。


1、リアクション登録
  属性反応ステート付与実行スキル、タイミング後、相手条件敵からのみ、発動条件スクリプト、発動率の設定

これで「炎属性攻撃で氷ステートが付与されていたら、もしくは氷属性攻撃で炎ステートが付与されていたら」という条件になります。
つまり、炎攻撃と炎ステートの組み合わせでは発生しません。

2、属性反応ステートを作り、メモタグ「ステート付与時ダメージ」と付与属性ステートを無効に設定。
3、付与属性(炎ステートや氷ステート)に対応する属性反応ステートの有効度を120%とかに設定。
  これで20%の確率で凝華ステートが付与できるという感じ。
  リアクションスキルタグを反応ステート分設定します。<リアクション: 凝華><リアクション: 炎上>てな具合
  他の付与属性ステート無効設定
4、攻撃スキルの使用効果は炎ステート付与のみ
5、属性反応ステート付与実行スキルの作成


これでとりあえず、付与属性が付与されていない状態では属性反応は発生しない。
付与属性がある時に初めて属性反応が付与でき、属性反応に設定された追加ダメージが発生する。
そして付与属性ステートは解除され、属性反応ステートが付与されている間は付与属性ステートは付与されない。
付与属性ステートがなければ、他の属性の付与属性ステートが付与できる。

となる……と思います。

スキル例:
炎攻撃の使用効果、炎ステート
氷攻撃の使用効果、氷ステート
水攻撃の使用効果、水ステート
草攻撃の使用効果、草ステート
凝華付与用スキル、範囲使用者
炎上付与用スキル、範囲使用者
凍結付与用スキル、範囲使用者

ステート例:
炎ステート、炎以外の付与属性ステート無効、リアクション凝華、リアクション炎上
氷ステート、氷以外の付与属性ステート無効、リアクション凝華、リアクション凍結
水ステート、水以外の付与属性ステート無効、リアクション凍結
草ステート、草以外の付与属性ステート無効、リアクション炎上
凝華ステート、全付与属性ステート無効、ステート付与時ダメージタグ
炎上ステート、全付与属性ステート無効、ステート付与時ダメージタグ

最低限できるはず……。

なんならステート付与時ダメージ使わなくとも、リアクションスキルで属性反応ステートを付与するので
そのスキルでダメージ計算やってもいいですね。ただ、属性攻撃スキル→属性反応スキルと2回攻撃することになるので
テンポ悪くなります。なので【スピードスターバトル】も導入しないと……ってなってくるかも、
というか自作品システムの場合なりましたので入れた方がいいかもです。
ただ、あまりスピードをあげるとステートの付与解除とかの処理が間に合わないので
リアクションスキルの登録設定にある「バトルウェイト-自分(敵)」とスピードスターバトルの基本ポップウェイト等の設定で
調整する必要があります。

つまり、わりと作るのめんどくさいシステムでした(遠い目)
丁寧なアドバイスありがとうございます。玄人の方でも遠い目になるシステムだったのですね。現在コモンイベントのスクリプトで動かす方向でトライしようと試みています。失敗する気がするので、こちらの方法も是非試してみたいと思います。
ありがとうございます。
 
執筆者:神凪洸

あれから、色々探したり試したりと続けて、ようやく形にはなってきたかなという感じです。
そしてプラグイン使わなくとも、作れたので記しておきますね。(先述したプラグイン利用だと色々まわりくどい事が判明したのでコモンイベントが素直でよろしいです)
先述の方法は一応、備忘録として残しておきます。

【用語解説】
親スキル  :実際に使用するスキル。属性を付与できるスキル。ダメージ属性は必ず固定設定となります。
       通常攻撃のように装備などで属性が変化するスキルは属性の取得がめんどくさいのでやらない。
反応スキル :属性が付与されており、その時の攻撃属性が正しければ発動されるスキル。
       このスキルの対象範囲は敵単体固定。スキルとして誰も習得させない。
判定ステート:攻撃がヒットしたか否かを判定するためのダミーステート。
       範囲攻撃に対応させる為。
属性ステート:属性反応を起こす為のトリガーステート。各属性分作成。

【作り方】
1、属性ステートの作成
  何かしらの属性ステートが付与されていたら、他の属性ステートが付与されないように
  特徴に全ての属性ステート無効を設定。炎ステートに炎ステート無効をつけるというような事はもちろんしないように。
  ※その他、属性有効度とか解除タイミングとかはお好きなように

2、コモンイベントの作成
  変数の操作、代入「直前に行動した敵キャラインデックス」-1
  代入「直前に行動したアクターID」
  代入「PTメンバーn番のアクターID」を最大戦闘参加人数分作成
  代入「属性ステートID」
  代入「属性反応スキルID」
これらはコピペ作業時や変更等あった場合に変数操作だけ弄ればいいようにするためのもの。

  条件分岐でパーティーの誰かに判定ステートが付与されているか?(これで攻撃者がアクターかエネミーかが判定できる)
   判定ステートが付与されていた場合、PTメンバーの先頭から順に判定ステートと属性ステートが付与されているかを調べる。
   付与されていれば戦闘行動の強制で反応スキルを発動。
 これを戦闘参加人数分作成。エネミーも同様。
 スクリプトで分岐します。通常のイベントコマンドでは不可能なので。
setumei20.png

setumei21.png


スクショにPTの誰かが判定ステートになっているか?を入れ忘れていました。最初の条件分岐はこれです。
PTの誰かがステートにかかっているか?のスクリプトはこちらのプラグインを導入してください。MVのですがMZでも動きます。

3、親スキルの作成
  ダメージ属性を設定。使用効果に「属性付与」を任意の付与率、「判定ステート」を100%付与、
  2で作成したコモンイベントを設定。

4、反応スキルの作成
  使用効果に「判定ステート」を100%解除。
  これ以外はお好きに。

5、テストして敵、味方共に反応が発生するかどうか確認。
  発生しない場合は、変数に代入した数値が間違っているか、スクリプト内容にミスがあるか。

6、問題がなければコモンイベントを属性+反応分作成
  各スキルごとに属性は固定にしたことで、そのスキルを使った時点で使用した属性は確定しています。
  その為、コモンイベントには反応するための属性ステートと判定用ステートが付与されているか?で条件分岐します。
  すでに基礎が完成しているので変数の値だけ変更するだけでおk。やったね。

  親スキルが炎だった場合に起こる反応が凝華と蒸発とした場合、凝華用コモンと蒸発用コモンを作成。これを2つとも使用効果に設定。
  この時の条件分岐は凝華用は氷ステートと判定ステートにかかっているか?
  蒸発用は水ステートと判定ステートにかかっているか?

  親スキルが水属性に蒸発を、氷属性に凝華を使用効果に。
  ただし、こちらの条件分岐は凝華用が炎ステートと判定ステートにかかっているか?
  蒸発用が炎ステートと判定ステートにかかっているか?
  となるため、炎スキルと同じコモンでないことに注意。

7、反応スキルは全て共通が無難
  管理がしやすい。
  例:蒸発なら蒸発でIDは12とする。どのスキルを使っても起こる蒸発反応はスキルID12が発動する。 という具合。

8、テスト
  やったね。
  一応、複数回行動となるため先述のスピードスターバトルとかテンポよくさせるものはあった方がいいですね。
  それと戦闘行動の強制を利用するので、TPBとかがリセットされてしまうのでこちらをいれると最高です。
  【戦闘行動強制による行動リセットとTPBチャージリセットを無効化

ここに至るまでに随分遠回りなことをした……。何で素直にコモンイベントでまず挑戦しなかったのか。時間を巻き戻したい……
 
神凪洸さん
わざわざ多くのことを検証していただいてありがとうございます。
執筆者:神凪洸

あれから、色々探したり試したりと続けて、ようやく形にはなってきたかなという感じです。
そしてプラグイン使わなくとも、作れたので記しておきますね。(先述したプラグイン利用だと色々まわりくどい事が判明したのでコモンイベントが素直でよろしいです)
先述の方法は一応、備忘録として残しておきます。

【用語解説】
親スキル  :実際に使用するスキル。属性を付与できるスキル。ダメージ属性は必ず固定設定となります。
       通常攻撃のように装備などで属性が変化するスキルは属性の取得がめんどくさいのでやらない。
反応スキル :属性が付与されており、その時の攻撃属性が正しければ発動されるスキル。
       このスキルの対象範囲は敵単体固定。スキルとして誰も習得させない。
判定ステート:攻撃がヒットしたか否かを判定するためのダミーステート。
       範囲攻撃に対応させる為。
属性ステート:属性反応を起こす為のトリガーステート。各属性分作成。

【作り方】
1、属性ステートの作成
  何かしらの属性ステートが付与されていたら、他の属性ステートが付与されないように
  特徴に全ての属性ステート無効を設定。炎ステートに炎ステート無効をつけるというような事はもちろんしないように。
  ※その他、属性有効度とか解除タイミングとかはお好きなように

2、コモンイベントの作成
  変数の操作、代入「直前に行動した敵キャラインデックス」-1
  代入「直前に行動したアクターID」
  代入「PTメンバーn番のアクターID」を最大戦闘参加人数分作成
  代入「属性ステートID」
  代入「属性反応スキルID」
これらはコピペ作業時や変更等あった場合に変数操作だけ弄ればいいようにするためのもの。

  条件分岐でパーティーの誰かに判定ステートが付与されているか?(これで攻撃者がアクターかエネミーかが判定できる)
   判定ステートが付与されていた場合、PTメンバーの先頭から順に判定ステートと属性ステートが付与されているかを調べる。
   付与されていれば戦闘行動の強制で反応スキルを発動。
 これを戦闘参加人数分作成。エネミーも同様。
 スクリプトで分岐します。通常のイベントコマンドでは不可能なので。
View attachment 20598
View attachment 20599

スクショにPTの誰かが判定ステートになっているか?を入れ忘れていました。最初の条件分岐はこれです。
PTの誰かがステートにかかっているか?のスクリプトはこちらのプラグインを導入してください。MVのですがMZでも動きます。

3、親スキルの作成
  ダメージ属性を設定。使用効果に「属性付与」を任意の付与率、「判定ステート」を100%付与、
  2で作成したコモンイベントを設定。

4、反応スキルの作成
  使用効果に「判定ステート」を100%解除。
  これ以外はお好きに。

5、テストして敵、味方共に反応が発生するかどうか確認。
  発生しない場合は、変数に代入した数値が間違っているか、スクリプト内容にミスがあるか。

6、問題がなければコモンイベントを属性+反応分作成
  各スキルごとに属性は固定にしたことで、そのスキルを使った時点で使用した属性は確定しています。
  その為、コモンイベントには反応するための属性ステートと判定用ステートが付与されているか?で条件分岐します。
  すでに基礎が完成しているので変数の値だけ変更するだけでおk。やったね。

  親スキルが炎だった場合に起こる反応が凝華と蒸発とした場合、凝華用コモンと蒸発用コモンを作成。これを2つとも使用効果に設定。
  この時の条件分岐は凝華用は氷ステートと判定ステートにかかっているか?
  蒸発用は水ステートと判定ステートにかかっているか?

  親スキルが水属性に蒸発を、氷属性に凝華を使用効果に。
  ただし、こちらの条件分岐は凝華用が炎ステートと判定ステートにかかっているか?
  蒸発用が炎ステートと判定ステートにかかっているか?
  となるため、炎スキルと同じコモンでないことに注意。

7、反応スキルは全て共通が無難
  管理がしやすい。
  例:蒸発なら蒸発でIDは12とする。どのスキルを使っても起こる蒸発反応はスキルID12が発動する。 という具合。

8、テスト
  やったね。
  一応、複数回行動となるため先述のスピードスターバトルとかテンポよくさせるものはあった方がいいですね。
  それと戦闘行動の強制を利用するので、TPBとかがリセットされてしまうのでこちらをいれると最高です。
  【戦闘行動強制による行動リセットとTPBチャージリセットを無効化

ここに至るまでに随分遠回りなことをした……。何で素直にコモンイベントでまず挑戦しなかったのか。時間を巻き戻したい……
神凪洸さん
わざわざ多くのことを検証していただいてありがとうございます。コモンイベントでこのように工夫できて実現できるんですね。使いこなすと可能性が広がりそうです。ぜひ試してみたいと思います、ありがとうございます。
 
Back
トップ