[解決済] 鍵が必要(質問掲示板

投稿: Material 319750 4 mini ninkura 投稿:2017/04/19 17:36:19(最新:2017/04/23 18:10:23)
2DアクションRPGについて。
「鍵がないと開かない」ということをしたいんですが、どのようにしたら良いんでしょうか?
鍵を使う方と、鍵を手に入れる方、出来れば両方教えていただきたいです。よろしくお願いします。

コメントする

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

コメント一覧

Icon mini cdv30200(投稿日:2017/04/19 18:00, 履歴)
鍵はアイテムとして表示させますか?
Rmakeでは全てのアイテムは捨てる事が可能です。

それともフラグのみで、アイテム表示無しですか?
Material 319750 4 mini ninkura(投稿日:2017/04/19 18:13, 履歴)
持っていることが分かりやすくなるように、表示ありにしたいと思っています。また、使用後は消えるようにしたいです。
Material 319617 1 mini てるてる(投稿日:2017/04/19 18:24, 履歴)
使用後に消えるは難しいかもですTT
Icon mini cdv30200(投稿日:2017/04/19 18:52, 履歴)
giveItem関数を使えば表示ありにできますし、
getItemIndexWithId関数removeItemWithIndex関数を使えば鍵を使用後に消すこともできます。
私もゲームに使っていますよ。

if getFlag("鍵入手")
speak("もう何もない。")
else
speak("タンスの中に何かある。")
speak("鍵を手に入れた!")
giveItem(000) #000にはアイテムIDが入ります
setFlag("鍵入手", true)
end


鍵を使う方のスクリプトは後で書きます
Icon mini cdv30200(投稿日:2017/04/19 22:40, 履歴)
鍵を使う方のスクリプトです。
鍵を使って開ける扉のイベントのスクリプトを書きました。

有効条件
!getFlag("扉が開いた")

イベント実行内容
  a = getItemIndexWithId(000) #000にはアイテムIDが入ります

 if a == -1
  #鍵を持っていない
  speak("鍵がないと、この扉は開かない。")
 else
  #鍵を持っている
  speak("扉が開いた。")
  speak("使った鍵は壊れた。")
  removeItemWithIndex(a)
  setFlag("扉が開いた", true)
 end

スクリプトが長くなって見にくいので、1行目で getItemIndexWithId(000)をaとします。

getItemIndexWithId関数は、IDで指定した所持アイテムのインデックス(何番目に持っているか)を取得します。
アイテムは最大32個持てるのでaには0〜31が入ります。
(例えば、鍵がアイテム欄の1番上にあれば「0」、5番目にあれば「4」がaに入ります。なんでか知りませんが)
なのでaが「-1」だとアイテム欄のどこにもない、つまり持っていないという事になります。

10行目で、持っている鍵を消去する removeItemWithIndex関数を使います。

ーー補足ーー
これだと、イベント実行内容が全部終わってから扉のイベントが消えます。
「扉が開いた。」のセリフと同時に扉のイベントを消したい場合は、mugaさんのように
warpEvent関数で表示マップの外へすっ飛ばせば良いです。
Icon mini cdv30200(投稿日:2017/04/20 19:52, 履歴)
どうやら私の解説は無駄だったようですね
聞かれたから書いたのに何の反応も無し…
もう二度と答えない
Material 319617 1 mini てるてる(投稿日:2017/04/23 18:10, 履歴)
え!アイテムって消すことできたんだ!?
Rmakeic1 mini muga(投稿日:2017/04/19 19:14, 履歴)
こんばんは~!
もう十分だろうけど暇なので載せちゃいます
これも僕のヴァルハラクエストの一部です
if getFlag("扉21") 

else

#カギを持っていれば変数 m に「持ち物中、何番目のアイテムがカギなのか」が入ります
#持っていない場合は m には -1 が入ります
m=getItemIndexWithId(18214)

if m==-1

else
 
 playSound(161964)

 warpEvent("event72", 8, 80)#扉をどこかみえないところへワープさせます
 #setFlag("event168", false) #扉キャラを非表示にします
 #removeItemWithIndex(m) #使用したカギアイテムを消去しています
 setFlag("扉21", true) 
end

end
Material 319750 4 mini ninkura(投稿日:2017/04/20 14:20, 履歴)
ありがとうございます。参考にさせていただきます。