Jump to content

EXP, Level System Bug


Easy987

Recommended Posts

Hi guys. I'm made this EXP,Level system. If a player is kill an another player gain + 5 exp. In the script in top in the table define the needed exp to next level.

The bug is start from a player spawn. The script writed if a player spawn show gui-s and set gui texts. Now, my and 1 friend started one local server. I'm spawned and i'm see the guis. My friend is spawned and he not see the guis.

Clientside script:

local lblLevel 
local lblPont 
local lblExp 
  
EXPTable = { 
    szint2 = {5}, 
    szint3 = {10}, 
    szint4 = {15}, 
    szint5 = {20}, 
    szint6 = {25}, 
    szint7 = {30}, 
    szint8 = {35}, 
    szint9 = {40}, 
    szint10 = {45}, 
} 
  
lblLevel = guiCreateLabel(1432, 124, 163, 16, "Szint: 100000", false) 
guiSetFont(lblLevel, "default-bold-small") 
guiLabelSetColor(lblLevel, 250, 0, 0) 
  
  
lblPont = guiCreateLabel(1432, 175, 163, 15, "Z-Pontok: 9999", false) 
guiSetFont(lblPont, "default-bold-small") 
guiLabelSetColor(lblPont, 248, 106, 2) 
  
  
lblExp = guiCreateLabel(1432, 150, 163, 15, "EXP: 500", false) 
guiSetFont(lblExp, "default-bold-small") 
guiLabelSetColor(lblExp, 56, 252, 240)     
   
function Wasting () 
        local exp = getElementData(source, "EXP") 
        local szint = getElementData(source, "Szint") 
        local zpont = getElementData(source, "Zpont") 
        local szintexp = 0 
        if szint == 1 then 
            szintexp = EXPTable.szint2[1] 
        elseif szint == 2 then 
            szintexp = EXPTable.szint3[1] 
        elseif szint == 3 then 
            szintexp = EXPTable.szint4[1] 
        elseif szint == 4 then 
            szintexp = EXPTable.szint5[1] 
        elseif szint == 5 then 
            szintexp = EXPTable.szint6[1] 
        elseif szint == 6 then 
            szintexp = EXPTable.szint7[1] 
        elseif szint == 7 then 
            szintexp = EXPTable.szint8[1] 
        elseif szint == 8 then 
            szintexp = EXPTable.szint9[1] 
        elseif szint == 9 then 
            szintexp = EXPTable.szint9[1] 
        elseif szint == 10 then 
            szintexp = 99999 
        end 
        guiSetVisible (lblLevel, true ) 
        guiSetVisible (lblPont, true ) 
        guiSetVisible (lblExp, true ) 
        guiSetText(lblLevel, "Szint: " .. tonumber(szint)) 
        guiSetText(lblPont, "Z-Pontok: " .. tonumber(zpont)) 
        guiSetText(lblExp, "EXP: " .. tonumber(exp) .. "/" .. tonumber(szintexp)) 
    end 
addEventHandler ( "onClientPlayerWasted", getRootElement(), Wasting ) 
     
addEventHandler("onClientPlayerWasted", getLocalPlayer(), 
    function( killer, weapon, bodypart ) 
        local expasd = getElementData(killer, "EXP") 
        local exp = tonumber(expasd) 
        local szint = getElementData(killer, "Szint") 
        local ujexp = exp + 5 
        setElementData(killer, "EXP", ujexp) 
        guiSetText(lblExp, "EXP: " .. ujexp .. "/" .. szintexp) 
        if szint == 1 then 
            if exp == EXPTable.szint2[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 2) 
                guiSetText(lblLevel, "Szint: 2") 
            end 
        elseif szint == 2 then 
            if exp == EXPTable.szint3[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 3) 
                guiSetText(lblLevel, "Szint: 3") 
            end 
        elseif szint == 4 then 
            if exp == EXPTable.szint4[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 4) 
                guiSetText(lblLevel, "Szint: 4") 
            end 
        elseif szint == 5 then 
            if exp == EXPTable.szint5[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 5) 
                guiSetText(lblLevel, "Szint: 5") 
            end 
        elseif szint == 6 then 
            if exp == EXPTable.szint6[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 6) 
                guiSetText(lblLevel, "Szint: 6") 
            end 
        elseif szint == 7 then 
            if exp == EXPTable.szint7[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 7) 
                guiSetText(lblLevel, "Szint: 7") 
            end 
        elseif szint == 8 then 
            if exp == EXPTable.szint8[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 
                guiSetText(lblLevel, "Szint: 8") 
            end 
        elseif szint == 9 then 
            if exp == EXPTable.szint9[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 9) 
                guiSetText(lblLevel, "Szint: 9") 
            end 
        elseif szint == 10 then 
            if exp == EXPTable.szint10[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 10) 
                guiSetText(lblLevel, "Szint: 10") 
            end 
        end 
    end 
) 

ServerSide:

addEventHandler("onPlayerLogin", getRootElement(), 
    function() 
        if getElementData(source, "Csatlakozott") == false then 
            setElementData(source, "Csatlakozott", true) 
            setElementData(source, "EXP", 0) 
            setElementData(source, "Szint", 1) 
            setElementData(source, "Zpont", 0) 
        end 
    end 
) 

Sorry for bad english.

Link to comment
  • Moderators
What is wrong or can be better:

  • - You are using 2 times 1 events of a kind, it can be done with one root event and compare source with the localPlayer.
    - Using the tables at a very strange way but it works, it fails on the other hand.
    - setElementData(killer, "EXP", 0) at client side of other players, this should be done serverside.
    - Important elementdata will be stored with delay of player pings, the update of the gui text will always be updated with old values.

Link to comment
  • Moderators

That is lots of time my friend, I just told you what is wrong.

If you can't speak/write English then you should ask this at your own section.

Because fixing cost time, when I over see a bug it would be a waste of my time cause of the bad communication.

"I'm very very bad english."

Are you 'bad' English? O_o

I still don't understand how you can write English code when your English is that bad.

Link to comment

I'm edited the code. I'm write in the script the saving system. The bug is this if the player spawn get this error:

ERROR: escoresystem/ss_client.lua:71: attempt to concatenate a nil value

71. line: guiSetText(lblLevel, "Szint: " .. tonumber(szint))

The code:

Clientside:

local lblLevel 
local lblPont 
local lblExp 
  
local player = getLocalPlayer() 
EXPTable = { 
    szint2 = {5}, 
    szint3 = {10}, 
    szint4 = {15}, 
    szint5 = {20}, 
    szint6 = {25}, 
    szint7 = {30}, 
    szint8 = {35}, 
    szint9 = {40}, 
    szint10 = {45}, 
} 
  
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()),  
    function () 
        lblLevel = guiCreateLabel(1432, 124, 163, 16, "Szint: 100000", false) 
        guiSetFont(lblLevel, "default-bold-small") 
        guiLabelSetColor(lblLevel, 250, 0, 0) 
  
  
        lblPont = guiCreateLabel(1432, 175, 163, 15, "Z-Pontok: 9999", false) 
        guiSetFont(lblPont, "default-bold-small") 
        guiLabelSetColor(lblPont, 248, 106, 2) 
  
  
        lblExp = guiCreateLabel(1432, 150, 163, 15, "EXP: 500", false) 
        guiSetFont(lblExp, "default-bold-small") 
        guiLabelSetColor(lblExp, 56, 252, 240)     
        guiSetVisible (lblLevel, false ) 
        guiSetVisible (lblPont, false ) 
        guiSetVisible (lblExp, false ) 
end 
) 
  
addEventHandler("onClientPlayerSpawn", getLocalPlayer(), 
     
    function() 
        local exp = getElementData(source, "EXP") 
        local szint = getElementData(source, "Szint") 
        local zpont = getElementData(source, "Zpont") 
        local szintexp = 0 
        if szint == 1 then 
            szintexp = EXPTable.szint2[1] 
        elseif szint == 2 then 
            szintexp = EXPTable.szint3[1] 
        elseif szint == 3 then 
            szintexp = EXPTable.szint4[1] 
        elseif szint == 4 then 
            szintexp = EXPTable.szint5[1] 
        elseif szint == 5 then 
            szintexp = EXPTable.szint6[1] 
        elseif szint == 6 then 
            szintexp = EXPTable.szint7[1] 
        elseif szint == 7 then 
            szintexp = EXPTable.szint8[1] 
        elseif szint == 8 then 
            szintexp = EXPTable.szint9[1] 
        elseif szint == 9 then 
            szintexp = EXPTable.szint9[1] 
        elseif szint == 10 then 
            szintexp = 99999 
        end 
        guiSetVisible (lblLevel, true ) 
        setElementData(source,"SzintEXP", szintexp) 
        guiSetVisible (lblPont, true ) 
        guiSetVisible (lblExp, true ) 
        guiSetText(lblLevel, "Szint: " .. tonumber(szint)) 
        guiSetText(lblPont, "Z-Pontok: " .. tonumber(zpont)) 
        guiSetText(lblExp, "EXP: " .. tonumber(exp) .. "/" .. tonumber(szintexp)) 
    end 
) 
     
addEventHandler("onClientPlayerWasted", getRootElement(), 
    function( killer, weapon, bodypart ) 
        local exp = getElementData(killer, "EXP") 
        local szint = getElementData(killer, "Szint") 
        local szintexp = getElementData(killer, "SzintEXP") 
        local ujexp = exp + 5 
        setElementData(killer, "EXP", ujexp) 
        guiSetText(lblExp, "EXP: " .. tonumber(ujexp) .. "/" .. tonumber(szintexp)) 
        if szint == 1 then 
            if exp == EXPTable.szint2[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 2) 
                guiSetText(lblLevel, "Szint: 2") 
            end 
        elseif szint == 2 then 
            if exp == EXPTable.szint3[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 3) 
                guiSetText(lblLevel, "Szint: 3") 
            end 
        elseif szint == 4 then 
            if exp == EXPTable.szint4[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 4) 
                guiSetText(lblLevel, "Szint: 4") 
            end 
        elseif szint == 5 then 
            if exp == EXPTable.szint5[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 5) 
                guiSetText(lblLevel, "Szint: 5") 
            end 
        elseif szint == 6 then 
            if exp == EXPTable.szint6[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 6) 
                guiSetText(lblLevel, "Szint: 6") 
            end 
        elseif szint == 7 then 
            if exp == EXPTable.szint7[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 7) 
                guiSetText(lblLevel, "Szint: 7") 
            end 
        elseif szint == 8 then 
            if exp == EXPTable.szint8[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 
                guiSetText(lblLevel, "Szint: 8") 
            end 
        elseif szint == 9 then 
            if exp == EXPTable.szint9[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 9) 
                guiSetText(lblLevel, "Szint: 9") 
            end 
        elseif szint == 10 then 
            if exp == EXPTable.szint10[1] then 
                setElementData(killer, "EXP", 0) 
                setElementData(killer, "Szint", 10) 
                guiSetText(lblLevel, "Szint: 10") 
            end 
        end 
    end 
) 
  
function setLevel ( ) 
    setElementData(player, "Szint", 5) 
    setElementData(player, "EXP", 19) 
    setElementData(player, "Zpont", 98) 
    local exp = getElementData(player, "EXP") 
    local szint = getElementData(player, "Szint") 
    local zpont = getElementData(player, "Zpont") 
    guiSetText(lblLevel, "Szint: " .. tonumber(szint)) 
    guiSetText(lblPont, "Z-Pontok: " .. tonumber(zpont)) 
    guiSetText(lblExp, "EXP: " .. tonumber(exp)) 
end 
addCommandHandler("setlevel", setLevel) 

Serverside:

addEventHandler("onPlayerLogin", getRootElement(), 
    function() 
        local playeraccount = getPlayerAccount ( source ) 
        local joined = getAccountData(playeraccount, "es.joined") 
        if joined == false then 
            setAccountData(playeraccount, "es.joined", true) 
            setElementData(source, "EXP", 0) 
            setElementData(source, "Szint", 1) 
            setElementData(source, "Zpont", 0) 
        else 
            local playeraccount = getplayeraccount ( source ) 
            local exp = getAccountData(playeraccount, "es.exp") 
            local szint = getAccountData(playeraccount, "es.szint") 
            local zpont = getAccountData(playeraccount, "es.zpont") 
            setElementData(source, "EXP", exp) 
            setElementData(source, "Szint", szint) 
            setElementData(source, "Zpont", zpont) 
        end 
    end 
) 
addEventHandler("onPlayerQuit", getRootElement(), 
    function() 
        local exp = getElementData(source, "EXP") 
        local szint = getElementData(source, "Szint") 
        local zpont = getElementData(source, "Zpont") 
        local playeraccount = getPlayerAccount ( source ) 
         
        setAccountData (playeraccount, "es.exp", exp) 
        setAccountData (playeraccount, "es.szint", szint) 
        setAccountData (playeraccount, "es.zpont", zpont) 
    end 
) 

Postscript: If I'm used the /setlevel command every function works.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...