aka Blue Posted February 9, 2017 Share Posted February 9, 2017 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
Arsilex Posted February 10, 2017 Share Posted February 10, 2017 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
aka Blue Posted February 11, 2017 Author Share Posted February 11, 2017 Me tira error en el fromJSON. Link to comment
Arsilex Posted February 11, 2017 Share Posted February 11, 2017 14 minutes ago, aka Blue said: Me tira error en el fromJSON. Que error? Link to comment
aka Blue Posted February 11, 2017 Author Share Posted February 11, 2017 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
#Lince> Posted February 11, 2017 Share Posted February 11, 2017 (edited) 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 February 11, 2017 by Nico14 Link to comment
MTA Team 0xCiBeR Posted February 11, 2017 MTA Team Share Posted February 11, 2017 Element data y account data no pueden guardar arrays. Tenes que convertirlo siempre a JSON String. Link to comment
aka Blue Posted February 12, 2017 Author Share Posted February 12, 2017 Intentaré de nuevo, gracias a todos. Nunca he trabajado con estas funciones y se me hace un poco raro xd. Link to comment
aka Blue Posted February 12, 2017 Author Share Posted February 12, 2017 @Nico14 Me acabo de dar cuenta de que, lo que utilizaba, fue onPlayerLogout, que sí que tiene como argumento la cuenta que se acaba de desloguear. Link to comment
aka Blue Posted February 12, 2017 Author Share Posted February 12, 2017 Disculpen triple post, ya lo solucioné. El problema era que utilizaba el argumento equivocado de la funcion del evento onPlayerLogout Link to comment
Recommended Posts