ツクールMVのスクリプトで敵キャラのステート変更を行う方法
RPGツクールVXAce & MVスクリプトwikiとプラグイン

ツクールMVのスクリプトで敵キャラのステート変更を行う方法 > MVスクリプトwiki

トップページ > ツクールMVスクリプトリファレンスwikiトップページ > 敵キャラのステート変更

敵キャラのステート変更 / ツクールMVスクリプトリファレンスwiki

ツクールMVで敵キャラのステート変更をスクリプトで行うなら以下の通りです。


this.iterateEnemyIndex(敵ID, function(enemy) {
enemy.addState(ステートID)
enemy.clearResult()
})

敵IDについては負の数で敵全体が対象となり、0から1番目の敵IDとなります。


サンプルコード1(敵IDが1の敵のステートを毒に変更)

this.iterateEnemyIndex(0, function(enemy) {
enemy.addState(4)
enemy.clearResult()
})

戦闘不能のステートを付加するときは以下のようになります。


サンプルコード2(敵IDが1の敵に戦闘不能のステートを付加)

this.iterateEnemyIndex(0, function(enemy) {
var alreadyDead = enemy.isDead()
enemy.addState(1)
if (enemy.isDead() && !alreadyDead) {
enemy.performCollapse()
}
enemy.clearResult()
})


コード解説


1行目:this.iterateEnemyIndex(敵ID, function(enemy) {


"iterateEnemyIndex"メソッドは対象が敵全体か、敵単体かを判別し、処理(ここではステート変更)を行うメソッドです。

もし、全体を対象とするのか、単体を対象にするのか決まっている場合は以下ようなコードでも可能です。


//敵単体を対象とする場合
$gameTroop.members()[敵ID].addState(ステートID)

//敵全体を対象とする場合
$gameTroop.members().forEach(function(enemy){
enemy.addState(ステートID)
});

敵全体を対象とした時のコード量はあまり変わりませんが、単体を対象とする時は1行で済むため、単体のみを対象とする時はこちらを使用した方が良いでしょう。

"function(enemy)"では対象に実行する処理を指定しています。

"function"とは処理の塊を表し、enemyはここで使用されるパラメータで、対象とする敵のデータが格納されます。

このenemyというのは変数のため、お好きな名前(tekiやbossなど半角英数字)に設定することも可能です。

見やすさを優先したため、function後の"{"で改行していますが、塊としては"function(enemy){処理}"となります。


2行目:enemy.addState(ステートID)


"addState"メソッドは指定したキャラクターに指定したステートを付加するというものです。

敵IDが0以上であれば指定したID-1の敵を、負の数であれば敵の数だけ繰り返して敵全体に"addState"メソッドが適応されます。


3行目:enemy.clearResult()


"clearResult"メソッドでは指定したIDのキャラクターに実行された結果を初期化しています。

この記述は1ターンの実行内容にそのキャラクターに対して連続してステートの付加・解除があった場合にその結果を正確に反映するために必要です。

確実にステートの付加・解除が1度のみと断定できる場合のみこの記述は省略可能です。

複数回の付加・解除がある場合にこの記述がないと処理途中のステートとなってしまいます。


戦闘不能以外の処理の場合は以上でokですが、戦闘不能のステートを処理したい場合、上記の例にもあるように少しコードが異なります。


サンプルコード2、2行目:var alreadyDead = enemy.isDead()


ここでは"alreadyDead"という名の変数に指定した敵が戦闘不能かどうか(戦闘不能だったらtrue、戦闘不能でなかったらfalse)を代入しています。

"isDead()"というメソッドは指定したキャラクターが戦闘不能でないかどうかを調べて結果を返すメソッドです。

戦闘不能ステートを含む様々なステートが付加されることが予期される場合この行は"addState"メソッドよりも前に持ってくる必要があります。

つまりステートをスクリプトによって付加する前の状態を取得しているのです。


サンプルコード2、4,6行目:if (enemy.isDead() && !alreadyDead) {…}


このif文の意味は「新たにステートを付加する前に戦闘不能でなく、かつ戦闘不能が付加された場合」というものです。

つまり、その条件がそろったときのみこの次の行のバトラーピクチャの崩壊表現を行うということです。


サンプルコード2、5行目:enemy.performCollapse()


"performCollapse"は敵キャラクターが戦闘不能になった際の崩壊表現を実行するメソッドです。


サンプルコード2では戦闘不能とその他のステートを判別する例をみせるため、4,6行目にif文を入れましたが、戦闘不能にしかなりえなく、かつ戦闘不能でない敵しかターゲットになりえない場合はこのif文は必要ありません。

 

ツクールMVスクリプトリファレンスwikiトップページへ戻る




オリジナルシステムなどの製作依頼・相談があればプラグイン・マップ等個別製作依頼のページまでお願いします。



表示変更

任意の色に変えるときはテキストボックスをクリックしてカラーピッカーで決め、変更ボタンを押してください



文字色変更





コード色変更





コード背景色変更





背景色変更