Rose Posted December 3, 2016 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+
Enargy, Posted December 3, 2016 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.
Anzo Posted December 4, 2016 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
aka Blue Posted December 4, 2016 Posted December 4, 2016 Disculpen meterme. Sería posible que compartas la función disableColorCode? Llevo buscando algo así jaja
Rose Posted December 4, 2016 Author 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
Tomas Posted December 4, 2016 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
Rose Posted December 4, 2016 Author 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+
Rose Posted December 6, 2016 Author Posted December 6, 2016 Y alguien sabe cómo podría hacerlo? no me ha funcionado todavía xd.
aka Blue Posted December 6, 2016 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 )
Rose Posted December 7, 2016 Author 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.
DBY Posted December 7, 2016 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
Rose Posted December 7, 2016 Author 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
Recommended Posts