【解決済み】特定の属性を使った時に発動するイベントの起こし方につきまして

マキザ
記事: 8
登録日時: 2021年4月07日(水) 06:10

【解決済み】特定の属性を使った時に発動するイベントの起こし方につきまして

投稿記事by マキザ » 2022年1月21日(金) 21:20

こんばんは、マキザと申します。
イベントを発生させるための条件として「特定の属性を使うこと」を条件にしたいのですが、どのようにして作成すればよろしいでしょうか?
例えば
・炎属性のスキルを使ったら周りの液体に引火して全員がダメージ受けてしまうシチュエーション
・水中で戦うため雷属性を使ったら全員感電してダメージを受けてまうシチュエーション

……などを作りたいのですが、
一つ一つコモンイベントを設定する以外に最適な方法があればご教授お願いします;
最後に編集したユーザー マキザ on 2022年1月27日(木) 19:35 [ 編集 1 回目 ]

basu

Re: 特定の属性を使った時に発動するイベントの起こし方につきまして

投稿記事by basu » 2022年1月23日(日) 01:06

マキザ さんが書きました:こんばんは、マキザと申します。
イベントを発生させるための条件として「特定の属性を使うこと」を条件にしたいのですが、どのようにして作成すればよろしいでしょうか?
例えば
・炎属性のスキルを使ったら周りの液体に引火して全員がダメージ受けてしまうシチュエーション
・水中で戦うため雷属性を使ったら全員感電してダメージを受けてまうシチュエーション

……などを作りたいのですが、
一つ一つコモンイベントを設定する以外に最適な方法があればご教授お願いします;


使用属性の判定をするにはプラグインを使わないと無理なような気がします。
そもそもの話しですが、ツクールで用意されている条件分岐の条件項目にも使用スキルや使用属性を判定する項目が見当たらないので、コモンイベントで設定するのも無理なような気がします・・・
(もしできる方法があったら申し訳ありません・・・)
アバター
アーヴェル
記事: 48
登録日時: 2019年5月18日(土) 12:02

Re: 特定の属性を使った時に発動するイベントの起こし方につきまして

投稿記事by アーヴェル » 2022年1月25日(火) 17:19

こんにちわー。

行動直後であれば
$dataSkills[$gameTemp.lastActionData(0)].damage.elementId;
で最後に使用したスキルの属性を取ってくることが出来ます。

$gameTemp.lastActionData(0)
は最後に使われたスキルIDを保持している為、タイミングを逃すと別のスキルになります。

ただし、$gameTemp.lastActionData(0) に値が入っていない場合は、
存在しないスキルIDのデータを読もうとしてエラーします。
なので保険に値が不正であれば1(デフォルトなら攻撃)を参照するようにした形が以下の記述です。

$gameTemp.lastActionData(0) ? $dataSkills[$gameTemp.lastActionData(0)].damage.elementId : 1;

これを変数の操作・スクリプトで一旦格納して比較するか、或いは
条件分岐のスクリプトに直接

2 === ($gameTemp.lastActionData(0) ? $dataSkills[$gameTemp.lastActionData(0)].damage.elementId : 1)

こんな感じで判定させても良いかもしれません。
上記を条件分岐に入れると、最後に使ったスキルの属性IDが2の場合。という分岐になります。
上の式の最初の 2 は属性IDを指定しているので、必要に応じて変更してください。

デフォルト準拠のターン制であれば、後はバトルイベントの条件、
モーメントで判定を行えば作れそうですが如何でしょうか?

……と思ったんですが、
モーメントだとイベント後にアイテムを使った場合等に最後に使ったスキルが更新されず、
イベントが再度発動してしまいますね。

より良い形としては行動時にスキルを使った場合はこの処理をする。
という感じが綺麗だと思いますが、
エディタだけで考えるなら全スキルにスキル後にスキル後処理の専用コモンイベントを呼ぶようにする。
位しか思いつきませんでした。
ただ、今回は作業量を少なく処理したいという意図であると認識しているのでこれは無しですね。

或いは処理の該当箇所に対して小規模なプラグインを作成する形で処理を挟むのが綺麗だとは思うのですが、
そこまでする程でもないのかなぁということで。


もっと詳しい方から見れば、本来保持されているべき値を
強引に変更するのは行儀が悪い。あんまりよろしくないと思われるのは分かってるんですが、

スクリプトから

$gameTemp._lastActionData[0] = 1

で、最後に使用したスキルIDとして保持している値を1に変更することが出来ます。
これをいわゆる引火イベント等の最後に行う事で、このイベント後にアイテム使用した場合等の、
意図しない再発動を防ぎます。

この程度じゃこれに起因してそう簡単にエラーが出るとは思いませんし、
自分の作品でもこの程度の処理ならやっちゃいますが、一応、色々と自己責任でという形で。
マキザ
記事: 8
登録日時: 2021年4月07日(水) 06:10

Re: 特定の属性を使った時に発動するイベントの起こし方につきまして

投稿記事by マキザ » 2022年1月27日(木) 19:31

>basu様
ありがとうございます、一応膨大なスキルに全部コモンイベント設定して出来ないか考えておりました;

>アーヴェル様
ありがとうございましたー!
上記2つのスクリプトでできました!!限られたシチュエーションでの行動だったのでスイッチのオンオフでタイミングは自由に操作できそうです!本当にありがとうございます!!

“MZ:質問” へ戻る