Skriptで作ったTPコマンドに相対座標を使えるようにしたい
Skriptバージョン2.9.2
Peper1.19.4
相対座標を使えるようにしたいです。
48 Replies
最終的には、絶対座標とどのような使い分け方をしたいですか?
例えば
/tp2
なら相対座標テレポ とかできれば絶対座標も相対座標も/tpにしたいです。
それなら
command /tp [<player>] [<player>] [<number>] [<number>] [<number>] [<boolean>]
とかにして
arg-6がtrueなら相対座標計算にするとかどうですか?
[<boolean>]ってどういう意味なんですか?
true / false の概念は分かりますか?
わかります
booleanとは、trueかfalseです
あーなるほど
コマンドの最後に trueを付けることで
相対座標モードがtrueになり、処理が行われると考えていただければ
なるほど
ここまで、『表向きどのような挙動にするか』を考えましたが
そこからさらに、どうやって相対座標を計算するかが必要になります
それは自力で出来そうですか?
相対座標のことを今日初めて知ったような人間なので自力は厳しそうです
相対座標とは『現在座標から、x,y,z分ずれた座標』ということです
そこらへんは理解できますか?
そこは調べたのでわかります
ばっちぐーです
まあ
numじゃなくてstrにして
つまり、playerから x y z分ずらした座標を作って
そこにtpすればいいだけですね
~1みたいなバニラの総体座標みたいな使い方できるようにする方法もあるわね
~X ~Y ~Z も考えたんですけどね
きも過ぎていやだ
最初の1文字が~だったら〜
あ、でも表面実装的には問題ないのか
もうそれでいいんじゃないか・・?
-# (実装のために違和感を見逃す姿勢)
それもちょっと考えたんですけど、やり方がわからなかったんですよね
一応、説明はできる
そっちのほうがいいならそっちで説明しますよ
そっちでお願いします
というかそれを実現するのに必要(な気がする)構文をばらで紹介して
それを自力で組み立ててもらって できないならまあ普通に解説
とかでいいですかね
逆に答えだけさっさと知りたいならそれも可
first character of arg-n is "~"
構文を紹介してもらってできなそうだったら解説してもらってもいいすか?
start with より速いのかなそっちのほうが
そんなのあんのか
まかせる
まあ
一応じゃあ俺が考えた方法説明しますわ
指摘したいところがあったらしてくれめんす
初心者が知っててとくなのはfirst characterの方な気がする
なるほど
バニラコマンドってチルダ使えたっけ
java
- 文字列が『~』ではじまるかどうかの条件分岐
{_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}
ちょっと自力で組み立ててみます
やってみたんですけどわかなかったです...
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座標』が算出出来ました
※スマホで書いてるのでミスは愛嬌
y,z座標も同じようにする感じですか?
この処理を x y zそれぞれで行って
完成したものでlocationを生成し
そこにtpさせましょう
わかりました!やってみます
がんばえ 説明がばですまん
あと、{_player}には、状況に応じてplayerかarg-1 arg-2を代入して使ってくれ
了解です!
今いろいろ試しながらやってるんですけど、どういう風に構文に組み込んであげればいいですかね
やったところだけでもコードみたい
まず、argを
{_x} {_y} {_z}
に代入しないと
んで、 {_player}
にも代入してあげなあかんね代入ってこれで合ってます?
そうそう
もちろんもっとコード短くしろって言われたらできるんだけど
まあまあまあまあ
こういうことですか?
{_player} を使う前に {_player}に代入してあげないといけないっすね
{_player} はTP先となるplayerを指定してあげないといけないです