(解決済み)フトコロ様 制作「FTKR_AutoStateConditions.js」条件式(eval)の書き方を1つ教えて下さい

カムイ
記事: 63
登録日時: 2019年1月13日(日) 04:16

(解決済み)フトコロ様 制作「FTKR_AutoStateConditions.js」条件式(eval)の書き方を1つ教えて下さい

投稿記事by カムイ » 2019年1月13日(日) 04:33

どうしても条件式(eval)の書き方が分からず…質問失礼致します。

フトコロ様が制作された「FTKR_AutoStateConditions.js」
(h★ttps://github.com/futokoro/RPGMaker/blob/master/FTKR_AutoStateConditions.js)★を消して下さい
を、お借りしているのですが
特定の防具などを装備している時のみ付与されるステートを作成したいと思っております。
付与条件、解除条件をevalで追加出来るとの事なのですが
書き方が分からず質問させていただいた次第です。

解決済
ツクマテ様の過去の投稿などを参考にし「a.equips()[0] && a.equips()[0].wtypeId === 1」にて
「現在スロット1に装備している武器タイプIDが1だったら」は上手くいったのですが
反対に「現在スロット1に装備している武器タイプIDが1 “ 以外” だったら」はどうやって書けば良いでしょうか?

解決済
①の武器同様に「現在スロットnに装備している防具IDが1だったら」という式が書きたく
「a.equips()[n] && a.equips()[n].itemId === 1」など色々と試行錯誤したのですが
どれも上手くいきませんでした。
「現在スロットnに装備している防具ID1がだったら」はどの様な式で求めれば良いでしょうか。

何卒、御助言お願い致します。

※最初のタイトル、内容が説明不十分だったので書き直しさせていただきました。
曖昧な書き方で申し訳ございませんでした。
最後に編集したユーザー カムイ on 2019年1月14日(月) 01:02 [ 編集 5 回目 ]

ジャングル
記事: 108
登録日時: 2018年12月30日(日) 14:51
お住まい: 自動販売機

Re: 条件式(eval)の書き方を2つ教えて下さい

投稿記事by ジャングル » 2019年1月13日(日) 07:26

初めまして。ジャングルといいます。

たぶん次の方法で可能だと思います。

①’ a.equips()[0].wtypeId !== 1
②’ a.equips()[1].atypeId === 1

!== は否定を表します。1以外。

防具にitemIdというプロパティはありますか?
こういうのは、デベロッパーツールで分かるはずです。

テストプレイ中にF8キーを押してデベロッパーツールを立ち上げて、
$gameActors.actor(1).equips()[1]などと入力してください。
それが所持しているプロパティ一覧が見られます。
カムイ
記事: 63
登録日時: 2019年1月13日(日) 04:16

Re: 条件式(eval)の書き方を2つ教えて下さい

投稿記事by カムイ » 2019年1月13日(日) 21:10

ジャングル さんが書きました:①’ a.equips()[0].wtypeId !== 1
②’ a.equips()[1].atypeId === 1

!== は否定を表します。1以外。

防具にitemIdというプロパティはありますか?
こういうのは、デベロッパーツールで分かるはずです。

テストプレイ中にF8キーを押してデベロッパーツールを立ち上げて、
$gameActors.actor(1).equips()[1]などと入力してください。
それが所持しているプロパティ一覧が見られます。


ジャングル様はじめまして。
返信ありがとうございますm(__)m
evalの式の書き方や、デベロペッパーの使い方まで書いて下さり
本当に勉強になります。
デベロッパーツールは恥ずかしながら
「エラーが起きていると赤文字で教えてくれ物」という認識でしかなく
そんな機能が付いているとは知りませんでした。

>①’ a.equips()[0].wtypeId !== 1
ありがとうございます。
このままですと上手く機能してくれなかったので
「a.equips()[0] && a.equips()[0].wtypeId !== 1」と書き換えた所、上手くいきました。
「===」の先頭の「=」1つを「!」に変えるだけで否定の意味になるのですね。
大変勉強になりました。

>②’ a.equips()[1].atypeId === 1
こちらもこのままですと上手く機能してくれなかったので
「a.equips()[1] && a.equips()[1].atypeId === 1」やarmors()などを用いて
色々、書き換えて試してみたのですが
上手く機能してくれない状況です。

また、タイトルや説明内容が曖昧だったので具体的に書かせていただきます。
曖昧な書き方で申し訳ございませんでした。

フトコロ様が制作された「FTKR_AutoStateConditions.js」
(h★ttps://github.com/futokoro/RPGMaker/blob/master/FTKR_AutoStateConditions.js)
を、お借りしているのですが
特定の防具を装備している時のみ付与されるステートを作成したいと思っております。
付与条件、解除条件をevalで追加出来るとの事なのですが
書き方が分からず質問させていただいた次第です。
最後に編集したユーザー カムイ on 2019年1月14日(月) 00:44 [ 編集 4 回目 ]
astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: フトコロ様 制作「FTKR_AutoStateConditions.js」条件式(eval)の書き方を1つ教えて下さい

投稿記事by astral » 2019年1月13日(日) 22:02

こんばんは。

特定の防具を装備しているかだけなら、
a.hasArmor($dataArmors[1])
いずれかのスロットに防具1番が装備されているか判定出来ます。

この場合、先頭に!を追加すると、防具1番を装備していない時になります。
!a.hasArmor($dataArmors[1])

a.equips()[n] &&
と最初に記述するのは、n番のスロットに何かが装備されているか判定(&&)を行ってからでないと、
未装備の場合、次のプロパティなどが読み取れずエラーとなります。

wtypeId 武器タイプID
atypeId 防具タイプID
etypeId 装備タイプID
id アイテム・スキル・ステート・武器・防具のID
ジャングル
記事: 108
登録日時: 2018年12月30日(日) 14:51
お住まい: 自動販売機

Re: フトコロ様 制作「FTKR_AutoStateConditions.js」条件式(eval)の書き方を1つ教えて下さい

投稿記事by ジャングル » 2019年1月13日(日) 23:13

a.equips()[0] &&を書かないと当然エラーになります。
オブジェクトを参照するときは、その前にチェックするようにしてください。

とりあえず、先にJavaScriptの基礎を勉強される方が良いと思います。
1つ目の問題はツクールに関するものではありません(JSの入門レベルです)

今の状態でツクールのコードをいじっても思い通りにはならないと思います。
カムイ
記事: 63
登録日時: 2019年1月13日(日) 04:16

Re: フトコロ様 制作「FTKR_AutoStateConditions.js」条件式(eval)の書き方を1つ教えて下さい

投稿記事by カムイ » 2019年1月14日(月) 01:01

astral様
返信ありがとうございます。
教えていただいた方法にて質問内容の件、解決いたしました。
質問内容の件だけではなく「a.equips()[n] && 」の意味や
他にも沢山、役に立つコードを教えてくださり
大変勉強になりました。
本当にありがとうございました。

ジャングル様
引き続き返信ありがとうございます。
私の知識不足から相性という表現という書き方をしてしまいましたが
相性などではなく
オブジェクトを参照する前は「a.equips()[0] &&」を書かないとエラーになってしまうのですね
申し訳ございませんでした。
相性という表現は大変失礼だったので修正させていただきました。
ジャングル様からいただいたアドバイス(デベロッパーツールの用途.「!].「a.equips()[0] &&」の意味)
大変勉強になりました。

今回、ジャングル様、astral様からいただいたアドバイスでJavaScriptに興味が湧きましたので
自身でも多少なりとも理解できるように是非、勉強させていただきます。
この度は本当にありがとうございました。

“MV:質問” へ戻る