[解決済] 【初心者質問】固定のアイテムGET後、別のイベントの選択肢の変更(質問掲示板

投稿: Material 320865 2 mini naogorou 投稿:2017/09/30 20:10:30(最新:2017/10/01 13:10:01)
○ 超初心者です。教えて下さるとすごく嬉しいです(-_-;)お願いします!!


質問は「固定のアイテムをゲットした後、別のイベントの選択肢を変更」みたいなのができないかな?
というものです…

詳しく言いますと、今、とあるゲームを作っていまして、
ゲットした本をイスで読めるようにしたかったのです。

そして皆さんが使っていたものや関数リファレンスのものをつなぎ合わせ…
下のようなものができました。


speak("イスに座って本を読めます。")
case speakWithSelect(2, "なんかの本", "読まない", 
    "どの本を読みますか?\n")
  when 0
  a = getItemIndexWithId(21501)
 if a == -1
  speak("この本は読み終わっているか、\nまたは持っていません。")
 else
  speak("「なんかの本」")
  speak("面白そう。")
  removeItemWithIndex(a)
  setFlag("読書", true)
 end
  when 1
speak("今は読まなくていいや。")
end



本来はカギを使って扉を開け、使ったカギはなくなる…というスプリクトで、
私はカギを本に置き換えて使っていました。

でもこれだとまだ持っていない本の名前が選択肢に表示され、
ちょっとネタバレっぽい感じになってしまうんですよね…

まだ持っていないアイテムはできれば「???」にし、
ゲットした後は「●●の本」のように表記が変わるみたいなのができないかな?と思ってます。

例えばRmake内で有名で高クオリティーな2DRPG,
「トットと魔法のスープ」alnyan様・作→http://rmake.jp/games/24742/play/
でも、この方法?は使われてます。

「トットの家」にある本棚のイベントです。
まだゲットしていない本の選択肢は表記が「???」になっていて、
ゲット後は表記が変わっているんですよね。

私的には、こんなのができればいいな、と思っています。
もしかしたら、でもいいのでヒントをお願いします。
わがままばかりですいません…



説明がへたくそですいません(;´・ω・)
説明不足であれば言ってください。
できる範囲でお答えします。

コメントする

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

コメント一覧

            mini mosmoss(投稿日:2017/10/01 10:16, 履歴)
takiさんのバージョンのエラー原因は未確認なのですが、
bという値に配列がうまく入ってないように見えます
エラーの時に出る文をコピペすると、原因の特定がより簡単になると思います

すみません、以下に書かれていた内容を削除しました
takiさんの簡易バージョンの解決法と全く同じでした(^^;)
Material 320865 2 mini naogorou(投稿日:2017/10/01 13:10, 履歴)
教えてくれてありがとうございます!
User icon mini taki(投稿日:2017/09/30 22:12, 履歴)
「図鑑」や「リスト」で掲示板かwikiを検索すると情報があると思います。
個人的にはこの辺りが参考になるかなと思います。
リストの作り方
スクリプト/汎用関数/辞書を表示する

本の冊数次第ですが力技で片付けるならこんな感じでしょうか?
#最初に本の名前を表す変数の中身を"???"にしておく
setVariable("本の名前","???")

#本を入手した時に名前を変更する
case speakWithSelect(2,"はい","いいえ","本を拾いますか?")
when 0
  speak("なんかの本を手に入れた")
  setVariable("本の名前","なんかの本")
when 1
  speak("本は見なかったことにした")
end

speak("イスに座って本を読めます。")
#選択肢に文字列を入れる代わりに変数を使う
case speakWithSelect(2, getVariable("本の名前"), "読まない", "どの本を読みますか?\n")
  when 0
  a = getItemIndexWithId(21501)
 if a == -1
  speak("この本は読み終わっているか、\nまたは持っていません。")
 else
  speak("「なんかの本」")
  speak("面白そう。")
  removeItemWithIndex(a)
  setFlag("読書", true)
 end
  when 1
speak("今は読まなくていいや。")
end

もう少しカッコよくやるとするとこんな感じ?
#_/_/_/初期設定_/_/_/
#最初に本の名前を表す変数の中身を"???"にしておく
setVariable("本の名前",createArray())
i=0
while i<5
  getVariable("本の名前")[i]="???"
  i=i+1
end
#本のIDを入れる配列を作る
setVariable("本のID",createArray())
#対応するIDを入れる。入手時にやる方がわかりやすいかも。
getVariable("本のID")[0]=21501
getVariable("本のID")[1]=21502
getVariable("本のID")[2]=21503
getVariable("本のID")[3]=21504
getVariable("本のID")[4]=21505
#_/_/_/初期設定ここまで_/_/_/

#_/_/_/本の入手イベント_/_/_/
#本を入手した時に名前を変更する
case speakWithSelect(2,"はい","いいえ","本を拾いますか?")
when 0
  speak("なんかの本を手に入れた")
  getVariable("本の名前")[0]="なんかの本"
when 1
  speak("本は見なかったことにした")
end
#_/_/_/ここまで_/_/_/

#_/_/_/読書の部分_/_/_/
b=createArray()
b=getVariable("本の名前")
n=getArrayLength(b)
b[n]="読まない"

speak("イスに座って本を読めます。")
i=speakWithSelectArray(b, "どの本を読みますか")
if b[i]=="???"
  speak("この本は持っていません。")
elsif b[i]=="読まない"
  speak("今は読まなくていいや。")
else
  id=getVariable("本のID")[i]
  a = getItemIndexWithId(id)
  if a == -1
    speak("この本は読み終わっています。")
   else
    speak("「なんかの本」")
    speak("面白そう。")
    removeItemWithIndex(a)
    setFlag("読書", true)
  end
end
#_/_/_/ここまで_/_/_/

制作頑張ってください
Material 320865 2 mini naogorou(投稿日:2017/10/01 06:26, 履歴)
b=createArray()
b=getVariable("本の名前")
n=getArrayLength(b)
b[n]="読まない"

speak("イスに座って本を読めます。")
i=speakWithSelectArray(b, "どの本を読みますか")
if b[i]=="???"
  speak("この本は持っていません。")
elsif b[i]=="読まない"
  speak("今は読まなくていいや。")
else
  id=getVariable("本のID")[i]
  a = getItemIndexWithId(id)
  if a == -1
    speak("この本は読み終わっています。")
   else
    speak("「なんかの本」")
    speak("面白そう。")
    removeItemWithIndex(a)
    setFlag("読書", true)
  end
end


どうしても↑の3、4、8、10、13行目でエラーが起こってしまいます…
たびたびすいません…
User icon mini taki(投稿日:2017/10/01 13:07, 履歴)
エラー時の文章は
1st argument is not array. line:〇〇
で合ってますか?
だとするとgetVariable("本の名前")とgetVariable("本のID")が
配列になっていないことが原因なので
初期設定の部分を開始スクリプトに書くか、
読書の部分が書かれたイベントを実行する前に
初期設定の書かれたイベントを実行することで直ると思います。
そうでなかったらチョット分からないです。すいません。

追伸
余計なお世話かもしれませんが
私が配列について勉強させていただいた記事のリンクを貼っておきます
スクリプト/はじめてのRmakeスクリプト / 第04回 配列変数をマスターしよう
スクリプト/はじめてのRmakeスクリプト / 第05回 通常変数をマスターしよう
Material 320865 2 mini naogorou(投稿日:2017/10/01 13:09, 履歴)
ありがとうございます!
エラーが治りました!少し説明不足でしたね…(;´・ω・)
とにかく、教えて下さってありがとうございました!
とても助かりました!!