特定の条件を満たすと選択肢が増えるor減る(質問掲示板

投稿:       mini ゆりかもめ 投稿:2011/10/31 10:14:31(最新:2011/10/31 21:55:31)
具体例を言いますと
ドラクエのルーラの様な感じです。
行った事のある町にはワープできて
そうでない町にはワープできない

っといったようなイベントを組むにはどうしたらいいでしょうか

case文の選択肢をif getFlag()等で囲うとエラーが出てしまう為
何かいい方法を探してます。

コメントする

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

コメント一覧

      mini ゆりかもめ(投稿日:2011/10/31 21:55, 履歴)
寝る前に思いついたアイデアが
satsukilさんのスクリプトとまんまで吹きましたw

aoihikawaさんみたくユーザー定義関数でなんとかまとめようと
頑張ってたんですが、うまくいかず・・・・・
選択肢を???等で隠しておくというのも中々いいアイデアだなーって
思いました。
簡易的なワープ装置を作りたかっただけなので
satsukilさんの方のスクリプトを使わせていただこうと思います。

いやー・・・・・スクリプトは難しいです(汗)

みなさん
アドバイスありがとうございました。
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/10/31 20:12, 履歴)
satsuki1さま>

そういった形になってきますね。

それを汎用的に纏めようと思い、
出来たのが「speakWithSelectAny」関数でしたり。
      mini きゅうり(投稿日:2011/10/31 18:56, 履歴)
あ、本当ですね。
a = createArray()  
b = 0
if getFlag("A町") 
  a[b] = "A町" 
  b = b + 1 
end 
if getFlag("B街") 
  a[b] = "B街"  
  b = b + 1
end 
if getFlag("C村") 
  a[b] = "C村" 
  b = b + 1
end 
case speakWithSelectArray(a, "どこへ行きますか?")  
  when 0  
    #A町へ移動するスクリプト 
  when 1  
    #B街へ移動するスクリプト  
  when 2 
    #C村へ移動するスクリプト 
end

でOKのはず。
配列の数を選択肢の数にしているようで、2を抜かしたりするとundefinedが出るようです。
配列の数を変数管理することで直りました。
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/10/31 17:33, 履歴)
satsuki1さま>

「undefined」選択肢が出るのですが。。。?
      mini きゅうり(投稿日:2011/10/31 16:05, 履歴)
a = createArray() 
if getFlag("A町")
  a[0] = "A町" 
end
if getFlag("B街")
  a[1] = "B街" 
end
if getFlag("C村")
  a[2] = "C村"
end
case speakWithSelectArray(a, "どこへ行きますか?") 
  when 0 
    #A町へ移動するスクリプト
  when 1 
    #B街へ移動するスクリプト 
  when 2
    #C村へ移動するスクリプト
end

でもOK。
選択肢を配列で設定。設定するかどうかで選択肢の数が動きます。

#A町に着いた時
setFlag("A町", true)

#B街に着いた時
setFlag("B街", true)

#C村に着いた時
setFlag("C村", true)
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/10/31 14:58, 履歴)
rurun9さま>

そちらはカスタムメニュー関連の話題なので
ちょっと違うような。。。?



[ 変動選択肢関数]
#変動選択肢関数
#SetMsg 選択肢前表示文字列
#MsgList 選択肢配列
#ExclusionMsg 除外文字列
def speakWithSelectAny(SetMsg, MsgList, ExclusionMsg)
  MsgLen = getArrayLength(MsgList)
  setMsgList = createArray()
  setMsgNo = createArray()
  i = 0
  while i < MsgLen
    if MsgList[i] != ExclusionMsg
      pushArray(setMsgList, MsgList[i])
      pushArray(setMsgNo, i)
    end
    i = i + 1
  end
  return setMsgNo[speakWithSelectArray(setMsgList, SetMsg)]
end


[ 使い方]
(予め上記関数を開始スクリプトなどで定義後)
setVariable("messagelist", createArray())
getVariable("messagelist")[0] = "はじまりの村"
getVariable("messagelist")[1] = "???"
getVariable("messagelist")[2] = "???"


#大きな港町についた時
getVariable("messagelist")[2] = "大きな港町"


#ルーラ実行
case speakWithSelectAny("ルーラを唱えた", 
       getVariable("messagelist"), "???")
  when 0 
    #はじまりの村へ移動するスクリプト
  when 1
    #城下町へ移動するスクリプト
  when 2
    #大きな港町へ移動するスクリプト
end
Nyan mini rurun9(投稿日:2011/10/31 12:08, 履歴)
比較的最近の話題ですなー
ルーラ