UserToDelete Posted May 4, 2014 Share Posted May 4, 2014 Este script fue puesto y discutido en el foro hace mucho tiempo, pero aun sigue bug. Como le hago para que guarde el tiempo? es decir, que cuando el jugador se meta y se logee me vuelva a poner el tiempo que tenia cuando salio exports.scoreboard:addScoreboardColumn('PlayTime') local t = { } function checkValues( source,arg1,arg2) if (arg2 >= 60) then t[ source ][ 'min' ] = tonumber( t[ source ][ 'min' ] or 0 ) + 1 t[ source ][ 'sec' ] = 0 end if (arg1 >= 60) then t[ source ][ 'min' ] = 0 t[ source ][ 'hour' ] = tonumber( t[ source ][ 'hour' ] or 0 ) + 1 end return arg1, arg2 end setTimer( function( ) for _, v in pairs( getElementsByType( "player" ) ) do if (not t[ v ]) then t[ v ] = { ["hour"] = 0, ["min"] = 0, ["sec"] = 0 } end t[ v ][ 'sec' ] = tonumber( t[ v ][ 'sec' ] or 0 ) + 1 local min,sec = checkValues ( v, t[ v ][ 'min' ] or 0, t[ v ][ 'sec' ] or 0 ) local hour = tonumber( t[ v ][ 'hour' ] or 0 ) setElementData( v, "PlayTime", tostring( hour )..':'..tostring( min )..':'..tostring( sec ) ) end end, 1000, 0 ) function onPlayerQuit ( ) local playeraccount = getPlayerAccount ( source ) if ( playeraccount ) and not isGuestAccount ( playeraccount ) then local sValue = getElementData( source,'PlayTime' ) setAccountData ( playeraccount, "PlayTime", tostring(sValue)) end t[ source ] = nil end function onPlayerLogin (_, playeraccount ) if ( playeraccount ) then local time = getAccountData ( playeraccount, "PlayTime" ) if ( time ) then setElementData ( source, "PlayTime", time ) else setElementData ( source, "PlayTime",0 ) setAccountData ( playeraccount, "PlayTime",0 ) end end end addEventHandler ( "onPlayerQuit", root, onPlayerQuit ) addEventHandler ( "onPlayerLogin", root, onPlayerLogin ) y no tira ningun error, y no logro entender porque no guarda en la cuenta Link to comment
Tomas Posted May 4, 2014 Share Posted May 4, 2014 Cambia el nombre de la función. No puede ser igual al del evento. Link to comment
UserToDelete Posted May 4, 2014 Author Share Posted May 4, 2014 Cambia el nombre de la función. No puede ser igual al del evento. no tiene efecto, el script sigue fallando. exports.scoreboard:addScoreboardColumn('PlayTime') local t = { } function checkValues( source,arg1,arg2) if (arg2 >= 60) then t[ source ][ 'min' ] = tonumber( t[ source ][ 'min' ] or 0 ) + 1 t[ source ][ 'sec' ] = 0 end if (arg1 >= 60) then t[ source ][ 'min' ] = 0 t[ source ][ 'hour' ] = tonumber( t[ source ][ 'hour' ] or 0 ) + 1 end return arg1, arg2 end setTimer( function( ) for _, v in pairs( getElementsByType( "player" ) ) do if (not t[ v ]) then t[ v ] = { ["hour"] = 0, ["min"] = 0, ["sec"] = 0 } end t[ v ][ 'sec' ] = tonumber( t[ v ][ 'sec' ] or 0 ) + 1 local min,sec = checkValues ( v, t[ v ][ 'min' ] or 0, t[ v ][ 'sec' ] or 0 ) local hour = tonumber( t[ v ][ 'hour' ] or 0 ) setElementData( v, "PlayTime", tostring( hour )..':'..tostring( min )..':'..tostring( sec ) ) end end, 1000, 0 ) function playerleft ( ) local playeraccount = getPlayerAccount ( source ) if ( playeraccount ) and not isGuestAccount ( playeraccount ) then local sValue = getElementData( source,'PlayTime' ) setAccountData ( playeraccount, "PlayTime", tostring(sValue) ) end t[ source ] = nil end function playerlogin (_, playeraccount ) if ( playeraccount ) then local time = getAccountData ( playeraccount, "PlayTime" ) if ( time ) then setElementData ( source, "PlayTime", time ) else setElementData ( source, "PlayTime",0 ) setAccountData ( playeraccount, "PlayTime",0 ) end end end addEventHandler ( "onPlayerQuit", root, playerleft ) addEventHandler ( "onPlayerLogin", root, playerlogin ) Link to comment
Alexs Posted May 4, 2014 Share Posted May 4, 2014 · Hidden Hidden Cambia el nombre de la función. No puede ser igual al del evento. Eso no tiene el mas mínimo sentido, te recomiendo leer la wiki de MTA y la documentación de Lua. * @venadH, ¿Estas seguro de que el 'elementData' es establecido correctamente? Link to comment
alex17 Posted May 4, 2014 Share Posted May 4, 2014 · Hidden Hidden toma puedes utilizar este codigo es el que yo uso D: exports.scoreboard:addScoreboardColumn('Online') local t = { } function checkValues( source,arg1,arg2) if (arg2 >= 60) then t[ source ][ 'min' ] = tonumber( t[ source ][ 'min' ] or 0 ) + 1 t[ source ][ 'sec' ] = 0 end if (arg1 >= 60) then t[ source ][ 'min' ] = 0 t[ source ][ 'hour' ] = tonumber( t[ source ][ 'hour' ] or 0 ) + 1 end return arg1, arg2 end setTimer( function( ) for _, v in pairs( getElementsByType( "player" ) ) do if (not t[ v ]) then t[ v ] = { ["hour"] = 0, ["min"] = 0, ["sec"] = 0 } end t[ v ][ 'sec' ] = tonumber( t[ v ][ 'sec' ] or 0 ) + 1 local min,sec = checkValues ( v, t[ v ][ 'min' ] or 0, t[ v ][ 'sec' ] or 0 ) local hour = tonumber( t[ v ][ 'hour' ] or 0 ) setElementData( v, "Online", (tostring( hour )..'H '..tostring( min )..'M ') ) end end, 1000, 0 ) function onPlayerQuit ( ) local playeraccount = getPlayerAccount ( source ) if ( playeraccount ) and not isGuestAccount ( playeraccount ) then local sValue = getElementData( source,'Online' ) local hour = tonumber( t[ source ][ 'hour' ] or 0 ) local min = tonumber( t[ source ][ 'min' ] or 0 ) local sec = tonumber( t[ source ][ 'sec' ] or 0 ) setAccountData ( playeraccount, "Online-hour", tostring(hour) ) setAccountData ( playeraccount, "Online-min", tostring(min) ) setAccountData ( playeraccount, "Online-sec", tostring(sec) ) setAccountData ( playeraccount, "Online", tostring(sValue) ) end t[ source ] = nil end function onPlayerLogin (_, playeraccount ) if ( playeraccount ) then local time = getAccountData ( playeraccount, "Online" ) local hou = getAccountData ( playeraccount, "Online-hour") local min = getAccountData ( playeraccount, "Online-min") local sec = getAccountData ( playeraccount, "Online-sec") if ( time ) then setElementData ( source, "Online", time ) t[ source ]["hour"] = tonumber(hou) t[ source ]["min"] = tonumber(min) t[ source ]["sec"] = tonumber(sec) else setElementData ( source, "Online",0 ) setAccountData ( playeraccount, "Online",0 ) end end end addEventHandler ( "onPlayerQuit", root, onPlayerQuit ) addEventHandler ( "onPlayerLogin", root, onPlayerLogin ) Link to comment
Tomas Posted May 4, 2014 Share Posted May 4, 2014 Alex, te recomiendo leer unos posts más atrás. Donde Solid dice que las funciones no pueden tener el nombre del evento. El sabe mas que todos nosotros juntos. Link to comment
Alexs Posted May 4, 2014 Share Posted May 4, 2014 · Hidden Hidden Alex, te recomiendo leer unos posts más atrás. Donde Solid dice que las funciones no pueden tener el nombre del evento.El sabe mas que todos nosotros juntos. [15:16:18] Alexs_Steel: Una funcion puede tener el mismo nombre que un evento?[15:16:41] Castillo: se Link to comment
Tomas Posted May 4, 2014 Share Posted May 4, 2014 Anoche revisando posts viejos ví eso. Sigo buscandolo, cuando lo encuentro lo cito aquí. Link to comment
alex17 Posted May 4, 2014 Share Posted May 4, 2014 · Hidden Hidden sin embargo el scrip funciona perfectamence Tomasito en todo caso se le cambia el nombre ala función y problema resuelto .-. Link to comment
Bc# Posted May 5, 2014 Share Posted May 5, 2014 · Hidden Hidden Anoche revisando posts viejos ví eso. Sigo buscandolo, cuando lo encuentro lo cito aquí. Entonces, ¿en que afectaría eso a el funcionamiento del script? La verdad es que si se puede hacer ya que no afecta a la comprensión de la maquina hacia el código, pero por normas de estilo de programación no se debería hacer ya que esto podría dificultar la comprensión una persona hacia el código, aunque a mi parecer, nombrar la función con el mismo nombre que el evento, en este caso no afecta la comprensión del código. PD: No lo leí en un foro ni lo inventé, es lo que he aprendido en la universidad. PD2: Quizás en códigos mas complejos y con mas lineas puedas enredarte si nombras eventos, variables, o funciones con el mismo nombre. Link to comment
UserToDelete Posted May 6, 2014 Author Share Posted May 6, 2014 toma puedes utilizar este codigo es el que yo uso D: exports.scoreboard:addScoreboardColumn('Online') local t = { } function checkValues( source,arg1,arg2) if (arg2 >= 60) then t[ source ][ 'min' ] = tonumber( t[ source ][ 'min' ] or 0 ) + 1 t[ source ][ 'sec' ] = 0 end if (arg1 >= 60) then t[ source ][ 'min' ] = 0 t[ source ][ 'hour' ] = tonumber( t[ source ][ 'hour' ] or 0 ) + 1 end return arg1, arg2 end setTimer( function( ) for _, v in pairs( getElementsByType( "player" ) ) do if (not t[ v ]) then t[ v ] = { ["hour"] = 0, ["min"] = 0, ["sec"] = 0 } end t[ v ][ 'sec' ] = tonumber( t[ v ][ 'sec' ] or 0 ) + 1 local min,sec = checkValues ( v, t[ v ][ 'min' ] or 0, t[ v ][ 'sec' ] or 0 ) local hour = tonumber( t[ v ][ 'hour' ] or 0 ) setElementData( v, "Online", (tostring( hour )..'H '..tostring( min )..'M ') ) end end, 1000, 0 ) function onPlayerQuit ( ) local playeraccount = getPlayerAccount ( source ) if ( playeraccount ) and not isGuestAccount ( playeraccount ) then local sValue = getElementData( source,'Online' ) local hour = tonumber( t[ source ][ 'hour' ] or 0 ) local min = tonumber( t[ source ][ 'min' ] or 0 ) local sec = tonumber( t[ source ][ 'sec' ] or 0 ) setAccountData ( playeraccount, "Online-hour", tostring(hour) ) setAccountData ( playeraccount, "Online-min", tostring(min) ) setAccountData ( playeraccount, "Online-sec", tostring(sec) ) setAccountData ( playeraccount, "Online", tostring(sValue) ) end t[ source ] = nil end function onPlayerLogin (_, playeraccount ) if ( playeraccount ) then local time = getAccountData ( playeraccount, "Online" ) local hou = getAccountData ( playeraccount, "Online-hour") local min = getAccountData ( playeraccount, "Online-min") local sec = getAccountData ( playeraccount, "Online-sec") if ( time ) then setElementData ( source, "Online", time ) t[ source ]["hour"] = tonumber(hou) t[ source ]["min"] = tonumber(min) t[ source ]["sec"] = tonumber(sec) else setElementData ( source, "Online",0 ) setAccountData ( playeraccount, "Online",0 ) end end end addEventHandler ( "onPlayerQuit", root, onPlayerQuit ) addEventHandler ( "onPlayerLogin", root, onPlayerLogin ) Aun ando aprendiendo lua, recien hoy aprendi el uso mas o menos de pairs y ipairs, Agradezco que me hayas dado el codigo corredigo, este script no es mio, es de un antiguo post de "Solid" en el que decia que SI QUE SE PODIA poner esas funciones Link to comment
alex17 Posted May 6, 2014 Share Posted May 6, 2014 · Hidden Hidden de nada qe bueno qe te sirva D: Link to comment
Recommended Posts