ページ 12

【解決ずみ】戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月16日(火) 12:01
by システミィ
お世話になっております。また質問させてください。

通常、スキルは攻撃→メッセージ→ダメージ表示→コモンイベント

という流れですが、これを

攻撃→メッセージ→コモンイベント→ダメージ表示

と入れ替えることは可能でしょうか? プラグインをいくつか使い分けないと駄目なんでしょうか? 御教授願えればと思います。

Re: 戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月16日(火) 15:21
by ゆわか
スキルのダメージ計算を使わずに
コモンイベントの最後でダメージを与える所をやればいいのかなと思います。

具体的にはまず、「効果がなかった」みたいなメッセージを出さないために
ダミーのステートを作って、コモンイベントとともに付するスキルを作ります。
攻撃アニメとメッセージを指定して、ダメージ計算等などはなしで。

ダミーステートは、透明のアイコンで、すぐ解除されるようにしとくといいです。
メッセージも一切表示しないよう未記入で。

コモンイベントの、最後にダメージ表示用のイベントを走らせる。

やり方は、ダメージ表示用のダミースキルを作成して、パーティメンバー以外のアクターに実行させます。
ダメージ用ダミースキルは、メッセージが表示されないようメッセージは未記入で。
(HPを変更しただけでダメージ表示をしてくれるプラグインを使うというのもありですが)

考え方としては上記の通りで良いと思います。
ただ、ここに書いたのは構想だけなので、実際にやろうとしたらできなかった
という場合もあります。

やってみたけどうまくいかなかった、とか
やってみたいけど、どうすればいいのか今一つわからない
という場合は、イベントの作成例などを作成するのでお知らせください。

その際は、そのスキルが、個別なのか全体攻撃なのかとか
アクターが使うのか敵が使うのかなどの情報をください。

全てのスキルでやりたい、という場合、プラグインを探すかリクエストした方がいいかもしれません。
どんなダメージ計算式を使うかによるけれど、単純計算でスキルの数が倍になるので
スキルの全体数が多いと、管理が難しくなるでしょう。

Re: 戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月16日(火) 16:17
by システミィ
ありがとうございます。が、すみません。ちょっと理解が及びません。
スキルではなく、コモンイベントでダメージ処理をするというのはわかるのですが、コモンイベントにそんな実装ありましたっけ……? 一応ステート付与、通常攻撃を組み合わせることでそれっぽいことができることに気がつきましたが、これだと必殺技が使えず。

単純に主人公が、炎弱点の敵相手に、炎系統の必殺技で攻撃したときに「お前の弱点はわかってるんだ!」的なことをいわせたあとでダメージを表示させたいんです。

パーティメンバー以外のアクターに実行ですとか、何をどうすればいいのかわかっていないです。申し訳ない。

Re: 戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月16日(火) 18:18
by 辛味噌
ダメージ処理前にカットイン的なイベント表現をされたいのであれば、google等で「BeforeCommon MZ」で検索すると参考になりそうな情報がいくつか出てくるかと思います。
ただし弱点の判定などが必要ならば、プラグインとコモンイベントに一捻りが必要と思います。

Re: 戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月16日(火) 19:13
by システミィ
辛味噌 さんが書きました:ダメージ処理前にカットイン的なイベント表現をされたいのであれば、google等で「BeforeCommon MZ」で検索すると参考になりそうな情報がいくつか出てくるかと思います。
ただし弱点の判定などが必要ならば、プラグインとコモンイベントに一捻りが必要と思います。
ありがとうございます。ひとまずこちらのプラグインをいれてみて動作を確認してみようと思います。

Re: 戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月16日(火) 22:07
by ecf5DTTzl6h6lJj02
こんにちは。

ツクールMZ(MVも)の仕様上、
攻撃→メッセージ→コモンイベント→ダメージ表示
という、行動開始メッセージの直後に、コモンイベントを発動させることが難しく、
不可能に近いです。

そのため、発動前コモンイベント などで、スキルの発動前にコモンイベントを発動し、
そのコモンイベントの中で、行動開始時のモーションや、行動開始メッセージを表示させ、
その後に、カットインの演出表示をするという、処理をする必要が出てきます。

行動開始時のモーションや、行動開始時のメッセージをバトルログに表示するイベントコマンドは、
用意されていないので、スクリプトで処理する必要があります。
この辺りは、後ほど提示させていただきますので、そちらをご利用ください。


具体的な、作成例ですが、
  1. Yana様作 発動前コモンイベント(BeforeCallCommon.js) を導入してください。
    https://plugin-mz.fungamemake.com/archives/1442(ツクプラMZ の紹介記事に飛びます)
  2. 行動開始時のモーション、および、行動開始時のメッセージをバトルログに表示するためのコモンイベントを作成します。
    イベントコマンドの『スクリプト』を選択し、
    以下のコードを貼り付けて OK してください。

    コード: 全て選択

    // スキル使用者のインデックスを取得する
    const userIndex = $gameVariables.value(11);
    
    // スキル使用者の取得
    // インデックスが 1000 以上ならエネミーのインデックスなので、
    // 処理を分岐する。
    const user = userIndex < 1000 ? $gameParty.members()[userIndex] : $gameTroop.members()[userIndex - 1000];
    
    // スキル使用者の名前を取得
    const userName = user.name();
    
    // アクションの取得
    const action = user.currentAction();
    
    // 使用したスキルの取得
    const skill = action.item();
    
    // スキル名の取得
    const skillName = skill.name;
    
    // 行動開始メッセージの取得
    const message = skill.meta['行動メッセージ'].split('\\n');
    
    // 行動開始モーション
    BattleManager._logWindow.push('performActionStart', user, action);
    BattleManager._logWindow.push('waitForMovement');
    
    // 行動開始メッセージの表示
    BattleManager._logWindow.push('addText', message[0].format(userName, skillName));
    if (message.length > 1) {
      BattleManager._logWindow.push('addText', message[1].format(userName, skillName));
    }
    
  3. 発動前コモンで呼び出すコモンイベントの作成
    下記のような形で、コモンイベントを作成してください。

    コード: 全て選択

    ◆注釈:行動開始時の処理をするコモンイベントを呼び出す
    ◆コモンイベント:アクション開始メッセージ処理
    ◆注釈:行動開始時の処理とほぼ同時にメッセージが表示されてしまうので、
    :  :適度にウェイトをかける
    ◆ウェイト:20フレーム
    ◆注釈:この下に、カットイン用の処理をいれる
    :  :この例だと、メッセージの表示のみ
    ◆文章:なし, なし, ウィンドウ, 下
    :  :カットインテスト\|\^
    
  4. カットインを表示したいスキルのメモに、発動前コモンの設定と、行動開始時のメッセージ用のタグを書く
    行動開始時のメッセージを設定してしまうと、コモンイベント開始時と、行動結果の表示のサイトで、
    2重にメッセージ表示されてしまうので、
    メッセージ欄は空にして、メモ欄にタグで設定するようにしています。
    <行動メッセージ:メッセージの文章>
    という形で、設定してください。
    メッセージの文章中に %1 と書くと、スキル使用者の名前、 %2 と書くと、スキルの名称に変換するようになっています。
    (通常のメッセージ欄と同じ処理です)
    改行して2行にしたい場合は、改行したい位置に \n と書いてください。
    設定例
    設定例
こちらで確認する限りでは、
これでご希望に近い形の演出になるのではないかと思います。

ご確認ください。

追記:
viewtopic.php?f=99&t=15000
こちらのトピックで、エラーが発生するという報告があり、確認したところ、
スクリプトの、スキル使用者の取得のところ、
index 1000 以上ならエネミーのインデックスなのに 1001 以上で扱っていたため、
正しくインデックスが取得できていませんでした。
記事の修正を行いました。
失礼いたしました。

また、ムノクラ様が
私のコードを元にプラグイン化してくださったようなので、
そちらをお試しいただくのが良いかと思います。

Re: 戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月16日(火) 23:22
by ゆわか
プラグインを使った方が、絶対作りやすいと思うので
私もそちらをお勧めしますが
一応、私が提案した方の説明動画置いときますね。

https://www.youtube.com/watch?v=06gkcHR0P3E

動画では、アニメの表示が後になっていますが
先に表示したい場合は、戦闘中にプレイヤーが選択するスキルの方に
アニメーションと攻撃メッセージだけ先に設定しておくといいです。

プラグインを使った方で解決と思いますので
こちらは参考程度ということで。

Re: 戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月18日(木) 19:58
by ムノクラ
ecf5DTTzl6h6lJj02 さんが書きました:こんにちは。

ツクールMZ(MVも)の仕様上、
攻撃→メッセージ→コモンイベント→ダメージ表示
という、行動開始メッセージの直後に、コモンイベントを発動させることが難しく、
不可能に近いです。

そのため、発動前コモンイベント などで、スキルの発動前にコモンイベントを発動し、
そのコモンイベントの中で、行動開始時のモーションや、行動開始メッセージを表示させ、
その後に、カットインの演出表示をするという、処理をする必要が出てきます。

行動開始時のモーションや、行動開始時のメッセージをバトルログに表示するイベントコマンドは、
用意されていないので、スクリプトで処理する必要があります。
この辺りは、後ほど提示させていただきますので、そちらをご利用ください。


具体的な、作成例ですが、
  1. Yana様作 発動前コモンイベント(BeforeCallCommon.js) を導入してください。
    https://plugin-mz.fungamemake.com/archives/1442(ツクプラMZ の紹介記事に飛びます)
  2. 行動開始時のモーション、および、行動開始時のメッセージをバトルログに表示するためのコモンイベントを作成します。
    イベントコマンドの『スクリプト』を選択し、
    以下のコードを貼り付けて OK してください。

    コード: 全て選択

    // スキル使用者のインデックスを取得する
    const userIndex = $gameVariables.value(11);
    
    // スキル使用者の取得
    // インデックスが 1001 以上ならエネミーのインデックスなので、
    // 処理を分岐する。
    const user = userIndex <= 1000 ? $gameParty.members()[userIndex] : $gameTroop.members()[userIndex - 1000];
    
    // スキル使用者の名前を取得
    const userName = user.name();
    
    // アクションの取得
    const action = user.currentAction();
    
    // 使用したスキルの取得
    const skill = action.item();
    
    // スキル名の取得
    const skillName = skill.name;
    
    // 行動開始メッセージの取得
    const message = skill.meta['行動メッセージ'].split('\\n');
    
    // 行動開始モーション
    BattleManager._logWindow.push('performActionStart', user, action);
    BattleManager._logWindow.push('waitForMovement');
    
    // 行動開始メッセージの表示
    BattleManager._logWindow.push('addText', message[0].format(userName, skillName));
    if (message.length > 1) {
      BattleManager._logWindow.push('addText', message[1].format(userName, skillName));
    }
    
  3. 発動前コモンで呼び出すコモンイベントの作成
    下記のような形で、コモンイベントを作成してください。

    コード: 全て選択

    ◆注釈:行動開始時の処理をするコモンイベントを呼び出す
    ◆コモンイベント:アクション開始メッセージ処理
    ◆注釈:行動開始時の処理とほぼ同時にメッセージが表示されてしまうので、
    :  :適度にウェイトをかける
    ◆ウェイト:20フレーム
    ◆注釈:この下に、カットイン用の処理をいれる
    :  :この例だと、メッセージの表示のみ
    ◆文章:なし, なし, ウィンドウ, 下
    :  :カットインテスト\|\^
    
  4. カットインを表示したいスキルのメモに、発動前コモンの設定と、行動開始時のメッセージ用のタグを書く
    行動開始時のメッセージを設定してしまうと、コモンイベント開始時と、行動結果の表示のサイトで、
    2重にメッセージ表示されてしまうので、
    メッセージ欄は空にして、メモ欄にタグで設定するようにしています。
    <行動メッセージ:メッセージの文章>
    という形で、設定してください。
    メッセージの文章中に %1 と書くと、スキル使用者の名前、 %2 と書くと、スキルの名称に変換するようになっています。
    (通常のメッセージ欄と同じ処理です)
    改行して2行にしたい場合は、改行したい位置に \n と書いてください。
    001.jpg
こちらで確認する限りでは、
これでご希望に近い形の演出になるのではないかと思います。

ご確認ください。
こちら当方で確認しました。
自分でも設定に戸惑ったことから「パッチ的プラグインコマンドにしたほうが良いのでは?」と考え、作成しました。
大半のコードをこちらの投稿から流用させていただいております。

もし、ecf5DTTzl6h6lJj02様がよろしければMITライセンスにて公開したく、お願いいたします。

Re: 戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月18日(木) 20:26
by ecf5DTTzl6h6lJj02
こんにちは。
お世話になっております。
ムノクラ さんが書きました: 自分でも設定に戸惑ったことから「パッチ的プラグインコマンドにしたほうが良いのでは?」と考え、作成しました。
大半のコードをこちらの投稿から流用させていただいております。

もし、ecf5DTTzl6h6lJj02様がよろしければMITライセンスにて公開したく、お願いいたします。
コード中にミスがあったので、記事中のコード、修正しました。

プラグイン化するところまでは、気が回らなかったので、
プラグイン化していただけて、ありがたいです。

ここに直接コードを晒しているものに関しては、私が、特に権利を主張する気がないので、
(その代わり、メンテナンスをする気もあまりないのですが…)
ムノクラ様の方で、自由にライセンスを設定して、公開していただいて結構です。

宜しくお願いします。

Re: 戦闘上で、コモンイベントを起こした上でダメージ表示したい

Posted: 2024年7月19日(金) 12:44
by ムノクラ
ecf5DTTzl6h6lJj02 さんが書きました:こんにちは。
お世話になっております。
ムノクラ さんが書きました: 自分でも設定に戸惑ったことから「パッチ的プラグインコマンドにしたほうが良いのでは?」と考え、作成しました。
大半のコードをこちらの投稿から流用させていただいております。

もし、ecf5DTTzl6h6lJj02様がよろしければMITライセンスにて公開したく、お願いいたします。
コード中にミスがあったので、記事中のコード、修正しました。

プラグイン化するところまでは、気が回らなかったので、
プラグイン化していただけて、ありがたいです。

ここに直接コードを晒しているものに関しては、私が、特に権利を主張する気がないので、
(その代わり、メンテナンスをする気もあまりないのですが…)
ムノクラ様の方で、自由にライセンスを設定して、公開していただいて結構です。

宜しくお願いします。
ご返信いただき、ありがとうございます。
簡単なリファクタも行い、下記でMV版も含めて公開させていただきました。
https://fungamemake.com/archives/15653