
Tudo que MaXwEllDeN postou
-
Bug em um Sistema de raids
O quem coloca é o fórum. @Tópico Cara, posta aí o erro que tá sendo impresso na tela.
-
[Sugestão]Equipe
O que eu entendí é que ele queria uma equipe pra ajudar os outros com os projetos, dando ideias e tal, mas fica a pergunta: O Fórum em sí já não serve para isso?
-
Criando Funções
O return é literalmente RETORNAR. Vamos ver uma função simples: function mostrar_oi() print("oi") end Essa função não retorna nada, ela simplesmente faz imprimir na tela "oi". Agora vamos pensar no seguinte caso: Eu quero uma função que me dê o valor da soma de dois números, como ficaria? function somar(numero1, numero2) return numero1 + numero2 end Bem, essa função vai somar os dois parâmetros(numero1, numero2) e retorná-los, mas você pensa: Como assim retorná-los? Seguinte: local ummaisdois = somar(1, 2) print(ummaisdois) O que aconteceria nesse caso aí seria: A função somar, iria somar o número 1 com o número 2, e guardaria o valor na variável ummaisdois. Sobre return true e false: Olha, o return vai retornar um valor como mostrado anteriormente. Então se eu colocar return true ele vai retornar verdadeiro, e se eu colocar return false ele vai retornar falso. O return true nas funções "callback" do Open Tibia, como na function onSay(cid, words, param) serve "para indicar se ocorreu tudo bem na execução da função". Se eu coloco um return true em uma function onSay, quando o personagem falar as palavras configuradas no talkaction.xml, o servidor vai executar o script, mas não vai fazer o player "falar". Quando você coloca um return false ele executa o script, só que o player "fala" as words que estavam no talkaction.xml.
-
[Resolvido]Pedido - Item fixo no personagem
Olha, nem precisa colocar o imóvel e tal, só é no firstitems colocar para atribuir o nome do player a um atributo no item, e nesse script aí só é por uma verificação, se o nome do cara que usou o item não for igual ao atributo, não use. Fazendo isso só quem recebeu o item pelo firstitems vai poder usar! Funções: doItemSetAttribute(itemuid, attribute, value) getItemAttribute(itemuid, attribute) getCreatureName(uid)
-
[Resolvido]Alavanca de actions
Amigo, cuidado com o double post!
-
QUE ISSO! OMG!
Merda.
-
Olá '-'
Welcome, enjoy TK [:
-
Renato...
Ultra gay, aehauehaueuhauea
-
Eu estava
Parado eu estava só tinha acabado de morrer e dropou a BOH........
-
Deusa
Tudo Punheteiro
-
Olá Gente , Sou Novo !
Bem-vindo, espero que usufrua do forum e contribua bastante . Qualquer dúvida é só perguntar!
- VictorFT Mapping Thread
-
[Aula 9] Tabelas
<< Aula 8 - while & repeat Essa aula foi escrita por um suricato Notorious, todos os créditos pertencem à ele. Tabelas Aula 9 #Introdução Olá, nessa aula vamos conhecer um elemento que facilita muito a vida de programadores, principalmente quando se trata de um código com muitas variáveis e operações, as tabelas! Imagine uma tabela como se fosse uma estante com várias gavetas, quantas você desejar, dentro de cada gaveta tem um objeto, temos a gaveta um, a gaveta dois, e assim em diante ... podemos guardar objetos dentro de cada gaveta, tirar objetos delas e também saber o que tem dentro de cada uma, nessa analogia uma tabela é basicamente como se fosse essa estante. Uma tabela é uma variável estruturada que pode conter vários valores dispostos "dentro" de si (vide analogia), seu inicio é indicado por uma abertura de chave, ela pode conter inúmeros valores, de todos os tipos exceto nulo(nil), desde variáveis até strings, e dentro dela esses valores são separados por vírgulas (,), seu fim é indicado por um fechamento de chave. Essa definição pode ficar meio confusa aqui, mas garanto que ao longo da aula tudo vai se explicar. Exemplo: tb = {1, 2, 3, 4, 5} --> inteiros em uma tabela tb = {"hello", "world"} --> strings em uma tabela tb = {a = 2, b = 3} --> variáveis em uma tabela tb = {1, 2, 3, 4, 5} --> inteiros em uma tabela tb = {"hello", "world"} --> strings em uma tabela tb = {a = 2, b = 3} --> variáveis em uma tabela Como você pode perceber nos exemplos acima a declaração (criação) de uma tabela é semelhante a de uma variável comum, mas perceba que a estrutura é diferente, eu abri uma chave `{´ e dentro dessa chave comecei a colocar os valores que eu quero para cada posição na tabela, como se eu estivesse distribuindo-os nas "gavetinhas" 1, 2, etc, separados por vírgulas, é como se cada virgula indicasse que acaba uma gavetinha e começa outra, mas lembre-se só é permitido um valor em cada "gavetinha" e uma gavetinha não pode não ter valor ou ser nula, e no final ocorre um fechamento da chave `}´ que indica o fechamento/final da tabela. Através desses exemplos e definições percebemos uma coisa, uma tabela é uma variável comum, mas é como se pudessemos guardar vários valores dentro de uma variável só, dentro da tabela, ao invés de criarmos duas variáveis, porque não criamos uma tabela contendo os valores dessas duas variáveis. #Mas e então, qual é a vantagem de se usar tabelas? Além da organização e estruturação veremos mais pra frente jeitos de se manipular tabelas que farão com que seu código fique muito menor e mais prático com o uso delas, acompanhe ... #Agora vamos pra uma parte um pouco mais chatinha, preste atenção Tabelas contém indexes, o que é um index? Os indexes são chaves "primárias" às quais os valores da tabela são associados, todo valor em uma tabela exceto variáveis tem um index, o index se não definido por você é definido pela posição do valor na tabela, e eles tem a simples função de organização e identificação dos valores na tabela: tb = {2, 5, 4, 6} Sobre a tabela acima podemos afirmar que o valor 2 tem o index 1, mas porque? Pois como eu já falei o index é definido pela posição do valor na tabela, começando sempre do 1, então ele é o primeiro valor da tabela, tem a posição 1 E assim em diante, o valor 5 tem index 2, o 4 tem index 3, o 6 tem index 6 e sempre em diante ... Há também a opção de definir o index de um valor manualmente ao invés de simplesmente identifica-los pela posição na tabela, o que pode facilitar a associação de valores: --> [index] = valor tb = {2, 5, [15] = 30} Neste caso foi criada uma tabela, e para um de seus valores foi definido o index 15 manualmente, ou seja, o index do valor 2 é 1, e o do valor 5 é 2 (atribuidos pela posição), já para o valor 30 foi definido o index 15 manualmente, então o index do valor 30 é 15, e não 3 como seria normalmente ... #E como se pega os valores de uma tabela? Há dois meios de se pegar valores de dentro de uma tabela: Através do index do valor ou se a tabela contiver variáveis, através dos nomes das variáveis: t = {21, 23, 43, 54} t[2] --> esta sintaxe retornará o valor na tabela 't' no index 2, ou seja, 23 t[3] --> 43 t[4] --> 54 e assim por diante ... Para se obter valores de uma tabela através de variáveis inseridas nela é muito mais fácil: t = {level = 20, nome = "dragon"} t.level --> 20, 't' é a tabela e 'level' o nome da variável inserida nela t.nome --> "dragon" #A biblioteca 'table' Existem muitas funções dentro da biblioteca 'table', que são usadas para manipulação de tabelas, aqui vão elas e suas respectivas utilidades: table.concat (table [, sep [, i [, j]]]) --> Dada uma tabela onde todos os elementos são strings ou números retorna os elementos de i ou o inicio e j ou o fim concatenados em sequencia intercalados por 'sep', separador table.insert (table, [pos,] value) --> Insere o valor 'value' na 'pos' (index) na tabela 'table' table.remove (table [, pos]) --> Remove o valor associado ao index 'pos' da tabela 'table' table.sort (table [, comp]) --> Ordena os elementos da tabela 'table' em dada ordem, se comp é fornecido então ele deve ser uma função que recebe dois elementos da tabela e retorna true quando o primeiro é menor do que o segundo #E como uma tabela pode ser util no meu script? Pode ser útil na associação de valores, observe este script de troca de sexo, ao invés de dois ifs checando o sexo, como o sexo só pode ser 0 ou 1, você usa uma tabela: function onUse(cid) local sex = { [0] = 1, [1] = 0, } doPlayerSetSex(cid, sex[getPlayerSex(cid)]) return true end Se o sexo do jogador for 0, atraves do valor no index 0 na tabela, o sexo é trocado para 1, e vice-versa .. Como também pode ser útil para armazenar configurações ou variáveis: local config = { effect = 1, removeRune = true, combat = 2 } config.effect --> 1 config.removerune --> true config.combat --> 2 #Utilidades #Curiosidades Tabelas são o único mecanismo de estruturação de dados em Lua; Tabelas podem ser heterogêneas; isto é, elas podem conter valores de todos os tipos (exceto nil). Existem várias maneiras convenientes de se criar tabelas em Lua Campos de tabela podem conter funções *nil = tipo de valor nulo, vazio Gostou? Agradeça ... Exercício Crie uma tabela, contendo 2 valores inteiros, 2 strings e 2 variaveis. Printe os elementos semelhantes da tabela separadamente. OBS: Os valores podem ser aleatórios Aula escrita por um suricato Notorious, todos os créditos são dele. Aula 10 - O comando for >>
-
[Aula 8] while & repeat
<< Aula 7 - Estruturas de Controle Essa aula foi escrita por um urso gordo Mock, todos os créditos pertencem à ele. While & repeat Aula 8 Primeiramente desculpe a demora por essa aula, ficou meio aquela de; ah faz você, não faz você, anem faz você; Mais em fim estamos de volta com uma coisa indispensável em scripting que são os loops. Antes de tudo devo avisa que loops são perigosos, você pode travar seu servidor inteiro usando errado um loop. Os loops são usados para inicialmente quando temos varias funções juntas iguais, por exemplo, fazendo um jogador falar oi 10 vezes. Sem os loops você faria assim: doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) Com loops você resume isso a 4 linhas, e ainda pode fazer milhares de coisas com eles! While Sintaxe: Traduzindo: Então repare, enquanto algo for verdadeiro fazer... Ele vai executar o que estiver dentro do loop infinitas vezes até que o ((sentença)) seja falso ou você mande ele parar. Veja um exemplo: while getPlayerLevel(cid) < 10 do --- Enquanto o level for menor que 10 doPlayerAddExp(cid,1000) adcionar 1k de exp por vez end Viram? enquanto o nível for menor que 10 ele vai adicionar 1k de exp. Ele ira verificar, se for false (maior que 10) ele pula tudo e vai para o que estiver depois do end, se for true (for menor que 10) ele ira adicionar 1k de exp e depois ira verificar de novo, ele vai executar até que seja 10. Nessa hora que se tem que tomar cuidado, é na verificação. Se você colocar algo como: while 1 < 2 do, ele vai executar eternamente, até que vc encerre o programa forçadamente (ctrl-alt-del) ou reinicie o pc, ou então feche o programa no X Veja mais alguns exemplos: pos = {x=100,y=100,z=100,stackpos=0} local stack = 0 while stack < 255 do pos.stackpos = stack local item = getThingFromPos(pos) if item.itemid ~= 0 and isCreature(item.uid) == false then doRemoveItem(item.uid,item.type) end stack = stack+1 end Nesse exemplo declaramos uma pos e um numero, no loop verifica se o numero é menor que 255, se for a stackpos vai ser igual ao numero e depois ira verificar o que tem no mapa naquela posição, se tiver um item e nao for um player ou monster ele ira remover o item e no final adcionar +1 numero a nossa variavel stack, Nisso repare, ele ira executar 255 veze e ira deletar todos os items daquela posição imagina vc escrevendo isso 255 vezes sem o loop . Repeat Ao contrario do while ele é tudo ao contrario, a verificação é no fim e ele só repete se for false (contrario de while que é se for true) Sintaxe: Tradução: Bem nao seria até seria até que nao, pois se você usar: until true ele vai parar, e se usar: until false ele vai continuar. è ao contrario especificando mais. Diferente do while, o repeat ele executa primeiro o bloco para depois verificar, a verificação é no final. Tambem perigoso pois se usado incorretamente vc vai travar seu server tambem. Mais nao ligue pra isso todos que começam a mexer com loops sempre travam seus servidores no começo é normal. Veja o repeat em uso: local n = 0 repeat n = n+1 print('ola pessoas este é o loop numero:'..n) until n == 10 Ele ira executar 10 vezes, ele ira parar quando n for 10. Agora veja o exemplo de limpar o char adaptado para o repeat e veja a diferença (repare nos sinais de > e< ) pos = {x=100,y=100,z=100,stackpos=0} local stack = 0 repeat pos.stackpos = stack local item = getThingFromPos(pos) if item.itemid ~= 0 and isCreature(item.uid) == false then doRemoveItem(item.uid,item.type) end stack = stack+1 until stack > 255 Viram? Ao invez da verificação ser no começo do loop ela é feita no final, entao ao final do lopp antes da verificação eu adciono +1 no valor da variavel stack, e ele so ira parar o loop assim que stack for maior que 255 (ou seja 256), entao assim que o script dentro do loop temrinar com o valor 256 ele ira parar o loop e prosseguir com o resto do script. break Antes de terminarmos irei falar rapidamente sobre o break. Ele é usado APENAS em loops e serve para "quebrar" o loop, acontece quando vc quer parar o loop sem a verificação, ou parar antes de algo. Veja: local parar = 0 while os.date('%S') == '45' do print('Verificando se agora são 45 segundos') if parar > 25 then break end print('Nem é agora são:'..os.date('%S')..' segundos') parar = para+1 end print('oi') Nesse caso criei um script para ver se agora são X horas X minutos e 45 segundos (não importa quantas horas e minutos só os segundos), e se depois de 25 verificações não for 45 segundos ele ira usar o break. Quando usado ele ira finalizar o loop e irar continuar a executar o script depois do loop, no caso o print('oi') ai e o resto do script (caso exista) Nesse caso criei um script para ver se agora são X horas X minutos e 45 segundos (não importa quantas horas e minutos só os segundos), e se depois de 25 verificações não for 45 segundos ele ira usar o break. Quando usado ele ira finalizar o loop e irar continuar a executar o script depois do loop, no caso o print('oi') ai e o resto do script (caso exista) Exercícios Faça seguinte: Crie um loop que execute enquanto o player estiver online, e enquanto ele estiver online colocar para kickar ele. Use o repeat para criar um script que solte 25 magic effects diferentes. Use qualquer loop para criar um script que mova um player por 5 sqms em direções aleatórios (o script deve parar com o break!) DESAFIO Crie um script que gere um loop infinito que só pare depois de 10 segundos de execução. Essa aula foi escrita por um urso gordo Mock, todos os créditos pertencem à ele. Aula 9 - Tabelas >> Respostas: local time = 10 --- segundos time = time+os.clock() while true do if time <= os.clock() then break end end
-
CTF Capture The Flag Bug
Olha lá no tópico do CTF, atualizei ele, testei e transformei em MOD, testa aí!
-
CTF Capture The Flag Bug
-
O verdadeiro tibiano [GuuhTorres]
World?
-
CTF Capture The Flag Bug
Qual versão de servidor você está usando? Tem Teamviwer?
-
CTF Capture The Flag Bug
Cara, isso não é bug, é só uma advertência do servidor que tem mais de um item como o mesmo uniqueId, é besteira isso. [16/11/2012 00:46:01.491] Duplicate uniqueId 17530 [16/11/2012 00:46:01.501] Duplicate uniqueId 17531 Você colocou alguma bandeira no mapa, ou alguma actionid em algum piso?
-
[Resolvido][Pedido] Shop Vender 1 item
Vou mudar o nome no tópico, fico aguardando você postar a resolução para movê-lo para dúvidas sanadas!
-
Vender Spells no SHOP Gesior (AJUDA)
Aconselho usar o site modificado pelo Gabriel(gPeto), fica muito mais elegante. Mas, se você quiser usar como um item que será vendido no site, aí está o código: function onUse(cid, item) if getPlayerStorageValue(cid, STORAGEDASPELL) > 0 then return doPlayerSendCancel(cid, "Você já sabe como usar a magia!") end setPlayerStorageValue(cid, STORAGEDASPELL, 1) return doRemoveItem(item.uid, 1) end Usando um os.time() aí tem como fazer para que o player só "saiba como usar" a magia por um determinado tempo.
-
Prazer, Camilla!
[mentiras] [/mentiras] [verdades] 1º -> Ninguém gosta do Sky; 2º -> Ele nem é seqçi; 3º -> Só é uma garota aparecer que trocentos caras vêm fazer posts. [/verdades] [nãosei] Todas as coisas, menos as que eu sei. [/nãosei] Seja bem-vinda garota, é sempre bom ver alguma mulher no mundo Tibiano. Apesar de eu ter parado no global a um tempo considerável, joguei um tempinho por um mês e não tem mais a mesma graça que tinha antigamente, onde você poderia demorar meses pra pegar leveis, mas ainda tinha muita diversão. Hoje em dia consiste-se em: /\ 80% dos jogadores hoje em dia são assim;
-
Soul System
Cara, só é digitar: aura typodaaura
-
Automatização e Simplificação de Scripts
Amigo, por-favor poste os créditos do autor, essa não é a primeira vez que você foi informado a fazer isso ¬¬ @EDIT Agora sim.
-
Ajuda com esse Script
Dá uma olhada: Magic Gems Nesse meu, quando você desloga o efeito é retomado quando volta, ele só conta enquanto o player está online!