LoginSignup
1
0

More than 3 years have passed since last update.

Minecraft Skript 入門編 Part.3

Last updated at Posted at 2019-04-28

Loopについて・・・

Loopというのは、簡単に説明すればループするという意味ですww

まあ、さきに例文を書いてみましょう。

test.sk
loop all players:

これですべてのプレイヤーをLoopします。
とはいえ、これにはイベントがないので動きません。

test.sk
on join:
    loop all players:
        send "&e%player%さんがサーバーに来ちゃった・・・w" to loop-player

はい。
これで動きます。
image.png
以前書いたのはplayerに送信でしたが、今回はloop-playerです。
loop-playerは、loop all players:を書いたときに使います。

先ほどのコードならbroadcastと同じ働きをすることになりますので、いちいち書くのは馬鹿らしいですよね・・・

正しい使い方?じゃないというのが事実です。

test.sk
on join:
    loop all players:
        loop-player do not have permission "skript.admin"
        send "&e%player% さんがサーバーに来たぞ!!" to loop-player

これでそのパーミッションを持っていない人がきたらメッセージを送信、持っていたらなにも起きなくなります。

カスタムコマンドについて・・・

test.sk
command /任意のコマンド:
    description:
    usage:
    permission:
    permission message:
    executable by:
    aliases:
    trigger:

まず、/testというコマンドが作りたいなら、
1行目はcommand /test:としてください。
2行目のdescription:はMinecraftに元からある/helpコマンド実行時に表示される説明を書きます。
3行目のusage:はコマンドの使い方である/testを書きます。
4行目のpermission:はそのコマンドを使うために必要な権限(パーミッション)を書きます。
5行目のpermission message:はその権限を持っていないプレイヤーが使った場合に返すメッセージです。
6行目のexecutable by:はコマンドを実行できる環境を書きます。例えば、コンソールとプレイヤーのチャットから実行できるようにするにはexecutable by: player and consoleと書くことになります。
7行目のaliases:はコマンドの省略形式を書きます。/tsなど
そしてもっとも重要な8行目のtrigger:ですが・・・・

ここまで説明したが、

test.sk
command /test:
    trigger:

で、構いません。
あ、これだと一般のプレイヤーも使えるのでpermissionだけでも書いてるほうがいいかもしれませんね・・・
※permissionを設定していてもOP権限を持っていると関係なしに使える場合があるので注意

test.sk
command /test:
    trigger:
        send "test" to player

これでコマンドを実行すると「test」と表示されます。

では鯖に実用的なコマンドを作ってみましょう。

test.sk
command /close:
    permission: skript.admin
    trigger:
        execute console command "/whitelist on"
        loop all players:
            loop-player is not an op
            kick the loop-player due to "サーバーが非公開になりました"
        send "サーバーを非公開にしました" to player

また、新しいものがいくつか出てきましたね。
まず、1~3行目は記述済みなので4行目から解説していきます。
4行目のexecute console command "/whitelist on"ですが、これはコンソールで指定したコマンドを実行するというものです。
これでサーバーのホワリスがオンになります。
5行目でこのページの1番最初に書いたLoopが出てきましたね。
6行目のif loop-player is not an op:loop-playerがOPじゃなかったらという条件になります。
7行目のkick the loop-player due to "サーバーが非公開になりました"loop-playerをキックできます。また、キックの理由も指定できます。
image.png
8行目は・・・わかるねw

中には気づいた方もいるかもですが、OP権限者=permission所持者は成立しても、permission所持者=OP権限者は成立しないのです。

ということは、これだと実行者がキックされてもおかしくありませんね。

ではその対策を書きましょう。

test.sk
command /close:
    permission: skript.admin
    trigger:
        execute console command "/whitelist on"
        loop all players:
            loop-player is not an op
            loop-player is not player
            kick the loop-player due to "サーバーが非公開になりました"
        send "サーバーを非公開にしました" to player

loop-playerの条件にif loop-player is not player:を付けたしただけです。
loop-playerplayerとは違いまっせてね。

最後の対策ははっきり言っていりませんw

次はコチラ

前はコチラ

1
0
0

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
0