Jump to content

problema con Account Data


Recommended Posts

function SaveLogout () 
    local playeraccount = getAccountName(getPlayerAccount(source)) 
    if (playeraccount) and not isGuestAccount(playeraccount)then 
        local playermoney = getPlayerMoney(source) 
        setAccountData (playeraccount,"vd.money",playermoney) 
        outputChatBox("#00FF00[sAVE SYSTEM] Saved data #FFFFFF'"..playeraccount.."'#00FF00 for your account",source,0,255,0,true) 
         
    end 
end 
function SaveQuit () 
    local playeraccount = getAccountName(getPlayerAccount(source)) 
    if (playeraccount) and not isGuestAccount(playeraccount)then 
        local playermoney = getPlayerMoney(source) 
        setAccountData (playeraccount,"vd.money",playermoney) 
    end 
end 
function SaveJoin (_,playeraccount) 
    if ( playeraccount) then 
        local playermoney = getAccountData(playeraccount,"vd.money") 
        if (playermoney) then 
            outputChatBox("#00FF00[sAVE SYSTEM] Loaded data #FFFFFF'"..playeraccount.."'#00FF00 for your account",source,0,255,0,true) 
            setPlayerMoney(source,playermoney) 
        end 
    end 
end 
  
addEventHandler("onPlayerLogout",root,SaveLogout) 
addEventHandler("onPlayerQuit",root,SaveQuit) 
addEventHandler("onPlayerLogin",root,SaveJoin) 

Errores:

[2014-05-17 13:26:22] ERROR: vD\server.lua:105: attempt to concatenate local 'playeraccount' (a userdata value) 
[2014-05-17 13:26:22] LOGIN: (Admin, Everyone) #FFFFFFV#25FFFFeNaD successfully logged in as 'testServer' (IP: [HIDE]  Serial: [HIDE]) 
[2014-05-17 13:29:32] SHUTDOWN: Got shutdown command from Console (No reason specified) 
[2014-05-17 13:29:32] WARNING: vD\server.lua:96: Bad argument @ 'isGuestAccount' [Expected account at argument 1, got string 'testServer'] 
[2014-05-17 13:29:32] WARNING: vD\server.lua:98: Bad argument @ 'setAccountData' [Expected account at argument 1, got string 'testServer'] 

El error que me interesa es el de "userdata" por que da error? Exactamente que significa eso xD? y que debo hacer al respecto?

Link to comment
Hidden

Ese error se genera porque intentas concadenar una cuenta y no el nombre de esta:

function SaveJoin (_,playeraccount) 
    if ( playeraccount) then 
        local playermoney = getAccountData(playeraccount,"vd.money") 
        if (playermoney) then 
            outputChatBox("#00FF00[sAVE SYSTEM] Loaded data #FFFFFF'"..getAccountName(playeraccount).."'#00FF00 for your account",source,0,255,0,true) 
            setPlayerMoney(source,playermoney) 
        end 
    end 
end 

* En cuanto a los otros errores es el caso contrario, utilizas el nombre de la cuenta y no la cuenta como elemento.

Link to comment
Ese error se genera porque intentas concadenar una cuenta y no el nombre de esta:
function SaveJoin (_,playeraccount) 
    if ( playeraccount) then 
        local playermoney = getAccountData(playeraccount,"vd.money") 
        if (playermoney) then 
            outputChatBox("#00FF00[sAVE SYSTEM] Loaded data #FFFFFF'"..getAccountName(playeraccount).."'#00FF00 for your account",source,0,255,0,true) 
            setPlayerMoney(source,playermoney) 
        end 
    end 
end 

* En cuanto a los otros errores es el caso contrario, utilizas el nombre de la cuenta y no la cuenta como elemento.

Entonces cual es el problema, Es decir, que es que?

en la SaveJoin uso getAccountPlayer?

y en la SaveQuit uso getAccountName?

Me basé en este script:

function onPlayerQuit ( ) 
      -- when a player leaves, store his current money amount in his account data 
      local playeraccount = getPlayerAccount ( source ) 
      if ( playeraccount ) and not isGuestAccount ( playeraccount ) then -- if the player is logged in 
            local playermoney = getPlayerMoney ( source ) -- get the player money 
            setAccountData ( playeraccount, "piraterpg.money", playermoney ) -- save it in his account 
      end 
end 
  
function onPlayerLogin (_, playeraccount ) 
      -- when a player logins, retrieve his money amount from his account data and set it 
      if ( playeraccount ) then 
            local playermoney = getAccountData ( playeraccount, "piraterpg.money" ) 
            -- make sure there was actually a value saved under this key (check if playermoney is not false). 
            -- this will for example not be the case when a player plays the gametype for the first time 
            if ( playermoney ) then 
                  setPlayerMoney ( source, playermoney ) 
            end 
      end 
end 
  
addEventHandler ( "onPlayerQuit", getRootElement ( ), onPlayerQuit ) 
addEventHandler ( "onPlayerLogin", getRootElement ( ), onPlayerLogin ) 
-- Copyright to MTA WIKI 

Cual es la linea 106?
            setPlayerMoney(source,playermoney) 

Link to comment
Hidden
Si te lo explico de ese modo no aprenderías cual es tu error, debes aprender a discriminar si es necesario utilizar una cuenta (elemento) o un nombre de cuenta (string).

A menos que obtenga un elemento cuenta a partir de un nombre de cuenta xD

Link to comment
Hidden
Si te lo explico de ese modo no aprenderías cual es tu error, debes aprender a discriminar si es necesario utilizar una cuenta (elemento) o un nombre de cuenta (string).

A menos que obtenga un elemento cuenta a partir de un nombre de cuenta xD

El problema es el mismo, no discrimina cuando es necesario uno u otro.

Link to comment
Si te lo explico de ese modo no aprenderías cual es tu error, debes aprender a discriminar si es necesario utilizar una cuenta (elemento) o un nombre de cuenta (string).

Tal como e ido testando, y mirando la Wiki y los errores

e solucionado el "Join"

pero ahora viene el problema que no entiendo

Cuando hago /logout, o me salgo, vuelvo a entrar al server, me loggeo y no tengo dinero, es decir, lo que e hecho fue

Al salirme del juego

Loggearme

Darme 1332 de dinero

Salir

Connect to server

Loggearme

Tengo 0 de dinero

Al hacer logout

Loggearme

Darme 1332 de dinero

/logout (Conservo los 1332 al logout)

loggearme

y me pone el dinero en "0"

Es decir, el script me carga el dinero, pero no me lo guarda cuando hago logout o salgo del server, no da ningun error ni nada, por que puede ser? al no haber error, nose cual es el error

edite gran parte del script, Cual es la linea que provoca el error, solo dime eso, @Alex_steel

function SaveLogout () 
    local account = getPlayerAccount(source) 
    if account then 
        local nombredeljugador = getPlayerName(source) 
        local playermoney = getPlayerMoney(source) 
        setAccountData (account,"vd.money",playermoney) 
        outputChatBox("#00FF00[sAVE SYSTEM] Saved data #FFFFFF'"..nombredeljugador.."'#00FF00 for your account",source,0,255,0,true) 
    end 
end 
function SaveQuit () 
    local account = getPlayerAccount(source) 
    if account then 
        local nombredeljugador = getPlayerName(source) 
        local playermoney = getPlayerMoney(source) 
        setAccountData (account,"vd.money",playermoney) 
    end 
end 
function SaveJoin (_,account) 
    local account = getPlayerAccount(source) 
    if account then 
        local playermoney = getAccountData(account,"vd.money") 
        if (playermoney) then 
            local nombredeljugador = getPlayerName(source) 
            outputChatBox("#00FF00[sAVE SYSTEM] Loaded data #FFFFFF"..nombredeljugador.."#00FF00 for your account",source,0,255,0,true) 
            setPlayerMoney(source,playermoney) 
        end 
    end 
end 

Suelta los mensajes pero no el dinero

Link to comment
No da ningun debug cuando logueas?

Alex steel ignora el post, y nadie responde, buena.

Ahora tambien da este error desde que hice unas correcciones

WARNING: vD\server.lua:18: Bad argument @ 'getPlayerName' [Expected element at argument 1, got nil] 

nombrepll = getPlayerName(source) 

Link to comment

Me parece a mi que esto es un foro libre, libre de expresión y libre de hacer lo que se te plaza la gana, siempre y cuando no rompas las reglas.

Alexs_Steel está en todo su derecho de no ayudarte. Acá ayudan si quieren, a mi generalmente varias personas ignoran mis posts, y luego me mandan PM's insultando ( me encantaría saber por qué pero boe) y no me pongo a llorar.

Si no nos das el code nuevo no podemos ayudarte.

Link to comment
Hidden
No da ningun debug cuando logueas?

Alex steel ignora el post, y nadie responde, buena.

Ahora tambien da este error desde que hice unas correcciones

WARNING: vD\server.lua:18: Bad argument @ 'getPlayerName' [Expected element at argument 1, got nil] 

nombrepll = getPlayerName(source) 

¿Como defines 'source'?

Link to comment
No da ningun debug cuando logueas?

Alex steel ignora el post, y nadie responde, buena.

Ahora tambien da este error desde que hice unas correcciones

WARNING: vD\server.lua:18: Bad argument @ 'getPlayerName' [Expected element at argument 1, got nil] 

nombrepll = getPlayerName(source) 

¿Como defines 'source'?

como este ejemplo:

--ejemplo 
combrepll = getPlayerName(source) 
function dsadsadsda (source,commandName,KmsSeE) 
 setPlayerMoney(source,KmsSeE) 
 outputChatBox("texto"..nombrepll,root,0,0,0,true) 
end 
addCommandHandler("kms",dsadsadsda 

Antes lo tenia así definido y no saltaba ningun problema en el script, ahora por extraña circunstancia, salta error :(

Link to comment
La variable 'source' aun no esta definida en ningún lado.

Nunca necesité definir source

source =  --(?) 

Siempre puse ese tipo de scripts y funcionaron a la perfeccion

Agradeceria que me explicaras como se define source

EDITO: Hasta el momento pensé que poner getPlayername(source) es source = thePlayer o algo por el estilo

Link to comment
Revisa que tengas estas líneas
addEventHandler("onPlayerLogout",root,SaveLogout) 
addEventHandler("onPlayerQuit",root,SaveQuit) 
addEventHandler("onPlayerLogin",root,SaveJoin) 

function SaveLogout () 
    local account = getPlayerAccount(source) 
    if account then 
        local playermoney = getPlayerMoney(source) 
        setAccountData (account,"vd.money",tostring(playermoney)) 
        outputChatBox("#00FF00[sAVE SYSTEM] Saved data #FFFFFF'"..nombrepll.."'#00FF00 for your account",source,0,255,0,true) 
    end 
end 
function SaveQuit () 
    local account = getPlayerAccount(source) 
    if account then 
        local playermoney = getPlayerMoney(source) 
        setAccountData (account,"vd.money",tostring(playermoney)) 
    end 
end 
function SaveJoin (_,account) 
    local account = getPlayerAccount(source) 
    if account then 
        local playermoney = getAccountData(account,"vd.money") 
        outputChatBox("#00FF00[sAVE SYSTEM] Loaded data #FFFFFF"..nombrepll.."#00FF00 for your account",source,0,255,0,true) 
        setPlayerMoney(source,tostring(playermoney))       
    end 
end 
  
addEventHandler("onPlayerLogout",root,SaveLogout) 
addEventHandler("onPlayerQuit",root,SaveQuit) 
addEventHandler("onPlayerLogin",root,SaveJoin) 

No guarda el dinero, pero si lo carga 

Link to comment
te falta definir "nombrepll"

está definido, pero sigo con el problema de que no guarda el dinero

--[[    SAVE SYSTEM     ]] 
function SaveLogout () 
    local nombrepll = getPlayerName(source) 
    local account = getPlayerAccount(source) 
    if account then 
        local playermoney = getPlayerMoney(source) 
        setAccountData (account,"vd.money",tostring(playermoney)) 
        outputChatBox("#00FF00[sAVE SYSTEM] Saved data #FFFFFF'"..nombrepll.."'#00FF00 for your account",source,0,255,0,true) 
    end 
end 
function SaveQuit () 
    local nombrepll = getPlayerName(source) 
    local account = getPlayerAccount(source) 
    if account then 
        local playermoney = getPlayerMoney(source) 
        setAccountData (account,"vd.money",tostring(playermoney)) 
    end 
end 
function SaveJoin (_,account) 
    local nombrepll = getPlayerName(source) 
    local account = getPlayerAccount(source) 
    if account then 
        local playermoney = getAccountData(account,"vd.money") 
        outputChatBox("#00FF00[sAVE SYSTEM] Loaded data #FFFFFF"..nombrepll.."#00FF00 for your account",source,0,255,0,true) 
        setPlayerMoney(source,tostring(playermoney))       
    end 
end 
  
addEventHandler("onPlayerLogout",root,SaveLogout) 
addEventHandler("onPlayerQuit",root,SaveQuit) 
addEventHandler("onPlayerLogin",root,SaveJoin) 
--exquisitos con el local  
  

Link to comment
No, nunca te sugeriría un timer.

Creo que me dijiste que el script no guarda el dinero porque al des-loggearse pierde la cuenta y por tanto el script no puede obtener el nombre, Ahora ya es el problema, Pero no hay un evento para esto, es decir, si no sirve "onPlayerQuit" porque pierde el nombre de la cuenta, y no sirve "onPlayerLogout" porque tambien la pierde, como puedo hacer?

Edit: onAccountDataChange?

Link to comment
  • Recently Browsing   0 members

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