LoginSignup
0
0

【丁寧に解説】Skriptをはじめよう 1:簡単なスクリプトを書いてみよう

Last updated at Posted at 2024-04-15

この記事はマインクラフトのプラグインである Skript の解説記事ですが、筆者はこのプラグインを触り始めたばかりなので間違った記述がある可能性があります。また、質問に必ず回答できるとは限りません。以上を踏まえたうえでこの記事をお読みください。

【前回】

【次回】
執筆中📄

大事な前作業(必読)

皆さんこんにちは、ろぐと申します。
前回は Skript をより効率的に利用するための準備をしました。今回は早速スクリプトの作成に入っていきます!
ただ、実は最後にもう1つだけ、やらなくてはいけないことがあるんです。

「えぇ...まだあんのかよ...。」

と思ったそこのあなた!この作業は早ければ1分程度で終わります。どうかお付き合いください...!

これから記述する作業を行わないと、Skript のバージョンが上がったときにスクリプトが動かなくなる可能性があります。 そうなってから手作業で修正することもできますが、かなりの手間です。ぜひこの項はスキップせず、最後まで読んでください!

config.sk ファイルの設定

config.sk ファイルとは?

config.sk ファイルは、プラグインの詳細な設定をするためのファイルです! ほとんどすべてのプラグインにあります。(ただし他のプラグインでは拡張子が .yml です)これを編集することによってプラグインを自分好みにカスタマイズできたり、挙動を変更したりできるのでサーバー管理者にはおなじみのファイルです!

今回は Skript の config.sk ファイルを編集していきます。といっても何も難しいことは無いので、身構えなくても大丈夫です!

手順

「plugins」フォルダ → 「Skript」フォルダ → config.sk ファイルを開いてください。(テキストエディタはなんでもOKですが、行数が分かるものがよいです)
※前回の記事で Sublime Text を「常に使う」に指定した場合は、そちらで開かれます。

config.sk の中身はこのようになっていると思います。

config.sk
#     __________________________________________________________
#    / /                                                   / /\ \
#    \_\___________________________________________________\_\/ /
#        / /    _____    __            __                    / /
#       / /    / ____\  / /           /_/          /\       / /
#      / /    / /__    / /___  ___   __  ______ __/ /_     / /
#     / /     \___ \  /   __/ / __\ / / / __  //_  __/    / /
#    / /     ____/ / / /\ \  / /   / / / /_/ /  / /      / /
#   / /     \_____/ /_/ /_/ /_/   /_/ / ____/  /_/      / /__
#  / /    ========================== / / ==========    / / \ \
# | |                               /_/               | |   | |
#  \_\_________________________________________________\_\_/_/
#
# == Introduction ==
# This file contains Skript's general options. To write scripts, create a new .sk file in the scripts folder or edit any existing one.
#
# Script files prefixed with a hyphen (-) will not be loaded, e.g. renaming 'plant with hoe.sk' to '-plant with hoe.sk' will disable the whole file.
# This can e.g. be used to temporarily disable scripts and is also used for Skript's example scripts.

(うんたらかんたら...)

なかなかすごいアスキーアートだな...

おっと、話がそれました。このファイルを開いたら、91行目まで移動してください!
すると、こんな文章があると思います。(バージョンによって多少行番は前後するかもしれません)

config.sk 91行目
use player UUIDs in variable names: false

今は意味は分からなくていいので、とりあえず false と書いてある部分を true に変更してください。

config.sk 91行目 変更後
use player UUIDs in variable names: true

(もちろん上書き保存もしてくださいね)

これで作業は終了です!めちゃくちゃ簡単でしたよね?
config.sk ファイルはもう使わないので閉じてしまって大丈夫です~!

【発展】この作業が意味するもの(長文注意)

※ここに記してあることは非常に難解です。変数についての理解を深めてから読むことをおすすめします。

先ほど変更した設定を日本語訳すると
変数名でプレイヤーUUIDを使用する:はい
となります。UUIDはプレイヤーごとに与えられる個別の識別子です。
また最初の記事で少し説明しましたが、Skript には変数という「自分で好きな値を入れられる箱」を作れる機能があります。変数は {Name} のようなフォーマットで定義します。Name と書かれた部分が変数名です。
実はこの変数、名前の内部にエクスプレッションを挿入することが可能です。例えば {Name.%player%} とすると、仮にこの変数が置かれたスクリプトが実行された場合、変数名は現時点では {Name.実行したユーザー名} となります。これはプレイヤーごとに変数を用意することができるとても便利な機能です。
しかし、ここでひとつの問題が生じます。同じ名前(ID)を有するプレイヤーが存在した場合、変数名が被ってしまい区別がつかなくなってしまうのです。そこで Skript はこれを回避するために、近い将来変数内の player エクスプレッション(つまり %player% )をすべてUUIDに変換するようにすると明言しています。先に述べた通りUUIDはプレイヤーごとに与えられるので、被ることはありません。これで変数をより安定して使用することができますが、仮にこの変換アップデートが実装された場合、既に作成されているプレイヤー名入りの変数とは完全に別の名前の変数が生成されます。 つまり %player% 部分がユーザー名の変数とUUIDの変数が共存する形になり、またユーザー名変数の値はUUID変数には引き継がれないためスクリプトに深刻なバグが生じる可能性があるというわけです。
これを未然に防ぐために行ったのが先の設定変更です。項目を true にすることによって始めから変数内部の player をUUIDに変換するようになります。(デフォルトではユーザー名に変換)これでいつアップデートが来ても安心です。

はじめの一歩

ついに、スクリプトを書く段階まで来ることができました...!
早速 .sk ファイルを作りますが、その前に 「scripts」フォルダの中に「study」というフォルダを作成しましょう!

前回でもちょこっと説明しましたが、この 「study」というフォルダが、このシリーズでの作業場になります。 なので、今後「○○っていうファイルを作ってね~」という指示があったら、すべて「study」フォルダの中に作成するものと考えてください!
※知識がある方は、ここ以外にファイルを作成しても構いません。

Screenshot 2024-04-15 130200.png
(「scripts」フォルダ内の様子 ※ -- Files prefixed... ファイルは削除しています)

なおこれ以降の記事では、もう「-examples」フォルダの中の .sk ファイルは使いません。なので、必要なければ「-examples」フォルダごと削除してしまっても大丈夫です!

【ファイルの呼称名について】
今まで、拡張子が .sk のファイルはすべて「 .sk ファイル」と呼んできましたが、これだと文が長くなり煩わしいので、これ以降の記事では「 .sk ファイル」は単純に「ファイル」と呼称します。(これ以外の拡張子の場合は都度注釈を入れます)

下地も整ったので、早速「study」フォルダの中に Part1.sk というファイルを作成し、テキストエディタで開きましょう!(マイクラサーバーは起動せずに作業してください)

Screenshot 2024-04-15 131912.png
(作業画面の例)

1.ログインメッセージを変えよう

では早速ですが、この中に

Part1.sk
on join:
    set the join message to "Hello World!"

と書き、(もちろん上書き保存して)マイクラサーバーを起動してください。(起動または再起動でスクリプトが読み込まれます)
そして、起動したサーバーに参加してみると...

2024-04-15_13.33.27.png

参加したときのメッセージが変わってる!!

...まあ、これは最初の記事で紹介したので、驚かなかった人の方が多いかと思いますが...。
では早速このスクリプトの解説をしていきましょう!

まず、このスクリプトを一般化してみると...

Part1.sk 一般化
イベント:
(TAB)エフェクト

となります。ただ、いきなり専門用語を出されても分かりませんよね。順番に見ていきましょう!

【イベント】

イベント(Event)は、「○○が起こったら」「○○が○○になったら」など、ゲーム内で何かしらの動きがあったかどうかチェックするものです。先ほどのイベントは on join であり、これを日本語訳すると 「参加した時」 という意味になります。
イベントは Skript の根幹といってもいいものです。 これがないと、先ほどのスクリプトは動きません。
イベントは本当にたくさんの種類があり、ここではすべてを紹介することはできません...。
参考程度ですが、一部を紹介しましょう!

イベント名 日本語訳 意味
on join 参加した時 プレイヤーがサーバーに参加した時
on quit 退出した時 プレイヤーがサーバーから退出した時
on place 設置した時 任意のブロックが設置された時
on break 参加した時 任意のブロックが破壊された時
on chat チャットした時 任意のプレイヤーがメッセージを送信した時
on damage ダメージの時 任意のエンティティがダメージを受けた時

まだまだたくさんのイベントがあります!ぜひ調べてみてください!

【エフェクト】

エフェクト(Effect)は、イベントが発動した時、その動作を行うものです。
つまりイベントとエフェクトを組み合わせることによって、「○○が起こった時、○○する」といったスクリプトが書けるわけです!
組み合わせはまさに無限大。Skript の可能性を感じますね!
こちらも参考程度に一部を紹介します。

エフェクト名 日本語訳 意味
set 設定する 任意の値を設定する
send 送る 任意のプレイヤーにメッセージを送信する
broadcast 放送する プレイヤー全員にメッセージを送信する
delete 消去する 任意の値を削除する
execute 実行する 任意のコマンドを実行者を指定して実行する
cancel 取り消す 任意のプロセスをキャンセルする
【補足】「任意」とは

数学の授業で聞いたことがある人もいるかもしれませんが、「任意」というのは「その人の判断にゆだねる」、つまり 「なんでもいいですよ~」という意味です!
例えば、「任意の値」と言われたら、それは「自由な値」という意味です。

Q:(TAB) って何?

A:キーボードの左の方にある「Tabキー」を押すと打てる空白です。
(TAB) は、半角スペース4つ分と同じ大きさの空白です。ただ、(TAB) と半角スペースは違うものなので注意してください。(半角スペース4つ ≠ (TAB) )そのため、(TAB) の代わりに半角スペースを入力するとエラーが発生することがあります。 必ず (TAB) を使用するようにしてください。

また、(TAB) を使用した行先頭の空白のことを、プログラミング用語でインデントと言います。今後の記事でこの表現を用いる場合もあるので、頭の片隅に入れておいてください!

2.記述ルールをおさえよう

Skript のルールとして、イベントの後には :(半角コロン)を、エフェクトの前には (TAB) を入力することが定められています。これを入力しないと、Skript がイベントとエフェクトを区別できず、エラーとなってしまうのでご注意ください...!

Part1.sk ダメな例1
on join
set the join message to "Hello World!"

また、" (ダブルクォーテーション)の中や、変数名・関数名(のちの記事で解説します)以外の場所は、すべて小文字で記述してください。そして、イベントとエフェクトの間は必ず改行してください!

Part1.sk ダメな例2
On Join:
    Set the Join Message to "Hello World!"
Part1.sk ダメな例3
on join:    set the join message to "Hello World!"

禁止事項をいろいろと並べてしまいましたが、以下に示す形に従えば大丈夫です!

イベント:
(TAB)エフェクト

Skript の基本形はすべてこれです!これ以外の形になることはほぼあり得ないので、まずはこの形を覚えましょう!

ここまでは、Tabキーを使用した空白を (TAB) と表現してきましたが、これ以降のスクリプトには示さないのでご注意ください。

3.いろいろいじってみよう

先ほどのスクリプトは、こんな感じでした。

Part1.sk
on join:
    set the join message to "Hello World!"

ここでは、 「ブロックを設置した時」「そのブロックの設置をキャンセルする」 スクリプトを作ってみましょう!

先ほどのリストを参照すると、「ブロックを設置した時」というイベントは on place を、「設置をキャンセルする」エフェクトは cancel を使えば良さそうだな...ということが分かります。
ということで、下にコードを書いてみると...

Part1.sk
on join:
    set the join message to "Hello World!"

on place:
    cancel

こんな感じになります。これを Skript に読み込ませるために、上書き保存してサーバーを再起動すると...

Screenshot 2024-04-15 171246.png
(コンソールより)

...あれ?

エラーが出てしまいました...。いったいなぜでしょうか?
エラーログを紐解いていくと、どうやら「『study』っていうフォルダの中にある Part1.sk ファイルに書かれてる cancel っていうエフェクトが理解できないで」と言われているようです。

それもそのはず、cancel エフェクトには、 「何を」キャンセルするのか書かなければいけないからです。
今回は「ブロックの設置」をキャンセルしたいわけですが、イベントが「ブロックを設置した時」なので、これをキャンセルできればうまくいきそうな気がしませんか?
なので、こう書いてみましょう。

Part1.sk
on join:
    set the join message to "Hello World!"

on place:
    cancel event

event を書き足してみました!こうすると、「ブロックが設置された時、イベントをキャンセルする」 という意味になるので、うまくいきそうな気がします!
早速、サーバーを再起動してみると...

エラーが出なかったと思います。試しにブロックを設置しようとしてみてください!

設置できなくなってるー!!!

上手くいきました!スクリプトは、必要な要素がひとつでも欠けると動きません。 これはほかのプログラミング言語でも同じことです。
そして上の例から分かるように、実はイベントもエフェクトもたくさんの引数(オプションのようなもの)を持つことができます。 つまり更にできることが広がるというわけです!イベントやエフェクトは次回以降更に深堀りしていきます。(記事の都合上今回紹介できるのはここまでです...)

補足:作業するうえで便利なコマンド

先ほどまでは、変更したスクリプトを Skript に読み込ませるために、いちいちサーバーを再起動していました。しかし毎回そんなことをするのは時間がかかるしヤダ!という方もいると思います。
そこで、便利なコマンドを紹介しましょう!

/sk reload scripts

このコマンドは、「Skript のすべてのスクリプトを再読み込みする」 コマンドです。短いので打つのもそれほど苦になりません。この先もっと構文が複雑になってきたとき、おそらく頻繁に動作確認をしたくなると思います。このコマンドを使えば変更をすぐに反映できるので、今後の作業ではぜひこのコマンドを使ってみてください!

scripts の部分を \study\ に変更すると「study」フォルダ内のすべてのスクリプトを、更にその後にファイル名を記述することによって該当ファイルのみを再読み込みするようになります。
例えば、「study」フォルダの Part1.sk ファイルのみを再読み込みする場合には

/sk reload \study\Part1.sk

と記述します。

ただし、スクリプトの読み込みはすぐ終わるので、よほどのことがない限りは補足で紹介したコマンドを使用するのがよいでしょう。
※フォルダに入っていないファイルはフォルダ名を記述する必要はありません。

今回は以上になります!うまくまとめるのが難しかったため、少々分かりづらい部分もあると思います...。
次回はイベントとエフェクトについて深堀りしていきます!記事の更新を気長にお待ちください☕

【次回】
執筆中📄

【前回】

0
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
0
0