ページ 11

【解決済み】武器名から武器IDを取得する方法

Posted: 2021年5月14日(金) 13:21
by ドラムカン
いつもお世話になります。

所持の有無にかかわらず、指定の武器名から武器IDを取得することは可能でしょうか?

データベース内の武器名をLoopで総当たりして一致する武器のIDを取得するくらいしか思いつかないのですが、
もっと簡潔にスクリプト一行で済ませることは可能でしょうか?

どうかご教示の程、よろしくお願いいたします。

Re: 武器名から武器IDを取得する方法

Posted: 2021年5月14日(金) 15:17
by 名無し蛙
こんにちは
疑問に思ったらここ見れば大体解決すると思いますよ
$dataXXXの先頭にはnullが入ってるのがネックですが

コード: 全て選択

const weapon = $dataWeapons.find(w => !!w && w.name === "バトルアックス");
if (!!weapon) $gameVariables.setValue(1, weapon.id);
とかですか
見つからなかった場合はundefinedが返るので例外処理も忘れずに

アロー関数についても検索すれば沢山解説が出てきますけど
この方の記事等を読めば短縮される経緯が分かるのではないかと
!!XXXはfalse,null,undefinedはfalseに、それ以外のオブジェクトはtrueに変換する二重否定です。
これは処理的には使う必要がありませんが、条件文に利用する事を明示したい時に使います。

Re: 武器名から武器IDを取得する方法

Posted: 2021年5月14日(金) 16:14
by 奏ねこま
とにかく一行で短く書くことを目指したスクリプト

コード: 全て選択

$dataWeapons.some(w => w && w.name == '杖' && !$gameVariables.setValue(1, w.id))

ネタです。オススメはしません。

Re: 武器名から武器IDを取得する方法

Posted: 2021年5月15日(土) 20:20
by ドラムカン
名無し蛙 様
奏ねこま 様

お二人とも非常に的確なスクリプトをご教示くださり、ありがとうございます。
アロー関数については存じ上げておりましたが、こういった書き方も可能であることを知りませんでした。
どちらのスクリプトも正常に動作することを確認いたしました。

検索ターゲットに文字列を直接指定するのではなく、変数に格納したものを検索対象とすれば
undefinedで落ちないないようです(変数は未定義だと0のため上から見て空欄の武器IDを引っ張ってくる模様)。

エラートラップが必要ないのであれば、一行で達成されている奏ねこま様のスクリプトを使わせていただきたいのですが
「おすすめしない」とのことで、その理由を考えても答えが出ませんでした。
some() メソッドを使用することの弊害でもあるのでしょうか。

Re: 【解決済み】武器名から武器IDを取得する方法

Posted: 2021年5月15日(土) 21:06
by 奏ねこま
使用するぶんには問題ありません。
こんな可読性の悪いコーディングは一般的に好まれないので
あまり参考にしないほうが良いですよという意味での「オススメしない」です。

Re: 【解決済み】武器名から武器IDを取得する方法

Posted: 2021年5月15日(土) 21:24
by ドラムカン
奏ねこま 様

早速ご返答くださり、感謝いたします。

なるほど、可読性の問題でしたか。
確かにパッと見ではどういった処理をしているか体感的に分かりづらいのかもしれませんね。
でも私からすると、こういう短縮コードを思いつく時点で凄いと思います。

いつも貴重なご意見や解決策をご教示くださり、本当にありがとうございます。