【解決済】アクターが攻撃を受けた際に、その攻撃をしたエネミーのインデックスを取得したい

NANANA0428
記事: 10
登録日時: 2022年2月02日(水) 23:10

【解決済】アクターが攻撃を受けた際に、その攻撃をしたエネミーのインデックスを取得したい

投稿記事by NANANA0428 » 2022年2月06日(日) 00:14

こんにちは、はじめまして。

開口一番に申し訳ございません、初心者でゲーム制作に慣れておらず言葉の表現がうまく出来ておりません。表題で伝わっているでしょうか……。

もう少し、具体的な状況を記載させていただきます。

現在、以下のようなギミックを戦闘に組み込むことを想定しております。
1.エネミーがアクターに与えたMPダメージ分、アクターから経験値を奪う
2.奪われることで戦闘中にアクターのLVが下がる
3.下がった分だけエネミーのLVが上がって強化される(エネミーのLV周りにはHimeWorks様のHIME Enemy Levels及びHIME Enemy Classを利用しています)
4.奪われた後にそのエネミーを倒すと、奪われた経験値をプラスアルファのボーナス付きで回収できる

このうち、1~2に関しては初心者なりに考えて実装出来たのですが、3~4で表題の問題に突き当たってしまいました。
といいますのも、HIME Enemy LevelsにはエネミーのLVを直接操作するスクリプトが用意されており、インデックスで指定が出来るのですが、エネミーが複数いる際に「経験値を奪う攻撃をしたエネミー」を特定する方法が思いつきませんでした。
「最後に行動したエネミー」を特定するところまでは出来たものの、これでは複数のエネミーの際には対応が出来ません。例えばA、BというエネミーがいてAが吸収攻撃をしたとしても、Bの方が行動が遅いと最後に行動したのはBなので、当たり前ながらBのLVが上がってしまうのです……。

4で行う倒した際の処理でも「どのエネミーが吸い取ったのか」は必須になるので、なんとか取得できないものか…と考えております。
もしかすると当たり前のことなのかもしれませんが、探し回ってもなかなか見つからず、途方にくれております。
何かご存知でしたら、ご教授いただけますと幸いです。

よろしくおねがいいたします。
最後に編集したユーザー NANANA0428 on 2022年2月07日(月) 20:12 [ 編集 1 回目 ]

アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: アクターが攻撃を受けた際に、その攻撃をしたエネミーのインデックスを取得したい

投稿記事by ムノクラ » 2022年2月06日(日) 00:58

NANANA0428 さんが書きました:こんにちは、はじめまして。

開口一番に申し訳ございません、初心者でゲーム制作に慣れておらず言葉の表現がうまく出来ておりません。表題で伝わっているでしょうか……。

もう少し、具体的な状況を記載させていただきます。

現在、以下のようなギミックを戦闘に組み込むことを想定しております。
1.エネミーがアクターに与えたMPダメージ分、アクターから経験値を奪う
2.奪われることで戦闘中にアクターのLVが下がる
3.下がった分だけエネミーのLVが上がって強化される(エネミーのLV周りにはHimeWorks様のHIME Enemy Levels及びHIME Enemy Classを利用しています)
4.奪われた後にそのエネミーを倒すと、奪われた経験値をプラスアルファのボーナス付きで回収できる

このうち、1~2に関しては初心者なりに考えて実装出来たのですが、3~4で表題の問題に突き当たってしまいました。
といいますのも、HIME Enemy LevelsにはエネミーのLVを直接操作するスクリプトが用意されており、インデックスで指定が出来るのですが、エネミーが複数いる際に「経験値を奪う攻撃をしたエネミー」を特定する方法が思いつきませんでした。
「最後に行動したエネミー」を特定するところまでは出来たものの、これでは複数のエネミーの際には対応が出来ません。例えばA、BというエネミーがいてAが吸収攻撃をしたとしても、Bの方が行動が遅いと最後に行動したのはBなので、当たり前ながらBのLVが上がってしまうのです……。

4で行う倒した際の処理でも「どのエネミーが吸い取ったのか」は必須になるので、なんとか取得できないものか…と考えております。
もしかすると当たり前のことなのかもしれませんが、探し回ってもなかなか見つからず、途方にくれております。
何かご存知でしたら、ご教授いただけますと幸いです。

よろしくおねがいいたします。


質問を拝読する印象から、結構な経験者とお見受けしました。
なので、詳細調査をせずに「これで解決できるんじゃない?」というプラグインを紹介します。
的外れでしたら、ごめんなさい。

▼発動前コモン(やな様作) - BeforeCommon.js
https://plugin.fungamemake.com/archives/2033
スキルやアイテムの発動前に、スキルやアイテムに設定されたコモンイベントを発生させます。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
NANANA0428
記事: 10
登録日時: 2022年2月02日(水) 23:10

Re: アクターが攻撃を受けた際に、その攻撃をしたエネミーのインデックスを取得したい

投稿記事by NANANA0428 » 2022年2月06日(日) 19:13

ムノクラさま

ご回答ありがとうございます!
経験者だなんてそんなまさか……今年に入って初めて触り始めたので右も左も分かっておりません。
ところで、ムノクラさまには海外プラグインの日本語訳や解説等でいつも大変お世話になっております。お話できて光栄です。

ご提示いただいたプラグインについては、実は一度試させていただいたことがあります。
演出上、攻撃の前ではなく敵からの攻撃を受けた際に処理を行いたかったのでちょっと違うかなぁと、その際は一旦利用を保留したのですが、今回のご提案を受けてもう一度再考してみました。
こちらのプラグインを利用して敵の行動前に一旦インデックスを変数に格納し、攻撃を受けてからの処理でその変数を参照してみる…というアプローチで現在は試してみております。

折角なら「出来ました!」という報告を持って格好良くお返事を差し上げたかったのですが、残念ながらまだ上手くはいっておらず、(取得したインデックスを処理の条件分岐に加えたところ、今まで動いていた部分が動かなくなってしまいました…)解決は出来ておりません。
けれども、ひらめきの欠片のようなものをいただけました。ありがとうございます!

引き続き頑張ってみますので、また何かヒントになるようなものがございましたら是非ご協力をいただけますと大変うれしく思います。

今後ともよろしくおねがいいたします。
アバター
フラクタル
記事: 17
登録日時: 2021年12月28日(火) 15:36

Re: アクターが攻撃を受けた際に、その攻撃をしたエネミーのインデックスを取得したい

投稿記事by フラクタル » 2022年2月06日(日) 23:36

こんにちは。横から失礼します。

表題の件ですが、こちらのトピックの解答で解決できないでしょうか。https://tm.lucky-duet.com/viewtopic.php?t=1479
例えば変数1番に格納するスクリプトにするなら、使用したスキルが呼び出したコモンイベントの最初に

コード: 全て選択

$gameVariables.setValue(1,BattleManager._subject.index());
で格納できるように思えます。
アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: アクターが攻撃を受けた際に、その攻撃をしたエネミーのインデックスを取得したい

投稿記事by ムノクラ » 2022年2月07日(月) 13:51

NANANA0428 さんが書きました:ムノクラさま

ご回答ありがとうございます!
経験者だなんてそんなまさか……今年に入って初めて触り始めたので右も左も分かっておりません。
ところで、ムノクラさまには海外プラグインの日本語訳や解説等でいつも大変お世話になっております。お話できて光栄です。

ご提示いただいたプラグインについては、実は一度試させていただいたことがあります。
演出上、攻撃の前ではなく敵からの攻撃を受けた際に処理を行いたかったのでちょっと違うかなぁと、その際は一旦利用を保留したのですが、今回のご提案を受けてもう一度再考してみました。
こちらのプラグインを利用して敵の行動前に一旦インデックスを変数に格納し、攻撃を受けてからの処理でその変数を参照してみる…というアプローチで現在は試してみております。

折角なら「出来ました!」という報告を持って格好良くお返事を差し上げたかったのですが、残念ながらまだ上手くはいっておらず、(取得したインデックスを処理の条件分岐に加えたところ、今まで動いていた部分が動かなくなってしまいました…)解決は出来ておりません。
けれども、ひらめきの欠片のようなものをいただけました。ありがとうございます!

引き続き頑張ってみますので、また何かヒントになるようなものがございましたら是非ご協力をいただけますと大変うれしく思います。

今後ともよろしくおねがいいたします。

既にお考えの内容かもしれませんが、一応「こんな感じでどうでしょう?」というサンプルを組みました。

エネミーが複数いる際に「経験値を奪う攻撃をしたエネミー」を特定する方法が思いつきませんでした。

この方法だけ、回答します。

発動前コモン
https://plugin.fungamemake.com/archives/2033

実行するコモンイベントで、別変数に代入して1000減算すれば敵のインデックスが算出されます。

コード: 全て選択

◆条件分岐:発動者 ≥ 1000
  ◆変数の操作:#0001 敵インデックス = 発動者
  ◆変数の操作:#0001 敵インデックス -= 1000
  ◆文章:なし, ウィンドウ, 下
  :  :\V[1]
  ◆
:分岐終了


この変数値を流用すれば、スキルを使った敵のインデックスが分かります。
同じスキルを使う敵が複数いて、個別に判定したい場合は、下記のように条件を分けていけば良いと思います。

コード: 全て選択

◆条件分岐:発動者 ≥ 1000
  ◆条件分岐:敵インデックス1 < 0
    ◆変数の操作:#0001 敵インデックス1 = 発動者
    ◆変数の操作:#0001 敵インデックス1 -= 1000
    ◆文章:なし, ウィンドウ, 下
    :  :敵インデックス
    :  :\V[1]
    ◆ラベルジャンプ:End
    ◆
  :分岐終了
  ◆条件分岐:敵インデックス2 < 0
    ◆変数の操作:#0002 敵インデックス2 = 発動者
    ◆変数の操作:#0002 敵インデックス2 -= 1000
    ◆文章:なし, ウィンドウ, 下
    :  :敵インデックス
    :  :\V[2]
    ◆ラベルジャンプ:End
    ◆
  :分岐終了
  ◆
:分岐終了
◆ラベル:End


2022-02-07-EnemyIndexSample.zip
(51.21 KiB) ダウンロード数: 4 回

・プラグインパラメーター
・コモンイベント
・スキルID7「様子を見る」
・敵キャラID1「こうもり」
をチェックください。


インデックスは0から始まるので、戦闘開始前に自動実行イベントなどで、-1等を代入しておく必要があります。
また、戦闘終了時に、インデックスを代入した値をリセット(-1を代入)しておかないとバグの元になりやすいです。(サンプルではマップイベントで実行しています)
下記のようなプラグインを使用すると良いと思います。

▼FTKR Ex Battle Event(フトコロ様作) - FTKR_ExBattleEvent.js
https://plugin.fungamemake.com/archives/1363
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
NANANA0428
記事: 10
登録日時: 2022年2月02日(水) 23:10

Re: アクターが攻撃を受けた際に、その攻撃をしたエネミーのインデックスを取得したい

投稿記事by NANANA0428 » 2022年2月07日(月) 20:11

フラクタルさま、ムノクラさま


おふたりとも親身なご助言ありがとうございます!

ムノクラさまはサンプルもご提供いただきまして、大変参考になりました。
内容拝見しましたが、昨晩に自分で組んでみた内容と非常に似通っており、安堵しております。

Yanaさま制作のBeforeCommonの行動者のインデックスを格納する機能について私が誤って解釈しており、正しく理解した後は動作を確認することが出来ました。プラグイン本体の解説にも、またムノクラさまの解説にもございますが、「+1000」されるのは"値"であって、"変数番号"ではないという点を見落としていたのが原因でした。お恥ずかしい限りです。

冒頭述べたシステム全体についてはまだ細かい部分を詰めきれていないため、今後新たな問題が出る可能性はあるものの、ひとまず表題のインデックス取得の件につきましては無事に解決することが出来ました。

ご回答をいただきましたお二人には改めて感謝を申し上げると共に、この記事がまたどなたかのお役に立つことを祈って、これにて解決済みとさせていただきます。

この度は本当にありがとうございました。
また今後ともご助言を頂戴することもあるかと思います。その際は、何卒よろしくおねがいいたします。

“MV:質問” へ戻る