戦闘行動の強制 / ツクールVXAceスクリプト(RGSS3)wiki
ツクールVXAceで戦闘行動の強制をスクリプトで行うなら以下の通りです。
iterate_battler(敵キャラかアクターか,キャラクターID) do |battler|
#"敵キャラかアクターか"は0で敵キャラ、1でアクター指定
next if battler.death_state?
battler.force_action(スキルID, 行動対象ID(Index))
BattleManager.force_action(battler)
Fiber.yield whileBattleManager.action_forced?
end
サンプルコード(敵3へファイアのアニメーション) *デフォルト
iterate_battler(1, 3) do |battler|
next if battler.death_state?
battler.force_action(51, 2)
BattleManager.force_action(battler)
Fiber.yield while BattleManager.action_forced?
end
コード解説
1~6行目:iterate_battler(敵キャラかアクターか,キャラクターID) do |enemy|
iterate_battlerについてはrubyに慣れていない方だと見慣れない形ですが、これはブロックと呼ばれる処理の塊です。(無名関数のようなもの)
興味のある方は「Ruby ブロック」と検索してみて下さい。
ここではiterate_battlerメソッドで"敵キャラかアクターか"のパラメータが0で敵、1でアクターのデータを取得し、その数だけ{}内の処理を繰り返すという意味合いです。
ですが、戦闘行動の強制では動かすキャラクターは単体なのでほとんど意味をなしません。
このため、この1行目を以下のようにして、実行しても良いです。
battler = $game_party.members[アクターID] #アクターを操作する場合
battler = $game_troop.members[敵ID] #敵を操作する場合
その際は以下のようにすると良いでしょう。
battler = $game_party.members[アクターID]
return if battler.death_state?
battler.force_action(51, 2)
BattleManager.force_action(battler)
Fiber.yield while BattleManager.action_forced?
記述するコードの量はほとんど変わらないので好みでどちらを使うかを選んでください。
2行目:next if battler.death_state?
敵、またはアクターが戦闘不能だったときはこれより下の処理は行わないという処理です。
戦闘不能のキャラクターを対象にした攻撃を行わないようにするための処理です。
3行目:battler.force_action(スキルID, 行動対象ID(Index))
この行で強制する戦闘行動を設定します。
行動対象IDを-2にするとラストターゲットに、-1にするとランダムターゲットになります。
4行目:BattleManager.force_action(battler)
実際に戦闘行動の強制を行います。
この行を記述しないと行動が実行されません。
また、この行で元々設定されていた行動がキャンセルされます。
5行目:Fiber.yield while BattleManager.action_forced?
戦闘行動の強制が指定されている間は処理をこの行で止めるようにします。
戦闘行動の強制が1つのみなら必要ありませんが、複数行動を強制させるときに間にこれを挟んでおかないと最後に設定した行動のみが反映され、途中の行動が実行されません。(性格に言えば飛ばされています。)
複数の行動を実行する際は必ず入れてください。
以上より、もし戦闘の行動が1つのみで、行動するキャラクターが戦闘不能でない状況であれば以下のコードでも可能です。
battler = $game_party.members[アクターID]
battler.force_action(51, 2)
BattleManager.force_action(battler)
慣れないうちは長いコードを使ってください。
想定してない状況でエラーや不具合が起こる可能性があります。
ツクールVXAceスクリプトリファレンスwikiトップページへ戻る
オリジナルシステムなどの製作依頼・相談があればプラグイン・マップ等個別製作依頼のページまでお願いします。
