Easy987 Posted July 31, 2013 Share Posted July 31, 2013 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 IIYAMA Posted July 31, 2013 Moderators Share Posted July 31, 2013 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
Easy987 Posted July 31, 2013 Author Share Posted July 31, 2013 I'm very very bad english. Please fix my code. I'm very thanks. Link to comment
Moderators IIYAMA Posted July 31, 2013 Moderators Share Posted July 31, 2013 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
Easy987 Posted August 1, 2013 Author Share Posted August 1, 2013 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
Castillo Posted August 1, 2013 Share Posted August 1, 2013 "szint" must be returning nil. Link to comment
Easy987 Posted August 2, 2013 Author Share Posted August 2, 2013 I may be empty but why? Link to comment
Castillo Posted August 2, 2013 Share Posted August 2, 2013 Could be that the data is set after the player spawns, which means it will return "nil". Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now