Jump to content

[DUVIDA] Se o valor for nil.


Recommended Posts

Posted

O problema é que quando um dos valores é nil a mensagem não é enviada.

function soma(thePlayer, commandName, um, dois)

		local num1 = tonumber(um)
		local num2 = tonumber(dois)
		local resultado = um + dois

	if commandName then
		if (num1 and num2) >= 0 then
			outputChatBox("A soma entre "..num1.. "e "..num2.." é igual a "..resultado..".", thePlayer, 255,255,255, true)
		elseif (num1 or num2) == nil then
			outputChatBox("Você precisa digitar os dois números para fazer a conta.", thePlayer)
		end
	end
end
addCommandHandler("somar", soma)

 

Posted

if commandName then , vai retornar true se vc informar os valores um e dois, caso não seja informado ele retorna false e não entra na condição. tenta assim:

function soma(thePlayer, commandName, um, dois)

		local num1 = tonumber(um)
		local num2 = tonumber(dois)
		local resultado = um + dois

	if commandName then
		if (num1 and num2) >= 0 then
			outputChatBox("A soma entre "..num1.. "e "..num2.." é igual a "..resultado..".", thePlayer, 255,255,255, true)
		end
    	else
    	outputChatBox("Você precisa digitar os dois números para fazer a conta.", thePlayer)
	end
end
addCommandHandler("somar", soma)

 

  • Moderators
Posted (edited)

Basta verificar se ambos existem, se um deles não existir, mande um feedback de erro pro jogador.

function soma (thePlayer, commandName, um, dois)
	local num1 = tonumber(um) -- Converte a string 'um' para número. Será false se não for possível.
	local num2 = tonumber(dois) -- O mesmo com 'dois'.
	if (not num1) or (not num2) then -- Se num1 não existe ou num2 não existe, então: (ocorre também se o que foi declarado no comando não foi número)
		return outputChatBox ("É obrigatório informar 2 números após o comando.", thePlayer, 255) -- Para a execução aqui e cancela a função.
	end
	local resultado = num1 + num2 -- A soma só pode ser feita com valores numéricos, 'um' e 'dois' são strings e não podem ser somados.
	outputChatBox ("A soma entre "..um.. "e "..dois.." é igual a: "..resultado..".", thePlayer, 255, 255, 255) -- Não precisa do true se não existir códigos #hex na mensagem.
end
addCommandHandler ("somar", soma)

 

Edited by Lord Henry
Correção da minha burrice, XD

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanks! spacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
18 hours ago, GM_Goulart said:

if (num1 and num2) >= 0 then

Acho que aqui você quis verificar se ambos os números são positivos?
Faça assim:

if (num1 >= 0 and num2 >= 0) then

Outra coisa também, a verificação if commandName then não é necessária pois sempre vai existir esse parâmetro.

Edit: Tem um erro no código do Lord Henry, linha 7, mude o outro valor para num2. Caso vá testar o código dele, fica o aviso.

Please do not PM me with scripting related question nor support, use the forums instead.

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