#変数について・・・
入門編で書こうか迷ったけど、変数は少し厄介だから、基礎編に書こうと思う。
変数というのは簡単に言えば、あらゆるものを格納する箱だと思ってください。
主な種類は 変数
一時変数
リスト変数
があります。(たしか、これですべて・・・
変 数 -- {test}
一 時 変 数 -- {_test}
リ ス ト 変 数 -- {test::*}
一時 リスト 変数 -- {_test::*}
といった感じで書けます。(この解説ページでは今後このように解説します
まず変数は、サーバー内すべてで使えます。
一時変数は、そのイベント内のみ使えます。
リスト変数は、サーバー内すべてで使えます。
一時リスト変数は、そのイベント内のみ使えます。
では、変数とリスト変数は?というと、変数には1つしか格納できませんが、リスト変数には複数のものを格納できます。
プレイヤーに置き換えるとわかりやすいかもしれません。
変数にAさんを入れます。
そのあとBさんを入れるとAさんは押し出されて外に出てしまいます。
ですが、
リスト変数にAさんを入れて、Bさんも入れるとAさんは押し出されずに2人ともリスト変数の中に入っています。
出すときはリスト変数からAさんを削除というコードを書かなければいけません。
#例文
add A to {test::*}
set {test} to A
remove A from {test::*}
delete {test::*}
add A to {test::*}
でAをリスト変数に追加できます。
set {test} to A
でAを変数にセットできます。
remove A from {test::*}
でリスト変数からAを削除できます。
delete {test::*}
でリスト変数を削除できます。
じゃあ、どんな時に使うか?
ということですが、、、
Loopはあらゆる使い方ができます。
ではその一つを紹介しましょう。
command /check:
trigger:
set {point.%player%} to location of player
send "%5チェックポイントを保存しました。" to player
command /pt:
trigger:
teleport player to {point.%player%}
send "%5チェックポイントにテレポートしました" to player
はい。
これで完成です。
追加したコマンドは/check
と/pt
です。
余談ではありますが、
わたくしが見てきた中で、基本的には多くのコマンドの名前には意味があります。
例えば、
/check
はまさにそのままですが、チェックという意味で、
/pt
はポイントテレポートの略です。
send
で実行時に何をしたのかを説明してるからわかるかもしれませんが・・・
set {point.%player%} to location of player
この部分が初登場ですね。
まず変数である{point.%player%}
ですが・・・
メッセージで使う%
があることに気づきましたか?
そうなんです。
変数内でも使えるんです。
これを使うと何が起きるかといいますと、プレイヤー専用の変数を用意できるのです。
まだ理解できてない方がいるかもなんでもっとわかりやすく説明します。
メッセージで%player%
を使ったときに表示されたのはイベントを起こしたプレイヤーの名前が表示されましたよね?
なのでMCIDがMonster2408
だった場合、先ほどの変数は、{point.Monster2408}
となるんですね。
ここで勘のいい人は疑問に思ったのでは?
もしMCIDが同じだった場合、困るのでは?と・・・
そこら辺は大丈夫です(たぶんw)。
これはMinecraftの話になりますが、プレイヤーには個々にUUIDという個人暗号のようなものが存在します。
Skriptの%player%
にはUUIDが格納されていて、たとえ同じMCIDだったとしても混合しないように対策は取られているそうです。
まあ、心配な方は%player's uuid%
を使うといいでしょう。
これなら直接UUIDを代入してくれますので。
それでは本題に戻りましょう。
location of player
ですが、プレイヤーの座標という意味です。これで変数にプレイヤーの座標を代入できました。
あとはその変数にテレポートすると書けば、/check
を実行済みであれば/pt
でテレポートできます。
ですが、ここで注意!!
/check
を実行していないとテレポートせずに「%5チェックポイントにテレポートしました」とだけ表示されてしまいます。
それを見た人からすれば「テレポートしてないやんけ!!」ということになってしまいますね。
そこでif
文が出てくるのです。
#IF文とは・・・
IF
というのは、「例えば」という意味を持ちます。
そして主に使うタイミングは、条件が複数あり、その条件により実行内容が違うというものです。
それと同時に出てくるELSE
についても説明します。
ELSE
はそれ以外という意味を持ちます。
基本的にはIF
文を書いた後に、それ以外の場合の動作を書くときに使います。
では先ほどのコードにIF
文を追加していきましょう。
command /check:
trigger:
if {point.%player%} is set:
set {point.%player%} to location of player
send "%5チェックポイントを上書きしました。" to player
stop
else:
set {point.%player%} to location of player
send "%5チェックポイントを保存しました。" to player
stop
command /pt:
trigger:
if {point.%player%} is set:
teleport player to {point.%player%}
send "%5チェックポイントにテレポートしました" to player
stop
else:
send "&cチェックポイントが保存されていません。" to player
stop
これで完成です。
まあ、/check
のIF
文はただのメッセージを変えるために作ったのですがね・・・
では解説です。
if {point.%player%} is set:
これは変数がsetされている・・・
まあ、代入済みであるかどうかを聞いています。
そしてELSE
文はそれ以外なので代入されていない・・・というコードになります。
次はコチラ
前はコチラ