開発日誌

プラグイン/スクリプト

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 「盗む」スキルの実装

2023-03-16 22:28:14

敵の持っているアイテムを奪うスキル、いわゆる「盗む」スキルを実装できるプラグインを作成しました。

RPGツクールMV/MZ、どちらにも対応しています。

いわゆる「盗む」のスキルは、盗賊職の花形スキルとして数多くのRPGで採用されていますが、ツクールシリーズには標準では用意されていません。

既存のプラグインでより高機能なものもありましたが、もっと単純な設定で動くものが欲しかったので自作しました。

「盗む」ステートの作成

まず事前準備として、「盗む」が成功した状態を表すステートを1つ作成します。

このステートはダミーステートなので、名前以外の各種設定やこの状態になった時のメッセージなどは、設定しなくて構いません。むしろ行動制約やアイコンなど、余計な設定が付与されないように気を付けましょう。

そしてプラグインパラメータの「盗む成功ステート」で、この作成したステートを指定します。

このステートの付加をもって、「盗む」が成功したか否かを判定する仕組みとなっています。

「盗む」スキルの作成

次に「盗む」スキルを作成します。

スキルの使用効果で、先ほど作成した「盗む成功ステート」を付加するように設定します。

「ステート付加」の確率を調整することで、「盗む」スキルの基本成功率を設定することができます。

スキルのメッセージやアニメーションは、敵からアイテムを盗もうと狙っている時のものを設定します。「盗む」が成功/失敗した時のメッセージやアニメーションは、別で設定するようになっています。

また、敵キャラの特徴の「ステート有効度」を設定することで、敵キャラごとに「盗む」の成功しやすさを調整することができます。

なお、本プラグインで実装できる「盗む」スキルはアクター専用であり、敵がプレイヤーのアイテムを盗むような仕様には対応していません。

盗めるアイテムの設定

盗んだ時に手に入れるアイテムは、基本的に敵キャラのドロップアイテムがそのまま適用されます。

既存の「盗む」プラグインは、盗めるアイテムを別途メモ欄で指定する方式だったため、ドロップアイテムの設定をそのまま利用できるものとして開発しました。

プラグインパラメータの「盗めるアイテム」で、盗む対象となるドロップアイテムを指定できます。

「ドロップアイテム1~3のみ」を選ぶと、それぞれ指定したドロップアイテムのみが盗めるアイテムとなります。例えば「ドロップアイテム2のみ」を指定した時に、敵キャラのドロップアイテム2が設定されていなかった場合、その敵キャラは何も盗めるアイテムを持っていないことになります。

「ドロップアイテムの出現率依存」を選ぶと、複数のドロップアイテムの中から、出現率によってアイテムが決まります。例えば、アイテムAの出現率が1/2、アイテムBが1/4、アイテムCが1/8だった場合、A:B:C=4:2:1の割合、すなわちアイテムAが4/7の確率、アイテムBが2/7、アイテムCが1/7の確率で、それぞれ盗んだ時に手に入ります。

また、プラグインパラメータの「再度盗めるかどうか」をONにすると、同じ相手から何度でも盗むことができます。OFFにすると、一度盗んだ相手からは盗めなくなり、倒した時にアイテムもドロップしなくなります。

メッセージとアニメーション

プラグインパラメータで、以下のメッセージとアニメーションをそれぞれ指定できます。

  • 「盗む」が成功した時
  • 「盗む」が失敗した時
  • 相手が盗めるアイテムを何も持っていない時
  • 相手から既にアイテムを盗んでいてこれ以上盗めない時

メッセージでは、%1で自分のアクター名、%2で相手の敵キャラ名が表示できます。盗む成功時のメッセージでは、これに加えて%3で盗んだアイテム名を表示することができます。

相手から既にアイテムを盗み済みの判定は、「再度盗めるかどうか」がOFFの場合のみ有効です。

「盗めるアイテムなし」と「既に盗み済み」の判定は、「盗む」の成功判定より先に行われます。盗めるアイテムがないのに、何度も「盗む」にトライしてしまう、という心配はありません。

まとめ

いわゆる「盗む」のスキルは、かなり仕組みがそれ専用な上に、成功確率や盗めるアイテムといった細かい仕様が千差万別なため、なかなかツクールの標準機能として組み込むのが難しいと思います。

今回は個人的に標準的な「盗む」スキルとして、以下のような仕様で作りました。

  • 味方専用
  • 成功率はステートの付与率で判定
  • 盗めるアイテムはドロップアイテムに準拠
  • 何度でも盗めるかどうかはパラメータで変更可

したがって、以下のような仕様は、本プラグインでは対応していません。

  • 敵がプレイヤーのアイテムを盗む
  • 成功率に運以外のパラメータを関与させる
  • ドロップアイテムとは別で盗めるアイテムを設定

成功率などはプログラムの改造でできると思いますので、細かい仕様変更はご自身でお願いします。変更が大がかりでなく、汎用的だと思える要望であれば、修正も可能ですので、ご要望をお寄せください。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

コメント
1. 餅男 2024-01-26 19:17:06

mv?では機能しませんでした

2. panda 2024-01-26 20:12:21

手元のMVでは正常に動作しているので、競合とか設定間違いとかですかね。
「機能しなかった」の部分を具体的に書いていただけると、
もう少しアドバイスのしようがあるかと思います。

3. 餅男 2024-01-27 20:40:01

返信頂けるとは思いませんでした
ありがとうございます
プラグインを30個くらいいれてるので
それと喧嘩してるのでしょうかね
たまにプラグイン入れても機能しなくて
順位を入れ替えたりして機能するようになったりもするので
ですが今回は順位を入れ替えても盗む動作はしてくれませんでした
記述の通りプラグインを入れ設定しても
スキをうかがっている
までは行動するのですが
その後の行動、成功、失敗、既に盗んでいる、何も持っていない
などの反応がありませんでした


手持ちのMVで動いたと教えていただいたので
時間があるときにもう少し頑張ってみようと思います

4. panda 2024-01-27 20:50:45

他のプラグイン(特に戦闘系)を1つずつOFFにしていって、
どれをOFFにすると動く、ONにすると動かない、というのを確かめると良いかと思います。

5. 餅男 2024-01-28 22:46:27

ありがとうございます
試してみます
勉強になりましたm(_ _)m

6. はるか 2024-02-20 17:32:14

初心者です。昨日買ったばかりのMZで、盗むの特技がどうしても欲しくて検索したらここに誘導されてきました。

早速プラグインのファイルに入れて盗むをオンにしたのですが、アニメーションの部分が表示されなくてどうすればよいのか悩んでいます。
もしこれが初歩的な勘違いで、プラグイン以外にも何かしらしなければいけないのであればごめんなさい。
でも、盗むの特技は欲しいので、良ければ教えてください!

7. panda 2024-02-20 17:52:49

ご利用ありがとうございます。
記事にある通り、「盗む」ステートと「盗む」スキルの作成、および盗むが成功/失敗した時等のアニメーション設定はしていますか?
アニメーションが表示されないとのことなので、プラグインパラメータの「盗む成功時アニメーション」などが未設定なのではないかと思われます。

8. はるか 2024-02-20 18:46:09

プラグイン内でアニメーションの設定という項目までは理解出来たのですが、123番目の「ぬすむのアニメーション」が表示されなくて……
もしかして、これは自分で制作? する必要がある部分だったのでしょうか?

9. panda 2024-02-20 19:14:32

ああ、解説画像内にある123番の盗むアニメーションは、自分で設定する必要があります。
盗むというより、盗む前のスキをうかがっている時のアニメーションですね。

10. はるか 2024-02-20 20:17:49

理解できました! お付き合いくださりありがとうございました!

11. miso 2024-07-20 18:44:11

MVで利用してます!使いやすくて助かっております!
「対象の敵に対しダミーステートの付与に成功したら、盗むが成功する」という仕様である以上、当然の挙動ではあるのですが、「最後の一撃では盗めない(敵が戦闘不能になってしまい、ダミーステートが付与されない)」という点に対して解決策はないものかと思案しております。
仕様上、プラグイン側での正攻法な対処は難しいと思いますが、なにかpandaさんの方でうまい回避アイディアなどお持ちでないかと思いまして書き込みさせていただきました。
もしよろしければ一考いただけますと幸いです!

12. panda 2024-07-20 21:37:17

お使いいただきありがとうございます!
ダメージを与えつつ盗むようなスキルですかね。
そういうのはあまり想定していなかったのですが、例えば戦闘不能になっても継続するステートを作るプラグインはあったと思うので、それと併用することで何とかなったりしますかね?
戦闘不能の処理が先に走っちゃうので、無理ですかね?

13. miso 2024-07-20 23:23:20

お返事ありがとうございます。
説明不足ですみません、おっしゃるとおり、いわゆる「ぶんどる」のようなスキルで、ダメージを与えつつ盗むスキルを想定して記載いたしました。
戦闘不能後継続ステートのプラグインを併用するにしても、ご指摘のとおり戦闘不能の処理が走るとその後のステート付与は処理が実行されないようなので、なんとかならないかと思案しております。
盗むプラグインの話というよりは、トドメの時にスキルの使用効果を中断せずに全部実行するための裏技みたいな話になってしまいますよね…

14. panda 2024-07-24 00:58:55

こちらで試してみたところ、砂川赳さんのステート拡張プラグイン「NRP_StateEX.js」で、戦闘不能で解除しないタグ <IgnoreRecoverDie> を盗むステートに付与したら、倒しても盗む処理が行われました。
これを併用するのが手っ取り早いかもしれません。
https://newrpg.seesaa.net/article/488957733.html

15. miso 2024-07-26 16:35:13

調査いただきありがとうございます!
砂川さんの該当プラグインの存在は認識していたのですが、比較的多機能なこともあり、私の環境だと一部競合を起こしてしまい難しそうでした。
ただ、アプローチとしてはやはり「スキルの使用効果(あるいはもっと絞ってステート付与)を戦闘不能の処理前に発生させる」という観点になるのだと理解しました。
引き続き解決方法ないか私も検討してみます。
ご相談にのっていただきありがとうございました!

16. miso 2024-08-24 01:12:30

前回とは別のご相談をさせてください!
「再度盗めるかどうか」をfalseにして利用しており、その前提での挙動となります。

一度敵からアイテムを盗みことに成功し、その敵を倒します。
該当の敵が蘇生された後、再び盗むを試みると、当然ではありますが「もう何も持っていない」となります。

ゲーム表現上、蘇生ではなく新規の個体が登場するように見せかけているので盗めるようにしたいのですが、このようなケースでなにか良いアイディアなどないかpandaさんのお知恵を拝借できないでしょうか…
(敵に付与した「盗むステート」が解除されると、再び盗めるようになるとか)

難しいご相談で申し訳ございませんm(__)m

17. panda 2024-08-24 02:23:07

なるほど、やりたいことは分かりました。
一度盗んだかどうかの状態は、ステートだと倒した時に解除されてしまうので、別で管理しているんですよね。
$gameEnemy._stolen = false にすれば、盗んだ判定は解除されます。

一番簡単な方法は、蘇生スキルのダメージ計算式を「HP回復」にして、b._stolen = false; b.mhp; などと記述する方法ですかね。
ダメージ計算式の中では b で対象者のオブジェクトを表現できるので、その_stolenをfalseにして、次に最大HP(mhp)分回復させます。回復量を100%でなくしたい場合は、b.mhpの部分を調整すればいいと思います。

実際に試してはいないので、これで上手くいくかは分からないですが、イメージ的にはこんな感じです。
何らかの方法で対象者の._stolenをfalseにすれば、盗んだ判定はリセットされます。

18. miso 2024-08-24 10:31:07

ありがとうございます!
実は蘇生はスキルではなくコモンイベントから処理しているのですが、対象の敵のインデックスは判明しているので下記スクリプトを入れることで実現できました!

$gameTroop.members()[i]._stolen = false;

この件についてはこれで答えに辿り着けたのですが、一方で「盗むは新たな敵と見做して何度もできるようになるが、ドロップアイテムは相変わらず同一個体と見做されて1回しか落とさないため、別個体扱いなのか同一個体扱いなのか整合が取れていない」という状態になることに気づいてしまいました…(新たな個体が登場するというなら、ドロップアイテムも増えていかないと辻褄が合わない)

ここはpandaさんにご相談するお話ではありませんので私の方で考えます。
一緒に考えてくださってありがとうございました!

お名前
コメント
※ 確認画面はありません。