Jump to content

[DUVIDA] Se o valor for nil.


GSC

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)

 

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

×
×
  • Create New...