Jump to content

setAccountData bugeado?


aka Blue

Recommended Posts

Buenas, estoy intentando hacer un guardado de la última posición del jugador al desloguearse pero por lo visto, no quiere funcionar. ¿Alguien me podría decir por qué? Gracias de antemano, aquí dejo el código que estoy utilizando:

function loginOut( _, acc )
	local x, y, z = getElementPosition( source )
	if (acc) and (not isGuestAccount( acc )) then
		setAccountData( acc, "pos", { x = x, y = y, z = z } )
    	outputChatBox( "Posición #00ff00GUARDADA", source, 255, 255, 255 )
	end
	showLogin( source )
end
addEventHandler( "onPlayerLogout", getRootElement(), loginOut )

Mi idea de hacerlo así es para luego sacarlo así:

local data = getAccountData( cuenta, "pos" )
if data then
  local x, y, z = data.x, data.y, data.z
end

 

Link to comment

Si no recuerdo mal el setAccountData no almacena valores que pesen mas de 128 bytes aunque no me hagas mucho caso, esto pasaba anteriormente no se si sigue aun o ya han quitado el limite aun así no puedes guardar array tienes que pasarlo a JSON:

 

function loginOut( _, acc )
	local x, y, z = getElementPosition( source )
	if (acc) and (not isGuestAccount( acc )) then
		setAccountData( acc, "pos", toJSON({ x = x, y = y, z = z }) )
    	outputChatBox( "Posición #00ff00GUARDADA", source, 255, 255, 255 )
	end
	showLogin( source )
end
addEventHandler( "onPlayerLogout", getRootElement(), loginOut )
local data = fromJSON(getAccountData( cuenta, "pos" ))
if data then
  local x, y, z = data.x, data.y, data.z
end

 

Link to comment

Sé lo que significa el error

[2017-02-11 13:47:19] WARNING: addons\login\server.lua:39: Bad argument @ 'fromJSON' [Expected string at argument 1, got boolean]

Básicamente devuelve un booleano (false o true, en este caso supongo que false). El tema está en que, cuando voy a guardar la posición, puse un mensaje a propósito para comprobar, y, tampoco funciona, no sé por qué motivo. Código original:

addEventHandler( "onPlayerQuit", getRootElement( ),
	function( _, acc )
		if acc and not isGuestAccount( acc ) then
			local x, y, z = getElementPosition( source )
			setAccountData( acc, "pos", toJSON( { x = x, y = y, z = z } ) )
		end
		showLogin( source )
	end
)

-- Evento de login blabla

local acc = getPlayerAccount( player )
local lastPos = fromJSON(getAccountData( player, "pos" ))
if lastPos then
	local sx, sy, sz = lastPos.x, lastPos.y, lastPos.z
	setElementPosition( player, sx, sy, sz )
	outputChatBox( "Has sido teletransportado a tu última posición guardada", player, 0, 255, 0 )
end

No quería meter SQLite en esto porque lo veo sinceramente innecesario, pero por lo visto, tendré que acabar utilizándolo porque esto da problemas raros.

Link to comment
addEventHandler( "onPlayerQuit", getRootElement( ),
	function( )
        local acc = getPlayerAccount( source )
		if acc and not isGuestAccount( acc ) then
			local x, y, z = getElementPosition( source )
			setAccountData( acc, "pos", toJSON( { x = x, y = y, z = z } ) )
		end
		showLogin( source )
	end
)

El evento onPlayerQuit no tiene el parámetro account. 

string quitType, string reason, element responsibleElement

 

También hay un error en getAccountData().


local lastPos = fromJSON(getAccountData( player, "pos" )) -- ahí pusiste al player en vez de la cuenta (acc). 

 

 

Edited by Nico14
Link to comment
  • Recently Browsing   0 members

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