2かいめのイベントをやらせない方法(質問掲示板

投稿: User icon mini mrburein 投稿:2015/04/11 07:37:11(最新:2015/04/14 19:50:14)
イベントで渡したあとにもう一度イベントをさせないためにはどうすればいいですか?


# スクリプトに関する質問の場合はこの下にスクリプトを記載してください
# ↓↓↓スクリプトはここから↓↓↓


m = getItemIndexWithId(19405)
if m == -1
speak("まただぶりか!\nやるよ")
setFlag("レアカード")
speak("レアカードを貰った")
giveItem(19400)
elsif 
speak("こんどこそは…")
end



speak("ポケモンカードのレアカード欲しいなあ")
m=getItemIndexWithId(19400)
if m == -1
elsif  m != -1
getFlag("レアカード")
  speak("それは私のほしいレアカード!")
  fadeOut(0,0,0)
    fadeIn()
case 
speakWithSelect(2,"はい","いいえ", "レアカードをあげますか?")
  when 0
    speak("ありがとう!\nお礼にこれあげる!")
giveItem(19399)
removeItemWithIndex(m)
speak("ハートを貰った")
  when 1
    speak("なんだ…") 
end
end

# ↑↑↑スクリプトはここまで↑↑↑




コメントする

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

コメント一覧

Material 204926 1 mini 井戸乃博士(投稿日:2015/04/13 22:55, 履歴)
フラグの基本的な知識を書いておきますので、参考にどうぞ。

フラグは何もしない状態では"false"になっています。
これはスイッチがOFFになっている状態と考えてください。
スイッチをONにする場合は、

setFlag("a", true)

というふうに書きます。

見ているとsetとgetを混同しているようですが、
getFlagはフラグが現在どういう状態になっているかを確認するスクリプトで、ifなどの条件式に使います。
例えば、
if getFlag("a") == true

と書いた場合、フラグaがtrueの状態であることが条件となります。

ちなみに、このスクリプトは
if getFlag("a")

と省略して書いてもOKです。

あとは最初に書いたスクリプトを参考にして作ってみてください。

今回の場合、m = getItemIndexWithId(19405)は使わなくてもいいと思います。もちろん使ってもできますが、スクリプトが複雑になります。まずはフラグを使ったやり方を覚えたほうが役に立つと思いますよ。
User icon mini 退会したユーザー(投稿日:2015/04/14 19:50, 履歴)
はい博士、頑張ります★

::(._.)p
Material 204926 1 mini 井戸乃博士(投稿日:2015/04/11 22:00, 履歴)
質問に答える前にいくつか言っておきたいことが・・・

・質問するときはスクリプトをそのまま書くだけではなく、どのようなイベントを作りたいのかなるべく具体的に書いてください。スクリプトを見ただけでは分からないことのほうが多いですから。例えば、上のスクリプト(レアカードをもらうイベント)と、下のスクリプト(ハートをもらうイベント)は別々に書いているんでしょうか?それともひとつながりのスクリプトですか?

・エラーメッセージが出た場合、メッセージからどこにエラーがあるか分かります。たぶん今回の場合、メッセージが出ていると思いますのでこちらを参考にして確認してみてください。

前置きが長くなりましたが、上のスクリプトと下のスクリプトは別々のものと考えてお答えします。
イベントが1回しか起きないようにするにはフラグを使うのが一番簡単です。
getItemIndexWithIdを条件に使うと、条件になるアイテムがなくなるとイベントが戻ってしまうので面倒です。
ここでは"レアカード"と"ハート"という2つのフラグを使ったスクリプトを例示します。

(レアカードをもらうイベント)
if getFlag("レアカード")
speak("こんどこそは…")
else
speak("まただぶりか!\nやるよ")
speak("レアカードを貰った")
giveItem(19400)
setFlag("レアカード", true)
end


(ハートをもらうイベント)
if getFlag("レアカード")
 if getFlag("ハート")
  speak("ありがとう") #レアカードを渡した後の反応
 else
  speak("それは私のほしいレアカード!")
  fadeOut(0,0,0)
  fadeIn() 
  case speakWithSelect(2,"はい","いいえ", "レアカードをあげますか?")
   when 0
    speak("ありがとう!\nお礼にこれあげる!")
    giveItem(19399)
    removeItemWithIndex(getItemIndexWithId(19400))
    speak("ハートを貰った")
    setFlag("ハート", true)
   when 1
    speak("なんだ…") 
   end
  end
 else
  speak("レアカードほしいなあ・・・") #レアカードをもらっていないときの反応
 end


フラグはスクリプトの基本なので正確に内容を理解しておいたほうがいいですよ。
User icon mini mrburein(投稿日:2015/04/12 17:49, 履歴)
できました
ありがとうございます

http://rmake.jp/boards/2/topics/1529
これで2回目のイベントを起きないようにするにはどうしましょう
Icon mini cdv30200(投稿日:2015/04/12 19:26, 履歴)
横から失礼します。

>これで2回目のイベントを起きないようにするにはどうしましょう

idohakaさんに「どのようなイベントを作りたいのかなるべく具体的に」…と言われたばかりですよ!もうちょっと考えましょう。

いきなり複雑なのを作ろうとしないで、これを見て
自分のできる事から始めたらどうでしょうか?
Rmake基本スクリプト講座(1)
質問掲示板
User icon mini mrburein(投稿日:2015/04/12 20:44, 履歴)
ごめんなさい
自分でも考えたんですがエラーがでています
プレゼントを貰って渡しアイテムを貰うというイベントです
Rumina1218 mini rumina(投稿日:2015/04/12 20:46, 履歴)
エラーが何行目に出ているかを書くと答えやすいです。
User icon mini mrburein(投稿日:2015/04/13 16:53, 履歴)
m = getItemIndexWithId(19405)
if getFlag("a", true)
speak("ありがとう!")

if getFlag("渡す")
speak("やってくれたのか!\nありがとう!\nハートを2つやる!")
giveItem(19399)
giveItem(19399) 
setFlag("a")
if getFlag("a", true)
speak("ありがとう!")
elsif m == -1
#プレゼントを持っていない
  speak("きみ!\n俺のファンにプレゼントをくれてやってくれないか")
    case speakWithSelect(2,"はい","いいえ",
"引き受けますか?")
    when 0
    speak("よろしくね!")
    speak("プレゼントをもらった")
    giveItem(19405)
    setFlag("引き受ける", true)
    when 1
    speak("やっぱダメか…")
    end
else
#すでにプレゼントを持っている
speak("頼んだぞ。")


end

speak("はるかたそ~")



m = getItemIndexWithId(19405)

if getFlag("渡す")
#プレゼントを渡した
speak("どうもありがとう!")
elsif getFlag("引き受ける") && m != -1
#依頼を受けてプレゼントを持っている
speak("これは?\nはるかの写真か!\nあいつに100点と伝えといてくれ!")
speak("プレゼントを渡した")
removeItemWithIndex(m)
getItemIndexWithId(19405)
setFlag("渡す", true)
elsif getFlag("引き受ける") && m == -1
#依頼を受けたが、プレゼントを捨てるなどしたため持っていない
speak("そんなことなどどうでもいい")
elsif !getFlag("引き受ける") && m != -1
#依頼を受けていないがプレゼントは持っている
speak("わー、いいなあ\nほしいなあ")
else
#依頼を受けていないしプレゼントを持っていない

end


上の34行です

User icon mini 退会したユーザー(投稿日:2015/04/13 18:48, 履歴)
私なりに考えました。こんな感じでどうでしょう?

イベント《A》(頼む人)
m = getItemIndexWithId(19405)

if getFlag("a")
speak("もうないぞ!?")

elsif getFlag("渡す")
speak("やってくれたのか!\nありがとう!\nハートを2つやる!")
giveItem(19399)
giveItem(19399)

setFlag("a", true)

elsif m == -1
#プレゼントを持っていない
speak("きみ!\n俺のファンにプレゼントをくれてやってくれないか")

case speakWithSelect(2,"はい","いいえ",
"引き受けますか?")
when 0
speak("よろしくね!")
speak("プレゼントをもらった")
giveItem(19405)
setFlag("引き受ける", true)


when 1
speak("やっぱダメか…")

end

else
#すでにプレゼントを持っている
speak("頼んだぞ。")

end

・・・・・・・・・・・・・・・・・・・・・・・・・・・

イベント《B》(貰う人)
speak("はるかたそ~")

m = getItemIndexWithId(19405)

if getFlag("渡す")
#プレゼントを渡した
speak("どうもありがとう!")

elsif getFlag("引き受ける") && m != -1
#依頼を受けてプレゼントを持っている
speak("これは?\nはるかの写真か!\nあいつに100点と伝えといてくれ!")
speak("プレゼントを渡した")
removeItemWithIndex(m)

getItemIndexWithId(19405)
setFlag("渡す", true)

elsif getFlag("引き受ける") && m == -1
#依頼を受けたが、プレゼントを捨てるなどしたため持っていない
speak("そんなことなどどうでもいい")

elsif !getFlag("引き受ける") && m != -1
#依頼を受けていないがプレゼントは持っている
speak("わー、いいなあ\nほしいなあ")

else
#依頼を受けていないしプレゼントを持っていない

end
User icon mini 退会したユーザー(投稿日:2015/04/13 19:01, 履歴)
たぶん2つのイベントを、1つのように
スクリプトを書いた感じなので、最初
わかりませんでした。;

「イベント【A】に、こうスクリプトを書きました。
イベント【B】に、こうスクリプトを書きました。」

と、別々に書いてくれると嬉しいです。

あと台詞も紛らわしいので、簡素にやりたい事を
編集してから質問した方がいいかもしれませんね。

イベントの方は上手く動きましたでしょうか?

スクリプト見ると、ごちゃまぜ感タップリなので
cdv30200さんが言ったとおり、勉強しながら
コツコツ作るのも楽しいですよ?

私も勉強中です♪

超初心者生意気発言失礼しました。
黒いリボンでした★
User icon mini 退会したユーザー(投稿日:2015/04/13 19:07, 履歴)
ボソボソ・・

『でも今回この事で、アイテムの方で管理が出来る事を
初めて知ってしまった私。

(今までフラグと変数でしか管理出来なかったので。///;)

超ラッキーです。私も色々使っちゃお♪』
User icon mini mrburein(投稿日:2015/04/14 16:54, 履歴)
本当に皆様ありがとうございました
急いでいたので頼ってしまいましたが勉強します
User icon mini 退会したユーザー(投稿日:2015/04/14 17:11, 履歴)
♪(w|壁
Rumina1218 mini rumina(投稿日:2015/04/11 09:02, 履歴)
if setVariable("1") == 0
m = getItemIndexWithId(19405)
if m == -1
speak("まただぶりか!\nやるよ")
setFlag("レアカード")
speak("レアカードを貰った")
giveItem(19400)
elsif 
speak("こんどこそは…")
end



speak("ポケモンカードのレアカード欲しいなあ")
m=getItemIndexWithId(19400)
if m == -1
elsif  m != -1
getFlag("レアカード")
  speak("それは私のほしいレアカード!")
  fadeOut(0,0,0)
    fadeIn()
case 
speakWithSelect(2,"はい","いいえ", "レアカードをあげますか?")
  when 0
    speak("ありがとう!\nお礼にこれあげる!")
giveItem(19399)
removeItemWithIndex(m)
speak("ハートを貰った")
  when 1
    speak("なんだ…") 
end
end

else

end


#開始スクリプト
setVariable("1", 0)


初心者の自分が書いたものですが作動するはずです。
User icon mini mrburein(投稿日:2015/04/11 16:38, 履歴)
ありがとうございます
ですが間違いがあるらしいです
Rumina1218 mini rumina(投稿日:2015/04/11 16:55, 履歴)
どこでですか?
Rumina1218 mini rumina(投稿日:2015/04/11 16:56, 履歴)
1行目[set]
ではなくて[get]
でした・・・すいません><;
User icon mini mrburein(投稿日:2015/04/11 20:40, 履歴)
どこかはわかりませんがダメでした
Rumina1218 mini rumina(投稿日:2015/04/11 20:48, 履歴)
下から3行目を「elsif」に変えてみてください。
これでダメだったら、開始スクリプトに何を書いているか
載せてください。
Rumina1218 mini rumina(投稿日:2015/04/11 20:58, 履歴)
それか・・・
if getFlag("1") 

else 
m = getItemIndexWithId(19405)
if m == -1
speak("まただぶりか!\nやるよ")
setFlag("レアカード")
speak("レアカードを貰った")
giveItem(19400)
elsif 
speak("こんどこそは…")
end



speak("ポケモンカードのレアカード欲しいなあ")
m=getItemIndexWithId(19400)
if m == -1
elsif  m != -1
getFlag("レアカード")
  speak("それは私のほしいレアカード!")
  fadeOut(0,0,0)
    fadeIn()
case 
speakWithSelect(2,"はい","いいえ", "レアカードをあげますか?")
  when 0
    speak("ありがとう!\nお礼にこれあげる!")
giveItem(19399)
removeItemWithIndex(m)
speak("ハートを貰った")
  when 1
    speak("なんだ…") 
end
end

setFlag("1", true) 

end