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

アバター
ドラムカン
記事: 178
登録日時: 2019年11月04日(月) 23:02

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

投稿記事by ドラムカン » 2021年5月14日(金) 13:21

いつもお世話になります。

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

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

どうかご教示の程、よろしくお願いいたします。
最後に編集したユーザー ドラムカン on 2021年5月15日(土) 20:21 [ 編集 1 回目 ]

名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

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

投稿記事by 名無し蛙 » 2021年5月14日(金) 15:17

こんにちは
疑問に思ったらここ見れば大体解決すると思いますよ
$dataXXXの先頭にはnullが入ってるのがネックですが

コード: 全て選択

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

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

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

投稿記事by 奏ねこま » 2021年5月14日(金) 16:14

とにかく一行で短く書くことを目指したスクリプト

コード: 全て選択

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

ネタです。オススメはしません。
アバター
ドラムカン
記事: 178
登録日時: 2019年11月04日(月) 23:02

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

投稿記事by ドラムカン » 2021年5月15日(土) 20:20

名無し蛙 様
奏ねこま 様

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

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

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

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

投稿記事by 奏ねこま » 2021年5月15日(土) 21:06

使用するぶんには問題ありません。
こんな可読性の悪いコーディングは一般的に好まれないので
あまり参考にしないほうが良いですよという意味での「オススメしない」です。
アバター
ドラムカン
記事: 178
登録日時: 2019年11月04日(月) 23:02

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

投稿記事by ドラムカン » 2021年5月15日(土) 21:24

奏ねこま 様

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

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

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

“MV:質問” へ戻る