#DeltaSCR Posted April 15, 2019 Share Posted April 15, 2019 (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 April 15, 2019 by #DeltaSCR Link to comment
MandaBraza Posted April 15, 2019 Share Posted April 15, 2019 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
#DeltaSCR Posted April 15, 2019 Author Share Posted April 15, 2019 Aí eu devo fazer no guiGetText da outra função lá em cima também, correto? Link to comment
#DeltaSCR Posted April 16, 2019 Author Share Posted April 16, 2019 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 Spoiler https://prnt.sc/ncghmf 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
#DaNiLiN Posted April 16, 2019 Share Posted April 16, 2019 Sabe dizer se tem outro guiEdit além do EditPistola no seu código? Link to comment
#DeltaSCR Posted April 16, 2019 Author Share Posted April 16, 2019 (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 April 16, 2019 by #DeltaSCR Link to comment
#DaNiLiN Posted April 16, 2019 Share Posted April 16, 2019 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. Link to comment
#DeltaSCR Posted April 16, 2019 Author Share Posted April 16, 2019 Ah sim, editei o código sinalizando a linha com erro Tem ideia de como resolver? Link to comment
#DaNiLiN Posted April 16, 2019 Share Posted April 16, 2019 (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 April 16, 2019 by #DaNiLiN 1 Link to comment
Jonas^ Posted April 16, 2019 Share Posted April 16, 2019 (edited) Eu usaria uma string que só iria permitir números no guiEdit ao invés de converter pra número Edited April 16, 2019 by Jonas^ Link to comment
#DaNiLiN Posted April 16, 2019 Share Posted April 16, 2019 (edited) . Edited April 16, 2019 by #DaNiLiN Link to comment
Other Languages Moderators Lord Henry Posted April 16, 2019 Other Languages Moderators Share Posted April 16, 2019 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
#DeltaSCR Posted April 16, 2019 Author Share Posted April 16, 2019 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? Link to comment
Jonas^ Posted April 16, 2019 Share Posted April 16, 2019 (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 Edited April 16, 2019 by Jonas^ Link to comment
#DeltaSCR Posted April 16, 2019 Author Share Posted April 16, 2019 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 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
Jonas^ Posted April 16, 2019 Share Posted April 16, 2019 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 Lord Henry Posted April 16, 2019 Other Languages Moderators Share Posted April 16, 2019 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
#DeltaSCR Posted April 17, 2019 Author Share Posted April 17, 2019 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
#DaNiLiN Posted April 17, 2019 Share Posted April 17, 2019 Diz ai oque acha que ta errado '=' Link to comment
#DeltaSCR Posted April 17, 2019 Author Share Posted April 17, 2019 6 hours ago, #DaNiLiN said: Diz ai oque acha que ta errado '=' Não faço a mínima ideia Link to comment
Jonas^ Posted April 17, 2019 Share Posted April 17, 2019 Porque tenta fazer gambiarra se já passamos o jeito certo eu e o Lord? Link to comment
#DeltaSCR Posted April 17, 2019 Author Share Posted April 17, 2019 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? Link to comment
Jonas^ Posted April 17, 2019 Share Posted April 17, 2019 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. Link to comment
#DeltaSCR Posted April 17, 2019 Author Share Posted April 17, 2019 Ok, vou ajeitar essa questão da gambiarra... Mas quanto essa verificação da arma? Alguma solução? Link to comment
#DeltaSCR Posted April 17, 2019 Author Share Posted April 17, 2019 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. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now