-
Total de itens
1104 -
Registro em
-
Última visita
-
Dias Ganhos
20
Tudo que LuckOake postou
-
Detalhe mais o funcionamento do sistema.
-
Acho que isso aqui dá: Nas levers erradas, coloque action id como 19010, e nas certas como 19012. Na lever que abre a porta, 19014. Tag: <action actionid="19010;19011;19012;19013;19014" script="xxxx.lua"/> No lugar de xxxx coloque o nome do script criado. Configurações estão no script. Quaisquer erros, poste aqui. ------------------------------------------------------------------------------------------------------------------------ Crie um arquivo em data/actions/scripts chamado jester_doll.lua e coloque isso dentro: Actions.xml: <action fromid="9694" toid="9699" script="jester_doll.lua"/>
-
Não é aconselhável fazer isso que você quer, resetar a database com o servidor ligado. Além do que, com ele desligado, não é possível executar scripts. É melhor simplesmente usar o phpMyAdmin mesmo com o servidor desligado. O motivo para não fazer isso com o server ligado é que só remover os valores das tabelas da database não é suficiente pra resetar mesmo. Os players continuariam online, os items continuariam nas houses, etc, aí no próximo server save voltaria tudo.
-
Olá galera. Tava aqui de boa sem o que fazer, aí tive essa ideia de fazer um tópico pros membros pedirem scripts simples. Regrinhas: NÃO PEÇA EVENTOS AQUI, SÓ SCRIPTS OU SISTEMAS SIMPLES; NÃO PEÇA SCRIPTS QUE JÁ EXISTEM; Se você quer algum script que está sendo vendido em algum lugar, poste aqui que eu faço pra você. Nesse tipo de caso, a regra número 1 pode ser desobedecida; Sem floods, comentários ou conversas no tópico; Por uma questão de organização, não gostaria que outros usuários sem minha permissão postassem scripts prontos para resolver pedidos aqui. Se quiserem resolver o pedido de um usuário, mande PM pra ele ou crie um tópico e poste; Faço qualquer tipo de script desde que seja da versão 8.54 até a 9.8; Não faço scripts para TFS 1.0; Não peça scripts ou sistemas que envolvam sources; Somente scripts que envolvam no máximo dois arquivos serão feitos; Máximo de dois pedidos por vez para cada usuário; Use um português adequado e detalhe bem seu pedido. Pedidos pouco detalhados ou com português ruim serão ignorados. Se não for bom com português, ao menos TENTE escrever adequadamente. O Oneshot e o Manoel Neto tem permissão para atender pedidos no tópico. Oneshot trabalha como quer, do jeito que quer e quando quer. Obs: E odeia leechers. Caso você não entenda o por quê de postar aqui ao invés de criar um tópico, pense no seguinte. Você quer um script bem feito, bem explicado e de fácil configuração ou um que qualquer usuário chega lá e faz? Garanto que todos os scripts que farei nesse tópico serão, no mínimo, de alta qualidade. Abraços e aproveitem a oportunidade. Ao contrários dos outros tópicos de fábrica de scripts, aqui não vou tentar fazer. Se estiver dentro das regras, vou fazer.
-
Fix'd:
-
O melhor tutorial de Programação Orientada a Objetos em Lua (Em português)
tópico respondeu ao LuckOake de LuckOake em Tutoriais de Scripting
É uma honra receber um elogio seu, ó grande mestre. Hihi -
O melhor tutorial de Programação Orientada a Objetos em Lua (Em português)
um tópico no fórum postou LuckOake Tutoriais de Scripting
Introdução ao OOP (Object-Oriented Programming) "A orientação a objetos é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos." Traduzindo, cada coisa que está presente em um programa é considerado um objeto. Exemplo disso são os jogos. Os personagens são objetos, podendo ser da classe NPC, Character, Monster... Mas o que é classe e objeto? - Definições Existem algumas definições essenciais para entender a orientação a objetos. As principais são classe, objeto, método e atributo. Classe: Podemos dizer que classes são grupos com características inicialmente iguais. Exemplo, na vida real, temos as classes "Humano", "Pássaro", "Inseto", etc. Cada classe tem seus membros, que são os objetos, suas características, que são os atributos, e suas ações, que são os métodos. Objeto: Cada membro das classes é chamado de objeto, por exemplo, na classe "Humano" existem os objetos eu, você, seu amigo, etc. Dá pra dizer que cada pessoa é um objeto da classe "Humano". Atributo: São as características da classe. Exemplo, na classe "Humano" temos algumas características como "Nome", "Altura" e "Idade", que variam de indivíduo para indivíduo, ou em programação, que variam de objeto para objeto. Método: São as ações que os objetos de uma classe podem realizar. Exemplo, objetos da classe "Humano" podem realizar ações como Beber, Comer, Correr. Em programação, cada ação dessa seria uma função ligada à classe, que é executada por um objeto. - OOP em Lua Lua, na verdade, não é uma linguagem orientada a objetos. Porém, possui uma biblioteca com artifícios que simulam isso, que são os meta-métodos e meta-tabelas. A principal função dessa biblioteca é a setmetatable. Ela transforma uma tabela normal em uma "tabela-objeto". - Criando classes: Para deixar mais claro, vamos criar uma tabela normal. Humano = {} OBS: Em orientação a objetos, sempre use Camel Case, que é deixar os nomes de classes e métodos iniciando com letra maiúscula. É só pra deixar o código mais bonito mesmo. Agora que criamos a tabela Humano, vamos colocar alguns atributos (características) nela: Humano = { nome = "", altura = 0, idade = 0, } Agora temos uma classe Humano com os atributos nome, altura e idade. Agora vamos criar um objeto dessa classe. Para isso, vamos criar uma função que transforma essa tabela em uma meta-tabela. Para isso, usamos a função setmetatable(table, metatable): function Humano:New(nome, altura, idade) local obj = {} obj.nome = nome obj.altura = altura obj.idade = idade return setmetatable(obj, {__index = self}) end Mas o que fiz ali? Simples. Peguei os parâmetros da função, coloquei dentro da tabela obj e depois criei uma meta-tabela. O que significa aquele self? Bom, o parâmetro self está implícito, então fica meio confuso. Você poderia fazer assim: function Humano.New(self, nome, altura, idade) No lugar de: function Humano:New(nome, altura, idade) Ou seja, aqueles : (dois pontos) são para não precisar declarar o self. O self serve para retornar o objeto da classe. Fazendo {__index = self}, você consegue acessar os atributos direto do objeto. Você entenderá isso um pouco mais pra frente. - Criando métodos: Vamos agora criar métodos, ou seja, o que os objetos da classe conseguem fazer, ou melhor, as funções que eles conseguem executar. Criaremos um método que faz a altura do objeto da classe Humano aumentar. Traduzindo, a pessoa cresce. function Humano:Grow(amount) amount = amount == nil and 1 or amount self.altura = self.altura+amount end O que fizemos ali? Primeiro, criamos um método ligado à classe Humano, chamado Grow (crescer em inglês). Depois, fizemos o seguinte para não dar erro: amount = amount == nil and 1 or amount. Ou seja, se o amount não for declarado, ele passa a valer 1. Depois, pegamos o atributo altura do objeto utilizando self.altura (lembra do self?) e acrescentamos o amount. Ou seja, se amount = 3, acrescentará 3 na altura do objeto. Simples, não? OBS: Métodos criados ligados à uma classe só podem ser executados por objetos dessa mesma classe! Se você tem um objeto da classe "Inseto", você não pode utilizar nele os métodos da classe "Humano". - Criando objetos Agora que você sabe criar classes e métodos, você pode criar objetos. É super simples, só fazer assim: hi = Humano:New("Manoel", 1.77, 16) Pronto, agora você tem um objeto na variável hi com o nome Manoel, altura de 1.77 e 16 anos. E como executar métodos nesse objeto? Simples também, veja: hi:Grow(0.34) No caso, o objeto da variável hi vai ter a altura aumentada em 0.34. E como modificar atributos do objeto sem precisar de funções? Outra coisa muito simples: hi.altura = 1.80 Isso fará a altura do objeto da variável hi ficar em 1.80. - Percepções Agora que você já sabe uma base de orientação a objetos, você perceberá que quando você usa uma função como string.lower(str), você está usando orientação a objetos, com um método da classe string. local a = "Batata" string.lower(a) é o mesmo que a:lower() Por que? Porque string é uma classe, lower é um método, e o método é string:lower(). Lembra do self implícito? - Final Bom galera, muito obrigado por lerem esse tutorial. Fiz ele dedicado ao meu amigo Manoel Neto. Utilizei como base os conhecimentos passados pelo meu mestre Oneshot. Quaisquer dúvidas e/ou sugestões, podem postar aqui no tópico. Proibido postar em qualquer outro fórum de Open Tibia brasileiro. -
As funções, em sua grande maioria, ao serem chamadas já retornam true ou false, dependendo da ocasião. Se a doPlayerSendCancel funcionar, vai retornar true. Aí o return ficaria parecido com isso: return true and true Desnecessário, não acha? Só retornando o doPlayerSendCancel já traz um true.
-
http://www.xtibia.com/forum/topic/205308-remake-scripts-antigos-refeitos/ Procure por AFK. @Topic Fikdik, cuidado com a gambiarra. return doPlayerSendCancel(cid, "[Idle-System] Você não pode utilizar este recurso caso esteja em batalha.") and true Esse and true não deveria estar aí.
-
Não era pra dar esse problema. Bem estranho. Vou ver o que faço aqui.
-
Tenta adicionar mais uma potion, só que com use with, e vê se funciona.
-
Estranho... Você deu /reload actions?
-
Hm... Não vejo erro no script. Dá algum erro no console?
-
Se lembrou de colocar na tag do actions.xml?
-
Aqui: if(not realAnimation) then doCreatureSay(itemEx.uid, "I feel better!")) else Mude para: if(not realAnimation) then doCreatureSay(itemEx.uid, "I feel better!") else
-
Pedido atendido? Se sim, reporte o tópico para a moderação mover.
-
Mude aqui: setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) Coloque o tempo em milissegundos. Exemplo, para colocar 2 segundos: setConditionParam(exhaust, CONDITION_PARAM_TICKS, 2000)
-
Já tem exhausted. Só se lembre de testar com players.
-
Modifique aqui: doCreatureSay(itemEx.uid, "I feel better!", TALKTYPE_ORANGE_1) Coloque assim: doCreatureSay(itemEx.uid, "I feel better!") E modifique aqui: doCreatureSay(itemEx.uid, "I feel better!", TALKTYPE_ORANGE_1, false, tid) Coloque assim: doCreatureSay(itemEx.uid, "I feel better!", TALKTYPE_SAY, false, tid)
-
Ah, no seu script original dava pra fazer isso sem problemas. Era só modificar a tabela, de exemplo a health potion: [2150] = {empty = 7478, splash = 2, health = {5000, 5000}}, -- health potion Era só colocar assim: [2150] = {empty = 7478, splash = 2, health = {5000, 5000}, mana = {5000, 5000}}, -- health potion Ou seja, só adicionar um "mana = {min, max}" alí.
-
Ué, por que não? Seu objetivo não era adicionar vida e mana ao mesmo tempo? O script que postei faz isso. Não entendi qual o problema.
-
Tá completamente explicado no meu post anterior. Releia.
-
Tag: <action itemid="xxxx;yyyy" script="potions.lua"/> No lugar de xxxx e yyyy, mude pro ID das poções. Você também pode adicionar mais IDs colocando ; (ponto e vírgula). Exemplo: 1213;8491;4891;5543 E no script você configura aqui: local POTIONS = { -- [id] = {empty_id, {hp, mp}, splash_subtype}, [2150] = {empty = 7478, stats = {5000, 5000}, splash = 2}, -- health potion [2151] = {empty = 7478, stats = {20000, 20000}, splash = 2}, -- health strong potion [2144] = {empty = 7478, stats = {5000, 5000}, splash = 7}, -- strong mana potion [2149] = {empty = 7478, stats = {15000, 15000}, splash = 7}, -- great mana potion } Todo id que você colocar na tag você também deve colocar aqui. Modelo: [id] = {empty = empty_id, stats = {hp, mp}, splash = splash_subtype}, id = id da poção empty_id = id da vial vazia {hp, mp} = {vida, mana} splash = subtype, só modifique se você souber o que está fazendo. Só ir adicionando.
-
Fiz uns ajustes no script: Configure aqui: local removeOnUse = true -- Remover a poção ao usar? (true / false) local usableOnTarget = true -- Você pode healar outras pessoas? (true / false) local splashable = false -- Dá pra jogar o líquido da poção no chão? (true / false) local realAnimation = false -- Se true, o texto do heal só será visível para player que estiverem a 1x1 sqm de distância (true / false) local giveEmptyVial = true -- Dar a garrafa da potion vazia para o player ao usar? (true / false) local healthMultiplier = 1.0 -- Multiplicador da health que a potion adiciona local mamaMultiplier = 1.0 -- Multiplicador da mana que a potion adiciona local POTIONS = { -- [id] = {empty_id, {hp, mp}, splash_subtype}, [2150] = {empty = 7478, stats = {5000, 5000}, splash = 2}, -- health potion [2151] = {empty = 7478, stats = {20000, 20000}, splash = 2}, -- health strong potion [2144] = {empty = 7478, stats = {5000, 5000}, splash = 7}, -- strong mana potion [2149] = {empty = 7478, stats = {15000, 15000}, splash = 7}, -- great mana potion }
-
Legal sua ideia, but... Mano, isso é realmente muuuito confuso. Tirando isso, maneiro o código. Só não acho que realmente será utilizada algum dia por não ser simples igual Lua normal.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.