LoginSignup
1
1

More than 3 years have passed since last update.

Minecraft Skript 応用編 Part.3 タイマー

Last updated at Posted at 2019-05-30

タイマーを作ってみる。

timer.sk
command /timer <text> [<int>]:
    trigger:
        if arg-1 is "start":
            if arg-2 is set:
                set {timer.time} to arg-2
                set {timer.status} to true 
                stop
            else:
                set {timer.time} to 500
                set {timer.status} to true 
                stop
        if arg-1 is "set":
            if arg-2 is set:
                set {timer.time} to arg-2
                send "&5タイマーの時間を%arg-2%に変えました。" to player 
                stop
            else:
                send "&c時間を指定してください。" to player
                stop
            stop 

every seconds:
    if {timer.status} is true:
        loop all players:
            set action bar of loop-player to "残り時間 : %{timer.time}% 秒"
    remove 1 from {timer.time}

それでは少しずつ説明しましょう。

まず変数の紹介です。

変数一覧
{timer.status} == タイマーの状態(True/False)
{timer.time} ==== タイマーの時間

argumentを無視してみる・・・

まずコマンドです。
command /timer <text> [<int>]:
このコードは初めて見るのではないでしょうか?

これはargumentを2つ用意して、2個目のargumentを[]で囲んだものになります。

[]で囲むと何ができるのかといいますと、
コマンドのargumentを無視できるのです。

???

となった方が多いのではないでしょうか?
わたくしもそうなっていますww

まあ、これに関してはコマンド実行時の書き方を見てもらえばわかると思います。

/tp A Bと実行するとAの場所にBが行くというコマンドですよね?
ですが、/tp Aと実行すれば、実行したプレイヤーがAの場所に行くというコマンドです。

すると、argumentは2つの時と1つの時があるわけです。

ですが、カスタムコマンドを作るときに<~~~>だけで書いているとargumentを用意した分、argumentを書かないと「実行できませんよ」というシステムエラーを吐くと思います。

ですが、そのargumentを[]で囲んであげると、囲んだargumentをなかったものと扱ってもあるものと扱ってもいいようになるんです。
※argumentは常に左から順に1、2、3、4、5・・・・となっています。

/timer startコマンド・・・

timer.sk
=======================
            if arg-2 is set:
                set {timer.time} to arg-2
                set {timer.status} to true 
                stop
            else:
                set {timer.time} to 500
                set {timer.status} to true 
                stop
=======================

まあ、これはもし、arg-2が埋まっていればそれを開始時のタイマー時間にセット、埋まっていなければ開始時のタイマー時間を500秒にセットするというコードですね。

/timer setコマンド・・・

timer.sk
=======================
            if arg-2 is set:
                set {timer.time} to arg-2
                send "&5タイマーの時間を%arg-2%に変えました。" to player 
                stop
            else:
                send "&c時間を指定してください。" to player
                stop
            stop 
=======================

これはタイマー時間を途中変更できるものです。
このコマンド、タイマー実行中じゃなくても実行可能ですが、タイマー開始時に時間を変更する必要があるので使っても意味がないといったことになります。

これに関しては少し弄っただけでどうにかできますが、
このコードを見て、何をしてるんだい?となってる方(汚いコードだな・・・とか以外)は、たぶんどうしようもないかと・・・

最後に・・・

これまでのページを見てきた人は、「あれ?Loopでやったらだめなの?なんでevery secondsなの?」と思ってる方がいるかもしれません。

まあ、every secondsなのは俺の好み。
whileとかでも問題ない・・・

でもLoopはおやめなさい・・・w

詳しくはまたの機会に・・・

次はコチラ

前はコチラ

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1