Jump to content

Converter Texto para números


Recommended Posts

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
Link to comment

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

 

Link to comment

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
Link to comment
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
Link to comment

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
Link to comment
  • Other Languages Moderators
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é?

Link to comment
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^
Link to comment
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

Link to comment

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  

 

Link to comment
  • Other Languages Moderators
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

Link to comment

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

 

Link to comment

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.
×
×
  • Create New...