Ir para conteúdo
Entre para seguir isso  
iuniX

Tutorial: Return

Recommended Posts

iuniX    4
iuniX

Ae galera, anônimo da OTbr mais uma vez aqui. Brinks :B

 

Bom galera, hoje falarei sobre o RETURN, que todos acham que é um bicho de sete cabeças mas que na verdade não passa de algo simples e bem útil em alguns casos.

 

 

 

Utilização:

divisor.png

 

Exemplo 1:

function getPlayerSet(cid)
[b]local items = {}[/b]
for i = 1,10 do
	local item = getPlayerSlotItem(cid, i)
	if item.uid > 0 then
		[b]table.insert(item, items)[/b]
	end
end
[b]return items[/b]
end

 

Como podem ver nessa função, eu criei uma função que cria um loop e verifica todos os items do corpo do player e ela usa o return para retornar essa tabela com os items.

Com isso se eu precisar pegar todos os items do player é só usar essa função que ela retornara uma com os items do player. (Função não testada)

 

 

Exemplo 2:

function isTroll (cid)
[b]if string.lower(getCreatureName(cid)) == "troll" then
	return true[/b]
else
	[b]return false[/b]
end
end

 

Essa é uma função que irá verificar se o cid vai ter o nome de "Troll" e se for ela vai retornar true e se não for vai retornar false.

 

 

Return true e false em callbacks

 

Exemplo 3:

local config = {
daily = "no", -- allow only one enter per day? (like in global Tibia)
level = 100,
storage = 30015
entry =
{
	{x = 247, y = 659, z = 13},
	{x = 247, y = 660, z = 13},
	{x = 247, y = 661, z = 13},
	{x = 247, y = 662, z = 13}
},
destination =
{
	{x = 189, y = 650, z = 13},
	{x = 189, y = 651, z = 13},
	{x = 189, y = 652, z = 13},
	{x = 189, y = 653, z = 13}
}
}

config.daily = getBooleanFromString(config.daily)
function onUse(cid, item, fromPosition, itemEx, toPosition)
[b]	if(item.itemid == 1946) then
	if(config.daily) then
		doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
	else
		doTransformItem(item.uid, item.itemid - 1)
	end

	return true
end[/b]

[b]if(item.itemid ~= 1945) then
	return true
end[/b]

local players = {}
for _, position in ipairs(config.entry) do
	local pid = getTopCreature(position).uid
	[b]if(pid == 0 or not isPlayer(pid) or getCreatureStorage(pid, config.storage) > 0 or getPlayerLevel(pid) < config.level) then
		doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
		return true
	end[/b]

	table.insert(players, pid)
end

for i, pid in ipairs(players) do
	doSendMagicEffect(config.entry[i], CONST_ME_POFF)
	doTeleportThing(pid, config.destination[i], false)
	doSendMagicEffect(config.destination[i], CONST_ME_ENERGYAREA)
end

[b]doTransformItem(item.uid, item.itemid + 1)
return true[/b]
end

 

Dá para ver claramente que existem umas verificações checam valores e se eles forem verdadeiros então vai dar um return true que vai parar o script ali, assim evitando que ele execute o resto do script.

 

 

Curiosidade:

divisor.png

Bom galera eu sempre vejo scripts de alavanca usando verificação para ver o id da alavanca e para transformar a alavanca. Porém se vocês não colocarem essa verificação, a função de transformar o item e colocar um return false no final a alavanca irá se transformar da maneira padrão :]

 

 

 

Finalização:

divisor.png

Esse tutorial foi um pedido do Karyus e espero que tire as duvidas dele sobre o assunto. Qualquer duvida vocês podem perguntar ai que eu respondo.

Ficou um tutorial bem simples pois o assunto é BEM simples também e espero que não tenha esquecido de nada.

Editado por iuniX

Compartilhar este post


Link para o post
Elwyn    106
Elwyn

Eu tenho uma duvida.

 

quando usam return algumacoisa and isso or aquilo, comofas? que ser é isso?

Compartilhar este post


Link para o post
Guiminhah    0
Guiminhah

Esse é meu garoto :B Vou usar esse tutorial no desafio que você propôs pra mim... Não é considerado cheat né? :x

Compartilhar este post


Link para o post
MaXwEllDeN    13
MaXwEllDeN

@gugalol

Você já me ajudou paka quando eu era iniciane, então é hora de retribuir :D

tipo, o

return () and bla or false

é +/- tipo:

return if () then return bla else return false

 

o primeiro valor funciona como uma condição +/-, então se for true o and funciona como um then, e o or um else, exemplo:

 

function isTroll(uid)
  return (getCreatureName(uid):lower() == "troll") and true or false
end

espero que tenha entendido, Falous ae Guga :D

 

@Tópic

Thank's tio iuniX, várias dúvidas minhas foram resolvidas, até aprendi a usar o return, vallew. Brinks

 

Ótimo tuto iuniX, vai ajudar muitos que não sabem como usar o return :D

Editado por MaXwEllDeN

Compartilhar este post


Link para o post
Karyus    2
Karyus

@MaXwEllDeN

 

Agora com a explicação do iuniX e com a sua, deu para entender melhor a função do return. na frente de alguns códigos.

 

@edit. rep+ para os dois

Compartilhar este post


Link para o post
Elwyn    106
Elwyn
@gugalol

Você já me ajudou paka quando eu era iniciane, então é hora de retribuir :D

tipo, o

return () and bla or false

é +/- tipo:

return if () then return bla else return false

 

o primeiro valor funciona como uma condição +/-, então se for true o and funciona como um then, e o or um else, exemplo:

 

function isTroll(uid)
  return (getCreatureName(uid):lower() == "troll") and true or false
end

espero que tenha entendido, Falous ae Guga :D

 

@Tópic

Thank's tio iuniX, várias dúvidas minhas foram resolvidas, até aprendi a usar o return, vallew. Brinks

 

Ótimo tuto iuniX, vai ajudar muitos que não sabem como usar o return :D

 

Eu fiz a pergunta pro iuniX completar o Tutorial, o tópico, mas a sua resposta vai ficar aqui mesmo então tanto faz.

Compartilhar este post


Link para o post
Rômulo Souza    14
Rômulo Souza

Po Iunix, dava pra avançar mais hein.

 

Tipo retorno de varias valores, fica ai um pedido!

Compartilhar este post


Link para o post
RodolphoParanhos    0
RodolphoParanhos

Poxa que lega, aprendi pra caralho com isso. Agora tou expert, valeu.

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×