1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

条件によって変化するスキル

フューリア2019-12-07に開始した「ツクールVX/VXAce」の中の討論

  1. フューリア

    フューリア ユーザー

    敵よりも敏捷が高ければ2回攻撃になるスキルや特定ステートの時だけ全体攻撃になるアイテムなどが可能になるスクリプトorやり方を分かる方教えて頂けませんでしょうか?
    よろしくお願いします。
     
    #1
    真価魔禍(マカマカ) がいいね!しました
  2. 猫二郎

    猫二郎 ユーザー

    #2
  3. フューリア

    フューリア ユーザー

    返答ありがとうございます。
    ですが自分が持ってるツクールはVXACEなのを伝え忘れてました、すみませんが他の対応策があれば教えてください。
     
    #3
  4. 猫二郎

    猫二郎 ユーザー

    それなら、行動前イベント(RGSS3)を利用してはどうですか?
    http://blueredzone.com/script/vxace/vxace_eventbeforeaction.html

    これだと、戦闘中バトラーの行動直前にコモンイベント を実行出来る事が可能で、特定条件下において発展スキルも作ることが出来るはず。
     
    #4
  5. フューリア

    フューリア ユーザー

    返事が遅くなりすみません。
    条件の書き方が分からないのですが敵よりも敏捷が高ければ攻撃回数増加させるにはどのように注釈すればよろしいでしょうか?
     
    #5
  6. 猫二郎

    猫二郎 ユーザー

    すみません。VXAceの方はちょっとしか齧っていないので把握していません。
    ただ、この行動前だとコモンイベント で判断するので出来る事が限定されています。出現している平均エネミーの敏捷値を変数に格納して、利用するアクターの敏捷値の変数と比較して判断するぐらいしか出来ないと思います。多分。


    国内のVXAce関連で自分が知る限りでは、スキル対象の能力によって変化するスキルは知りません。もしかしたら、日本より歴史がある海外フォーラムで探せばあるとかもしれませんが・・・。
     
    #6
  7. フューリア

    フューリア ユーザー

    そうでしたか。
    他のアイデアを考えてみます。
    ありがとうございました。
     
    #7
  8. faida

    faida ユーザー

    こんにちは。

    このスクリプトは、注釈内に条件を書くことで、コモンイベントが発生するかどうかを判別します。
    この条件は「発動したスキル/アイテム」「使用者」「対象」を取得できます。
    言い換えれば、「自身が敵よりも敏捷性が高い」も、このスクリプトで
    判定することが可能というわけです。

    まずは、行動前コモンイベントの条件である「==行動前イベント:使用後==」を
    記述した注釈を作成します。(使用前では不可です)
    次に、発動条件を書きます。
    ①特定のスキルであること 「use.id == n」(nはスキルID)
    ②自分の敏捷が敵の敏捷よりも高い 「user.agi > targets[0].agi」
    これを別々の注釈に書くと、「①と②の両方を満たしたとき」という条件になります。
    あとは「戦闘行動の強制」を使って、性能が変化した後のスキルを使わせれば
    完成となります。

    特定のステートかどうかも、②を「user.state?(n)」(nはステートID)
    に変更すれば可能です。

    こんな感じでどうでしょうか。
     

    添付ファイル:

    #8
    真価魔禍(マカマカ) がいいね!しました
  9. フューリア

    フューリア ユーザー

    ありがとうございます。
    設定例通りやってみて確かに別のスキルを使用することができましたがこの場合エリック限定でスキルを使用することになりますよね。
    そうではなく「敵よりも敏捷性の高かった使用者」が「使用者よりも敏捷の低い対象ターゲット」に別スキルを使用できるようにしたいのです。
    分かりづらいですが方法があればお願いします。
     
    #9
  10. faida

    faida ユーザー

    返事が遅くなって申し訳ありません。
    実はその指摘は想定済みで、いろいろ考えましたが、
    ここは素直に別のスクリプトを借りることにします。

    Artificial Providence様の「能力拡張」に
    「戦闘行動の強制内容を変数で指定」というスクリプトがあります。
    これを使用すると、特定のスイッチをONにしたとき、
    変数に入れた使用者/対象者/スキルで「戦闘行動の強制」を行うことができます。

    一方で、(アクターしか使わないスキルであれば、)
    行動前イベントの機能を使って、使用者のIDを変数に入れることができます。
    前の返信の①の注釈に、新たに行を追加します。
    同じ注釈の別の行に条件を書くと、「いずれかを満たしたとき」になるので、
    この行を読み込まないように工夫します。
    「注釈:$game_variables[51]=user.id;false
        use.id == n」
    (51は「戦闘行動の強制内容を変数で指定」の設定項目のV1)

    これで変数51番に使用者のIDを入れることができるので、
    あとはアクターかどうか(user.actor?)の条件を加え、
    「戦闘行動の強制内容を変数で指定」のスイッチをONにし、
    その他の変数を設定し戦闘行動の強制を行うだけです。

    何か不明点がありましたらどうぞ。
     
    #10
  11. フューリア

    フューリア ユーザー

    正直もっと楽にできると思っていたのですがちょっと自分には難しいです。
    アクターかどうかの条件を加えるとは具体的にどのようにすればよろしいでしょうか?
    物分かりが悪くすみません。
     
    #11
  12. faida

    faida ユーザー

    設定例の図を添付するのを忘れていました。大変申し訳ありません。
    ざっくり言うと、この方法では敵がスキルを使用したときに敵に行動させることができないので、
    アクターかどうかの条件を加える必要がありました。
    4行目の注釈「user.actor?」というのがそれですね。
     

    添付ファイル:

    #12
  13. フューリア

    フューリア ユーザー

    新規プロジェクトで試してみましたが攻撃する瞬間149行目NoMethodErrorと出てしまいました。
    たまに派生スキルが発生してから同じエラーを吐くことも…。
     
    #13
  14. faida

    faida ユーザー

    すみません、検証不足でした。
    user.idが敵側にないのでエラーを吐くようですね。
    「注釈:user.actor?」を2行目に持ってきてください。
     
    #14
  15. フューリア

    フューリア ユーザー

    ありがとうございます。無事動作しました。
    ですが試していて敏捷の値でスキル派生する場合、仕様上、敵より敏捷が高くてもランダムで敵より行動が遅いときがあります。
    行動が遅いのに2回攻撃というのがなんだか違和感がありまして…。
    乱数をなくすという手もあるんですが、できれば「敵より先に行動した場合」という条件にすることはできますでしょうか?
    また、このスクリプトなら色々できそうなのでもう一つお聞きしたいんですが、ドラクエのようなグループ攻撃なんかも実現できたりするんでしょうか?
    それとも別のフォーラムで聞いたほうが良いですかね?
     
    #15
  16. フューリア

    フューリア ユーザー

    すみません、それと「特定の装備をしている場合」という条件も教えてもらえますか?
    色々試してみたんですが$game_actors[1].equips.include?($data_weapons[1])だとアクターが固定されてしまうし。
    何度も聞くのは申し訳ないんですが根本的に理解できていないので応用が利かず…。
     
    #16
  17. faida

    faida ユーザー

    基本的な考え方として、
    「user」が「使用者」、「targets」が「対象(の配列)」、
    というのがあります。
    つまり、アクターであれ敵キャラであれ、「使用者側の条件」はすべて「user」と始まるはずです。

    で、問題の「敵より先に行動した場合」というのは
    厳密な行動順を取得することはできないので、疑似的な行動順になりますが
    「user.speed > targets[0].speed」となります。
    「特定の装備をしている場合」も、「使用者が」ならば
    「user.equips.include?($data_weapons[1])」となります。

    グループ攻撃に関しても、どういった仕様にするかは存じ上げませんが、
    ループなどで強制行動を複数回行えばできるんじゃないですかね。
    ただ、一回の攻撃で複数の狙った敵に攻撃するなら
    グループ攻撃のスクリプトを使用されたほうがよろしいかと。
     
    #17
  18. フューリア

    フューリア ユーザー

    なるほど!
    分かりやすく教えて頂きありがとうございます。
    グループ攻撃のスクリプトは探したんですけどVXのものしか見当たりませんでした。
     
    #18

このページを共有