Postado Junho 15, 2019 5 anos 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!
Postado Junho 15, 2019 5 anos 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 Junho 15, 2019 5 anos 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 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 Junho 15, 2019 5 anos 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 Junho 15, 2019 5 anos 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 e 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 elseif, porque 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 Editado Junho 15, 2019 5 anos 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.