Rose Posted December 3, 2016 Share Posted December 3, 2016 (edited) Hola, estaba intentando guardar el valor de una variable al usar /save y para recuperar ese valor /load. Me funciona, pero quisiera que esos datos se guardaran automáticamente al yo salir del servidor y se cargaran de nuevo al logearme. Con comandos no me da error pero con "onPlayerLogin" si me está dando errores, ya intente de varias formas pero no sé que podrá ser, les dejo lo que tengo hecho y dónde da error: Server function ko() triggerClientEvent("probando", source) end addEventHandler("onPlayerQuit", root, ko) addEvent("variable", true) addEventHandler("variable", root, function(saveElement) setAccountData(getPlayerAccount(source),"launcherBullet", tonumber(saveElement)) end) function onLoginLoadBullets() triggerClientEvent(root,"latin:loadLauncher",source,getAccountData(getPlayerAccount(source),"launcherBullet")) end addEventHandler("onPlayerLogin", root, onLoginLoadBullets) Client addEvent("probando", true) addEventHandler("probando", root, function() local saveElement = maxBullets triggerServerEvent("variable", getLocalPlayer(), saveElement) end) addEvent("latin:loadLauncher", true) addEventHandler("latin:loadLauncher", root, function(saveElement) maxBullets = tonumber(saveElement) end) function mainRender() local state = not grenadeLauncher dxDrawRectangle(items['pos']['x'][2], screenH * 0.7051, screenW * 0.0172, screenH * 0.0381, tocolor(231, 209, 23, 255), false) dxDrawText(items['texts'][1], items['pos']['x'][1], screenH * 0.7148, screenW * 0.0133, screenH * 0.7324, tocolor(0, 0, 0, 255), 1.40*fontSize, "default-bold", "left", "top", false, false, false, false, false) dxDrawRectangle(screenW * 0.0000, screenH * 0.7051, items['pos']['width'][2], screenH * 0.0381, tocolor(0, 0, 0, 120), false) --dx if (getElementData(localPlayer, "Nivel") < 35) then dxDrawText("Lanzagranadas: " ..disableColorCode("#ff0000Nivel 35 unlock"), items['pos']['x'][4] - 1, (screenH * 0.7139) - 1, (screenW * 0.1852) - 1, (screenH * 0.7373) - 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: " ..disableColorCode("#ff0000Nivel 35 unlock"), items['pos']['x'][4] + 1, (screenH * 0.7139) - 1, (screenW * 0.1852) + 1, (screenH * 0.7373) - 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: " ..disableColorCode("#ff0000Nivel 35 unlock "), items['pos']['x'][4] - 1, (screenH * 0.7139) + 1, (screenW * 0.1852) - 1, (screenH * 0.7373) + 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: " ..disableColorCode("#ff0000Nivel 35 unlock "), items['pos']['x'][4] - 1, (screenH * 0.7139) + 1, (screenW * 0.1852) + 1, (screenH * 0.7373) + 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: #ff0000Nivel 35 unlock", items['pos']['x'][4], screenH * 0.7139, screenW * 0.1852, screenH * 0.7373, tocolor(255, 255, 255, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, true, false) else -- Desde aquí me da error en "maxBullets" dxDrawText("Lanzagranadas: "..disableColorCode(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4] - 1, (screenH * 0.7139) - 1, (screenW * 0.1852) - 1, (screenH * 0.7373) - 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: "..disableColorCode(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4] + 1, (screenH * 0.7139) - 1, (screenW * 0.1852) + 1, (screenH * 0.7373) - 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: "..disableColorCode(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4] - 1, (screenH * 0.7139) + 1, (screenW * 0.1852) - 1, (screenH * 0.7373) + 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: "..disableColorCode(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4] - 1, (screenH * 0.7139) + 1, (screenW * 0.1852) + 1, (screenH * 0.7373) + 1, tocolor(0, 0, 0, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, false, false) dxDrawText("Lanzagranadas: "..(state and "#ff0000OFF" or "#00ff00ON #ffffffBalas: #00cbff"..tonumber(maxBullets)), items['pos']['x'][4], screenH * 0.7139, screenW * 0.1852, screenH * 0.7373, tocolor(255, 255, 255, 255), 1.00*fontSize, textFont, "left", "top", false, false, false, true, false) end end addEventHandler("onClientRender", root, mainRender) Me da error en la variable 'maxBullets', la variable maxBullets al activar el recurso ya tiene un valor, que es 3... Un ejemplo: Al empezar tengo 3 balas, gasto 1, me quedan 2, me salgo del servidor y el número 2 se me guarda en mi cuenta, y, al logearme, si tengo 3+ balas o menos, me aparezca el número 2 para las balas ya que fue como quedó al salirme. Como ya dije al principio lo hice primeramente con comandos y luego intente con onPlayerQuit y OnPlayerLogin, los errores están en las lineas que vienen después del "else" de la función main. Edited December 3, 2016 by Hit+ Link to comment
Enargy, Posted December 3, 2016 Share Posted December 3, 2016 Al principio del script define maxBullets como una cadena o numero, luego al logearte sobrescribes la variable(cosa que ya se ve ahí). El error es que la variable no esta definida antes de logear, por eso el nil. Link to comment
Anzo Posted December 4, 2016 Share Posted December 4, 2016 (edited) Ahh... Que cuando me salgo del servidor se borra la variable, ¿cierto o me equivoco? si es así, ¿por comandos si lo podría hacer o tengo que usar elementData en este caso? Si lo que quiero hacer si se puede hacer con los eventos onPlayerQuit y onPlayerLogin, por favor, dímelo. Pd: La cuenta hit es mía, esta ya no la usaré más pero como el móvil se conecta de una vez a esta no me he fijado y escribí con esta... Edited December 4, 2016 by Anzo Link to comment
aka Blue Posted December 4, 2016 Share Posted December 4, 2016 Disculpen meterme. Sería posible que compartas la función disableColorCode? Llevo buscando algo así jaja Link to comment
Rose Posted December 4, 2016 Author Share Posted December 4, 2016 @aka Blue ¿Esto te sirve? function disableColorCode(name) return type(name) == "string" and string.gsub(name, "#%x%x%x%x%x%x", "") or name end Link to comment
Tomas Posted December 4, 2016 Share Posted December 4, 2016 (edited) 2 hours ago, Hit+ said: @aka Blue ¿Esto te sirve? function disableColorCode(name) return type(name) == "string" and string.gsub(name, "#%x%x%x%x%x%x", "") or name end Esa función no es efectiva al 100%, print(disableColorCode("##000000ff0000hola")) --> #ff0000hola Esta debería funcionar: function disableColorCode(name) while name:find("#%x%x%x%x%x%x") do name = name:gsub("#%x%x%x%x%x%x", "") end return name end Edited December 4, 2016 by Tomas 1 Link to comment
Rose Posted December 4, 2016 Author Share Posted December 4, 2016 (edited) Entonces, si puedo guardar el valor de una variable con setAccountData y onPlayerQuit o no? Edited December 4, 2016 by Hit+ Link to comment
Rose Posted December 6, 2016 Author Share Posted December 6, 2016 Y alguien sabe cómo podría hacerlo? no me ha funcionado todavía xd. Link to comment
aka Blue Posted December 6, 2016 Share Posted December 6, 2016 Creo que ésto debería funcionar. Luego al entrar, cargas el data y cambias el valor de la variable: local variable = 3 -- Valor principal, 3 addEventHandler( "onClientPlayerQuit", getRootElement( ), function( ) triggerServerEvent( "guardarDatosLanzagranadas", source, source, variable ) end ) -- Server addEvent( "guardarDatosLanzagranadas", true ) addEventHandler( "guardarDatosLanzagranadas", getRootElement( ), function( jugador, variable ) if jugador and variable then local account = getPlayerAccount( jugador ) if account and not isGuestAccount( account ) then setAccountData( account, "lanzagranadas", tonumber( variable ) ) end end end ) Link to comment
Rose Posted December 7, 2016 Author Share Posted December 7, 2016 Creo que por onPlayerQuit no es posible así que lo tengo hecho para que se guarde cada vez que el jugador dispare. Además onClientPlayerQuit no me guardaría el valor de la variable a mi, creo. Link to comment
DBY Posted December 7, 2016 Share Posted December 7, 2016 (edited) Debes tener en cuenta que el elemento jugador ya no se encuentra en el servidor, no puedes seguir usándolo como tal. Quizá funcione utilizar un elementData almacenando la cuenta del jugador cada vez que se loguee, al usar onPlayerQuit u onPlayerClientQuit hay un pequeño delay que te permite utilizar el elemento jugador, así que puedes aprovecharlo llamando a ese elementData desde el cliente y triggeando la cuenta junto con lo que quieras almacenar. Y no te recomiendo guardarlo cada vez que el jugador dispare, es un suicidio... Espero haberme explicado. Edited December 7, 2016 by Dannys Link to comment
Rose Posted December 7, 2016 Author Share Posted December 7, 2016 1 hour ago, Dannys said: Debes tener en cuenta que el elemento jugador ya no se encuentra en el servidor, no puedes seguir usándolo como tal. Quizá funcione utilizar un elementData almacenando la cuenta del jugador cada vez que se loguee, al usar onPlayerQuit u onPlayerClientQuit hay un pequeño delay que te permite utilizar el elemento jugador, así que puedes aprovecharlo llamando a ese elementData desde el cliente y triggeando la cuenta junto con lo que quieras almacenar. Y no te recomiendo guardarlo cada vez que el jugador dispare, es un suicidio... Espero haberme explicado. Pues con elementData es mucho más fácil, si me da problemas como lo tengo ahora mismo lo cambió por elementData y no me saco tantos problemas. Ahora, por qué dices que no es bueno que se guarde al disparar? no se guardará siempre que el jugador dispare, se guardará cuando el jugador dispare con las granadas Link to comment
Rose Posted December 7, 2016 Author Share Posted December 7, 2016 @Tomas Tu función me da error en 'name' Link to comment
Recommended Posts