スクリプト/鍵で開ける扉イベント(履歴ID:568)

最終投稿者:Kusokuso mini kusokuso 更新:2014/03/19 15:39:01
RPGにおいて、「カギ」を持っていないと開ける事ができない「扉」をつくってみます。
完成すれば、ゲームの進行具合によってマップ内の移動可能範囲を制限する事ができるようになります。

スクリプト/フラグ
フラグを複数用意して、鍵の所持や扉の開閉を管理するだけでも充分可能なのですが、
フラグのON-OFFは表示しない限りプレイヤーには見えません。
(ソレがフラグであるかどうか、さえもワカラナイのです)
そこで、プレイしている側にとって判り易く、鍵をアイテムで用意する方法でつくる事にします。

手順は全部で三段階あります。


(1)
まず「カギ」をアイテムで作成して、マップに登録します。
アイテム詳細設定にて、種類は「道具」、使用可能「いいえ」、にしておきます。
メニューアイコンにカギっぽい画像(32*32で充分)を指定しておけば、所持アイテム欄を見てカギだと判り易いかもしれません。
仮にこのカギアイテムのID番号が9999だったとします。

開始スクリプトに、扉のフラグをセット。
今回はフラグ名を door と名付けてみます。
フラグ door が true なら扉があって、false だと扉が消える、というのをつくる事にします。
#開始スクリプトにおく
setFlag("door",true) #扉を複数つくるならフラグ名を変えてコピペ


(2)
次に、扉もキャラクターで作成して登録しておきます。
アニメする必要は無いので、キャラクタアニメーション画像の設定にてパターン数を1とし、ドット絵は上下左右を同じ絵をコピペするだけで構いません。

マップ内に扉キャラをイベント設置、
・あたり判定「有り(通行不可能)」
・移動タイプ「固定(向きも固定)」
・開始方法「はなす/調べるの実行」
・有効条件(スクリプト)「 getFlag("door") 」
#カギを持っていれば変数 m に「持ち物中、何番目のアイテムがカギなのか」が入ります
#持っていない場合は m には -1 が入ります
m=getItemIndexWithId(9999)

if m==-1
 speak("カギがかかっている")
else
 setFlag("door", false) #扉キャラを非表示にします
 removeItemWithIndex(m) #使用したカギアイテムを消去しています
 speak("カギを使って扉を開けた")
end


(3)
マップ内のキャラクターから鍵をもらう場合のイベントスクリプト(任意)
今回はカギをひとつしか持てないようにしてみます。
適当なキャラをマップに登録して設置して下さい。
speak("「カギをあげる」")

m=getItemIndexWithId(9999)

if m==-1
 if giveItem(9999)
  speak("カギをもらった")
 else
  speak("これ以上アイテムを持てません\n\n「持ち物整理したら、またおいで」")
 end
else
 speak("「なんだ、持ってたのか。なくなったら、またおいで」")
end


以上で完成です。
同じカギを複数持てるようにしたり、カギの残り使用回数を変数に記録したりする場合など、少し改良を加えれば色々な状況に利用できるかと思われます。