【RPGツクールMZ】お役立ち情報・エディタ編

ツクール開発部

モデレーター
スタッフ
モデレーター
デバッグ効率化スクリプトをご紹介します。

◆アイテムID:1-1000を1つずつ入手
スクリプト:
for(let i = 1;i <= 1000;i++){
$gameParty.gainItem($dataItems, 1);
}

◆武器ID:1-1000を1つずつ入手
スクリプト:
for(let i = 1;i <= 1000; i++){
$gameParty.gainItem($dataWeapons, 1, true);
}

◆防具ID:1-1000を1つずつ入手
スクリプト:
for(let i = 1; i <= 1000; i++){
$gameParty.gainItem($dataArmors, 1, true);
}

◆テストプレイ中だけ実行
条件分岐-スクリプト:
$gameTemp.isPlaytest()

iはID1~1000を示しており、1と1000を変更することで別の範囲を指定できます。
$gameParty.gainItem($dataItems, 1);の1は個数を示しています。
減らすにはgainをloseに書き換えます。
$gameParty.loseItem($dataItems, 3); 3つ減らす

◆アイテムID:50-60を2つずつ入手
スクリプト:
for(let i = 50;i <= 60;i++){
$gameParty.gainItem($dataItems, 2);
}

◆武器ID:90-100を3つずつ減らす
スクリプト:
for(let i = 90;i <= 100;i++){
$gameParty.loseitem($dataWeapons, 3);
}
 

munokura

ユーザー
Tweetでもスペルミスをしているようなので、動作確認したものを貼っておきます。
ミス:[を(にしている箇所があります。

JavaScript:
// アイテムID:1-1000を1つずつ入手
for (let i = 1; i <= 1000; i++) {
    $gameParty.gainItem($dataItems[i], 1);
}
// 武器ID:1-1000を1つずつ入手
for (let i = 1; i <= 1000; i++) {
    $gameParty.gainItem($dataWeapons[i], 1, true);
}
// 防具ID:1-1000を1つずつ入手
for (let i = 1; i <= 1000; i++) {
    $gameParty.gainItem($dataArmors[i], 1, true);
}

テストプレイの時のみ動作する条件分岐の書き方
コード:
◆条件分岐:スクリプト:$gameTemp.isPlaytest()
  ◆スクリプト:// アイテムID:1-1000を1つずつ入手
  :     :for (let i = 1; i <= 1000; i++) {
  :     :    $gameParty.gainItem($dataItems[i], 1);
  :     :}
  :     :// 武器ID:1-1000を1つずつ入手
  :     :for (let i = 1; i <= 1000; i++) {
  :     :    $gameParty.gainItem($dataWeapons[i], 1, true);
  :     :}
  :     :// 防具ID:1-1000を1つずつ入手
  :     :for (let i = 1; i <= 1000; i++) {
  :     :    $gameParty.gainItem($dataArmors[i], 1, true);
  :     :}
  ◆
:分岐終了
 
上述の命令だと、ラベルとして使っているアイテムや名前を設定していないアイテムまで
手に入ってしまうので、もう少しきれいな結果になるよう書きました
◆条件分岐:スクリプト:$gameTemp.isPlaytest()
◆文章:なし, なし, ウィンドウ, 下
:  :テストプレイ中なので、アイテムを
:  :たくさんあげましょう。
◆スクリプト:const entitiveItems = $dataItems.filter( (item) => {
:     : if(item === null){
:     : return false;
:     : }else if(item.name !== ""){
:     : return item.name.includes("-----") === false;
:     : }
:     :});
:     :for(item of entitiveItems){
:     : $gameParty.gainItem(item,99);
:     :}

:分岐終了
何をしているかというと、アイテムのうち名前が設定されていて
それに「-----」を含まないものを抽出しています。
サンプルのデータベースでは、ラベルのアイテム名には「-----」が含まれるので
それを利用しました。

最後に有効なアイテムの配列でfor-ofループを行って、それらを
99個入手する処理を行っています。
 
ちなみに、せっかくfilterとか使ってるのでスマートにやれないかなーと思ってやってみたらできたので張っておきます...。
(若干本筋から外れかけている気がしなくもないですが。)
  1. slice(1)っていうので一番最初の項目にnull入ってるから取り除く。
  2. filterで名前ありかつ----が入ってないもののみあつめる。
  3. forEachでアイテム手に入れる。
$dataItems.slice(1).filter(item=>item.name && !item.name.includes("----")).forEach(item=>$gameParty.gainItem(item,99));
 
トップ