ページ 11

【解決済】攻撃中のスキルID取得

Posted: 2020年6月11日(木) 21:31
by シーズンクロック
はじめまして、シーズンクロックと申します。

「武器グラフィック設定拡張」を改造し、武器画像をメモ欄の<WeaponNumberplus:x>タグの、
x値分ずらして表示するように改造したのですが、
YEPアクションシーケンスと併用すると、上手く動作できませんでした。

何とか攻撃時のスキルIDを var id= 1;のように、
直接指定すれば、望む動作をするように出来たのですが、
タイトルの通り、攻撃orスキル実行時のスキルIDの取得方法が分かりません。
ご教授いただきたく思います。

参考までに、改造途中のプラグインを乗せておきます。

Re: 攻撃中のスキルID取得

Posted: 2020年6月12日(金) 12:15
by Plasma Dark
「武器グラフィック設定拡張」を改造し、武器画像をメモ欄の<WeaponNumberplus:x>タグの、
x値分ずらして表示するように改造したのですが、
YEPアクションシーケンスと併用すると、上手く動作できませんでした。
まず、改造元となるプラグインの入手元へのリンクを貼ってください。
YEPのアクションシーケンスはjsファイルが複数に分かれていたように思いますが、すべてと一緒に利用した場合でしょうか。
特定のプラグインをOFFにしてうまく動作するのであれば、その情報もあると良いです。
参考までに、改造途中のプラグインを乗せておきます。
コードの内容に踏み込む前に、要件を確認させてください。

お望みの挙動を実現するために、本当にコードを改造しなければなりませんか?
通常攻撃では剣モーションにしたいが、特定スキルでは弓モーションにしたい、ということで合っているでしょうか。
これだけであれば、武器とスキルにそれぞれ異なる <WeaponNumber:x> を指定すれば、元のプラグインでも実現できてしまいそうな気がします。

武器に指定した <WeaponNumber:x> の x に、なにかしらのオフセットを加算した値を利用したい、というのは、要件の本質から反れているような気がします。
武器に応じて、スキル使用時の弓の画像も変わるということであれば、武器に <WeaponNumberOffset:y> などという設定を追加し、スキル使用時にその値に応じて weaponNumber を加算して用いる、でも良いかと思います。

いずれにせよ、要件をはっきりさせる必要があります。
実現したいことは何でしょう。

通常攻撃では剣モーションにしたいが、特定スキルでは弓モーションにしたい だけでしょうか。
それとも、上記に加えて、武器に応じて弓モーション時の武器画像を変更したい、でしょうか。

Re: 攻撃中のスキルID取得

Posted: 2020年6月12日(金) 22:46
by シーズンクロック
Plasma Dark様
ご連絡いただき、ありがとうございます。
やりたい事が先行し怪文書になってました。まずはじめに、改造元となったプラグインのURLです。
【改造元プラグイン】
http://respawnfromhere.blog.fc2.com/blog-entry-6.html

要件としては
【攻撃orスキル実行時のスキルIDを取得したい】
なのですが、そこに至るまでの説明を省きすぎました。
順を追ってお話しします。

①銃剣など「斬撃」と「射撃」のように、2種類の攻撃方法を持つ武器を作りたい
 具体的には、ツクマテ内にある「虚構の城跡様作:ナイフ一体型拳銃を使いたい」です。
 画像URL viewtopic.php?f=14&t=3239&p=25228#p25228
⇒改造元のプラグインを見つけました。スキル毎に武器モーションを設定できる点に惹かれ導入

②しかし、設定できる画像は武器・スキル毎で固定だった為、装備を変更した際の画像の設定が出来なかった。
⇒コモンイベントや特徴を駆使すれば設定は可能だったが、作業量が多くなりすぎる

③プラグインを改造し、<WeaponNumberplus:x>タグを増やし、武器モーション実行時、x値分ずらして表示する
 改造方法を思いつく
⇒紆余屈折ありましたが、ここまでは自力で何とか設定。



④競合チェック
 YEP_BattleEngineCoreおよびアクションシーケンスパック1~3を導入し、動作チェック
 ・スキルID1番「攻撃」に関しては、YEPのON/OFFに関わらず、
  攻撃時にスキル側のメモ欄の設定が反映されませんでした。
 (元のプラグイン自体が、「攻撃」は武器のメモしか参照してないようだったので、予想通りではあります。)

 ・1番以外のスキルは、YEPシリーズのBattleEngineCoreだけON
 ⇒メモにアクションシーケンスの設定が無しなら、スキルのメモを読み込み、正常に動作しました。
 ただし、次のYEPアクションシーケンス設定記述を入れると、武器振りすらしなくなりました。
 スキルの命中タイプが「物理攻撃」なら、攻撃時に「汎用スキル」
 「魔法攻撃」なら、攻撃時に「魔法」モーションになりました
●YEPアクションシーケンス設定
<target action>
motion attack: user※1
wait: 12
action animation
action effect
</target action>
・アクションシーケンスパックの1・2が両方ON時
 ⇒メモにアクションシーケンスの設定が無しなら、スキルのメモを読み込み、正常に動作しました。
 上記の設定で、スキルを実行すると、装備中の武器モーションとなりました。
 武器のメモ欄<WeaponNumber:x><MotionType:x>で設定した武器画像とモーションで動作しました。
 ※1箇所が未記入なら、どの設定でも、詠唱待機のまま少し近づいて離れる動きになりました。

⑤「motion attack: user」について
 ・どうやら、YEPバトルエンジンは、このコマンドでモーションを制御している。
 ・「攻撃」「スキル」に関係なく、attackのところをskillに変えると、
  「汎用スキル」、deadだと「戦闘不能」に攻撃モーションが変わった。
 ・attackコマンド命中タイプが武物理攻撃、魔法攻撃に関係なく、武器に設定されたモーションを呼び出す。
  逆に言えば、武器に設定してあるモーションしかできない。
 ・武器画像、振りモーションは、「武器グラフィック設定拡張」側で制御出来ている。


⑥ここから推測
 1.何とかして攻撃、スキル実行時のスキルIDを取得
 2.「攻撃」時の処理でも、1.で読み取ったスキルのメモを参照するように改造。
 上2つをクリアすれば、「motion attack: user」実行時、スキルのメモで設定してある
  <WeaponNumber:x><MotionType:x>、③で独自に追加した<WeaponNumberplus:x>で、
 武器振りモーションを細かく制御できるのでは?と思いつく。

 ⑥-1:質問に挙げた通り、設定方法が分からない。ほんとに実現可能なのかも不明な状態です。
   var id =1;など、整数を仮置き中。
 ⑥-2 this.inputNote($dataSkills[id]);と記述すれば、「motion attack: user」で攻撃モーション実行時、
  ⑥-1で設定したスキルIDのメモを読み込んでモーションを制御出来る事を確認

あれこれ考えましたが、⑥-1の設定方法が分からず、質問したといった流れです。
長文失礼しました。

Re: 攻撃中のスキルID取得

Posted: 2020年6月13日(土) 04:36
by Plasma Dark
要件としては
【攻撃orスキル実行時のスキルIDを取得したい】
なのですが、そこに至るまでの説明を省きすぎました。
これは要件ではなく、仕様を実現するための一つの手段の一部です。

要件とはすなわち、ゲームとして実現したいこと、目的です。手段と混同してはいけません。

要件は例えば、以下のように説明します。

スキルのアクションシーケンスを柔軟に設定しつつ、スキル使用時の武器画像と攻撃モーションをスキルごとに指定したい。

要件(=目的)がわかって初めて、仕様と実装(=手段)を検討することができます。

ここからは、要件が先程の例のものであると仮定した上での話です。もし違うようであれば、訂正してください。

YEPのコアプラグインは基本的に既存のコアスクリプトをまるごと魔改造するような激しいものですので、他の作者のプラグインと容易に競合します。
今回も ExtendWeaponImageConfig.js と競合し、スキルに設定した武器画像IDとモーションを無視するようになってしまっています。

これをどうにかするには、(あくまで私の所感ですが)アクションシーケンス側を改造するようなパッチプラグインが適しているんじゃないかと思います。

https://github.com/elleonard/RPGtkoolMV ... eConfig.js

やや強引な手ですが、書くコード量を少なく、そして管理しやすい形式にしようという意図で書いてみました。

これをツクールエディタのプラグインリストで YEP_X_ActSeqPack2.js の下に追加し、スキルに <WeaponNumber:X> <MotionType:Y> 等の設定をしてください。
アクションシーケンスでは motion skill: user を指定すると良いと思います。

これにより、スキルごとの武器画像、振りモーションを指定できるようになります。

Re: 攻撃中のスキルID取得

Posted: 2020年6月13日(土) 04:52
by Plasma Dark
(このポストは完全な老婆心ですので、言われなくともわかっているという場合は無視してください)

コードを書こうとする場合、関連するコードを読む必要があります。
関連コードを全く無視して改造しようとしてしまうと、ひどい火傷を負う場合もあります。

YEPのコア系は特に、コアスクリプトの広い範囲を魔改造する代物ですので、併用して動作が変わってしまうプラグインがあるのであれば、無理に対応させるよりもどちらかを捨てるほうが健全です。
BattleEngineCoreはその名の通り、戦闘関連の処理の流れを大きく変えているところがあり、戦闘関連のプラグインとは容易に競合します。

それでも頑張って対応させる、という場合には、直接プラグインを書き換えるよりもパッチプラグインの追加を検討してください。
ExtendWeaponImageConfig-plus.js を拝見したところ、かなりまめにコメントを書いていらっしゃるようですが、この方式ではコメントし続ける勤勉さに疲れ切るか、おびただしい量のコメントに押しつぶされるかでいずれ限界が来ます。
パッチプラグインであれば元のコードを直接汚すことなく改造できますし、勤勉にコメントを書き続けなくても元に戻したいときはパッチプラグインをOFFにするだけです。

どうしても直接書き換えたい場合はgitなどのバージョン管理システムの利用を検討してみてください。githubであればブラウザ上で差分を確認できますし、書き換えたコードを元に戻す作業もgitコマンドで機械的に行うことができます。

私としては、他人のプラグインを直接書き換える方法は管理上手間がかかりすぎるので最終手段にすべき、とさえ思っています。

Re: 攻撃中のスキルID取得

Posted: 2020年6月13日(土) 11:40
by シーズンクロック
Plasma Dark様
パッチプラグインを作成していただき、ありがとうございます。

早速ですが、動作チェックした結果、希望通りの動作ができました。
以下確認内容
【プラグインの並び】
・バトルエンジンコア
・アクションシーケンス1
・アクションシーケンス2
・ ExtendWeaponImageConfig.js(改造前)
・DarkPlasma_ActSeq2PatchForExtendWeaponImageConfig.js
下の2つに関しては、
『アクションシーケンス2より下側』の条件を守れば、どちらが上でも動作に影響ありませんでした。

【motion skill: user で動作】
① スキルに<WeaponNumber:5> <MotionType:2>
 ⇒要望通りの武器とモーションの設定ができました。

② スキルに<WeaponNumber:5>のみ
③スキルに<MotionType:2>のみ
 ⇒②:武器が表示され、アクターがspellのモーション
  ③:武器が表示されず、アクターが<MotionType:2>で指定したモーション
元々2つで1つの動作を決めるプラグインなので、作業時の記入漏れには要注意ですね。

【motion attack: user で動作】
競合対策パッチ導入前と同じ動作なのを確認しました。


Plasma Dark様
夜遅くまで対応していただき、ありがとうございます。
一から作るほどの知識がないので、見えてる範囲の数値をいじって何とかしようとしてました。
素人の浅知識で触ってみて、少し予想通りに動いただけで舞い上がってました。
もういちど、プラグインの作成方法などを読み直してみようとおもいます。
【解決済み】にしておきます。

Re: 【解決済】攻撃中のスキルID取得

Posted: 2020年6月13日(土) 13:31
by Plasma Dark
早速お試しいただきありがとうございます。
お望みの挙動を実現できたようで、何よりです。
② スキルに<WeaponNumber:5>のみ
③スキルに<MotionType:2>のみ
 ⇒②:武器が表示され、アクターがspellのモーション
  ③:武器が表示されず、アクターが<MotionType:2>で指定したモーション
元々2つで1つの動作を決めるプラグインなので、作業時の記入漏れには要注意ですね。
これについては、元々の ExtendWeaponImageConfig.js 単体で使用した場合も同様の挙動になるんじゃないかと思います。
MotionTypeを省略した場合、魔法攻撃なら詠唱、その他のスキルなら汎用スキルモーションになります。
WeaponNumberを省略した場合、0番(デフォルトでは素手)と同様に武器画像が表示されません。