ページ 11

【解決済み】イベントコマンドで設定するスクリプトについて

Posted: 2024年12月18日(水) 23:56
by うさぎさん
スクリプトに関して無知なのですが、
作りたいシステムがあり、今まで力技で作っていたのですが流石に作業量が多く、
何かミスが見つかると訂正箇所を探すのに苦労するので効率的に作れる方法がないかと思い探していると
イベントコマンドで操作するスクリプトというものにたどり着きました。

本題なのですが、

$gameActors.actor(アクターID).hasArmor($dataWeapons[防具ID])

このスクリプトコマンドの(アクターID)というところは、ツクール側で設定した変数とかって使えないのでしょうか?

今作っているゲームシステム的に、攻撃したアクターのIDを、変数の操作→オペランド→ゲームデータ→直前に行動したアクターのIDを使ってアクターのIDを代入しているのでその値をそのまま使いたい感じなのですが。

今までは変数1に直前のアクターのIDを格納し、格納したIDが1ならアクター1が戦闘行動の強制でスキルを使うという設定をしていたのですが、作っているシステム的にこの力技だと膨大な量の設定をしなくちゃいけないのでちょっと骨が折れてしまいます。

もし(アクターIDという部分にツクール側の変数が代入できるならやり方を教えて欲しいです)

Re: イベントコマンドで設定するスクリプトについて

Posted: 2024年12月19日(木) 00:09
by ecf5DTTzl6h6lJj02
こんにちは。
うさぎさん さんが書きました:スクリプトに関して無知なのですが、
作りたいシステムがあり、今まで力技で作っていたのですが流石に作業量が多く、
何かミスが見つかると訂正箇所を探すのに苦労するので効率的に作れる方法がないかと思い探していると
イベントコマンドで操作するスクリプトというものにたどり着きました。

本題なのですが、

$gameActors.actor(アクターID).hasArmor($dataWeapons[防具ID])

このスクリプトコマンドの(アクターID)というところは、ツクール側で設定した変数とかって使えないのでしょうか?

今作っているゲームシステム的に、攻撃したアクターのIDを、変数の操作→オペランド→ゲームデータ→直前に行動したアクターのIDを使ってアクターのIDを代入しているのでその値をそのまま使いたい感じなのですが。

今までは変数1に直前のアクターのIDを格納し、格納したIDが1ならアクター1が戦闘行動の強制でスキルを使うという設定をしていたのですが、作っているシステム的にこの力技だと膨大な量の設定をしなくちゃいけないのでちょっと骨が折れてしまいます。

もし(アクターIDという部分にツクール側の変数が代入できるならやり方を教えて欲しいです)
できますよ。

ツクールで設定した変数の値を取得するスクリプトは

コード: 全て選択

$gameVariables.value(変数ID)
なので、
アクターID の部分を上記スクリプトに変更すれば、
アクターID として 変数の値を使用できます。

スクリプトで、アクターをアクターIDで指定して、戦闘行動の強制を設定する場合は、

コード: 全て選択

$gameActors.actor(アクターID).forceAction(スキルID, ターゲットインデックス)
で設定できます。
スキルIDはそのまま、スキルのIDです。
ターゲットインデックスは、対象のアクター(エネミー)の並び順で何番目か指定します。
先頭が 0 になりますので気を付けてください。
ここに -2 を指定すると、アクターが前回ターゲットにしたインデックスに、
-1 を指定すると、ランダムに対象を決定します。

Re: イベントコマンドで設定するスクリプトについて

Posted: 2024年12月19日(木) 13:54
by うさぎさん
こんにちは。
教えてもらった通り、アクターidの部分を変数を参照する命令に変えてみました。

システム的に特定の防具を装備しているときに戦闘行動の強制で各アクターを動かしたいのでこう記述してみました。

if($gameActors.actor($gameVariables.value(1)).hasArmor($dataWeapons[4])){
$gameActors.actor($gameVariables.value(1)).forceAction(233, -2)
}

$gameVariables.value(1)は変数1に各アクターが通常攻撃をして動いた後にコモンイベント内で直前に動いたアクターのidを格納しています。

なので上手くいくかなと思ったのですが、反応してくれませんでした。スクリプトの知識がないのでこれ以外にどう命令してあげればいいのかわかりません。

Re: イベントコマンドで設定するスクリプトについて

Posted: 2024年12月19日(木) 14:17
by ecf5DTTzl6h6lJj02
うさぎさん さんが書きました:こんにちは。
教えてもらった通り、アクターidの部分を変数を参照する命令に変えてみました。

システム的に特定の防具を装備しているときに戦闘行動の強制で各アクターを動かしたいのでこう記述してみました。

if($gameActors.actor($gameVariables.value(1)).hasArmor($dataWeapons[4])){
$gameActors.actor($gameVariables.value(1)).forceAction(233, -2)
}

$gameVariables.value(1)は変数1に各アクターが通常攻撃をして動いた後にコモンイベント内で直前に動いたアクターのidを格納しています。

なので上手くいくかなと思ったのですが、反応してくれませんでした。スクリプトの知識がないのでこれ以外にどう命令してあげればいいのかわかりません。
失礼。スクリプトの内容をちゃんと見てませんでした。
特定の防具を持っているかを判定するのに、
hasArmor に渡す引数が $dataWeapons[4] と武器ID 0004 番の武器になっていますね。
防具ID 0004番の防具なのであれば、$dataArmors[4] になるはずです。

Re: イベントコマンドで設定するスクリプトについて

Posted: 2024年12月19日(木) 18:41
by うさぎさん
こんばんは。記述は問題なさそうに見えるんですけどやはり戦闘行動の強制で指定しているスキルを発動してくれません。記述のやり方がどこか間違っているのでしょうか?

Re: イベントコマンドで設定するスクリプトについて

Posted: 2024年12月19日(木) 19:52
by ecf5DTTzl6h6lJj02
うさぎさん さんが書きました:こんばんは。記述は問題なさそうに見えるんですけどやはり戦闘行動の強制で指定しているスキルを発動してくれません。記述のやり方がどこか間違っているのでしょうか?
アクターに戦闘行動の強制を設定しただけでは、動かないんでした。
大変失礼しました。

肝心の、戦闘行動の強制をしている部分は、
以下のコードに直してみてください。

コード: 全て選択

// BattleManagerで戦闘行動の強制を実行するときに、バトラー(アクター)情報を使用するので、
// battlerという一時変数を作成して代入しておく
const battler = $gameActors.actor($gameVariables.value(1));

// バトラー(アクター)に戦闘行動の強制を設定する
battler.forceAction(233, -2);

// BattleManager に戦闘行動の強制を実行させる
BattleManager.forceAction(battler);

// Game_Interpreter にアクション終了までのウェイトを設定する
this.setWaitMode('action');
恐らくこれで動いてくれると思います。

あと、条件分岐してますが、
この条件分岐は必要ないはずですよね?
これを無くしたいから、スクリプトを利用するわけですし。

以上、ご確認お願いします。

Re: イベントコマンドで設定するスクリプトについて

Posted: 2024年12月19日(木) 20:14
by うさぎさん
動きました! 自分の投稿に対して素早い回答、本当にありがとうございます!
まだテスト段階であるので、システムが全てを通して上手く動くか分からないのでまだ解決済みにはできませんが、つまずいていた所を助けてくださりありがとうございました。

システム全体を作ってみて、またつまずいたらここに質問を書いてみようと思います。
もしお時間があれば、その時はまたご教授してくれると助かります