GM_Goulart

[DUVIDA] Se o valor for nil.

Recommended Posts

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)

 

Share this post


Link to post

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)

 

  • Thanks 1

Share this post


Link to post

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
  • Like 1
  • Thanks 1

Share this post


Link to post
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.

  • Thanks 1

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.