Top Points (Referral System)

  • 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 comminuty!

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

ShaneBee

Supporter +
Addon Developer
Sep 7, 2017
2,248
241
73
Vancouver, Canada
Category: Skript

Suggested name: no name required as this will only be a small section of my actual Skript

What I want:
I have created a referral system (which works good) But i want to be able to run a command where it'll show a list of the top 10 players with their number of referral points.
ex: a player runs the command /refer top, and it would return:
REFERRAL TOP PLAYERS
Player1 - 15 points
Player2 - 8 points
Player3 - 5 points
Player4 - 4 points

So far I have the referral system set up, that when a player earns a referral point, it pops it into a variable:
{refer.%player%.points.lifetime}

Now I just need to figure out a way for it to return a list of the top 10 players and their referral points in order descending from the highest number of points.


Ideas for commands:
command is already created, i just need what would run after the trigger

Ideas for permissions:
no need for permissions (i can add myself later if need be)

When I'd like it by: Within the next 24 hours would be nice, if not, I will wait.
 
it would be easier if you would have used a list variable {referrals::%player%}
 
code_language.skript:
function sortHighestToLowest(indexes: strings, values: objects) :: strings:
    set {_size} to size of {_values::*}
    loop {_size} times:
        loop {_size} - 1 times:
            set {_value1} to {_values::%loop-number-2%}
            set {_value2} to {_values::%loop-number-2 + 1%}
            {_value1} is less than {_value2}
            set {_index1} to {_indexes::%loop-number-2%}
            set {_indexes::%loop-number-2%} to {_indexes::%loop-number-2 + 1%}
            set {_values::%loop-number-2%} to {_value2}
            set {_indexes::%loop-number-2 + 1%} to {_index1}
            set {_values::%loop-number-2 + 1%} to {_value1}
        remove 1 from {_size}
    return {_indexes::*}

command /refertop [<offline player>]:
    trigger:
        set {referral::*} to sortHighestToLowest(all indexes of {referrals::*}, {referrals::*})
        send ""
        send "&7&m-----------&r &b&lReferral Top Players &7&m-----------&r"
        send ""
        loop {referral::*}:
            set {_loop-value} to "%loop-value%" parsed as offlineplayer
            send "&e%loop-index%. &f&l%{_loop-value}% &7- &bAmount &a%{refferals::%loop-value%}%"
        send ""
        send "&7&m-------------------------------------&r"
        send ""
[doublepost=1520091911,1520091454][/doublepost]
code_language.skript:
function sortHighestToLowest(indexes: strings, values: objects) :: strings:
    set {_size} to size of {_values::*}
    loop {_size} times:
        loop {_size} - 1 times:
            set {_value1} to {_values::%loop-number-2%}
            set {_value2} to {_values::%loop-number-2 + 1%}
            {_value1} is less than {_value2}
            set {_index1} to {_indexes::%loop-number-2%}
            set {_indexes::%loop-number-2%} to {_indexes::%loop-number-2 + 1%}
            set {_values::%loop-number-2%} to {_value2}
            set {_indexes::%loop-number-2 + 1%} to {_index1}
            set {_values::%loop-number-2 + 1%} to {_value1}
        remove 1 from {_size}
    return {_indexes::*}

command /refertop [<offline player>]:
    trigger:
        set {referral::*} to sortHighestToLowest(all indexes of {referrals::*}, {referrals::*})
        send ""
        send "&7&m-----------&r &b&lReferral Top Players &7&m-----------&r"
        send ""
        send "&e1. &f&l %{referral::1} parsed as a offlineplayer% &7- &b%{refferals::%{referral::1}%}% &aPoints
        send "&e2. &f&l %{referral::2} parsed as a offlineplayer% &7- &b%{refferals::%{referral::2}%}% &aPoints
        send "&e3. &f&l %{referral::3} parsed as a offlineplayer% &7- &b%{refferals::%{referral::3}%}% &aPoints
        send "&e4. &f&l %{referral::4} parsed as a offlineplayer% &7- &b%{refferals::%{referral::4}%}% &aPoints
        send "&e5. &f&l %{referral::5} parsed as a offlineplayer% &7- &b%{refferals::%{referral::5}%}% &aPoints
        send "&e6. &f&l %{referral::6} parsed as a offlineplayer% &7- &b%{refferals::%{referral::6}%}% &aPoints
        send "&e7. &f&l %{referral::7} parsed as a offlineplayer% &7- &b%{refferals::%{referral::7}%}% &aPoints
        send "&e8. &f&l %{referral::8} parsed as a offlineplayer% &7- &b%{refferals::%{referral::8}%}% &aPoints
        send "&e9. &f&l %{referral::9} parsed as a offlineplayer% &7- &b%{refferals::%{referral::9}%}% &aPoints
        send "&e10. &f&l %{referral::10} parsed as a offlineplayer% &7- &b%{refferals::%{referral::10}%}% &aPoints
        send ""
        send "&7&m-------------------------------------&r"
        send ""
 
Hey @Donut and @TeAm6_AZLIK thank you both for your help.
Donut I know you suggested for me to change to list variables, which i agree, but I always get totally lost on List variables as I do not use them much. I want to use Team's suggestion in my Skript, but I fear of screwing other things up as I have a few variables.
Maybe you can help me re-write my variables?
Here are the variables I am currently using in my Skript, maybe you guys can suggest a better way for me to write my variables and then Ill be able to pop this into my Skript.
Thank you

code_language.skript:
{refer.%player%.points.bal} #Current balance of points available to spend
{refer.%player%.points.lifetime} #Points earned over a lifetime
{refer.%player%.referrals.referralsapproved} #Whether the referral was approved or not
{refer.%player%.referrals.referralswaiting} #how many referrals awaiting approval
{refer.%player%.referrals.uuid::*} #UUID of player
{refer.%player%.referrals.player::*} #Player name
 
Hi! I don't know is this what you need, but lets try.

I found an uploaded recource for toplist, you should read it and test it if it would help with your skript.

https://forums.skunity.com/resources/top10-ranking.162/

Have a nice day!
Hey
Thanks for the response, this is not exactly what I'm looking for as I'm looking for something that will be built into my skript which would refer to the top referrals a player has sent.
But thank you again for taking interest and reaching out, i really appreciate it.