Solved kdr leaderboard

  • Welcome to skUnity!

    Welcome to skUnity! This is a forum where members of the Skript community can communicate and interact. Skript Resource Creators can post their Resources for all to see and use.

    If you haven't done so already, feel free to join our official Discord server to expand your level of interaction with the community!

    Now, what are you waiting for? Join the community now!

  • LOOKING FOR A VERSION OF SKRIPT?

    You can always check out skUnity Downloads for downloads and any other information about Skript!

Plum

Member
Oct 8, 2023
4
0
1
I have code with a few problems.
1: "if loop-value is greater than 10" gives error There's no loop that matches 'loop-index is greater than 10'
2: if one persons kdr is 5 and another is 10, 5 is first because it just thinks "5>1" not "5>10"

code_language.skript:
command /topkdr:
  trigger:
    delete {leaderboard::*}
    delete {leaderboard2::*}
    delete {_sortinglist::*}
    delete {_invertedList::*}
    loop {uuidofjoinedplayers::*}:
      if {deaths::%loop-index%} is not 0:
        set {leaderboard::%loop-index%} to {kills::%loop-index%}/{deaths::%loop-index%}
    #send "&3---------------------------" to ops
    #loop {leaderboard::*}:
      #send "%{kdr::uuidname%loop-index%}%: %{leaderboard::%loop-index%}%" to ops
    #send "&3---------------------------" to ops
    loop {leaderboard::*}:
      set {leaderboard2::%loop-index%} to "%{leaderboard::%loop-index%}%  &e»&r  %{kdr::uuidname%loop-index%}%"
    set {_sortinglist::*} to sorted {leaderboard2::*}
    set {_invertedList::*} to reversed {_sortinglist::*}
    send "&3---------------------------" to ops
    loop {_invertedList::*}:
      if loop-index is greater than 10:
        send "&c&l%loop-index%:&r         %{_invertedList::%loop-index%}%" to ops
      else:
        send "&c&l%loop-index%:&r          %{_invertedList::%loop-index%}%" to ops
    send "&3---------------------------" to ops
 
code_language.skript:
command /topkdr:
  trigger:
    if arg-1 is not set:
      set {kdr::page.%player%} to 1
    else:
      set {kdr::page.%player%} to arg-1
    delete {leaderboard::*}
    delete {leaderboard2::*}
    delete {_sortinglist::*}
    delete {_invertedList::*}
    loop {uuidofjoinedplayers::*}:
      if {deaths::%loop-index%} is not 0:
        if {kills::%loop-index%}/{deaths::%loop-index%} is not 0:
          set {leaderboard::%loop-index%} to {kills::%loop-index%}/{deaths::%loop-index%}
          #send "%{leaderboard::%loop-index%}%"
    #send "&3---------------------------" to ops
    #loop {leaderboard::*}:
      #send "%{kdr::uuidname%loop-index%}%: %{leaderboard::%loop-index%}%" to ops
    #send "&3---------------------------" to ops
   
    loop {leaderboard::*}:
      set {leaderboard2::%round({leaderboard::%loop-index%} * 100)%} to "%{kdr::uuidname%loop-index%}%  &e»&r  %{leaderboard::%loop-index%}%"
    set {_invertedList::*} to reversed {leaderboard2::*}
    #loop {_sortinglist::*}:
    #  set {_current} to loop-index parsed as int - 1
    #  add {_sortinglist::%size of {_sortinglist::*} - {_current}%} to {_invertedList::*}
    send "&3---------------------------" to ops
    loop {_invertedList::*}:
      if loop-index is greater than 10:
        send "&c&l%loop-index%:&r       %{_invertedList::%loop-index%}%" to ops
      else:
        send "&c&l%loop-index%:&r        %{_invertedList::%loop-index%}%" to ops
    send "&3---------------------------" to ops

This code fixes one problem. i still don't know how to fix the "if loop-index is greater than 10:" or how to make pages
 
This script has what you need: https://forums.skunity.com/resources/mirrorutils.706/
Code:
loop top 10 elements of {kills::*} as "<index>":
  add 1 to {_}
  send "TOP %{_}%: uuid: %loop-value% kills: %{kills::%loop-value%}%"
This is the fastest sorting solution available in Skript.

If you want to do it without any addons, then you can do it like this:
loop {kills::*}:
set {_sort::%loop-value%} to loop-index

then get last 10 elements of {_sort::*}
 
i found another working way
code_language.skript:
command /topkdr [<number>]:
  description: Shows the players with the best kdr.
  usage: /topkdr <page>
  aliases: /kdrtop, /kdrleaderboard
  trigger:
    if arg-1 is not set:
      set {kdr::page.%player%} to 1
    else:
      set {kdr::page.%player%} to arg-1
    delete {leaderboard::*}
    delete {leaderboard2::*}
    delete {_sortinglist::*}
    delete {_invertedList::*}
    loop {uuidofjoinedplayers::*}:
      if {deaths::%loop-index%} is not 0:
        if {kills::%loop-index%}/{deaths::%loop-index%} is not 0:
          set {leaderboard::%loop-index%} to {kills::%loop-index%}/{deaths::%loop-index%}
          #send "%{leaderboard::%loop-index%}%"
    #send "&3---------------------------" to ops
    #loop {leaderboard::*}:
      #send "%{kdr::uuidname%loop-index%}%: %{leaderboard::%loop-index%}%" to ops
    #send "&3---------------------------" to ops
    
    loop {leaderboard::*}:
      set {leaderboard2::%round({leaderboard::%loop-index%} * 100)%} to "%{kdr::uuidname%loop-index%}%  &e»&r  %{leaderboard::%loop-index%}%"
    set {_invertedList::*} to reversed {leaderboard2::*}
    #loop {_sortinglist::*}:
    #  set {_current} to loop-index parsed as int - 1
    #  add {_sortinglist::%size of {_sortinglist::*} - {_current}%} to {_invertedList::*}
    send "&3---------------------------" to player
    loop {_invertedList::*}:
      set {kdr::pagemax.%player%} to {kdr::page.%player%}*15
      set {kdr::pagemin.%player%} to ({kdr::page.%player%}*15)-15
      #send "%loop-index parsed as integer%"
      if loop-index parsed as integer <= {kdr::pagemax.%player%}:
        if loop-index parsed as integer >= {kdr::pagemin.%player%}:
          if loop-index parsed as integer >= 10:
            send "&c&l%loop-index%:&r      %{_invertedList::%loop-index%}%" to player
          else:
            send "&c&l%loop-index%:&r        %{_invertedList::%loop-index%}%" to player
    send "&3---------------------------" to player