top10ランキングをつくりたい

リスト変数内の数値をUUIDと紐づけたまま降順に並び替えたい
20 Replies
ふぁたおくん
ふぁたおくんOP16mo ago
command /ranking:
permission: *
trigger:
set {_sorted::*} to sorted {Catching::Hit::Success::*}
loop {Catching::Hit::Success::*}:
set {_reversed::%loop-index%} to last element of {_sorted::*}
remove {_sorted::%loop-index%} from {_sorted::*}

command /top10:
permission: *
trigger:
if {BugRankingLoc} is set:
delete holo {BugHolo}
set {BugHolo} to new hologram at {BugRankingLoc}
add text "&6&l===&a&l虫取りランキング&6&l====" to holo {BugHolo} in line 0
loop {Reversed::*}:
add 1 to {_rank}
set {_num} to {Reversed::%loop-index%}
set {_player} to loop-index parsed as player
add text "&7%{_player}% - %{_num}%回" to holo {BugHolo} in line {_rank}
if {_rank} > 9:
stop
add text "&6&l========================" to holo {BugHolo} in line {_rank} + 1
else:
send "&cホログラムを表示する座標が設定されていません。"
command /ranking:
permission: *
trigger:
set {_sorted::*} to sorted {Catching::Hit::Success::*}
loop {Catching::Hit::Success::*}:
set {_reversed::%loop-index%} to last element of {_sorted::*}
remove {_sorted::%loop-index%} from {_sorted::*}

command /top10:
permission: *
trigger:
if {BugRankingLoc} is set:
delete holo {BugHolo}
set {BugHolo} to new hologram at {BugRankingLoc}
add text "&6&l===&a&l虫取りランキング&6&l====" to holo {BugHolo} in line 0
loop {Reversed::*}:
add 1 to {_rank}
set {_num} to {Reversed::%loop-index%}
set {_player} to loop-index parsed as player
add text "&7%{_player}% - %{_num}%回" to holo {BugHolo} in line {_rank}
if {_rank} > 9:
stop
add text "&6&l========================" to holo {BugHolo} in line {_rank} + 1
else:
send "&cホログラムを表示する座標が設定されていません。"
2人でテストしてみたら両者2回から動かなくなりました
mirageeeeeeeeeeeeeeeeeeeeeeeeeee
rankingコマンドどうなってるんやこれ なにも意味成して無くないか
ふぁたおくん
ふぁたおくんOP16mo ago
とおもいます ネットで調べて海外の人が書いてたんでとりあえずパクってみたやつ
yukkina
yukkina16mo ago
これって どういう変数構造してるの? {hoge::%uuid%}→数値 じゃ無さそうだよね いや合ってるか
akon
akon16mo ago
ぼくは値が更新されるたびに自動的に並び替えられるような仕組みをつくるべきだと思います じゃないとランキングを取得するたびに毎回並び替え処理が発生します
yukkina
yukkina16mo ago
sortすればいいな?
akon
akon16mo ago
おそらくsort使わずに自前で実装したほうがいい 減ったら自分より下の奴と値を比較する
yukkina
yukkina16mo ago
スマホで打ってみてるけど あー
akon
akon16mo ago
増えたら自分より上と比較
yukkina
yukkina16mo ago
それありだな 毎回並び替え実装のつもりで書いてたわ 並び替え実装重いかな 重いわな
ふぁたおくん
ふぁたおくんOP16mo ago
虫取りっていう要素があって、虫捕ったら{Catching::Hit::Success::%uuid of player%}に1加算される からへることはないとおもいます
akon
akon16mo ago
とりあえず加算用の関数を作っておいて変数変えるときは全部そっからやる その中で並び替えを行うようにしましょう
ふぁたおくん
ふぁたおくんOP15mo ago
しばらく考えてみたけど全体を並び替えるものしか思いつかなかった
akon
akon15mo ago
nandeya
ふぁたおくん
ふぁたおくんOP15mo ago
減ったら自分より下だったものより減ったか、増えたら自分より上だったものより増えたか けんちするのって どうする
akon
akon15mo ago
そもそも常に順番が保持されるようにしておく そのうえで更新時に順番も一緒に更新する
ふぁたおくん
ふぁたおくんOP15mo ago
1位はこの人で〇回、2位はこの人で〇回って保持しといて それを どーすん
akon
akon15mo ago
2位を更新するときに自分より上のやつ全員と更新後の値を比較して順位を変える
unnnnnnnnnnn
unnnnnnnnnnn15mo ago
わからなかったらpriority queueで検索
akon
akon15mo ago
記録の変数自体はindexが数字のリスト変数に格納しておいて それとは別にプレイヤーから順位を取得できるリスト変数も作っておく(その逆も) 記録にアクセスするには順位を取得してから記録の変数から取り出す 記録更新時には順位を取得して自分より上の順位の記録と比較 順位が入れ替わる場所だけ更新 もう少し改善すれば多分比較回数減らせる まぁskriptでツリー構造とかめんどくさいからこれで十分でしょ
Want results from more Discord servers?
Add your server