Skriptで作ったTPコマンドに相対座標を使えるようにしたい

Skriptバージョン2.9.2 Peper1.19.4
command /tp [<player>] [<player>] [<number>] [<number>] [<number>]:
trigger:
if arg-1 and arg-2 is not set:
teleport player to location at arg-3, arg-4, arg-5
send "&b%player%を座標%arg-3% %arg-4% %arg-5%にテレポートしました!"
if arg-1 and arg-2 is set:
teleport arg-1 to arg-2
send "&b%player%を%arg-2%にテレポートしました!"
command /tp [<player>] [<player>] [<number>] [<number>] [<number>]:
trigger:
if arg-1 and arg-2 is not set:
teleport player to location at arg-3, arg-4, arg-5
send "&b%player%を座標%arg-3% %arg-4% %arg-5%にテレポートしました!"
if arg-1 and arg-2 is set:
teleport arg-1 to arg-2
send "&b%player%を%arg-2%にテレポートしました!"
相対座標を使えるようにしたいです。
48 Replies
月猫ch
月猫ch3w ago
最終的には、絶対座標とどのような使い分け方をしたいですか? 例えば /tp2なら相対座標テレポ とか
優
OP3w ago
できれば絶対座標も相対座標も/tpにしたいです。
月猫ch
月猫ch3w ago
それなら command /tp [<player>] [<player>] [<number>] [<number>] [<number>] [<boolean>] とかにして arg-6がtrueなら相対座標計算にするとかどうですか?
優
OP3w ago
[<boolean>]ってどういう意味なんですか?
月猫ch
月猫ch3w ago
true / false の概念は分かりますか?
優
OP3w ago
わかります
月猫ch
月猫ch3w ago
booleanとは、trueかfalseです
優
OP3w ago
あーなるほど
月猫ch
月猫ch3w ago
コマンドの最後に trueを付けることで 相対座標モードがtrueになり、処理が行われると考えていただければ
優
OP3w ago
なるほど
月猫ch
月猫ch3w ago
ここまで、『表向きどのような挙動にするか』を考えましたが そこからさらに、どうやって相対座標を計算するかが必要になります それは自力で出来そうですか?
優
OP3w ago
相対座標のことを今日初めて知ったような人間なので自力は厳しそうです
月猫ch
月猫ch3w ago
相対座標とは『現在座標から、x,y,z分ずれた座標』ということです そこらへんは理解できますか?
優
OP3w ago
そこは調べたのでわかります
月猫ch
月猫ch3w ago
ばっちぐーです
yukkina
yukkina3w ago
まあ numじゃなくてstrにして
月猫ch
月猫ch3w ago
つまり、playerから x y z分ずらした座標を作って そこにtpすればいいだけですね
yukkina
yukkina3w ago
~1みたいなバニラの総体座標みたいな使い方できるようにする方法もあるわね
月猫ch
月猫ch3w ago
~X ~Y ~Z も考えたんですけどね きも過ぎていやだ
yukkina
yukkina3w ago
最初の1文字が~だったら〜
月猫ch
月猫ch3w ago
あ、でも表面実装的には問題ないのか もうそれでいいんじゃないか・・? -# (実装のために違和感を見逃す姿勢)
優
OP3w ago
それもちょっと考えたんですけど、やり方がわからなかったんですよね
月猫ch
月猫ch3w ago
一応、説明はできる そっちのほうがいいならそっちで説明しますよ
優
OP3w ago
そっちでお願いします
月猫ch
月猫ch3w ago
というかそれを実現するのに必要(な気がする)構文をばらで紹介して それを自力で組み立ててもらって できないならまあ普通に解説 とかでいいですかね 逆に答えだけさっさと知りたいならそれも可
yukkina
yukkina3w ago
first character of arg-n is "~"
優
OP3w ago
構文を紹介してもらってできなそうだったら解説してもらってもいいすか?
月猫ch
月猫ch3w ago
start with より速いのかなそっちのほうが
yukkina
yukkina3w ago
そんなのあんのか まかせる まあ
月猫ch
月猫ch3w ago
一応じゃあ俺が考えた方法説明しますわ 指摘したいところがあったらしてくれめんす
yukkina
yukkina3w ago
初心者が知っててとくなのはfirst characterの方な気がする
優
OP3w ago
なるほど
Melonium
Melonium3w ago
バニラコマンドってチルダ使えたっけ java
月猫ch
月猫ch3w ago
- 文字列が『~』ではじまるかどうかの条件分岐 {_str} start with "~" - 文字列『~』を『』に置き換える(消す)構文 replace "~" in {_str} with "" - 文字列を数字にする構文 set {_num} to {_str} parsed as number - locationの X,Y,Zを個別に取得する構文 set {_x} to x loc of {_loc} set {_y} to y loc of {_loc} set {_z} to z loc of {_loc}
優
OP3w ago
ちょっと自力で組み立ててみます やってみたんですけどわかなかったです...
月猫ch
月猫ch3w ago
arg 3〜5をそれぞれ x y z として説明しますね 今回の実装では、x y zそれぞれが相対か絶対かを判別する必要があります if {_x} start with "~": replace all "~" in {_x} with "" set {_x} to {_x} parsed as number set {_locX} to x location of {_player} + {_x} else: set {_x} to {_x} parsed as number set {_locX} to {_x} これで、相対か絶対かを考慮した『x座標』が算出出来ました ※スマホで書いてるのでミスは愛嬌
優
OP3w ago
y,z座標も同じようにする感じですか?
月猫ch
月猫ch3w ago
この処理を x y zそれぞれで行って 完成したものでlocationを生成し そこにtpさせましょう
優
OP3w ago
わかりました!やってみます
月猫ch
月猫ch3w ago
がんばえ 説明がばですまん あと、{_player}には、状況に応じてplayerかarg-1 arg-2を代入して使ってくれ
優
OP3w ago
了解です! 今いろいろ試しながらやってるんですけど、どういう風に構文に組み込んであげればいいですかね
月猫ch
月猫ch3w ago
やったところだけでもコードみたい
優
OP3w ago
command /sktp [<player>] [<player>] [<number>] [<number>] [<number>]:
trigger:
if arg-1 and arg-2 is not set:
teleport player to location at arg-3, arg-4, arg-5
send "&b%player%を座標%arg-3% %arg-4% %arg-5%にテレポートしました!"
if arg-1 and arg-2 is set:
teleport arg-1 to arg-2
send "&b%player%を%arg-2%にテレポートしました!"

if {_x} start with "~":
replace all "~" in {_x} with ""
set {_x} to {_x} parsed as number
set {_locX} to x location of {_player} + {_x}
else:
set {_x} to {_x} parsed as number
set {_locX} to {_x}
if {_y} start with "~":
replace all "~" in {_y} with ""
set {_y} to {_y} parsed as number
set {_locY} to y location of {_player} + {_y}
else:
set {_y} to {_y} parsed as number
set {_locY} to {_y}
if {_z} start with "~":
replace all "~" in {_z} with ""
set {_z} to {_z} parsed as number
set {_locZ} to z location of {_player} + {_z}
else:
set {_z} to {_z} parsed as number
set {_locZ} to {_z}
teleport player to location at {_x}, {_y}, {_z}
command /sktp [<player>] [<player>] [<number>] [<number>] [<number>]:
trigger:
if arg-1 and arg-2 is not set:
teleport player to location at arg-3, arg-4, arg-5
send "&b%player%を座標%arg-3% %arg-4% %arg-5%にテレポートしました!"
if arg-1 and arg-2 is set:
teleport arg-1 to arg-2
send "&b%player%を%arg-2%にテレポートしました!"

if {_x} start with "~":
replace all "~" in {_x} with ""
set {_x} to {_x} parsed as number
set {_locX} to x location of {_player} + {_x}
else:
set {_x} to {_x} parsed as number
set {_locX} to {_x}
if {_y} start with "~":
replace all "~" in {_y} with ""
set {_y} to {_y} parsed as number
set {_locY} to y location of {_player} + {_y}
else:
set {_y} to {_y} parsed as number
set {_locY} to {_y}
if {_z} start with "~":
replace all "~" in {_z} with ""
set {_z} to {_z} parsed as number
set {_locZ} to z location of {_player} + {_z}
else:
set {_z} to {_z} parsed as number
set {_locZ} to {_z}
teleport player to location at {_x}, {_y}, {_z}
月猫ch
月猫ch3w ago
まず、argを{_x} {_y} {_z}に代入しないと んで、 {_player} にも代入してあげなあかんね
優
OP3w ago
代入って
set {_x} to arg-3
set {_x} to arg-3
これで合ってます?
月猫ch
月猫ch3w ago
そうそう
set {_x} to arg-3
set {_y} to arg-4
set {_z} to arg-5
set {_x} to arg-3
set {_y} to arg-4
set {_z} to arg-5
もちろんもっとコード短くしろって言われたらできるんだけど まあまあまあまあ
優
OP3w ago
if {_x} start with "~":
replace all "~" in {_x} with ""
set {_x} to {_x} parsed as number
set {_locX} to x location of {_player} + {_x}
set {_player} to player
else:
set {_x} to {_x} parsed as number
set {_locX} to {_x}
set {_x} to arg-3
if {_y} start with "~":
replace all "~" in {_y} with ""
set {_y} to {_y} parsed as number
set {_locY} to y location of {_player} + {_y}
set {_player} to player
else:
set {_y} to {_y} parsed as number
set {_locY} to {_y}
set {_y} to arg-4
if {_z} start with "~":
replace all "~" in {_z} with ""
set {_z} to {_z} parsed as number
set {_locZ} to z location of {_player} + {_z}
set {_player} to player
else:
set {_z} to {_z} parsed as number
set {_locZ} to {_z}
set {_z} to arg-5
teleport player to location at arg-3, arg-4, arg-5
if {_x} start with "~":
replace all "~" in {_x} with ""
set {_x} to {_x} parsed as number
set {_locX} to x location of {_player} + {_x}
set {_player} to player
else:
set {_x} to {_x} parsed as number
set {_locX} to {_x}
set {_x} to arg-3
if {_y} start with "~":
replace all "~" in {_y} with ""
set {_y} to {_y} parsed as number
set {_locY} to y location of {_player} + {_y}
set {_player} to player
else:
set {_y} to {_y} parsed as number
set {_locY} to {_y}
set {_y} to arg-4
if {_z} start with "~":
replace all "~" in {_z} with ""
set {_z} to {_z} parsed as number
set {_locZ} to z location of {_player} + {_z}
set {_player} to player
else:
set {_z} to {_z} parsed as number
set {_locZ} to {_z}
set {_z} to arg-5
teleport player to location at arg-3, arg-4, arg-5
こういうことですか?
月猫ch
月猫ch3w ago
{_player} を使う前に {_player}に代入してあげないといけないっすね {_player} はTP先となるplayerを指定してあげないといけないです

Did you find this page helpful?