戦闘行動の強制 / ツクールMVスクリプトリファレンスwiki
ツクールMVで戦闘行動の強制をスクリプトで行うなら以下の通りです。
this.iterateBattler(敵キャラかアクターか, 対象ID, function(battler) {
if (!battler.isDeathStateAffected()) {
battler.forceAction(スキルID, 対象)
BattleManager.forceAction(battler)
this.setWaitMode('action')
}
}.bind(this))
敵キャラかアクターかは0で敵キャラ、1でアクターを対象にします。
対象については0で指定IDが1となり、以降番号順になります。
負の値で敵か味方指定した方の全体が対象となります。
スキルIDはデフォルトで1で攻撃、2で防御、以下番号順に対応しています。
対象は値が-2でラストターゲット、-1でランダム、0からインデックス1となります。
サンプルコード(ID2の敵にスキルIDが9のスキル(デフォルトでファイア)をハロルドを対象にした戦闘行動を強制)
this.iterateBattler(0, 1, function(battler) {
if (!battler.isDeathStateAffected()) {
battler.forceAction(9, 0)
BattleManager.forceAction(battler)
this.setWaitMode('action')
}
}.bind(this))
コード解説
1行目:this.iterateBattler(敵キャラかアクターか, 対象ID, function(battler) {
"iterateBattler"メソッドは対象が敵か味方かを判別し、対象IDの情報を取得しています。
"function(battler)"では対象に実行する処理を指定しています。
"function"とは処理の塊を表し、battlerはここで使用されるパラメータで、対象とするバトラーのデータが格納されます。
2行目:if (!battler.isDeathStateAffected()) {
この行では指定したキャラクターが戦闘不能でないかどうかを判別しています。
戦闘不能だった場合は戦闘行動の強制が実行されません。
"battler"には対象のバトラーの情報が入っており、"isDeathStateAffected"で戦闘不能ステートでないかどうかを確かめています。
必ず生きているバトラーを対象としている時は省略可能です。
3行目:battler.forceAction(10, 0)
この行では戦闘行動の強制の設定を行っています。
パラメータで指定したスキルを対象に実行するよう実際のアクションに反映させています。
4行目:BattleManager.forceAction(battler)
この行で実際に戦闘行動の強制を操作しています。
"BattleManager.forceAction"メソッドでは戦闘行動の強制をさせるアクターを設定している他、スクリプトを実行するターンに元々設定していた行動が実行されないように指定バトラーの行動をキャンセルさせています。
4行目:this.setWaitMode('action')
戦闘行動が終了するまでウェイトするための記述です。
この記述がないとこの後にイベントが設定されていた場合、これより上にあるスクリプトが実行されません。
これはウェイトをしないとアニメーションの再生だけではなく、戦闘行動の処理(HPの増減など)も実行されないためです。
イベントでの行動の最後がこの戦闘行動の強制だった場合はこのウェイトは省略可能ですが、念のため記述しておいた方が良いでしょう。
6行目:}.bind(this))
この行では{}内のthisをGame_Interpreterとしています。
1文字目の大かっこ}は1行目にあるfunctionのものです。
bindメソッドは対象とした処理のthisの中身を変更するというものです。
javacriptの"this"はRubyにおける"self"と同じく、親要素によってその内容を変化させます。
上の例の{}中のthisはこのbindで指定していなければWindowクラスが入っており、このまま実行すると"setWaitMode"メソッドが無いというエラーを引き起こしてしまいます。
このため、bindメソッドでthisをGame_Interpreterにしなくてはならないのです。
もし、上の例の{}中にthisという記述がなければbindは使用する必要はありません。
つまり、4行目のウェイトをかける必要が無い場合はこのbindの記述も必要ありません。({}や()は必要)
ツクールMVスクリプトリファレンスwikiトップページへ戻る
オリジナルシステムなどの製作依頼・相談があればプラグイン・マップ等個別製作依頼のページまでお願いします。