ページ 11

条件分岐のスクリプト

Posted: 2021年1月14日(木) 09:18
by アラン
「変数1~8に番号が格納されているアクターのいずれかが防具22番を装備していたらスイッチ5をオンにする」
という処理を作りたくて以下のようなスクリプトを書きましたところcannnot read property 'hasArmor' of nullと返されました。

どなたかお力添えいただけないでしょうか。

コード: 全て選択

◆スクリプト:for(var i = 1; i <= 8; i++)
:     :{
:     :    if($gameActors.actor($gameVariables.value(i)).hasArmor($dataWeapons[22]))
:     :   {
:     :      $gameSwitches.setValue(5,true)
:     :   }
:     :}

Re: 条件分岐スクリプトのcannot read propertyエラー

Posted: 2021年1月14日(木) 10:07
by Plasma Dark
まず、前提として $gameActors は Game_Actors クラスのインスタンスです。

rmmz_objects.js 内の Game_Actors.prototype.actors をご覧いただけると、アクターIDにデータベース上に存在しない数値を入力した場合にnullが返されることがわかるかと思います。
nullに対して .hasArmor メソッドを呼ぼうとしたため、 Cannot read property 'hasArmor' of null と怒られたというわけです。
$gameActors.actor(アクターID) の戻り値がnullでないことをチェックしましょう。
「変数1~8番に番号が格納されているアクターが防具22番を装備していたらスイッチ5をオンにする」
変数1~8にアクターIDを格納しているということですが、これが「パーティメンバー全員」という意図であるとしたら、ゲーム内変数やnullチェックなしにもっと楽に書くこともできます。

コード: 全て選択

$gameSwitches.setValue(5, $gameParty.members().some(actor => actor.hasArmor($dataArmors[22])));
※ご指摘の通り、閉じカッコが足りておりませんでした。修正しました。

このコードについては、詳しく説明しませんので、気になる場合は下記を参考に読んでみてください。
- rmmz_objects.js 内の Game_Party.prototype.members
- Array.prototype.some https://developer.mozilla.org/ja/docs/W ... Array/some

Re: 条件分岐スクリプトが常にfalseとなる。

Posted: 2021年1月14日(木) 10:28
by アラン
返信ありがとうございます。
そちらの推測どおり、パーティーメンバー内に防具22番を装備したアクターがいればスイッチをオンにするという処理がしたかったということです。

いただいたコードを早速試してみたのですが、
SyntaxError
nussubg ) after argumente list
とのエラーが出力されました。プラグインはいくつか導入しているのですが、こちらに何か原因はあるのでしょうか。

Re: 条件分岐スクリプトが常にfalseとなる。

Posted: 2021年1月14日(木) 12:34
by ムノクラ
アラン さんが書きました:返信ありがとうございます。
そちらの推測どおり、パーティーメンバー内に防具22番を装備したアクターがいればスイッチをオンにするという処理がしたかったということです。

いただいたコードを早速試してみたのですが、
SyntaxError
nussubg ) after argumente list
とのエラーが出力されました。プラグインはいくつか導入しているのですが、こちらに何か原因はあるのでしょうか。
)が1つ足りなかったようですね。

コード: 全て選択

$gameSwitches.setValue(5, $gameParty.members().some(actor => actor.hasArmor($dataArmors[22])));
SyntaxErrorの時は、大抵がこういったケアレスミス的なものが多いです。
(DarkPlasma氏にしては珍しい…)

Re: 条件分岐のスクリプト

Posted: 2021年1月14日(木) 13:03
by アラン
解決しました。ありがとうございます。