Mathias Lui Posted July 17, 2016 Posted July 17, 2016 Hi, I wanted to make a script, which saves the money from a player, if he logs out or leaves, and then sets the money to 0. When he logs in again he should get the money back. With my first method it worked. I just saved the money amount in a text file. Now, I tried it with setAccountData, but there is one little Error. My first (working) script: function playerQuit() local playeracc = getPlayerAccount( source ) if (playeracc) and not isGuestAccount(playeracc) then local playername = getPlayerName( source ) local playercash = tostring(getPlayerMoney( source )) local fileHandle = fileCreate( "bankaccounts/"..playername..".txt" ) if fileHandle then fileWrite( fileHandle, playercash ) fileClose( fileHandle ) end end setPlayerMoney( source, 0 , true ) end function playerLogin() local playername = getPlayerName( source ) local playeracc = getPlayerAccount( source ) if (playeracc) and not isGuestAccount(playeracc) then local playername = getPlayerName( source ) local fileHandle = fileOpen( "bankaccounts/"..playername..".txt" ) local filesize = fileGetSize( fileHandle ) local money = fileRead( fileHandle, filesize ) setPlayerMoney( source, tonumber(money), true ) fileClose( fileHandle ) end end addEventHandler( "onPlayerLogin", getRootElement(), playerLogin ) addEventHandler( "onPlayerQuit", getRootElement(), playerQuit ) addEventHandler( "onPlayerLogout", getRootElement(), playerQuit ) my 2nd (not working) script: function playerQuit() local playeracc = getPlayerAccount( source ) if (playeracc) and not isGuestAccount(playeracc) then local playername = getPlayerName( source ) local playercash = getPlayerMoney( source ) setAccountData(playeracc, "cash", playercash) end setPlayerMoney( source, 0 , true ) end function playerLogin() local playername = getPlayerName( source ) local playeracc = getPlayerAccount( source ) if (playeracc) and not isGuestAccount(playeracc) then local playername = getPlayerName( source ) local money = getAccountData(playeracc, "cash") setPlayerMoney( source, tonumber(money), true ) end end addEventHandler( "onPlayerLogin", getRootElement(), playerLogin ) addEventHandler( "onPlayerQuit", getRootElement(), playerQuit ) addEventHandler( "onPlayerLogout", getRootElement(), playerQuit ) The error is in line 18. It says, it setPlayerMoney, expected a number in argument 2, but got nil. But I saved it as a number, didn't I? And also I wrote tonumber. would appreciate help. Mathias Lui
Captain Cody Posted July 17, 2016 Posted July 17, 2016 function playerQuit() local playeracc = getPlayerAccount( source ) if (playeracc) and not isGuestAccount(playeracc) then --local playername = getPlayerName( source ) local playercash = tonumber(getPlayerMoney( source )) setAccountData(playeracc, "cash", playercash) end setPlayerMoney(source,0) end function playerLogin() local playername = getPlayerName( source ) local playeracc = getPlayerAccount( source ) if (playeracc) and not isGuestAccount(playeracc) then local money = getAccountData(playeracc, "cash") if money then setPlayerMoney( source, money ) end end end addEventHandler( "onPlayerLogin", getRootElement(), playerLogin ) addEventHandler( "onPlayerQuit", getRootElement(), playerQuit ) addEventHandler( "onPlayerLogout", getRootElement(), playerQuit )
Walid Posted July 17, 2016 Posted July 17, 2016 function playerQuit() local playeracc = getPlayerAccount( source ) if (playeracc) and not isGuestAccount(playeracc) then local playercash = tonumber(getPlayerMoney( source )) setAccountData(playeracc, "cash", playercash) end end addEventHandler( "onPlayerQuit", getRootElement(), playerQuit ) addEventHandler( "onPlayerLogout", getRootElement(), playerQuit ) function playerLogin(_,account) local money = getAccountData(account, "cash") if money then setPlayerMoney(source, tonumber(money)) end end addEventHandler( "onPlayerLogin", getRootElement(), playerLogin )
KariiiM Posted July 17, 2016 Posted July 17, 2016 local playercash = tonumber(getPlayerMoney( source )) I wonder why you set the getPlayerMoney function's return value to number and it returns already an integer value by default. it seems like that, converting a number to a number which makes no sense. tonumber ( 104350 )
Captain Cody Posted July 17, 2016 Posted July 17, 2016 Well yeh wasn't really paying attention there I did that as soon as I woke up and noticed this.
goodiewarrior Posted July 17, 2016 Posted July 17, 2016 function playerQuit() local playeracc = getPlayerAccount( source ) if (playeracc) and not isGuestAccount(playeracc) then --local playername = getPlayerName( source ) local playercash = tonumber(getPlayerMoney( source )) setAccountData(playeracc, "cash", playercash) end setPlayerMoney(source,0) end function playerLogin() local playername = getPlayerName( source ) local playeracc = getPlayerAccount( source ) if (playeracc) and not isGuestAccount(playeracc) then local money = getAccountData(playeracc, "cash") if money then setPlayerMoney( source, money ) end end end addEventHandler( "onPlayerLogin", getRootElement(), playerLogin ) addEventHandler( "onPlayerQuit", getRootElement(), playerQuit ) addEventHandler( "onPlayerLogout", getRootElement(), playerQuit ) He'll surely use the playername for something, so no point of deadlining it in the 1st function... I guess he'll want to make a debug output or something,idk. Basically the code from the poster is good, it hasn't got any error. I think it returns nil because you didn't try it after logging in... But your code is good.
Captain Cody Posted July 17, 2016 Posted July 17, 2016 Well there a few other things I did then just omit out player name. Mine runs a check to see if any thing is saved for player money. Removes a useless playername at bottom, and cleans up a few bits of the code
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