#VoidSpawnとは・・・
VoidSpawnというPluginをご存知でしょうか?
単純に言えば、奈落に落ちると設定したポイントにテレポートするというものです。
それをSkriptで書いてみようと思います。
#とにかくイベントを考える・・・
まず、問題となるのはイベントです。
奈落に落ちたらというPluginは存在しません。。。
が、奈落に落ちたときのダメージを調べることは可能です。
ですが、これだと、もしDamageをキャンセルしてしまうコードを書いていたら動かない可能性が考えられます。
なので、今回は、常にプレイヤーの座標を調べてみましょう。
#じゃあ、書いてみる・・・
every tick:
loop all players:
if {%loop-player's world%.voidspawn.status} is true:
if loop-player's y-coordinate is less than 1:
teleport loop-player to {%loop-player's world%.voidspawn.point}
command /vssk <text>:
trigger:
if arg-1 is "set":
set {%player's world%.voidspawn.status} to true
set {%player's world%.voidspawn.point} to location of player
send "&5VoidSpawn.sk の座標を設定しました。" to player
stop
if arg-1 is "remove":
delete {%player's world%.voidspawn.status}
delete {%player's world%.voidspawn.point}
send "&5あなたのいる世界のVoidSpawn.sk を初期設定にしました。" to player
stop
if arg-1 is "tp":
if {%player's world%.voidspawn.status} is true:
teleport player to {%player's world%.voidspawn.point}
stop
else:
send "&cそのようなコマンドは存在しません。" to player
#解説
まず主となる部分を解説していこう。
every tick:
loop all players:
if {%loop-player's world%.voidspawn.status} is true:
if loop-player's y-coordinate is less than 1:
teleport loop-player to {%loop-player's world%.voidspawn.point}
every tick
というのは1チックごとに常に起こるイベントです。
これには起こす人というのはいなく、Skript側が勝手に起こしてくれるイベントです。
loop all players
ですべてのプレイヤーをループし、if {%loop-player's world%.voidspawn.status} is true:
で各プレイヤーがいるワールドのVoidSpawn.skの設定(変数)がどうなっているのかを確認しています。
もし設定(変数)がTrue
ならばと書いているので、その場合if loop-player's y-coordinate is less than 1:
で各プレイヤーのY座標をチェックします。
y-coordinate
でY座標を取得できます。(y
をx
やz
に変えたら同様にX座標やZ座標も取得できます。)
そしてY座標がless than 1
なので1よりも小さい→0以下であれば・・・というコードになります。
あとはteleport loop-player to {%loop-player's world%.voidspawn.point}
で設定した所定の位置にテレポートする・・・といったコードになるわけです。
それではVoidSpawn.skを使用するためのコマンドを解説していこう。
#まず/vssk set
というコマンドについて・・・
command /vssk <text>:
trigger:
if arg-1 is "set":
set {%player's world%.voidspawn.status} to true
set {%player's world%.voidspawn.point} to location of player
send "&5VoidSpawn.sk の座標を設定しました。" to player
stop
if arg-1 is "remove":
delete {%player's world%.voidspawn.status}
delete {%player's world%.voidspawn.point}
send "&5あなたのいる世界のVoidSpawn.sk を初期設定にしました。" to player
stop
if arg-1 is "tp":
if {%player's world%.voidspawn.status} is true:
teleport player to {%player's world%.voidspawn.point}
stop
else:
send "&cそのようなコマンドは存在しません。" to player
今回コマンドは/vssk
というものにしました。(※意味はVoidSpawn SKript)
まずif arg-1 is "set":
で/vssk set
というコマンドを実行したらというコードになります。
その場合{%player's world%.voidspawn.status}
というそのワールドのVoidSpawnを有効かどうかを確認する際に用いる変数をset {%player's world%.voidspawn.status} to true
で有効にします。
それと同時にプレイヤーがいる座標をset {%player's world%.voidspawn.point} to location of player
で変数に保存します。
あとはメッセージを流すといった形で/vssk set
の解説は終了となります。
#/vssk remove
というコマンドについて・・・
これは単純に変数である{%player's world%.voidspawn.status}
と{%player's world%.voidspawn.point}
をdelete
で消しただけです。
以前にもコチラでも解説した通りdelete {A}
という形で変数を削除することができます。
#/vssk tp
というコマンドについて・・・
if {%player's world%.voidspawn.status} is true:
でプレイヤーがいる世界のVoidSpawn設定を確認します。
もし有効になっていたらteleport player to {%player's world%.voidspawn.point}
でテレポートするといったコードになります。
#最後に・・・
どうでしたか?
中にはVoidSpawn(plugin)を入れたほうが速いなどと思った方もいるのでは?
まあ、それは否定しないけど、例えばクリエイティブのユーザー、OPのユーザーはVoidSpawnでTPされないようにしたいとか思ったときにSkriptができたら同じものを作れるよ・・・といったコードです。
もしかしたらもっと最善の策があったかもなんで見つけたら教えてほしいな・・・とか思ってたりしてます。
次はコチラ
前はコチラ