ページ 11

【解決済】敵の現在のターゲットのHPを変数に代入したい

Posted: 2023年9月04日(月) 14:17
by たつし
質問させてください。
バトル中に、ターゲットの現在HPを変数に代入するスクリプトってありますか?
変数の操作→ゲームデータから敵キャラを選択は出来ますが、ID指定しか無かったので……。
色々調べたのですが、ちょっとわからなかったので書き込ませていただきました。

Re: 敵の現在のターゲットのHPを変数に代入したい

Posted: 2023年9月04日(月) 17:50
by DoujinRuis
こんなのはどうでしょうか?


敵が分かっている前提
ゴブリンのID0001を検索してhpを変数に入れます

ランダムエンカウントで敵も不確定なら、もう少しいじる必要がありますが

const goblin = $gameTroop.members().find(enemy => enemy.enemyId() === 1);
if (goblin) {
$gameVariables.setValue(1, goblin.hp);
}
$gameMessage.add($gameVariables.value(1).toString());

Re: 敵の現在のターゲットのHPを変数に代入したい

Posted: 2023年9月05日(火) 04:58
by たつし
返信ありがとうございます。
敵を検索できるのは知らなかったです。
やりたかったのはイベントの起動条件に、「攻撃が当たった瞬間」を使いたく、敵のHPが変わった瞬間を取得したかったです。

$gameTroop.members()[BattleManager._subject._lastTargetIndex

こんな感じので、ラストターゲット(かな?)の敵の現在HPを取得して変数に代入したい感じなのですが……。
もし方法があれば教えていただきたいです。

今はとりあえず、敵全8体のHPを変数に代入して、並列で走らせてHPが変わった瞬間に起動、という風にやってますが、ラストターゲットのHPがあ取得できれば楽だなと思い、質問させていただきました。

Re: 敵の現在のターゲットのHPを変数に代入したい

Posted: 2023年9月05日(火) 20:36
by DoujinRuis
確認お願いします

https://www.youtube.com/watch?v=qO6ZxlCx10M


敵がダメージを受けたときに指定したスイッチをONにします

/*
2023 DoujinRuis
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
*/

/*:
* @plugindesc 敵がダメージを受けたときに指定したスイッチをONにします
* @author DoujinRuis
*
* @param DamageSwitch
* @text ダメージスイッチ
* @desc 敵がダメージを受けたときにONにするスイッチの番号
* @type switch
* @default 1
*
* @help
* このプラグインを有効にすると、バトルシーンで敵がダメージを受けたときに
* 指定したスイッチをONにします。
*/

(() => {
const parameters = PluginManager.parameters('TurnOnSwitchWhenEnemyDamaged');
const damageSwitchId = Number(parameters['DamageSwitch']);

const _Game_Enemy_performDamage = Game_Enemy.prototype.performDamage;
Game_Enemy.prototype.performDamage = function() {
// スイッチをONにする
$gameSwitches.setValue(damageSwitchId, true);
_Game_Enemy_performDamage.call(this);
};

})();



バトルシーンで最後に攻撃した敵のHPを変数に入れます

/*
2023 DoujinRuis
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
*/

/*:
* @plugindesc バトルシーンで最後に攻撃した敵のHPを変数に入れます
* @author ChatGPT
*
* @param HPVariableID
* @text HPの変数ID
* @desc 最後に攻撃した敵のHPを保存する変数のID
* @type variable
* @default 1
*
* @help
* このプラグインを有効にすると、バトルシーンでアクターによって最後に攻撃された
* 敵の現在のHPが指定したゲーム変数に保存されます。
*/

(() => {
const parameters = PluginManager.parameters('SaveLastAttackedEnemyHP');
const hpVariableId = Number(parameters['HPVariableID']);

const _Game_Action_apply = Game_Action.prototype.apply;
Game_Action.prototype.apply = function(target) {
_Game_Action_apply.call(this, target);

if(target.isEnemy()) {
$gameVariables.setValue(hpVariableId, target.hp);
}
};

})();

Re: 敵の現在のターゲットのHPを変数に代入したい

Posted: 2023年9月06日(水) 01:08
by たつし
プラグインを作っていただきありがとうございます。
コピーして入れてみましたが、なぜか両方無反応でした…。
スイッチの方と変数の方を、両方試しています。
プロジェクトは新規で、他のプラグイン等は何も入れてない状態で試しました。
コアスクリプトは、最新の1.70にしています。


画像


画像

Re: 敵の現在のターゲットのHPを変数に代入したい

Posted: 2023年9月06日(水) 07:27
by 名無し蛙
たつし さんが書きました:返信ありがとうございます。
敵を検索できるのは知らなかったです。
やりたかったのはイベントの起動条件に、「攻撃が当たった瞬間」を使いたく、敵のHPが変わった瞬間を取得したかったです。
目的がはっきりしているのなら迂遠な事をせずに
直接「攻撃が当たった瞬間にイベントを起動する」方法を採用した方が良いと思いますよ。
特定の戦闘(チュートリアルか何か?)限定の話ですよね。
自分ならバトルログに小細工を仕掛けます。
バトルイベントの0ターン目、つまり戦闘開始時に一度だけ以下のコードを実行してください。

コード: 全て選択

const commonEventId = 2;
const logWindow = SceneManager._scene._logWindow;
logWindow.__tempMethod = logWindow.displayActionResults;
logWindow.displayActionResults = function(subject, target){
    this.__tempMethod.apply(this, arguments);
    if (subject.isActor() && target.isEnemy() && target.result().isHit()) {
        $gameTemp.reserveCommonEvent(commonEventId);
        this.displayActionResults = this.__tempMethod;
        this.__tempMethod = null;
    }
};
行動者がアクターであり、ターゲットがエネミーであり、行動が命中した場合に
一行目で指定されたコモンイベントを起動予約する、という処理です。
一度起動予約した時点で処理を元に戻します。
欠点は一撃で敵を殲滅してしまうと戦闘終了後にコモンイベントが起動する、というところですか。
もしもそういうケースが想定される場合は!$gameParty.inBattle()
非戦闘中か否かの真偽判定が返ってくるのでコモンイベントの方で条件分岐させて中断してください。
あとは使用効果「コモンイベント」の処理を流用しているのでそちらと被った場合競合しますね。

コード: 全て選択

◆条件分岐:スクリプト:!$gameParty.inBattle()
  ◆イベント処理の中断
  ◆
:分岐終了

Re: 敵の現在のターゲットのHPを変数に代入したい

Posted: 2023年9月06日(水) 08:36
by DoujinRuis
ちなみに私のはプラグインの名前を修正してみてください
名前で識別しています

敵がダメージを受けたときに指定したスイッチをONにします
TurnOnSwitchWhenEnemyDamaged

バトルシーンで最後に攻撃した敵のHPを変数に入れます
SaveLastAttackedEnemyHP

Re: 敵の現在のターゲットのHPを変数に代入したい

Posted: 2023年9月07日(木) 00:44
by たつし
>>名無し蛙様
アドバイスありがとうございます。
早速試してみます。
書き方が分かりづらくて大変失礼致しました。
やっているのはチェインコンボの改良版みたいな感じで、説明が難しく省略してしまいました。

>> DoujinRuis様
ありがとうございます。
試したところ、作動しました!
これで思った通りのイベントが作れそうです。

ご返事くださった方々、ありがとうございました。