スクリプトによるステートIDの複数指定方法

没年1
記事: 3
登録日時: 2022年12月27日(火) 08:58

スクリプトによるステートIDの複数指定方法

投稿記事by 没年1 » 2023年6月26日(月) 03:59

スクリプト関係で困ってます!

現在、ツクール内で下記のスクリプトによって
パーティ全体のステートを解除したいと考えています。

$gameParty.members().forEach(function(actor)
{actor.removeState(12,13,14,15,16,17,18,19,20);});

これを、ステートID12~20といった具合に、簡単に省略して書きたいのですが
やり方が分からず、全部を手打ちでやってしまっている状態です。
現在のIDの部分を (12..20) というようにしてもエラーが出てしまいました。

どなたか省略した記述の仕方を教えてください…。
お願いします!

アバター
Plasma Dark
記事: 676
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: スクリプトによるステートIDの複数指定方法

投稿記事by Plasma Dark » 2023年6月26日(月) 07:35

Game_Battler.prototype.removeState の定義を確認しましょう。
rmmz_objects.js に書かれている他、とんびさんのリファレンスも見やすくてオススメです。
https://github.com/tonbijp/RPGMakerMZ/b ... Battler.md

対象の関数は、ステートIDをひとつ受け取ってステートを解除するものです。
カンマ区切りで複数の数値を渡しても、先頭以外は無視されます。

解除したいステートIDがわかっているのであれば、以下のようにステートIDの配列に対してループすることで、まとめて解除する挙動を実現できます。

コード: 全て選択

$gameParty.members().forEach(actor => {
  [12, 13, 14, 15, 16, 17, 18, 19, 20].forEach(stateId => actor.removeState(stateId));
});


[12, 13, 14, 15, 16, 17, 18, 19, 20] は12から20の連番を配列にしたものです。

この配列を作るコードは Array.prototype.keys, Array.prototype.map とスプレッド構文を使って以下のように書くことができます。

コード: 全て選択

[...Array(9).keys()].map(i => i + 12)


https://developer.mozilla.org/ja/docs/W ... Array/keys
https://developer.mozilla.org/ja/docs/W ... /Array/map
https://developer.mozilla.org/ja/docs/W ... ead_syntax

“MZ:質問” へ戻る