トロッコから降りられないようにしたい

トロッコからシフトで降りられないようにしたいです。 可能であれば、特定の速さ以上で動いているトロッコから降りられないようにしたいとも考えています。 ちなみに、skript hubに載っていた例文を少しいじって、
on vehicle exit:
if event-entity is a minecart:
cancel event
on vehicle exit:
if event-entity is a minecart:
cancel event
にすると、トロッコから降りられてしまいます。
15 Replies
月猫ch
月猫ch2w ago
入力中
ぎまっち
ぎまっちOP2w ago
skript は2.9.5、サーバーはpaper 1.20.4です
月猫ch
月猫ch2w ago
一番簡単に思いついたのが
every 1 tick:
set {_SPEED} to 好きな速度
loop all players:
delete {_m}
delete {_p}
delete {_u}
delete {_v}
set {_p} to loop-player
set {_u} to uuid of {_p}
if ({_p} が トロッコに乗ってるかどうか):
set {_m} to ({_p}の乗っているカート)
set {cart::%{_u}%} to {_m}
else:
{cart::%{_u}%} is set
set {_m} to {cart::%{_u}%}
set {_v} to velocity of {_m}
if normal length of {_v} >= {_SPEED}:
({_p}を{_m}に乗せる)
else:
(必要なら応じて処理追加)
delete {cart::%{_u}%}
every 1 tick:
set {_SPEED} to 好きな速度
loop all players:
delete {_m}
delete {_p}
delete {_u}
delete {_v}
set {_p} to loop-player
set {_u} to uuid of {_p}
if ({_p} が トロッコに乗ってるかどうか):
set {_m} to ({_p}の乗っているカート)
set {cart::%{_u}%} to {_m}
else:
{cart::%{_u}%} is set
set {_m} to {cart::%{_u}%}
set {_v} to velocity of {_m}
if normal length of {_v} >= {_SPEED}:
({_p}を{_m}に乗せる)
else:
(必要なら応じて処理追加)
delete {cart::%{_u}%}
とかどう 全くテストしてないけど
yukkina
yukkina2w ago
event-entityがplayerの線は無い?これ
ぎまっち
ぎまっちOP2w ago
それはわからないですが、2行目を
if player is riding a mineccrt
if player is riding a mineccrt
にしても同様に動作しないですね
月猫ch
月猫ch2w ago
ん?『降りたとき』のイベントだから そりゃ乗ってるかどうかで言ったら 乗ってない判定なんじゃない>
yukkina
yukkina2w ago
ちがうくて、event-entityの中身が、乗り物名じゃなくて上に乗ってたエンティティの説あるかなって 私がdocs見ればいいだけの話だが()
ぎまっち
ぎまっちOP2w ago
それはどうすれば確認できますか?
ぎまっち
ぎまっちOP2w ago
ちなみにskript hubはこれ https://skripthub.net/docs/?id=1065
Skript Hub - Documentation
On Vehicle Exit (Event) - Skript
Called when an entity exits a vehicle.
gladiolus8789
gladiolus87892w ago
on vehicle exit:
if event-entity is a player:
cancel event
on vehicle exit:
if event-entity is a player:
cancel event
降りられないようにするだけならこれだけで出来ました。 このコードでは,プレイヤーが乗り物から降りれなくなります。 event-entityは,yukkinaさんが仰るように乗り物に乗っているentityを指しています。 また,このイベントは任意の乗り物で発火するのでトロッコだけでなくボートからも降りれなくなります。 追記
on vehicle exit:
if "%vehicle of event-entity%" is "minecart":
send "minecart" to event-entity
on vehicle exit:
if "%vehicle of event-entity%" is "minecart":
send "minecart" to event-entity
乗り物の取得は%vehicle of event-entity%で可能なようです。 注意点として
if vehicle of event-entity is a minecart:
if vehicle of event-entity is a minecart:
とするとボートの場合にifが通ってしまうので,前者のように文字列で比較してください。 参考になれば幸いです。 あと,速さの取得は古野月雲さんのコードが参考になると思います。
ぎまっち
ぎまっちOP2w ago
みなさんありがとうございます!!今は手元にパソコンがないですが、家に帰ったらサーバーで動くか確認します!!
yukkina
yukkina2w ago
send "%event-entity%"とかすれば分かるよ。もう答え書いてくれてる人いるけどね、
ぎまっち
ぎまっちOP2w ago
on vehicle exit:
if "%vehicle of event-entity%" is "regular minecart":

#トロッコのエネルギー量を取得
set {_velo} to velocity of vehicle of event-entity
set {_spe} to normal length of {_velo}

#トロッコの最高速度を取得
set {_max} to max minecart speed of vehicle of event-entity

#エネルギー>最高速度なら、最高速度が現在速度
#エネルギー<最高速度なら、エネルギーが現在速度
if {_spe} is more than {_max}:
set {_spe} to {_max}

#速度0.5m/tick以上なら降車不可
if {_spe} is more than 0.5:
cancel event
on vehicle exit:
if "%vehicle of event-entity%" is "regular minecart":

#トロッコのエネルギー量を取得
set {_velo} to velocity of vehicle of event-entity
set {_spe} to normal length of {_velo}

#トロッコの最高速度を取得
set {_max} to max minecart speed of vehicle of event-entity

#エネルギー>最高速度なら、最高速度が現在速度
#エネルギー<最高速度なら、エネルギーが現在速度
if {_spe} is more than {_max}:
set {_spe} to {_max}

#速度0.5m/tick以上なら降車不可
if {_spe} is more than 0.5:
cancel event
最終的にこんな感じでできました!ありがとうございました! ちなみに、エンティティ名は「regular minecart」でいけました。TrainCartsのプラグインの影響があるのか、バニラでこれなのかは分かりません。
月猫ch
月猫ch2w ago
if {_spe} is more than {_max}:
set {_spe} to {_max}
if {_spe} is more than {_max}:
set {_spe} to {_max}
ここは
set {_spe} to min({_max},{_spe})
set {_spe} to min({_max},{_spe})
でいいとおもう
ぎまっち
ぎまっちOP2w ago
このように変更してできました!ありがとうございます

Did you find this page helpful?