アイテムについて(質問掲示板

投稿: User icon mini 退会したユーザー 投稿:2011/02/21 21:07:21(最新:2011/02/27 18:04:27)
アイテムを所持してると話が変わったり、一度アイテムを貰ったら二度と貰えないようにするにはどうすればいいのですか?
初歩的なことですいません

コメントする

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

コメント一覧

User icon mini tarutaru82(投稿日:2011/02/27 18:04, 履歴)
すご~い!
私も知りたかったので参考になりました!!^^
User icon mini 退会したユーザー(投稿日:2011/02/23 18:13, 履歴)
なるほど、すっごい参考になりました
ありがとうございます
      mini shirosaboten(投稿日:2011/02/23 10:56, 履歴)

剣を持っていて、かつ鎧を持っている場合話す内容が変わる

if文aのなかにif文bを作ることもできるし、if文aで条件を細かく設定することもできます。自分の書きやすいほうでやったらいいと思います。

例:①剣未所持、鎧未所持、②剣所持、鎧未所持、③剣未所持、鎧未所持
  ④剣所持、鎧所持の4つの場合で話が変わる
  剣のIDを「222」、鎧のIDを「333」とする。
※指定アイテムを装備している場合でも所持アイテム欄から参照できる。

パターンA

if getItemIndexWithId(222) == -1
  if getItemIndexWithId(333) == -1
    speak("竜の剣と光の鎧を持つ者を、王と認めよう。剣は竜の洞窟
に、鎧は光の塔にある。")
  else
    speak("光の鎧を手に入れたのだな。残るは竜の剣だ。剣は竜の洞窟
にある。")
  end
else
  if getItemIndexWithId(222) == -1
    speak("竜の剣を手に入れたのだな。残るは光の鎧だ。鎧は光の塔に
ある。")
  else
    speak("なんと竜の剣、光の鎧の両方を手に入れたのか。よろし
い、そなたをこの国の王と認めよう。")
  end
end


パターンB

##「!=」は「等しくない」を意味する
if getItemIndexWithId(222) == -1 && 
 getItemIndexWithId(333) == -1
    speak("竜の剣と光の鎧を持つ者を、王と認めよう。剣は竜の洞窟
に、鎧は光の塔にある。")
elsif getItemIndexWithId(222) == -1 && 
 getItemIndexWithId(333) != -1
    speak("光の鎧を手に入れたのだな。残るは竜の剣だ。剣は竜の洞窟
にある。")
elsif getItemIndexWithId(222) != -1 &&
 getItemIndexWithId(333) == -1
    speak("竜の剣を手に入れたのだな。残るは光の鎧だ。鎧は光の塔に
ある。")
elsif getItemIndexWithId(222) != -1 &&
 getItenIndexWithId(333) != -1
    speak("なんと竜の剣、光の鎧の両方を手に入れたのか。よろし
い、そなたをこの国の王と認めよう。")
end

これ以外にも書き方はあるはずです。研究してみてください。

他のキャラに立てたフラグを違うキャラが使う?

これはよく意味が分からないです。設定したフラグがtrueかfalseかはゲ
ーム自体が管理するものなので、どのイベントからも立ってるか立ってな
いかは参照できます。
例:赤白の2色の旗揚げをしている人がいる。(イベントA)
  それを遠くから見ている人がいる(イベントB)
##イベントA
case speakWithSelect(4,"赤上げて","白上げて","赤下げて","白下
げて", 
    "イベントA『俺は絶対間違えない』")
  when 0
    setFlag("赤", true)
    speak("イベントAは赤旗を上げた")   
  when 1
    setFlag("白", true)
    speak("イベントAは白旗を上げた")
  when 2
    setFlag("赤", false)
    speak("イベントAは赤旗を下げた")
  when 3
    setFlag("白". false)
    speak("イベントAは白旗を下げた")
end

##イベントB
if getFlag("赤") && getFlag("白")
  speak("イベントB『赤旗と白旗が上がっている』")
elsif getFlag("赤") && !getFlag("白")
  speak("イベントB『赤旗が上がっていて、白旗が下がっている』")
elsif !getFlag("赤") && getFlag("白")
  speak("イベントB『赤旗が下がっていて、白旗が上がっている』")
elsif !getFlag("赤") && !getFlag("白")
  speak("イベントB『赤旗と白旗が下がっている』")
end
User icon mini 退会したユーザー(投稿日:2011/02/23 00:29, 履歴)
えっと、IF文を2個使った文の場合はどうすればいいのですか?
例えば、剣を持っていて、なおかつ鎧も持っている場合はいつもと話し方が変わるなど

それと、他のキャラに立てたフラグを違うキャラが使うには、どのような文を使えばいいのですか?
Nyan mini rurun9(投稿日:2011/02/22 17:57, 履歴)
あ、そんな関数があったのね!
      mini shirosaboten(投稿日:2011/02/22 14:57, 履歴)

一度アイテムをもらったら二度ともらえない

一回目はもらえて二回目はもらえないというイベントは宝箱と一緒です。
『宝箱を開けた』というフラグが取得できたか否かで判定をすればよいです。
例:薬草(ID:123)の入った宝箱
if getFlag("宝箱を開けた")
 speak("この宝箱は空っぽだ。")
else
 speak("がちゃ、宝箱を開けた。")
 giveItem(123)
 speak("薬草を手に入れた")
 setFlag("宝箱を開けた", true)
end


if getFlag("あ")は『もしフラグ("あ")を持っているなら…』
if !getFlag("あ")は『もしフラグ("あ")を持っていないなら…』です。
そのため、以下の書き方をしても同じ内容になります。
if !getFlag("宝箱を開けた")
 speak("がちゃ、宝箱を開けた。")
 giveItem(123)
 speak("薬草を手に入れた")
 setFlag("宝箱を開けた", true)
else
 speak("この宝箱は空っぽだ。")
end
      mini shirosaboten(投稿日:2011/02/22 14:37, 履歴)
指定したアイテムが所持品、装備品のどこにあるかを教えてくれる関数があります。
## xxxはアイテムID
getItemIndexWithId(xxx) #所持アイテム参照
getEquipmentIndexWithId(xxx) #装備アイテム参照


IDで指定したアイテムを持っている、もしくは装備している場合は、アイテム欄、装備欄の何番目にあるかの数字を返してくれます。
持っていない、装備していない場合には「-1」が返ります。

アイテムを所持していると話が変わる

上の関数とif文を使えばアイテムの所持状況に応じてイベントを変えられます。
例:ID123のアイテムを持っていない場合、ID123のアイテムをくれる。
  ID123のアイテムを持っている場合、アイテムはもらえない。
  ※ID123のアイテムを、薬草とする。
if getItemIndexWithId(123) == -1 
  speak("親切なおじさん『薬草1個は持っていたほうがいいぜ、沢山はあげられないけど、ほら、1個やるよ』")
  giveItem(123)
  speak("薬草を1つもらった")
else
  speak("親切なおじさん『なに?薬草がほしいって?お前、薬草持ってるじゃないか。なくなったらおいで』")
end


この場合、薬草を所持していない状態では、何回でも薬草がもらえます。
薬草を所持している状態では話しかけても『なくなったらおいで』と言われてしまいます。