Ir para conteúdo

Featured Replies

Postado

Olá,participo do tibiaking faz muito tempo e nunca tive vontade de aprender LUA até alguns dias atrás.

começei a estudar 2 - 4 horas,assisto videos, leio artigos do lua.org, leio tutoriais aqui do tibiaking, em outros lugarem também.

porém fico com bastante duvidas, até tenho uma amigo muito bom mesmo com os LUA e outros estilos de linguagem,porém nem toda hora ele pode me ajudar.

se alguém puder me ajudar com as duvidas que tenho ficarei muito muito grato mesmo!!

 

1 -  como posso últilizar tabelas?

vejo muitos script aqui no tibiaking que possuem tabelas mas não últilizam da função

table.insert, ou de outra função table

alguém poderia me dar exemplos explicando?

não precisa ser muito grande,só preciso saber o basico,o resto corro atrás;

 

2 - como últilizar o return true / return false

vejo bastante script usando essas funçoes, e apenas sei que essas funções

true e false são para boolean, mas quando eu sei que retorne boolean?

pode me dar um exemplo dessas duas funções?

e da função sozinha (return)

 

3 - funções or e and

eu sei um pouco dessas funções, sei seu principio teórico mas não sei aplica-los.

irei tentar aplicar logo abaixo.

 

if level <= 99 and level <= 149 or level == 151 then

  doSendTextMessage(cid, 21, "você é level menor que 100")

  doSendTextMessage(cid, 21, "você é level menor que 150")

  doSendTextMessage(cid, 21, "você é level 151,pode passar")

end

----------

 

alguém pode me explicar se isso está certo,ou se dá para deixar o code mais curto?

 

 

 

Obrigado pela ajuda!

 

 

  • Respostas 9
  • Visualizações 2.5k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Opa meu querido, que bom que se interessou pela linguagem LUA, tenho certeza que irá gostar bastante daqui pra frente ao decorrer de seu aprendizado. Então, vamos lá! Irei tentar resumir algumas coi

  • Muito bem amigo, continue assim, se esforce e pratique bastante que isso é o que dar resultado no aprendizado.  O seu script está ficando interessante, porém possui alguns probleminhas, mas é NORMAL

  • Vou tentar explicar essa parte do CID de uma forma mais prática, demonstrando diferenças entre C e C++ e você pode tirar suas conclusões.   Considere o pedaço de código abaixo, escrito na li

Postado

Opa meu querido, que bom que se interessou pela linguagem LUA, tenho certeza que irá gostar bastante daqui pra frente ao decorrer de seu aprendizado.
Então, vamos lá! Irei tentar resumir algumas coisas para você..

2 horas atrás, ZikaLord disse:

1 -  como posso últilizar tabelas?

Bom, tabelas são meio que containers, dentro, você pode agrupar tanto variáveis, funções/métodos, valores e até mesmo outras tabelas, veja bem:
local tabela = {
aqui é o interior da tabela, que fica entre as chaves 
}
 

aqui está um script de exemplo:

local tabela = {
	
	variavel = 0
}

tabela.variavel = 5
print(tabela.variavel)

 como você pode ver, eu declarei uma tabela com uma variável dentro, inicializando com o valor 0. Após a declaração, alterei o valor dessa variável para 5 e depois imprimi este valor no console. Este é o básico de tabelas, você pode fazer um monte de coisa, também pode acessar valores soltos baseado nos índices, por exemplo :

local tabela = {5, 3, 10}
print(tabela[2])

Neste caso, imprimi o segundo índice da tabela, que é o valor 3, em lua, índices começam por 1 diferente de C++ por exemplo que começa com 0.
 

2 horas atrás, ZikaLord disse:

2 - como últilizar o return true / return false

Como você já sabe, true e false são boleanos que se auto-explica; verdadeiro ou falso. Um exemplo que irá lhe esclarecer com facilidade é uma função de validação, veja só:

function isPremium(player)
	if player:getPremiumDays() > 0 then
		return true
	end
	
	return false
end

Simplesmente se a quantidade de dias premium do jogador for maior que zero, retorna verdadeiro, senão retorna falso, assim, você pode pôr verificações em partes de seu código, dando acesso ao conteúdo após o if somente se o jogador for premium, veja:

if isPremium(player) then
	print('você é premium.')
else
	print('você não é premium, sinto muito.')
end

E return com boleanos se resume a isso. Ah, funções podem retornar outras estruturas também, como valores, strings, tabelas, outras funções, etc.. isso você vai entender mais pra frente.

2 horas atrás, ZikaLord disse:

3 - funções or e and

or e and você pode os chamar de operadores lógicos, são eles que lhe darão controle da situação durante a execução de seu código. Além deles, também existe o not, veja um exemplo, não é complicado:

if isPremium(player) and getName(player) == "Jorge" then
	print('você é premium.')
else
	print('você não é premium, sinto muito.')
end

Neste exemplo, utilizei o operador and. Agora só irá printar "você é premium" se o jogador for premium e se ele se chamar Jorge. Olha que legal, eu praticamente traduzi a condição para português hahah.

E se eu utilizar o operador or no lugar do and nessa condição? Neste caso, ele irá printar "você é premium" caso o jogador seja premium ou possua o nome Jorge, ele sendo o Jorge, não é obrigatório ser premium para validar essa informação, já que utilizamos OR.

 

Espero que tenha entendido, não deu pra explicar melhor porque já ta tarde, preciso dormir, mas se quiser ajuda com alguns conceitos, pode me chamar no Discord que eu dou uma força. Abraços amigão! Boas aulas! ?

Postado
  • Autor
1 minuto atrás, Lyu disse:

Opa meu querido, que bom que se interessou pela linguagem LUA, tenho certeza que irá gostar bastante daqui pra frente ao decorrer de seu aprendizado.
Então, vamos lá! Irei tentar resumir algumas coisas para você..

Bom, tabelas são meio que containers, dentro, você pode agrupar tanto variáveis, funções/métodos, valores e até mesmo outras tabelas, veja bem:
local tabela = {
aqui é o interior da tabela, que fica entre as chaves 
}
 

aqui está um script de exemplo:


local tabela = {
	
	variavel = 0
}

tabela.variavel = 5
print(tabela.variavel)

 como você pode ver, eu declarei uma tabela com uma variável dentro, inicializando com o valor 0. Após a declaração, alterei o valor dessa variável para 5 e depois imprimi este valor no console. Este é o básico de tabelas, você pode fazer um monte de coisa, também pode acessar valores soltos baseado nos índices, por exemplo :


local tabela = {5, 3, 10}
print(tabela[2])

Neste caso, imprimi o segundo índice da tabela, que é o valor 3, em lua, índices começam por 1 diferente de C++ por exemplo que começa com 0.
 

Como você já sabe, true e false são boleanos que se auto-explica; verdadeiro ou falso. Um exemplo que irá lhe esclarecer com facilidade é uma função de validação, veja só:


function isPremium(player)
	if player:getPremiumDays() > 0 then
		return true
	end
	
	return false
end

Simplesmente se a quantidade de dias premium do jogador for maior que zero, retorna verdadeiro, senão retorna falso, assim, você pode pôr verificações em partes de seu código, dando acesso ao conteúdo após o if somente se o jogador for premium, veja:


if isPremium(player) then
	print('você é premium.')
else
	print('você não é premium, sinto muito.')
end

E return com boleanos se resume a isso. Ah, funções podem retornar outras estruturas também, como valores, strings, tabelas, outras funções, etc.. isso você vai entender mais pra frente.

or e and você pode os chamar de operadores lógicos, são eles que lhe darão controle da situação durante a execução de seu código. Além deles, também existe o not, veja um exemplo, não é complicado:


if isPremium(player) and getName(player) == "Jorge" then
	print('você é premium.')
else
	print('você não é premium, sinto muito.')
end

Neste exemplo, utilizei o operador and. Agora só irá printar "você é premium" se o jogador for premium e se ele se chamar Jorge. Olha que legal, eu praticamente traduzi a condição para português hahah.

E se eu utilizar o operador or no lugar do and nessa condição? Neste caso, ele irá printar "você é premium" caso o jogador seja premium ou possua o nome Jorge, ele sendo o Jorge, não é obrigatório ser premium para validar essa informação, já que utilizamos OR.

 

Espero que tenha entendido, não deu pra explicar melhor porque já ta tarde, preciso dormir, mas se quiser ajuda com alguns conceitos, pode me chamar no Discord que eu dou uma força. Abraços amigão! Boas aulas! ?

 

vou estudar isso agora!!!
fiz um script com meus conhecimentos

MUITO MAS MUITO OBRIGADO MESMO <3

storage = 211100 -- storage checada 
local level = 100 -- level desejado
local item = [2545]-- coloque o id do item

function onUse(cid, item) -- função e parametros
if level == 100 or level ~= 100 then -- level que ira verificar
	doPlayerSendTextMessage(cid, "msg") -- mensagem caso não tenha o level necessario
elseif item == 2545 then -- verificando o item
	doCreatureAddHealth(cid, 1000 * 1000) -- vida adicionda
	doCreatureAddMana(cid, 1000 * 1000) -- mana adicionada
	doPlayerSendTextMessage(cid, "msg") -- se não querer que essa msg apareca apague
elseif storage == 211100 then -- checando a storage
	doPlayerSendTextMessage(cid, "msg")	-- mensagem caso tenha a storage x
	  end -- finaliza if
 return true -- retornando verdadeiro 
end -- finaliza function

 

Postado

Muito bem amigo, continue assim, se esforce e pratique bastante que isso é o que dar resultado no aprendizado. 
O seu script está ficando interessante, porém possui alguns probleminhas, mas é NORMAL, não se assuste.

O refiz para você estudá-lo e entender algumas coisas, enchi de descrições rsrs
 

-- variáveis locais (só são acessíveis dentro de escopos ou arquivos caso estejam soltas)
local needStorage = 211100
local needLevel = 100
local needItemId = 2545

function onUse(cid, item) -- função/evento com dois argumentos: cid = ID do jogador, item = userdata do Item

	-- esta verificação abaixo, seria útil para funcionar somente com o itemID informado na variável local ali em cima.
	if item.itemid == needItemId then -- verifica se o ID do item que está dando USE é igual ao itemId que está na variável local lá em cima.
		return false -- o script retorna falso e interrompe a execução do restante abaixo, ou seja, para por aqui mesmo. Lembre-se disso.
	end
	
	if getPlayerLevel(cid) < needLevel then -- se o level for menor que o necessário
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você não possui level suficiente.')
		return false
	end
	
	if getPlayerStorageValue(cid, needStorage) == -1 then -- VERIFICA se o jogador possui a storage informada lá em cima na variável local, no caso, -1 é o valor padrão para storages e significa que não tem caso realmente seja igual a -1.
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você não possui a storage necessária.')
		return false
	end
	
	-- ACIMA, você ver que há 3 condições, verifica o item se é o correto, o level e a storage.
	-- Se passar dessas 3 condições, o código abaixo será executado e validado, neste caso, executando abaixo, significa que o jogador possui todos os requisitos acima.
	
	doCreatureAddHealth(cid, 1000 * 1000) -- vida adicionda
	doCreatureAddMana(cid, 1000 * 1000) -- mana adicionada
	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Parabéns, você recebeu uma porrada de HP e MANA.')
	return true
end

 

Irei lhe indicar alguns editores de textos legais para lhe ajudar a organizar e entender melhor os seus códigos
Notepad++
Sublime Text 3
Atom

Utilizo os 3 e são ótimos, não é bom utilizar notepad normal porque ele não é apropriado para programação, somente texto SHAHUSAHUAS

Postado
  • Autor

@Lyu

Muito obrigado, você me deu muita ajuda mesmo, compreendi muito do que foi explicado, porém tenho algumas duvidas.

só pra ver se entendi mesmo as funçoes and or.

if isPremium(player) and getName(player) == "Jorge" then -- caso player for vip e tiver o nome de "jorge" então execute abaixo
	print('você é premium.') -- mensagem para o CONSOLE

if isPremium(player) or getName(player) == "Jorge" then -- caso player for premium ira executar abaixo; se ele não for vip e tiver o nome == jorge então vai executar
	print('você é premium.') -- mensagem para o CONSOLE

está certo? coloquei esses "textos" para melhorar meu compreendimento.

 

agora sobre o script refeito por você, gostei muito e é muito mais legal que o meu, porém não entendi em partes.

 

	if item.itemid == needItemId then -- porque item.itemid ? porque foi necessario esse (".") entre os items?
		return false
	end
	
	if getPlayerLevel(cid) < needLevel then -- se o level for menor que o necessário
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você não possui level suficiente.')
		return false -- false retorna pois se o player tiver level abaixo, se ele tiver level 99 então ira aparecer o texto acima
	end -- eu coloquei ali oque eu acho que o "return false" ira executar, está certo?
	
	if getPlayerStorageValue(cid, needStorage) == -1 then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você não possui a storage necessária.')
		return false -- false retorna pois se o player não tiver a storage == 211100 então ira executar a cima
	end

e percebi que você não últilizou elseifporque você não ultilizou elseif?

 

 

igual as tabelas lá encima não entendi o porque do uso desse (".") entre as variaveis.

tabela.variavel = 5
print(tabela.variavel)

OBRIGADO MAIS UMA VEZ CARA <3

Editado por ZikaLord (veja o histórico de edições)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo