Jump to content

Attemp to concatenane a nil value dxDrawText


Rose

Recommended Posts

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 by Hit+
Link to comment

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... xD

Edited by Anzo
Link to comment
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 by Tomas
  • Like 1
Link to comment

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

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... :P

Espero haberme explicado.

Edited by Dannys
Link to comment
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... :P

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
  • Recently Browsing   0 members

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