瞬駈天魔のツクール素材製作所

月額支援サイトファンティアを追加しました!
是非、無料ファンでも励みになりますので宜しくお願い致します!m(__)m

[完全版] アイテムを持っているかの複数条件

2023年12月15日 20時41分04秒 | ツクール日記

ふぃ~
やっとまともになった!

パーティー内でアイテムを持ってるかだけの判断なら
パーティー内でアイテム1を持っている処理として
$gameParty.hasItem($dataItems[1])でいいんですよ!

だけど、
パーティー内でアイテム1を10個持っているとした場合、
アイテム1は [] 内の1だから、
別のアイテムIDなら例えば634とかにすればよし!
10個持っている…というと
この数字は最後の以上・以下後の数字よん。

$gameParty.numItems($dataItems[1]) >= 10
である必要があるわけでして
Javaが勝手にセミコロンは解釈するからあってもなくてもよい!

$gameParty.numItems($dataItems[1]) >= 10; でも反応する!

だがしかし、
&&を加えて二重・三重…にしていく場合、
セミコロン加えなくてもいいし、
ややこしくなるので加えない方が良いかも。
いや、つけた方がデバッグ的には良いんすけどね。

ちなみに当たり前ですが
$gameParty.numItems($dataItems[1]) >= 10 && $gameParty.numItems($dataItems[2]) >= 10
は反応しますが、
$gameParty.numItems($dataItems[1]) >= 10; && $gameParty.numItems($dataItems[2]) >= 10;
これはSyntaxErrorになりますね。

二度終わらせてる形ですし。

まぁ、最後だけにつければエラることはないですけど
セミコロン…うん、いらない!!

ツクールはJavaだからいらない!!

$gameParty.numItems($dataItems[1]) >= 10 && $gameParty.numItems($dataItems[2]) >= 10 &&
$gameParty.numItems($dataItems[3]) >= 10 && $gameParty.numItems($dataItems[4]) >= 10 &&
$gameParty.numItems($dataItems[5]) >= 10
ここまでいけるか試したが…
うん、数が足りないものがあると
他のが10個あっても足りませんよーってなる解釈に。

ツクールMVの時に
$gameParty.hasItem($dataItems[1]) <= 0
反応してた理由は自身としても不明…。

何か別で反応したかも不明…。

念のため、
以下(アイテムを持っていない)にするなら
$gameParty.numItems($dataItems[1]) <= 0
のようにしてやるといいかも。

ま、変数1または変数2が1以上で かつ
アイテム13個以上持ってる場合なら
($gameVariables.value(1) >= 1) || ($gameVariables.value(2) >= 1) && $gameParty.numItems($dataItems[1]) >= 3
となるかなー?

逆に『それ以外のとき』なら
($gameVariables.value(1) < 1) || ($gameVariables.value(2) < 1) && $gameParty.numItems($dataItems[1]) < 3

で、いいんじゃないかな?(゜-゜)

いや、こんなクエストみたいな感じは…
やらない…か?(゜-゜)

ちなみにスクリプトではセミコロンは
ある程度は省いてもいいと思うけど…
プラグインで省くとデバッグできねー!ってなるかも…。

まぁ、スクリプトでもセミコロンつければ
どこでのSyntaxErrorなのかも分かりやすくなるかも?

スクリプトくらいはどこでミスったか分かるなら
ゲームテストすればいいかもですけどね。

我輩はメンドいし、つけぬよ(。´・ω・)?


$gameParty.hasItem($dataItems[1]) >= 1 が反応しない原因解明

2023年12月15日 02時28分24秒 | ツクール日記

ふっ…ついさっき原因が分かってしまった…。

$gameParty.hasItem($dataItems[1]) は反応するのに
$gameParty.hasItem($dataItems[1]) >= 1 は反応しないのは
このアイテムをパーティー内で持ってるかの判別であって
いくつ所持してるかまで特定していない

いや~バカだった…
これは~を持っている(have、has)であって
パーティー内で何を持ってるかの判別なだけなのだよ!

ってことは、MVでも反応してない可能性が!(;^_^A

そう…だったら、個数を調べればいいこと!!

チャート関数を調べたらね…
文字列と数値の両方を持つデュアル値を返すという
NUMの存在を忘れていたのだよ!!(うわっバカだ~

hasItemじゃ、片方しか特定してないわけだから
複数所持としてで、以上・以下しても認識しないわけで
NUMさん使えば良かったんだよ!!

ってことはhasItemsにしてたとこをnumItemsにすれば
以上・以下が設定できる!

あれ?文字列と数値の両方を持つデュアル値ってことはさ?
区切りつけなきゃループしね?

いや、でも
セミコロンつけなくても区切りつくはずだし、
エラーにはならんはずだし、
略せた気はする…。

でも、省くべきではないとされるけども…(゜-゜)

ってことはだ…
$gameParty.hasItem($dataItems[1]) >= 1 にしてたとこをさ、
$gameParty.numItems($dataItems[1]) >= 1 でよくね?

多分、これでいける!
時間的にも明日試す!!
きっとこれでいけるはず!!

となると、
$gameParty.numItems($dataItems[1]) >= 1 && $gameParty.numItems($dataItems[2]) >= 1
という形なら条件分岐としていける…はず!

セミコロンがいるならば
最後につければいいよねっ!(ぉぃ


$gameParty.hasItem($dataItems[1]) >= 1 などではツクールMZでは認識しない!?

2023年12月15日 01時23分20秒 | ツクール日記

RPGツクールMVにて使っていた処理として
$gameParty.hasItem($dataItems[1]) >= 1 のように
パーティー内でアイテム1を1個以上持っているという条件を
スクリプトを出してたのですが、
なんと!MVでは認識してたのにMZでは認識してない!!Σ(・□・;)

原因は分からないが…
うーむ…もしや、この定義がMZにはないのかも…(;^_^A

JSファイル内のものを探ってまた新しい定義を探さないと
パーティー内でアイテムを~個以上持ってる時…
などの処理ができないではないか!!

そもそもがgameParty処理が反応しないのか…?
それともhasItem($dataItems[])処理ではないのか…?(゜-゜)

MVではできるのに…な~ぜ~?(゜-゜)

MZデータ…やり直して探ってみます!(''◇'')ゞ


アイテムを持っているかの複数条件で思ったこと

2023年12月14日 01時22分33秒 | ツクール日記

条件分岐でこのアイテムを持っている という処理で
それを複数やる場合ってその下に重ねたりしますよね?

ツクール初心者で条件分岐で複数やる方法が分からない!
条件分岐で変数使い過ぎて分からなくなる!
条件分岐で何重にも重ねてわけわからんくなる!
条件分岐が多くなる分、処理も多くなる!

・・・手間じゃね?

まず、条件分岐の重ねって…MVでは超重くなるんよね。

さてと…まず、初心者向けに…
~と同じ== 』、
~以上>= 』、~以下<= 』、
~より上> 』、~より下未満)『 <

ちなみに我も演算を独学し始めたのが最近で
少しだけ簡単な処理のメニュー系プラグインを
作れるようになったくらいのド素人よ。

ツクール初心者よりは演算は理解してるとは思う…多分。

いくつかプラグイン作れてやっと中級者かなーと思ってる。
だからまだ我は初心者というよりはド素人。

そのうち、左シフト<<=』とか右シフト>>=』とか使えたら
すごい確率のガチャができるんでは?と思ってる。

一番はべき乗**』の代入…べき乗代入**=』で
ガチャの確率がすごくなりそう。

まぁ、この時じゃないと出ないなんて確率のキャラだとしたら…
うっわ!めっさ課金することになるじゃん!!

まぁ…すごいことになるからアイテムの所持と仮定して
例えば左シフトでアイテム1が1個持ってる時で
次がアイテム1を10個の時としたいなら
…『<<= 1』とすると$gameParty.hasItem($dataItems[1]) <<= 1
これで左シフトするから…いや、これだとエラるな。

not functionになりそうだ。(゜-゜)

以上、以下とは違ってシフトさせるわけだから
1からこれで10になるのは間違いないがまず、式が足りない…
変数の算術演算…『let』が必要になるんでは…?(゜-゜)

・・・さて、
例えば変数を『変数1』が『同じ…同値』で『変数2』が『同値』の時なら
($gameVariables.value(1) == 1) && ($gameVariables.value(2) == 1)
『~以上』であって『~以下』にしたい場合、
これも条件分岐作った下に条件分岐…でやらなくても
($gameVariables.value(1) >= 1) && ($gameVariables.value(2) <= 1)
となるわけで
『変数1』と『変数2』が『同値』で
そのどちらかが条件となるようにしたいなら

($gameVariables.value(1) == 1) || ($gameVariables.value(2) == 1)
となるように
&&』は『…アンド』…『それと』、『かつ
||』は『または』となるので『どちらかの条件』に。

これ、&&とか2つ重ねてるから
バイナリー論理演算子』ってやつじゃないかな?

&一つだけなら、『ビット論理積』かな?(゜-゜)

ま、ツクール製作初心者は特に
「そんなんどうでもいいから複数処理方法とか知りたいんじゃー!」
が大半でしょうがね。

いや…ツクールで条件分岐する時に変数1を+1する処理だってね…
+=』って『代入演算子』やってるわけでして
これを理解すると複数処理が楽になるということでしてね…
これ、&一つだけ…とか+だけ…とかしちゃう人いて、
エラー原因分からず…もあるんすよ。

&& とか += とか これつけずに
エラーか反応しないか変な動作するとか聞くんすよね。

で、理解するようになれば ++ で
インクリメント演算子』とか使ったりで…。

まぁ、はいはい…でしょうがね。

まぁ、インクリメント演算子が分かれば
変数1を足す』というのも『++』でできちゃうわけで…。

さて…
ってことはだ…
『アイテム1を持っている時』は
$gameParty.numItems($dataItems[1])
になるわけだから
まず繋げるなら数式としては()がいる…
というわけで『アイテム1をもっている』かつ『アイテム2を持っている』
いわば両方持ってる状態にしたい…
となると、
($gameParty.numItems($dataItems[1])) && ($gameParty.numItems($dataItems[2]))
で、いいんではないだろうか?

さらにいうとだ…
『アイテム1が10個以上の時かつアイテム2が20個以上の時』
といった処理をしたいとしよう…
これさ、条件分岐そのままでやると
条件分岐2つでさらに変数2個使うからメンドくね?

以前書いた『アイテムを所持してない時の分岐方法』
これでは『$gameParty.hasItem($dataItems[1]) <= 0』としてました。

そう…てことはだ…
こいつは『<=』…『以下』になってるだけだから
『>=』…『以上』にしちゃって複数分岐しちゃえばよくね?

はい、ってことで
($gameParty.hasItem($dataItems[1]) >= 10) && ($gameParty.hasItem($dataItems[2]) >= 20)

はい、分かりやすく太字にしてこんな感じ。

これなら、条件分岐のスクリプトってとこで
この1行で済むってわけだ!

これならクエストの条件とか組む時に楽だよね!

さらに複数で
アイテム1が10個、アイテム2が15個、アイテム3が5個としよう…

ならばこうなるだろう…
($gameParty.hasItem($dataItems[1]) >= 10) && ($gameParty.hasItem($dataItems[2]) >= 15) && ($gameParty.hasItem($dataItems[3]) >= 5)

さらに&&でただ繋げただけで出来上がり。

条件分岐内容が多くなろうが、&&で繋げていきゃ、1行や!

これで1行で済む!!
1行で処理することにこだわりたいんじゃ!!(`・ω・´)

ただ、MVと違ってMZの条件分岐スクリプト…
枠が1本線になったから、
どこまでいけるのか分からんとですよ(´・ω・`)

ちなみにどこまでいけるかでは
必要アイテム5個の条件分岐スクリプトとしてで
&&は試したけど、それはいけたが、限界は知らん!

ってか、アイテムを所持してない時の演算…
今思えば否定文にしや、良かったんじゃね?
!』で『NOT』文になるから
『アイテム1が1個以上でない時』、
>= !1』として処理すればよかった気がする…

いや、まぁどっちでもいいんすけどね。

この論理演算子『!』の覚え方は
ビックリするくらい数(アイテム数)を否定する

って覚えてますね。

しかし…いや、あれか…
!=』で『不等値演算子』になるわw

いやでも、『!=』だと『2つ否定』しないといけないか…。

なら、『厳密不等価演算子』である『!==』なら…いや、変わらんな。

これだと、アイテム1 != 1つ の時、; // False
アイテム1 !== 1つの時、 ; // True
と返さなければならないから、行が2つで手間になってしまうな。

ま、そんなことより
でもって、これはアイテム1かつアイテム2と
両方持ってないといけない形なので

アイテム1が10個かアイテム2が10個…どっちでもいいよーって処理は
($gameParty.hasItem($dataItems[1]) >= 10) || ($gameParty.hasItem($dataItems[2]) >= 10)
になるんじゃないかな?

さらに逆の処理としてこのアイテムがない時…
アイテム1かつアイテム2を全く持ってない時なら
($gameParty.hasItem($dataItems[1]) <= 0) && ($gameParty.hasItem($dataItems[2]) <= 0)
とするか、

($gameParty.hasItem($dataItems[1]) < !1) && ($gameParty.hasItem($dataItems[2]) < !1)
でもいい気がするが、

0以下か1未満(いわば0以下)にした方のが分かりやすい気はするな。

これ、MZでの演算式ですが、MVだと
($gameParty.hasItem($dataItems[1]) >= 10) && ($gameParty.hasItem($dataItems[2]) >= 10)
じゃなくて
$gameParty.hasItem($dataItems[1]) >= 10) && ($gameParty.hasItem($dataItems[2]) >= 10
というように()がいらなかったりしてね…。

いや、試せよ!って話ですが…
自身製作のゲームが重すぎて新規でゲーム編集データ作ると
データが死ぬかもしれないから、別のパソコンが必要になるんよ…(´・ω・`)

まだ別のパソコンは修理中だから検証できません!( ー`дー´)キリッ

大丈夫大丈夫…
こんなことでエラーになっても
条件分岐として反映されずに何もなく終わるか

エラーでの処理落ちだけだからー(ぉぃ

いや、演算式…勉強したから大丈夫なはずよ…?
独学だけどw

ちょっと思うのは『!』は論理否定演算子だけど
~』っていうビット否定演算子が使えるのかどうか。

まぁ、ビットなんでまず使いませんけどね。

まぁ、最初にも言ったことで
何ならアイテム処理で意味分からんことにExcelでも使える
『~の~乗』っていうような『べき乗』…『^』を使って
アイテム処理をするとややこしい感じで面白いかも…
いや、これ使うならガチャとしての処理は面白そうだな。

^』はツクールでは使えなかったはずなので
乗算演算子』を重ねれば『乗』じゃね?

ってことで、『**』だと思う。

ただ、Javaだとあいまいな記述ができないからエラー飛びやすく
これはやらない方のがいいかもしれない。

ツクールで『^』を使うと『ビット排他的論理和』じゃないかな?

ちなみにVX・VXAceのスクリプトはJavaではないし…
RGSS…分かりません!(ぉぃ

MV・MZスクリプトとは似てるけど、
()がいらなかったり…な感じな気はする…多分!