#DeltaSCR

Converter Texto para números

Recommended Posts

Posted (edited)

Olá, em um código em desenvolvimento, me deparei como a necessidade de converter e verificar Texto/Números; Como Assim?

Primeiro eu criei uma guiEdit , porém tenho que obter o texto dela depois, só que, eu só quero que a função continue, se o texto dessa guiEdit for números, é possível fazer isso? Se sim, podem me ajudar?

OBS: A função "DeltaPainel citada nas linhas 10 e 15, são referentes ao DX, Cujo não postei o mesmo"

client-side

DirectX = false

--// MUNIÇOES PISTOLA
EditPistola = guiCreateEdit(0.34, 0.46, 0.13, 0.04, "Munições Pistola", true)
guiSetAlpha(EditPistola, 0.85)
guiSetVisible (EditPistola, false)

function DeltaAbrir()
	if DirectX == false then
		addEventHandler("onClientRender", root, DeltaPainel)
		guiSetVisible (EditPistola, true)
		showCursor(true)
		DirectX = true
	else
		removeEventHandler("onClientRender", root, DeltaPainel)
		guiSetVisible (EditPistola, false)
		showCursor(false)
		DirectX = false
	end
end
addCommandHandler("armas", DeltaAbrir)

function ammoData()
	if DirectX == true then
		textPistol = guiGetText(EditPistola)
	end
end

function purchaseWeapons(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedWorld)
	if DirectX == true then
		local playerMoney = getPlayerMoney(localPlayer)
		if state == "down" then
			if cursorPosition(screenW * 0.4609, screenH * 0.5500, screenW * 0.0117, screenH * 0.0417) then --//PISTOLA
				if guiGetText(editPistola) == "Munições Pistola" then
					return outputChatBox("ERRO: #FFFFFFPreencha o campo de munições com um número valido", 200, 50, 0, true)
				else
					weapon, ammo, price, weaponName = 22, textPistol, 10000 + (150 * textPistol), "Colt 45"
					triggerServerEvent("DeltaSCR:Buy", localPlayer, weapon, ammo, price, weaponName)
					DeltaAbrir()
				end
			end
		end
	end
end
addEventHandler ("onClientClick", root, purchaseWeapons)

 

server-side

function deltascrbuy(weapon, ammo, price, weaponName)
	local playerMoney = getPlayerMoney(source)
	if playerMoney >= price then
		takePlayerMoney(source, price)
		giveWeapon(source, weapon, ammo, true)
		outputChatBox("ERRO: #FFFFFFVocê comprou uma "..weaponName.." com um total de "..ammo.." munições por R$"..price.."", source, 200, 50, 0, true)
	else
		outputChatBox("ERRO: #FFFFFFVocê não possuí a quantia de R$"..price.." para comprar uma "..weaponName.."", source, 200, 50, 0, true)
	end
end
addEvent("DeltaSCR:Buy", true)
addEventHandler("DeltaSCR:Buy", root, deltascrbuy)

 

Edited by #DeltaSCR

Share this post


Link to post

Você pode fazer isso usando tostring e tonumber. como o próprio nome já diz, a função vai converter de texto para número ou de número para texto.

editPistola = guiCreateEdit(0.34, 0.46, 0.13, 0.04, "Munições Pistola", true)

if (tonumber(guiGetText(editPistola))) then
    -- executa seu trigger
else
    outputChatBox("número invalido")
end

 

Share this post


Link to post

Aí eu devo fazer no guiGetText da outra função lá em cima também, correto?

Share this post


Link to post

Ta, agora surgiu um outro problema:

	if (tonumber(guiGetText(EditPistola))) then
		weapon, ammo, price, weaponName = 22, tonumber(textPistol), 10000 + 150 * tonumber(textPistol), "Colt 45"
		triggerServerEvent("DeltaSCR:Buy", localPlayer, weapon, ammo, price, weaponName)
		DeltaAbrir()
	else
		outputChatBox("ERRO: #FFFFFFPor favor, preencha o campo com um número válido", 200, 50, 0, true)
	end

 

O que eu quero que aconteça:

  • Primeiro eu quero que a função só continue a ser executada se o o texto obtido do da guiEdit seja um número
  • Seja enviada ao triggerServerEvent os seguintes dados: munição(número obtido no guiEdit); se ele comprou mais de uma munição, então o preço enviado ao server será 10k mais 150 multiplicado pela quantidade de munições obtidas na guiEdit

Share this post


Link to post

Sabe dizer se tem outro guiEdit além do EditPistola no seu código?

Share this post


Link to post
Posted (edited)
44 minutes ago, #DaNiLiN said:

Sabe dizer se tem outro guiEdit além do EditPistola no seu código?

Tem sim, porém com nomes diferentes

EditShotgun = guiCreateEdit(0.34, 0.34, 0.13, 0.04, "Munições Shotgun", true)
guiSetAlpha(EditShotgun, 0.85)
guiSetVisible (EditShotgun, false)
	
--// MUNIÇOES AK-47
EditAK47 = guiCreateEdit(0.34, 0.40, 0.13, 0.04, "Munições AK-47", true)
guiSetAlpha(EditAK47, 0.85)
guiSetVisible (EditAK47, false)
	
--// MUNIÇOES PISTOLA
EditPistola = guiCreateEdit(0.34, 0.46, 0.13, 0.04, "Munições Pistola", true)
guiSetAlpha(EditPistola, 0.85)
guiSetVisible (EditPistola, false)

textPistol = guiGetText(EditPistola)
textAK47 = guiGetText(EditAK47)
textShotgun = guiGetText(EditShotgun)

function purchaseWeapons(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedWorld)
	if DirectX == true then
		local playerMoney = getPlayerMoney(localPlayer)
		if state == "down" then
			if cursorPosition(screenW * 0.4609, screenH * 0.5500, screenW * 0.0117, screenH * 0.0417) then --//PISTOLA
				if (tonumber(guiGetText(EditPistola))) then
					weapon, ammo, price, weaponName = 22, tonumber(textPistol), 10000 + 150 * tonumber(textPistol), "Colt 45" -- Linha com erro
					triggerServerEvent("DeltaSCR:Buy", localPlayer, weapon, ammo, price, weaponName)
					DeltaAbrir()
				else
					outputChatBox("ERRO: #FFFFFFPor favor, preencha o campo com um número válido", 200, 50, 0, true)
				end
			elseif cursorPosition(screenW * 0.3438, screenH * 0.6667, screenW * 0.1172, screenH * 0.0417) then --//AK-47
				weapon, ammo, price, weaponName = 20, 280, 18000, "AK-47"
				triggerServerEvent("DeltaSCR:Buy", localPlayer, weapon, ammo, price, weaponName)
				DeltaAbrir()
			elseif cursorPosition(screenW * 0.3438, screenH * 0.6083, screenW * 0.1172, screenH * 0.0417) then --//SHOTGUN
				weapon, ammo, price, weaponName = 25, 120, 25000, "Shotgun"
				triggerServerEvent("DeltaSCR:Buy", localPlayer, weapon, ammo, price, weaponName)
				DeltaAbrir()
			end
		end
	end
end
addEventHandler ("onClientClick", root, purchaseWeapons)

 

Edited by #DeltaSCR

Share this post


Link to post

Ata porque eu reparei ali que tu ta puxando os números de outro editbox.  E na print que tu mandou não da pra identificar em qual linha ta o erro.

Share this post


Link to post

Ah sim, editei o código sinalizando a linha com erro

Tem ideia de como resolver?

Share this post


Link to post
Posted (edited)

Ata, Utiliza a linha textPistol = guiGetText(EditPistola) dentro da if (tonumber(guiGetText(EditPistola))) then não esqueça de adicionar um local atrás da linha



function purchaseWeapons(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedWorld)
	if DirectX == true then
		local playerMoney = getPlayerMoney(localPlayer)
		if state == "down" then
			if cursorPosition(screenW * 0.4609, screenH * 0.5500, screenW * 0.0117, screenH * 0.0417) then --//PISTOLA
				if (tonumber(guiGetText(EditPistola))) then
					local textPistol = guiGetText(EditPistola)
					local weapon, ammo, price, weaponName = 22, tonumber(textPistol), 10000 + 150 * tonumber(textPistol), "Colt 45" -- Linha com erro
					triggerServerEvent("DeltaSCR:Buy", localPlayer, weapon, ammo, price, weaponName)
					DeltaAbrir()
				else
					outputChatBox("ERRO: #FFFFFFPor favor, preencha o campo com um número válido", 200, 50, 0, true)
				end
			elseif cursorPosition(screenW * 0.3438, screenH * 0.6667, screenW * 0.1172, screenH * 0.0417) then --//AK-47
				weapon, ammo, price, weaponName = 20, 280, 18000, "AK-47"
				triggerServerEvent("DeltaSCR:Buy", localPlayer, weapon, ammo, price, weaponName)
				DeltaAbrir()
			elseif cursorPosition(screenW * 0.3438, screenH * 0.6083, screenW * 0.1172, screenH * 0.0417) then --//SHOTGUN
				weapon, ammo, price, weaponName = 25, 120, 25000, "Shotgun"
				triggerServerEvent("DeltaSCR:Buy", localPlayer, weapon, ammo, price, weaponName)
				DeltaAbrir()
			end
		end
	end
end
addEventHandler ("onClientClick", root, purchaseWeapons)

 

Edited by #DaNiLiN
  • Thanks 1

Share this post


Link to post
Posted (edited)

Eu usaria uma string que só iria permitir números no guiEdit ao invés de converter pra número 

Edited by Jonas^

Share this post


Link to post
19 minutes ago, Jonas^ said:

Eu usaria uma string que só iria permitir números no guiEdit ao invés de converter pra número 

Se refere a bloquear todos os caracteres não-numéricos no guiEdit, né?

Share this post


Link to post
2 minutes ago, Lord Henry said:

Se refere a bloquear todos os caracteres não-numéricos no guiEdit, né?

E como eu faço isso? Do jeito do @#DaNiLiN?

 

Share this post


Link to post
Posted (edited)
7 minutes ago, Lord Henry said:

Se refere a bloquear todos os caracteres não-numéricos no guiEdit, né?

Sim, é melhor do que ficar convertendo texto pra número, que pra falar verdade nem entendi o proposito dessa gambiarra aí que os cara fez xD

Edited by Jonas^

Share this post


Link to post
2 minutes ago, Jonas^ said:

Sim, é melhor do que ficar convertendo texto pra número, que pra falar verdade nem entendi o proposito dessa gambiarra aí que os cara fez xD

O propósito é que vou precisar fazer alguns calculos, por isso vou precisar que o texto da guiEdit seja um número

Share this post


Link to post

Então é exatamente isso que a string faz, ela só deixa o cara por números na guiEdit, nada mais que isso exemplo:

if not string.find (nameEdit, "%d") then -- Se só existem números, então
	-- Código
else
	outputChatBox ("Só é permitido números.", 255, 50, 50)
end  

 

Share this post


Link to post
addEventHandler ("onClientGUIChanged", root, function()
	if source == editPistola then
		local currText = guiGetText (source)
		local newText = string.gsub (currText, "[^0-9]", "")
		if newText ~= currText then
			guiSetText (source, newText)
		end
	end
end)

Nesse exemplo ele só permite inserir números no editPistola

Share this post


Link to post

Nesse mesmo código eu executo uma verificação para ver se o Jogador que está com o Painel aberto tem uma arma de ID 25 no Slot 3, porém tenho certeza que esta verificação está incorreta, podem me ajudar a corrigi-lá?

elseif cursorPosition(screenW * 0.5273, screenH * 0.3583, screenW * 0.0117, screenH * 0.0417) then --//VENDER-SHOTGUN
		if (tonumber(guiGetText(EditShotgun))) then
			if (getPedWeapon(localPlayer, 3) == 25) then
				outputChatBox("INFO: #FFFFFFVocê vendeu sua arma com sucesso", 200, 50, 0, true)
			else
				outputChatBox("ERRO: #FFFFFFVocê não possui uma Shotgun", 200, 50, 0, true)
			end
		else
			outputChatBox("ERRO: #FFFFFFPor favor, preencha o campo com um número válido", 200, 50, 0, true)
		end
end

 

Share this post


Link to post
6 hours ago, #DaNiLiN said:

Diz ai oque acha que ta errado '='

Não faço a mínima ideia

Share this post


Link to post

Porque tenta fazer gambiarra se já passamos o jeito certo eu e o Lord?

Share this post


Link to post
Just now, Jonas^ said:

Porque tenta fazer gambiarra se já passamos o jeito certo eu e o Lord?

Porque a "gambiarra" funcionou tranquilo, mas pode influenciar nessa parte da verificação das armas?

Share this post


Link to post

Cara, se você quer obter somente números na edit é só fazer oque o Lord citou ali ou o meu tanto faz, os 2 vão permitir somente números na edit.

Share this post


Link to post

Ok, vou ajeitar essa questão da gambiarra... Mas quanto essa verificação da arma? Alguma solução?

Share this post


Link to post

Usei o conselho dos dois, deixei a guiEdit somente para números, mas tive que manter a transformação tonumber, pois se eu remover o mesmo, dará erro na minha aritmética mais a frente.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.