変数の名前に変数を指定できない

{tempredteam}という変数の中に入っているプレイヤーIDのUUIDを指定して変数を作りたく以下のようなコードを書いたのですがエラーが出てしまいます、、、 どなたか解決策がわかる方、教えてくださると大変助かります
set {team.%{tempredteam}'s uuid%} to "red"
set {team.%{tempredteam}'s uuid%} to "red"
環境はPaper1.16.5 skript2.5.3 Skellett v2.0.10 skRayFall v1.9.28 SkQuery v4.1.10 です
47 Replies
soramame_256
soramame_2562w ago
個人的には情報十分だと思ったけどまぁなんのエラーが出るのかは教えてほしいかな 多分unknown expressionかなんかだとは思うけど
PAKOM
PAKOMOP2w ago
すいませんエラー書き忘れてました、、、
soramame_256
soramame_2562w ago
一応確認するんだけどtempredteamはplayer型? 具体的にはloop-playerとかplayerを突っ込んでる?
PAKOM
PAKOMOP2w ago
[Skript] Can't understand this condition/effect: set {team.%{tempred}'s uuid%} to "red" (stealthetreasure.sk, line 377: set {team.%{tempred}'s uuid%} to "red"')
soramame_256
soramame_2562w ago
んー uuid of {tempred} で動かないかな
月猫ch
月猫ch2w ago
まず個人的に思ったのは set {_uuid} to uuid of {tempred} みたいな感じで、無理に一行にせず分けて可読性を上げるべき
soramame_256
soramame_2562w ago
{変数}'s uuidってよくエラー吐くイメージある それはそう
月猫ch
月猫ch2w ago
そのあと、broadcastするなり何なりde uuid が取れてるかをチェック
soramame_256
soramame_2562w ago
あとこれuuid二回
月猫ch
月猫ch2w ago
あ、コピペしてきたからイランのついてたw
PAKOM
PAKOMOP2w ago
なるほど,、、一度皆さんの解決策一つ一つ試してみます! 一度構文全部張ったほうがいいですよね 構文一回全部張りますねすいません情報不足で、、、
set {player} to 0
delete {tempredteam::*}
loop all players:
if {team.%loop-player's uuid%} is not set:
add 1 to {player}
add "%loop-player%" to {tempredteam::*}
wait 1 tick
set {playerhalf} to {player} / 2
loop {playerhalf} times:
set {tempred} to random object out of {tempredteam::*}
command "/team join red %{tempred}%"
set {team.%{tempred}'s uuid%} to "red"
command "/team join blue @a[team=temp]"
loop all players:
if {team.%loop-player's uuid%} is not set:
set {team.%loop-player's uuid%} to "blue"
broadcast "&eチーム分けが完了しました"
set {player} to 0
delete {tempredteam::*}
loop all players:
if {team.%loop-player's uuid%} is not set:
add 1 to {player}
add "%loop-player%" to {tempredteam::*}
wait 1 tick
set {playerhalf} to {player} / 2
loop {playerhalf} times:
set {tempred} to random object out of {tempredteam::*}
command "/team join red %{tempred}%"
set {team.%{tempred}'s uuid%} to "red"
command "/team join blue @a[team=temp]"
loop all players:
if {team.%loop-player's uuid%} is not set:
set {team.%loop-player's uuid%} to "blue"
broadcast "&eチーム分けが完了しました"
soramame_256
soramame_2562w ago
a stringじゃねえか
月猫ch
月猫ch2w ago
一行に複数の構文詰め込んでしまうと それがエラーを吐いたときぱっと見で何が悪いかわからないから 過剰にならない範囲で構文は分けたほうがいいよ 草
soramame_256
soramame_2562w ago
そりゃ無理だ えっと set {_uuid} to {tempred} parsed as player's uuid
月猫ch
月猫ch2w ago
まずstringにして追加しなくてもよくねとは思った
soramame_256
soramame_2562w ago
set {team.%{_uuid}%} to "red" それは思ったけど まぁ何か理由があるんでしょう...
PAKOM
PAKOMOP2w ago
skrayfallの影響で今まで使っていた方法が使えなく少々回りくどい方法をとることになっていまって、、
月猫ch
月猫ch2w ago
カッコを付けて可読性を上げろおじさん :paripi: < set {_uuid} to ({tempred} parsed as player)'s uuid カッコを付けてクレメンス
soramame_256
soramame_2562w ago
そもそもがグローバル変数だからtempならローカル変数にしろ!とか.じゃなくて::使えとかいろいろ突っ込みたい気持ちはあるけど そこらへんは質問と関係がないので無視してもらってもいい
月猫ch
月猫ch2w ago
player単位で変数が増えることになるので 関係なくとも ::に関しては指摘したほうがいいと思うゾ
PAKOM
PAKOMOP2w ago
ローカル変数ってやはり重要なのでしょうか、、? 最近始めたばかりで分からず。。。
soramame_256
soramame_2562w ago
https://discord.com/channels/545926404785569793/1306087288308105266 ここら辺参照してもらえると まぁローカル変数については書いてないんだけど 要するに明示的に削除するまでサーバーに一生残るからデータ容量増えてだるいよーっていう
PAKOM
PAKOMOP2w ago
なるほどそういうことか、、、 ありがとうございます! エラーも無事クリアできました!!
soramame_256
soramame_2562w ago
👍
PAKOM
PAKOMOP2w ago
丁寧に教えてくださりありがとうございました!!
月猫ch
月猫ch2w ago
ちょttttっとまってくれ おせっかいなおじさんからもう一個指摘させてくれ
PAKOM
PAKOMOP2w ago
ありがとうございます
月猫ch
月猫ch2w ago
よく見るあれなんだけど
PAKOM
PAKOMOP2w ago
はい
月猫ch
月猫ch2w ago
{NAME.%状況に応じて変わる部分%} こういう命名、やめたほうがいい 今回の {team.%loop-player's uuid%} これもそれに該当する
soramame_256
soramame_2562w ago
https://discord.com/channels/545926404785569793/1306426957948387379/1306437821439152210 これの何に使うの?っての参照してもらえると
PAKOM
PAKOMOP2w ago
さっきおっしゃっていた各プレイヤーごとに情報が増えるからでしょうか?
soramame_256
soramame_2562w ago
んと 情報が増えるのはリスト変数使っても同じなんだけど .だといちいち変数名指定しないといけないんだよね それだと冗長だし面倒だしって感じで その点リストだと clear {team::*}で全部消せるから 楽だし管理しやすいしお得
PAKOM
PAKOMOP2w ago
あーなるほど、、、 今回の場合だと.使わずに {tempred}という変数に登録されたIDを{redteam::}のようなリスト変数に登録して ``` loop {redteam::}: if "%player%" contains ``` のような形で呼び起せば管理も楽だしっていうことで会っていますかね?
soramame_256
soramame_2562w ago
なぜloopが出てきたのかよくわからなかったけど まぁ今までのskriptの構造変えていいならそれがベストかも 構造変えないならそのまま{team::なんちゃら}にする形で それなら
loop {team::*}:
loop-value is "red"
message "%loop-index parsed as player%" # uuid->playerのparse
loop {team::*}:
loop-value is "red"
message "%loop-index parsed as player%" # uuid->playerのparse
みたいな感じでredチーム全員出せたりする
PAKOM
PAKOMOP2w ago
なるほどです、、、!
月猫ch
月猫ch2w ago
全てのデータを条件分岐でチェックする場合 - {tempred.%PLAYER UUID%} の命名の場合
if {tempred.some_playername} is SOMETHING:
if {tempred.SFbzdhzer} is SOMETHING:
if {tempred.Sgzdryrtj} is SOMETHING:
・・・
if {tempred.bdrgzfjrty} is SOMETHING:
if {tempred.some_playername} is SOMETHING:
if {tempred.SFbzdhzer} is SOMETHING:
if {tempred.Sgzdryrtj} is SOMETHING:
・・・
if {tempred.bdrgzfjrty} is SOMETHING:
- {tempred::%PLAYER UUID%} の命名の場合
loop {tempred::*}:
if loop-value is SOMETHING:
loop {tempred::*}:
if loop-value is SOMETHING:
全てのデータを消す方法 - {tempred.%PLAYER UUID%} の命名の場合
delete {tempred.some_playername}
delete {tempred.SFbzdhzer}
delete {tempred.Sgzdryrtj}
・・・
delete {tempred.bdrgzfjrty}
delete {tempred.some_playername}
delete {tempred.SFbzdhzer}
delete {tempred.Sgzdryrtj}
・・・
delete {tempred.bdrgzfjrty}
- {tempred::%PLAYER UUID%} の命名の場合
delete {tempred::*}
delete {tempred::*}
soramame_256
soramame_2562w ago
これ直感的にわかりやすい
月猫ch
月猫ch2w ago
この命名のせいで120万個の変数を野放しにした男だ 面構えと必死度が違う
PAKOM
PAKOMOP2w ago
めっちゃわかりやすい、、、 ありがとうございます!
soramame_256
soramame_2562w ago
超昔に書いたskriptのvariable.csv 今見ると汚い
No description
月猫ch
月猫ch2w ago
気軽にリスト変数を使おう(戒め (120万敗
PAKOM
PAKOMOP2w ago
こちらのほうが直感的にわかりやすいですし修正もしやすいと思うのでこちらに変更してみます 大変助かりました! これからもskript頑張りたいと思います‼
月猫ch
月猫ch2w ago
skriptはみんななぜかあきらめていって悲しいから頑張ってくれ
soramame_256
soramame_2562w ago
諦めるというかjavaのほうが楽というかなんというか...
月猫ch
月猫ch2w ago
残当
Want results from more Discord servers?
Add your server