[解決済] ゲーム内でのアイテム管理について(質問掲示板

投稿: Material 313759 2 mini akahugu 投稿:2017/04/30 23:16:30(最新:2017/05/04 18:54:04)
ゲーム内でのアイテムの最大所持数は32ですが
これ以上持つ場合にはどうすればいいでしょうか
再現可能かわかりませんが、案を考えていました
・倉庫を作る
・アイテムを圧縮、展開する

倉庫については、ruminaさんが自作、検証していたスクリプトがありますが
一つ一つの言語が理解できていないため全く分かりませんでした...

アイテム圧縮展開については、アイテム欄の中に素材1、素材1とふたつあり
それを使い【素材1×2】というアイテムを作る。またそれを二つ作り素材1×4...と続く
展開についても、素材1×2を使い、素材1を二つ取得する。素材1×4の場合は素材1×2が二つできる...

という案ですが、正直どこまでできるかわかりません...
現段階でこれは再現可能なのかを知りたいです
また、この案よりも簡単な案があれば教えてください...
それと、これと似たようなものを作るうえで使う関数を教えてもらうとありがたいです
回答よろしくおねがいします

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Material 313759 2 mini akahugu(投稿日:2017/04/30 23:40, 履歴)
倉庫について
ruminaさんが自作したスクリプトの中ですこし理解できた所がありました

1預ける・引き出す
↓預ける
2預ける物(素材1、素材2)
↓素材1
3変数?を取得し、アイテム欄に1個ある場合はaにindex(アイテムID)を入れ
aに入ってるアイテムを消す?そして変数素材1を-1し、変数倉庫素材1を+1する
ない場合には==(等しい)と<=(それ以下)を使い、足りない、としている
その他5個や10個はgetItemIndexWithId関数とremoveItemWithIndex関数を繰り返して、fに5個入るようになっている
引き出しはこの逆をしている?

この中で一番わからないのは変数で
setVariable("suisixyou", getVariable("suisixyou") - 1) 
setVariable("soukosuisixyou", getVariable("soukosuisixyou") + 1) 
            speak("しっかり預かったよ。")
            elsif getVariable("suisixyou") == 0
            speak("水晶の実が足りないよ。")
            else getVariable("suisixyou") <= 0
            speak("水晶の実が足りないよ。")

ここらへんが理解しそうでよくわかりません...

もしかしたら上の方も別の方に理解してるかもしれないので回答、指摘お願いします...
            mini mosmoss(投稿日:2017/05/01 00:46, 履歴)
https://rmake.jp/boards/2/topics/1516
上のリンク先の掲示板でのやりとりですね?

この質問板には書かれていませんが、このスクリプトの外で
各アイテム所持数と、各アイテム倉庫在庫数の変数を設定しているものと思われます
setVariable("suisixyou", getVariable("suisixyou") - 1) #これが水晶の実所持数
setVariable("soukosuisixyou", getVariable("soukosuisixyou") + 1) #これが水晶の実倉庫在庫数

多分、アイテムをくれる猫のところで所持数を+にしていると思います

この倉庫の預ける場合のスクリプトで使っている関数/スクリプトは次の通りです。

関数( 関数リファレンスに載っている )
1、speak文(メッセージ)を作る関数
2、選択肢を作る関数
3、変数を設定・取得する関数
4、アイテムのidを指定し、そのアイテムを所持している時削除する関数

5、アイテムのidを指定し、そのアイテムを持っている場合、アイテム欄の何番目に持っているか調べる関数
6、アイテム欄の何番目かを指定してアイテムを1個削除する関数

★5と6は使っていますが、所持数在庫数を変数で管理しているため使う必要がなく、4だけで間に合っていて、スクリプト内でも一回しか使われていません(多分構想中に色々使ってみたものの、4を使うことを決め、削除・置換し忘れた5・6だと思います)

スクリプト(スクリプト言語のマニュアル に載っている基本的な構文)
1、if文
2、case文
3、条件式 < や == など

akahuguさんの表現を引用しますと、

選択肢1 預ける・引き出す を選ぶ
↓預けるを選択
選択肢2 預ける素材(素材1、素材2)を選ぶ
↓素材1 を選択、預ける素材のアイテムidが決定する(19062)
選択肢3 何個預けるか(1,5,10)を選ぶ
↓預ける個数が決定する
↓選択肢2で決定したidのアイテムの所持数を調べ、選択肢3で決定した預ける個数と比べる
↓この場合アイテム(水晶の実)所持数はgetVariable("suisixyou")スクリプトの外で設定している
↓アイテム所持数が預ける個数より多いか同じ時、預ける処理を行い、少ない時は足りないメッセージを表示しようとしている(実際には構文が間違って?いる )
この部分を正しく?書こうとすると次のようになると思います
if getVariable("suisixyou") >= 1 #1は選択肢2で選んだ預ける個数 #所持数が預ける個数以上の時
#ここに預ける処理を書く
else #所持数が預ける個数に満たない時
speak("水晶の実が足りないよ。")
end

↓預ける個数の回数分、素材1を削除し、変数の素材1所持数を減らし、変数の素材1倉庫在庫数を増やす

変数というのは、数値とか文字列とかがなんでも入る箱みたいなもので、
その箱の名前を決めたら、その中に好きなものを入れることができます
"aに入ってるアイテムを消す?そして変数素材1を-1し、変数倉庫素材1を+1する "
この理解であってると思います
aっていうのは、ここの場合水晶の実が入っているインデックス(場所、何番目に入ってるかということ)のことですね

Rmakeの関数では、特定のアイテムを1個だけ削除したいとき
4、アイテムIDを指定して、それがあるとき削除する関数
を使ってサクッと削除する方法と、

5、指定したIDのアイテムが入っているインデックス(場所)を調べる関数
6、指定したインデックス(場所)のアイテムを削除する関数
を使って回りくどく削除する方法があります
Material 313759 2 mini akahugu(投稿日:2017/05/04 18:54, 履歴)
なるほど!一からご丁寧にありがとうございます!
            mini mosmoss(投稿日:2017/04/30 23:50, 履歴)
アイテム最大所持数はデフォルトで32となっていますが、
最大所持数設定の関数 で変更できます。
今やってみたところ、少なくとも100までは設定できるみたいです。
speak("アイテム最大所持数を取得します")
s=getMaxItemCount()
speak(s) #デフォルト値32が表示される
speak("アイテム最大所持数を100に設定します")
setMaxItemCount(100) 
speak("アイテム最大所持数を取得します")
s=getMaxItemCount()
speak(s) #設定した100という値が表示される

アイテムも100まで所持できました。いくつまで設定できるかはわかりません。

1個10個100個など数の単位ごとに別アイテムとする場合、
マップに登録できるアイテムの種類の上限50に引っかかりやすくなってしまうと思います。
RPGエディタでのマップごとのアイテム最大登録数は50です。
https://rmake.jp/document/limitation

アイテム数の表示は一種類につき一つで、
その所持数を表示させたいということでしたら、また違う回答になります。
Material 313759 2 mini akahugu(投稿日:2017/05/01 00:17, 履歴)
回答ありがとうございます
自分はアイテム合成のスクリプトに興味を持ったので、これをもとにゲームを作る時
どうしようなどと考えていたらまさか最大所持数を設定できるとは思いませんでした。
それと同時に、マップごとのアイテムの種類の上限が50も今知りました...
多分作る際にはそこまでアイテムを設定しないので所持数も最大50がいいかなと思っています

最後の分に関しても興味がありますが、とりあえずの所元の所持数が増やせるのなら
大丈夫かなと思っています

回答ありがとうございました!