Pesquisar na Comunidade
Mostrando resultados para as tags ''lua''.
Encontrado 68 registros
-
Iteradores são funções especiais criadas para iterar, ou seja, percorrer, listas, vetores (arrays), matrizes, tabelas ou o que quisermos. Nós criamos iteradores para usar na função for. Um exemplo de iterador que você já deve conhecer é o pairs. Vamos supor que eu tenha a seguinte tabela: k = {1, 2, 3, 4, 5}E eu queira iterar por todos eles imprimindo o seu quadrado. Como faríamos isso? Casualmente, o código seria este: for i = 1, 5 do print(i ^ 2) endMas e se eu quiser fazer isso várias vezes? Com uma lista que não segue um padrão? Então criamos um iterador, mas primeiro, vamos entender a estrutura de um em pseudocódigo Lua: function iterator(values) local pos = 0 --posição do iterador na lista return function() pos = pos + 1 if values[pos] ~= nil then return values[pos] end return nil end endPerceba que eu não retorno um valor especifico ao chamar a função iterator(), eu retorno uma nova função. Essa função será chamada pelo for até que seu retorno seja nil, onde Lua assume que o iterador acabou. E como eu sei quando acaba? Simples, há uma variável (chamei, neste caso, de pos) que armazena a posição dentro do array values do próximo valor a ser retornado. A cada iteração, o valor aumenta em 1 dentro da função. Quando eu acessar um índice dentro do array que não existe, seu valor (values[pos]) será nil, portanto eu testo essa condição. Parece bastante complexo, mas vamos voltar ao exemplo do quadrado. Chamarei minha função iteradora de square: function square(numbers) local pos = 0 return function() pos = pos + 1 if values[pos] ~= nil then return values[pos] ^ 2 end return nil end endA cada chamada da função de retorno, eu aumento a posição e retorno este elemento elevado ao quadrado. Então, usarei a função assim: for i in square(k) do print(i) endQue funciona como o esperado: O que mais podemos fazer com iteradores? Podemos, por exemplo, bloquear uma palavra usando a função onTalk do xotservx: local palavra = "jujuba" function splitWords(phrase) local pos = 0, words = phrase:gmatch("%w+") return function() pos = pos + 1 if words[pos] ~= nil then return words[pos] end return nil end end function onTalk(cid, type, text, position) for w in splitWords(text) do if w = palavra then return false end end return true endClaro que esse exemplo é bastante simplório, mas demonstra a utilidade dos iteradores. Neste caso, eu testo todas as palavras que o player falou para encontrar uma palavra especifica que eu defini. Podemos transformar isso tudo em um loop while, para você entender um pouco melhor: local words = splitWords(text) while w = words() do if w == nil then break end if w = palavra then return false end end end return trueUsando o iterador, ganhamos organização no código e o controle do for. Espero que façam bom uso de iteradores para organizar seus códigos
- 7 respostas
-
- lua
- iteradores
-
(e 2 mais)
Tags:
-
Olá galera. Um tempo atrás, para ajudar um amigo, fiz um debugger que permite usar algumas funções de Tibia de maneira mais "real", pois eu estava ensinando Lua para ele, e ele estava com dificuldades. De uns dias para cá eu atualizei bastante o programa, adicionei muitas features novas, deixando o mais completo possível. Adicionei Syntax Highlighting, Auto Indent, aprimorei a função de debug, etc. A principal novidade mesmo é que agora ele tem suporte pra mods. Sim, agora você pode criar extensões para o programa se souber mexer com wxLua. Changelog: Imagem: Download em anexo no tópico. Bom uso Luck Oake's Debugger.rar
-
Fala Galera, tudo bom? Bem... estou com um problema bem chato aqui... e gostaria da Ajuda de alguem, porque ja tentei muita coisa, e até outros foruns, e está sendo uma verdadeira dor de Cabeça... Bom, estou tentando iniciar um Servidor, porém... o CONFIG.LUA, creio que esteja com erro... Pois sempre que Clico para executar o server, antes mesmo de carregar ja da um erro: "Unable to load config.lua!" O server esta em Mysql, mas irei passar para Sqlite, mas mesmo assim mudando as configurações continua o problema... - Tentei pegar um outro arquivo Config.lua e substituir algumas configurações,... Passou o problema, mas deu muito erro, devido que não esta configurado corretamente... Então, assim penso que deve ser algo que esta faltando nesse arquivo, ou algo esta errado... Aqui esta o CONFIG.LUA, se alguem puder ajudar... serei eternamente grato! Obrigado!
-
Oque contem em um arquivo .lua de tibia 8.10? bom fiz um resumão de cada um das variáveis que contem em um arquivo .lua, e seu significa cada uma traduzido para português brasileiro. Prefiri colocar dentro de um spoiler, acho que facilita mais para o entendimento: [ spoiler ][ /spoiler ] Bom espero que seja de utilidade para consultas
-
getSearchString (Função da spell Exiva feita em Lua)
um tópico no fórum postou LuckOake Mods, funções e outros
Olá galera. Devido a um pedido, refiz a função getSearchString das sources do TFS em Lua, e vou aproveitar e postar ela aqui, caso alguém vá a precisar um dia. Explicando os parâmetros da função getSearchString(fromPos, toPos, isFromCreature, isToCreature): fromPos = posição inicial toPos = posição do objeto procurado isFromCreature = a posição inicial é uma posição de uma criatura? (true / false) [default = false] isToCreature = a posição do objeto é uma posição de uma criatura? (true / false) [default = false] E pra facilitar o uso, já aproveitei e fiz a função para usar o comando exiva: useExiva(cid, pid). cid = o uid do player que usa pid = o uid do player procurado Ambas as funções estão no code. Bom uso. -
Venda proibida!
-
Estou procurando alguem para realizar uma modificação em minha Source. Posso pagar pelo serviço! Preço: ( à combinar ) Preciso o mais rápido possível, então se você é scripter, e se considera profissional, ou seja que entende do assunto, por favor poste neste topico. Deixe seu skype, ou facebook se possivel __ Obrigado
-
Bom dia pessoal, bom após um tempo descobri este programa bem útil para aqueles que gostam de programar. Sim este editor não é só para webmaster e sim para vários programadores de outros tipos de linguagens. Para usar a syntax da linguagem escolhida basta fazer o seguinte: Na barra superior > Views > Syntax > escolha sua linguagem. Download: Aqui Scan: Aqui
- 3 respostas
-
- editor de texto
- editor de tags
- (e 4 mais)
-
G712z042[/pastebin] Input: local k = "Ola, seu fdp" print(reverse(k)) Output: fdp seu Ola,
-
cara to com um problema meu sercver 9.60 tinha um script asim que ficava brilhando letras coloridas e avisando que mostro tinah em caada portal mais nao ta funcionando e da um erro no console erro > doSendAnimatedText is now a deprecated function. local config = { positions = { ["Trainers"] = { x = 1117, y = 1214, z = 7 }, ["PvP Arena"] = { x = 1112, y = 1224, z = 7 }, ["Hydra"] = { x = 1106, y = 1217, z = 7 }, ["Bog Rider Etc"] = { x = 1107, y = 1196, z = 7 }, ["Templo"] = { x = 1112, y = 1217, z = 7 }, ["Enchanted >>>>>"] = { x = 1115, y = 1199, z = 7 }, ["Zao"] = { x = 1116, y = 1204, z = 6 }, ["Frost"] = { x = 1109, y = 1213, z = 7 }, ["Teleports"] = { x = 1011, y = 1047, z = 7 }, ["WOE,Breve"] = { x = 1014, y = 1047, z = 7 }, ["Piratas Etc"] = { x = 1117, y = 1222, z = 7 }, ["Quests"] = { x = 1117, y = 1218, z = 7 }, ["Dragons"] = { x = 1105, y = 1200, z = 7 }, ["Goroma"] = { x = 1108, y = 1225, z = 7 }, ["Vip City"] = { x = 1013, y = 1034, z = 7 }, ["Svar"] = { x = 1104, y = 1207, z = 7 }, ["Yalahar"] = { x = 1113, y = 1194, z = 7 } } } function onThink(cid, interval, lastExecution) for text, pos in pairs(config.positions) do doSendAnimatedText(pos, text, math.random(1, 255)) end return TRUE end script usado quem poder me ajuda agradeço versao 9.61
-
Já procurei em diversos manuais de .lua, mas não encontrei nada a respeito, como aqui no Xtibia tem alguns caras muito bons em .lua, estou pedindo ajuda. Problema: quero atualizar um valor de uma variável durante a execução do script, vou dar um exemplo bem simples aqui. function onUse(cid, item, fromPosition, itemEx, toPosition) local sto = 999999999 local get_sto = getPlayerStorageValue(cid, sto) doPlayerSendTextMessage(cid, 22, get_sto) setPlayerStorageValue(cid,sto,get_sto + 1) doPlayerSendTextMessage(cid, 22, get_sto) return true end O resultado desse script é que imprime na tela:"1,1", ou "2,2", e o que eu queria era que imprimisse "1,2" ou "2,3", por exemplo. sei resolver isso de 2 maneiras, mas nenhuma é do jeito que eu queria. 1 - ao invés de usar "get_sto", usar "getPlayerStorageValue(cid, sto)" direto no script. 2 - colocar outro "local get_sto = getPlayerStorageValue(cid, sto)" antes do segundo print. Eu quero atualizar a variável "get_sto" sem setar outro valor para ela, e não quero usar "getPlayerStorageValue(cid, sto)", parece bobeira mas esse script de exemplo é um script bobo, estou fazendo NPC's muito complexos. Por favor postem TODAS as possibilidades, por favor.
-
Simples, minha duvida é a seguinte: Tem como alterar o MOTD (a mensagem que aparece quando você loga no char) depois do OT estar online? se sim, qual é a função?
-
Distro:TFS 0.4 Servidor:Global Xtibianos, mais uma vezes recorro a vocês, A algum tempo vinha percebendo que por mais que eu configurasse a velocidade do respawn no config.lua, aparentemente a velocidade do respawn era a mesma, então fiz um teste, pus a rete do respawn = 0 e rate de loot = 0, porem o loot agora sempre cai as mesmas coisas (não cai full loot nem pouco), e o respawn ainda continua a mesma coisa. Solução para aumentar o tempo de respawn, e para diminuir o loot? sem mexer em cada respawn e em cada monstro também
-
Acho que estas dicas vão fazer a diferença e claro vai ajudar você a especializar mais em LUA. ----------------------Paramentos----------------------------- Paramentos são os as "coordenadas" de uma funçao exemplo: "getPlayerLevel(paramentos) " Os paramentos podem ser alternar em script para defenir a creature que acionou o scripts definimos o paramentos "CID' Mais podemos alternar colocando dentro de um paramento uma funçao. "setPlayerStorageValue(cid, 18644, getPlayerLevel(cid))" Como no exemplo colocaria o numero do level no player no valor da storage 18644 Podemos utilizar outras maneiras tambem como. "setPlayerStorageValue(cid, 18644, param)" ou uma tabela "setPlayerStorageValue(cid, 18644, tab[encontrar].acho)" ----------------Strings-------------------------------------- Strings tecnicamente gostam de imaginar lãs como manipuladores, pois eles manipulam valores. ------------------------------------------------------Simbolos Matematicos----------- E cada vez mais comum ver este símbolos em LUA e normalmente são símbolos que ja conhecemos e de fácil utilização Vamos a alguns exemplos: ------------------------------------------------Dicas Ferramentas.--------------------------- Debbuger Online( LUA DEMO) "http://www.lua.org/demo.html" Debbuger (Sciter) "http://www.scintilla.org" Editor Lua Iniciante (OtScriptLive) Editor (Bloco de Notas) --------------------------------------------Events------------------- Os eventos e iniciado em function ele são encontrados sempre na iniciaçao ele servem para dizer quando os scripts serão executados function onThink(cid, interval) Este e um exemplo de function encontrado em CreatureScript.
-
Tabelas são estruturas, que podem facilitar muito a vida de um scripter, e podem ser usadas para diversas finalidades, fica a gosto de cada um como usar. Achei esse tutorial na internet, e gostei bastante dele, por isso trago para vocês do Xtibia Vamos ao tutorial: Tables Tables são estruturas multidimensionais que permitem o armazenamento de dados diversos. Sua declaração é semelhante a de variáveis. local tabela = { } O acesso a estes valores na table é feito a partir da utilização de colchetes. local tabela = { } tabela[1] = ‘Carro’ tabela[2] = ‘Moto’ local variavel = tabela[1] print(variavel) Uma outra forma de atribuir valores a uma table é durante a sua declaração. local tabela = {‘Carro’ , ’Moto’ , 3.14} Funções Básicas table.concat() Concatena os ítens da tabela local tabela = {'amarelo','azul','vermelho'} local var = table.concat(tabela) print(var) table.insert() Insere um valor na tabela. local tabela = {'amarelo','azul','vermelho'} table.insert(tabela,'verde') print(tabela[4]) É possível ainda, incluir o valor em uma posição determinada da tabela. local tabela = {'amarelo','azul','vermelho'} print(tabela[1]) table.insert(tabela,1,'laranja') print(tabela[1]) print(tabela[2]) Você pode ver que um novo texto foi incluído na primeira posição da table. O texto que originalmente estava na primeira posição passou a segunda posição. table.maxn() Retorna o maior índice numérico positivo da tabela. Caso a tabela não possua índice positivo, será retornado zero. local tabela = {'amarelo','azul','vermelho'} print(table.maxn(tabela)) table.remove() Revome da table o último elemento. local tabela = {'amarelo','azul','vermelho'} table.remove(tabela) for i=1, table.maxn(tabela) do print(tabela) end É possível ainda informar qual o índice do elemento que deverá ser removido local tabela = {'amarelo','azul','vermelho'} table.remove(tabela,2) for i=1, table.maxn(tabela) do print(tabela) end No exemplo anterior, removemos o segundo elemento da table. table.sort() Ordena os elementos da table local tabela = {'verde','amarelo','azul','vermelho'} table.sort(tabela) for i=1, table.maxn(tabela) do print(tabela) end Algumas destas funções permitem a inclusão de outros parâmetros, aumentando a gama de opções, no entanto, iremos nos restringir ao básico para desenvolvimento. Créditos: Versao Digital
-
Ola amigos do XTIBIA tenho um grande problema que esta acontecendo no meu server, que seria: O ERRO que de um sistema de Go/Back de um Pokemon Tibia que eu achei. Este é o unico erro que esta no meu server, porfavor amigos me ajuda ae, VALENDO +REP! Erro quando coloco pra FORA da pokebola o pokémon. [13/04/2012 13:59:18] [Error - Action Interface] [13/04/2012 13:59:18] data/actions/scripts/goback.lua:onUse [13/04/2012 13:59:18] Description: [13/04/2012 13:59:18] (luaDoItemSetAttribute) Item not found [13/04/2012 13:59:18] [Error - Action Interface] [13/04/2012 13:59:18] data/actions/scripts/goback.lua:onUse [13/04/2012 13:59:18] Description: [13/04/2012 13:59:18] (luaDoTransformItem) Item not found [13/04/2012 13:59:18] [Error - Action Interface] [13/04/2012 13:59:18] data/actions/scripts/goback.lua:onUse [13/04/2012 13:59:18] Description: [13/04/2012 13:59:18] (luaDoItemSetAttribute) Item not found Erro quando coloco pra DENTRO da pokebola o pokémon. [13/04/2012 13:59:18] [Error - Action Interface] [13/04/2012 13:59:18] data/actions/scripts/goback.lua:onUse [13/04/2012 13:59:18] Description: [13/04/2012 13:59:18] (luaDoItemSetAttribute) Item not found [13/04/2012 13:59:30] [Error - Action Interface] [13/04/2012 13:59:30] data/actions/scripts/goback.lua:onUse [13/04/2012 13:59:30] Description: [13/04/2012 13:59:30] (luaDoTransformItem) Item not found [13/04/2012 13:59:30] [Error - Action Interface] [13/04/2012 13:59:30] data/actions/scripts/goback.lua:onUse [13/04/2012 13:59:30] Description: [13/04/2012 13:59:30] (luaDoItemSetAttribute) Item not found Arquivo: GoBack.lua function onUse(cid, item, fromPosition, itemEx, toPosition) function getPokemonMaxLife(name) local file = io.open('data/monster/monsters.xml','r') local arquivo = file:read(-1):lower():match('') file:close() local data = io.open('data/monster/'..(arquivo or ''),'r') if not data then return 100 end local maximo = data:read(-1):match('max%s*=%s*"(%d+)"') data:close() return maximo end ----- Config ----- local MaximoSummon = 1 local nome1 = getItemName(item.uid) local nome = nome1:match('(.-) Pokeball') local summons = getCreatureSummons(cid) local action_id = getItemAttribute(item.uid, "aid") ------ Config ----- local summons = getCreatureSummons(cid) if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid then doPlayerSendCancel(cid, "Coloque no slot certo!.") return TRUE end if getTilePzInfo(getCreaturePosition(cid)) then return doPlayerSendCancel(cid, "You can't use pokeball in Protection Zones.") end if getItemAttribute(item.uid,"level") >= getPlayerLevel(cid) then doPlayerSendCancel(cid, "You dont have level to use.") return TRUE end if(table.maxn(summons) < MaximoSummon) then -- no summons creature = doSummonCreature(nome, getCreaturePosition(cid)) doConvinceCreature(cid, creature) local hp = getCreatureHealth(getCreatureSummons(cid)[1]) doItemSetAttribute(getPlayerSlotItem(cid,8).uid, "aid", hp) doPlayerSay(cid, "Go,"..nome.."", TALKTYPE_SAY) registerCreatureEvent(cid, "PlayerPokeDeath") registerCreatureEvent(creature, "DiePoke") doSendMagicEffect(getCreaturePosition(creature), 188) doTransformItem(getPlayerSlotItem(cid,8).uid, 2532, 1) doItemSetAttribute(getPlayerSlotItem(cid,8).uid,"name",""..nome.." Pokeball") if action_id ~= 0 then doCreatureAddHealth(creature, -(tonumber(getPokemonMaxLife(nome) - action_id))) else doCreatureAddHealth(creature, getPokemonMaxLife(nome)) end else for _, pid in ipairs(summons) do if (table.maxn(summons) >= 1) then doItemSetAttribute(item.uid, "aid", getCreatureHealth(summons[1])) doSendMagicEffect(getCreaturePosition(creature), 188) doPlayerSay(cid, "Back,"..nome.."", TALKTYPE_SAY) doRemoveCreature(pid) doTransformItem(getPlayerSlotItem(cid,8).uid, 2532, 1) doItemSetAttribute(getPlayerSlotItem(cid,8).uid,"name", nome .." Pokeball") end end end return true end Valendo +REP Poxa galera, preciso muuuuuito da ajuda de vcs AJUDA ALGUEM AI, PORFAVOR VALENDO +REP
-
Xtibianos, queria saber se há uma função que me retorne a cor do char, e se houver qual a sua sintaxe. Ex: getPlayerColor(cid,detail) desde já, Obrigado!
-
O que são tabelas? R: São estruturas multidimensionais que permitem o armazenamento de vários dados. Como declarar uma tabela? R : local tabela = {} Como faz para adicionar valores na tabela? R: Para adicionar um valor na tabela, devemos inserir nossos dados entre os colchetes{} local tabela = {"skydangerous",15} Como inserir um dado na tabela? R: Para acessar um dado na tabela e fácil, cada dado adiciona tem uma posição. local tabela = {} tabela[1] = "skydangerous" tabela[2] = 15 local posicao1,posicao2 = tabela[1],tabela[2] print(posicao1,posicao2) Print: skydangerous 15 Podemos perceber que adicionamos dois conteúdos em nossa tabela. Fácil não? Como acessar a tabela? R: Para acessar os dados contido na tabela, é muito simples, basta sabermos a posição que ela se encontra em nossa tabela e indicarmos ela. local tabela = {"skydangerous",15} print(tabela[1],tabela[2]) Pronto, é muito simples, desse jeito que você irá acessar as duas posições na tabela e mostrar na tela. Print: skydangerous 15 Funções Básicas table.concat() R: Está função concatena os dados da tabela, ou seja junta tudo local tabela = {"skydangerous",15} local concatena = table.concat(tabela) print(concatena) Print: skydangerous15 Podemos perceber que ao mostrar na tela, os dados se juntaram, é isso que a função faz. table.insert() R: Insere um valor na tabela, porém local tabela = {"skydangerous",15} table.insert(tabela,"tibia") print (tabela[3]) Print: skydangerous 15 tibia Sem a Função: skydangerous 15 Podemos perceber que ao mostrar na tela, ele imprimirá um valor que não está na tabela, porém foi inserido na posição a seguir do 15. É possível também adicionar valores em qualquer posições. local tabela = {"skydangerous",15} table.insert(tabela,1,"tibia") print (tabela[1]) Percebe-se que adicionamos um valor na posição 1, passando os demais valores declarados em uma posição a mais. Print: tibia skydangerous 15 Sem a Função: skydangerous 15 table.maxn() R:Essa função retorna o maior índice positivos da tabela.Caso ela não possuir nada retorna nulo(0) local tabela = {"skydangerous",15} print(table.maxn(tabela)) Print: 2 Fim do Tutorial. Ele está bem explicado e detalhado.
- 14 respostas
-
- skydangerous
- lua
- (e 5 mais)