Level Up Message

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

Le4ft

Member
Jun 26, 2023
20
0
1
Hi,
I'm making level system and I need a level up message for every level but I don't know how to do that, because every time I tried something it kept spamming the level up message. Can please someone help me?

This is my code:
code_language.skript:
every 1 seconds:
    loop all players:

        if {bpxp::%loop-player%} is equal to 0:
            set {lvl::%loop-player%} to 1
        if {bpxp::%loop-player%} is greater than sum(15, {prestige::%loop-player%::perc}):
            set {lvl::%loop-player%} to 2
        if {bpxp::%loop-player%} is greater than sum(30, {prestige::%loop-player%::perc}):
            set {lvl::%loop-player%} to 3
        if {bpxp::%loop-player%} is greater than sum(45, {prestige::%loop-player%::perc}):
            set {lvl::%loop-player%} to 4
        if {bpxp::%loop-player%} is greater than sum(60, {prestige::%loop-player%::perc}):
            set {lvl::%loop-player%} to 5
        if {bpxp::%loop-player%} is greater than sum(75, {prestige::%loop-player%::perc}):
            set {lvl::%loop-player%} to 6
        if {bpxp::%loop-player%} is greater than sum(90, {prestige::%loop-player%::perc}):
            set {lvl::%loop-player%} to 7
        if {bpxp::%loop-player%} is greater than sum(105, {prestige::%loop-player%::perc}):
            set {lvl::%loop-player%} to 8
        if {bpxp::%loop-player%} is greater than sum(120, {prestige::%loop-player%::perc}):
            set {lvl::%loop-player%} to 9
        if {bpxp::%loop-player%} is greater than sum(135, {prestige::%loop-player%::perc}):
            set {lvl::%loop-player%} to 10
 
Okay, firstly looping all players every second is unnecessary for this kind of skript. I would recommend putting it into a function. For instance:

Code:
function addxp(p: player, n: num):
   if {bpxp::%{_p}%} is greater than sum({_n}, {prestige::%{{_p}%::perc}):
   add 1 to {lvl::%{_p}

After that, you'll want to an event for giving player xp. For instance, a player mines 5 blocks and gains 10 xp. In which case you'd use the function like: addxp(player, 10). As simple as that. You can also include a message in this function and call it once then the message will be sent once. You never want to loop something many times using Skript like in your current code. It can easily lag your server and it's also really long making it considerably ineffective and hard to read. Functions are a great way to find solutions to adding xp, levels, prestiges, etc with minimal lines and a lot of optimization. Hope this helps!