【Skript講座 第四回 入門編】カスタムコマンドの引数について

Skript講座

前回はカスタムコマンドの作り方を紹介したから今回はその引数について紹介していくよ。

引数ですか…よろしくお願いします。

何でもできるっていうのが答えかな…前回のイベントの講座でも言ったように条件と処理をどうするかで無限大だからね。

なるほど…よろしくお願いします。

引数とは

Minecraftのコマンドを例にしますが,/tp @p 60 20 15と実行するときに/tp以降の@p 60 20 15を引数と言います。

@pを第一引数,60を第二引数…という形で呼びます。

引数を使ってみる

command /test <text>:
	trigger: 
		broadcast "%arg-1%"

引数を使った自作コマンドです。

Skriptを読み込んだら/test 好きな文字列を実行してみましょう。

実行すると入力した文字列がチャットに表示されます。

[21:02:39 WARN]: Line 14: (main.sk)
 the 1st argument is already a text, so you should not put it in one (e.g. the 1st argument instead of "%the 1st argument%")
 Line: broadcast "%arg-1%"
山本明果梨
山本明果梨

あれ?エラーが出てしまいました…

田中直人
田中直人

ん?ああ,これはエラーじゃないよ。エラーだったらWARNって書いてあるところがERRORになるからね。

余談: エラーじゃなくて警告

入門編で紹介すると混乱する人が多いと思うので細かくは説明しませんが,今回引数の型にtextを選びました。(Javaとかをやってる人ならStringと言った方が伝わるでしょう。)

textは文字列のことなのですが,今回broadcast "%arg-1%"というコードを書きました。

“(ダブルクォーテーション)で囲んだ中はもちろん文字列なので文字列の中に文字列を単体で入れるのは間違えではないけど推奨しないよ…と言われているんですね。

じゃあ,どうすればよいのかと言えば,broadcast arg-1とすればいいのです。

と,言ってもbroadcast "指定した引数は「%arg-1%」でした。"というような文章の中に引数を埋め込むことが多いと思うのであまり気にしなくてもかまいません。

山本明果梨
山本明果梨

エラーじゃなかったんですね。

話は戻るのですが,/gamemode @p creativeといったように引数が増える場合は<text>を単純に増やせばいいんですか?

田中直人
田中直人

そうだよ。でも気を付けてほしいのは@pと言ったようなセレクターはminecraftが用意したものなので使えません。

引数を増やす

command /test <text> <text>:
	trigger: 
		broadcast "%arg-1% %arg-2%"

これで二つの引数ができました。あとはどんどん増やせばいくらでも増やせます。

引数の増減

gamemodeコマンドの使い方は/gamemode @p creativeだったり/gamemode creativeというように引数を減らしても動作しますよね?

Skriptでもこれは可能です。その方法は引数部分に[]を付けてあげるだけです。

つけてあげないとCorrect usage: /test <text> <text>と表示されます。これはコマンドの使い方が間違っているよという意味です。

command /test [<text>] [<text>]:
	trigger: 
		broadcast "%arg-1% %arg-2%"

こんなかんじに!

ですがこの時に気を付けなければいけないのは/testと実行すると<none> <none>と表示されます。

なので条件文を使って引数の存在をチェックしましょう。

command /test [<text>] [<text>]: 
	trigger: 
		if arg-1 is set: # 第一引数有
			if arg-2 is set: # 第二引数有
				broadcast "%arg-1% %arg-2%"
			else: # 第二引数無
				broadcast arg-1
		else: # 全引数無
			broadcast "引数がありません。"

こうすることで引数を入力しなくともコマンドを実行することができます。

今回少しミスったなぁ…と思ったのが引数の型をどちらもtextにしてしまったため条件文が第一引数はないけど第二引数はあるよっていうのが作れないんですよね…

型について

text部分をplayerにしたり,numberにしたりすることで数字にすることができます。数字にするとなにができるのか?ということですがこんなことができます。

command /plus <number> <number>: 
	trigger: 
		set {_temp} to arg-1 + arg-2
		broadcast "%{_temp}%"

コマンド実行してみましょう。/plus 4.5 3.2と実行すると7.7が返ってきました。

もちろんnumberをtextとすればエラーが発生します。

第一引数に複数の型を使いたい…

何度もゲームモードコマンドを参考にしますが/gamemode creative/gamemode player creativeの二つでは第一引数は文字列(またはゲームモード)型とプレイヤー型が使われています。

第二引数は[]で囲ってあげればいいけど第一引数はどうすればいいのか…

そんなときはtextを使いましょう。

command /plus <text> <text>: 
	trigger: 
		set {_temp1} to arg-1 parsed as number
		set {_temp2} to arg-2 parsed as number
		if {_temp1} is not set:
			if {_temp2} is not set:
				parse error is set
				send "全引数が数字ではありません"
			else:
				send "第一引数が数字ではありません"
		else:
			if {_temp2} is not set:
				parse error is set
				send "第二引数が数字ではありません"
			else:
				add {_temp1} to {_temp2}
				send "%{_temp2}%"

条件文が多くてややこしくなっていますが重要なのはset {_temp1} to arg-1 parsed as numberset {_temp2} to arg-2 parsed as numberparse error is set:です。

最初の二つは第一引数と第二引数の型をnumber型に変更するというコードです。

最後のparse error is setは型の変更に失敗した時にparse errorというものが発生するためparse errorが存在したら…という条件になっています。

山本明果梨
山本明果梨

型はいっぱいありそうで難しそうですね…

田中直人
田中直人

そうだね。私もこの記事を書くためにSkriptの型を調べるんだけどいっぱいあって書ききれないんだよ…今回はnumberを使ったけど整数を意味するintもあったり似ているようで違う型があって…

ということで今回は自作コマンドの引数について紹介しました。

また次の講座で会いましょう。

 

講座について

当講座で紹介したソースコードはGitHubにて公開されています。

GitHubページはコチラです。

この記事を書いた人

Minecraftでミニゲーム企画を開催しているMonsterLifeServerの運営で開発やYouTubeに投稿する動画の編集などをしています。

元々はコマンドでミニゲーム企画を開催していましたが限界を感じてSkriptを使い始めました。
そこから5つほど企画を作り,バグなどの原因でプラグインの勉強を始めました。

本格的な開発者歴自体は4年ぐらいです。Skript以外ではHTML,CSS,JavaScript,PHP,Python,MySQL,Cなどを使てシステム設計をしています。

仕事でも似たようなことをしています。

monster2408をフォローする

コメント