Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 05/08/15 em todas áreas
-
Olá pessoal, venho relatar mais um erro ai que esta ocorrendo. Após a inserção do popup de anuncio e etc... Começou a desalinhas umas partes da skin. Os ícones de notificação e mensagem...2 pontos
-
[Znote ACC] Cupons de Points
Filho do Beeny reagiu a Mudrock por um tópico no fórum
Sistema Ola pessoal do Xtibia hoje venho trazer para vocês um Sistema de regaste de cupom, que é geralmente usado em Eventos ou promoções onde o Administrador gera um Código, que pode vale Points ( indiferente o valor ) e o Player pode ativar no site e ganhar os points automaticamente na conta. Primeiro devemos executar a seguinte query em nosso banco de dados CREATE TABLE IF NOT EXISTS `__cornex_redeem` ( `id` int(11) NOT NULL, `points` int(11) NOT NULL, `used_by` int(11) NOT NULL DEFAULT '0', `time` int(11) NOT NULL, `ip` int(11) NOT NULL, `code` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ALTER TABLE `__cornex_redeem` ADD PRIMARY KEY (`id`); ALTER TABLE `__cornex_redeem` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; Caso não saiba executar segue o tutorial Agora é somente baixar os arquivos e colocar no website, caso tenha duvidas nesse processo me perguntem mais dentro das pastas já contem os nomes e os diretórios Download: https://www.dropbox.com/s/wtwjmj92qavkra1/redeem.rar?dl=0 Créditos : Cornex eu por traduzir e trazer ao Xtibia1 ponto -
(Completo!) Baiak ZIK VIP 15 Editado DeathRocks
Heisenberg reagiu a Administrador por um tópico no fórum
| Melhorado Mapa e Adicionado Varias Áreas | Novos Itens | Novas Questes | Novos Bichos | Adicionado VIP 15 | Retirado Bugs no Mapa... | Retirado Varios Bugs no Distro | Novo Visual do Templo | Critical System | Dodge System | Reset System,para resetar fale !reset | Guild Frags System | PvP Balanceado Agora todas vocações estão no balanço | Armas Arrumadas Para Melhor PvP | Varios Eventos | Invasões no Templo de Boss Automatico | Battle Field Event | City War | Adicionado CASTLE 24HORAS (COM CASTELO) e AVISOS DE INVASORES | Itens DONATES | Área DONATE ~~ (Só Entra Quem Usar o Itens de Premium Days) | Vários Novos Script | Fast Atk Arrumado | Frags no Look | Npc Hero Seller (Vende Itens Exclusivos para quem tiver honor points) Obs:Consegue no GFS) | Entre Muitas Outras Coisas | Confira ! | Senha do ADM: god/god IMAGENS Templo Parte Centro Treiners Abaixo do Templo Novo Visual Npc Hero Vendendo Itens Heros Castle WAR 24 Horas | Download http://www.4shared.c...ks_Vip_15.html? | Scan https://www.virustot...sis/1403811216/ | Créditos DeathRocks sirrubilax1 ponto -
Compilando OTCLient no Windows Antes de mais nada, gostaria de dizer que eu não fiz o tutorial, apenas traduzi para português. Link de post original >> https://github.com/e...ling-on-Windows Neste tutorial eu explicarei como compilar e rodar o OTClient em máquinas com o Windows. Faça o download do que você precisará Existem várias ferramentas que você precisa para compilar o projeto, cada uma delas está listada abaixo com seu link. * CMake 2.8.8 ou superior * CodeBlocks sem o MinGW, nós usaremos a versão mais nova * MinGW32 20120426 ou superior * otclient libraries for mingw32 * Código fonte do OTClient Tenha certeza que você instalou as últimas versões, caso contrário, as coisas podem não funcionar. Instale o MinGW32 Observe que o GCC que deve ser usado é o 4.6 ou superior, qualquer versão antiga do GCC que você já tenha instalado não funcionará porque o OTClient precisa de alguns recursos que só são suportados por compiladores recentes. Rode o instalador do MinGW32 e no processo de instalação quando for perguntado tenha certeza que você marcou a caixa para usar o catálogo mais atual. Instale o CMake Rode o instalador do CMake, durante o processo de instalação deverá ser perguntado se você quqer que o CMake configure suas variáveis do sistema(PATH), diga que não, isso será manualmente feito nos próximos passos. Instale o CodeBlocks Rode o instalador do CodeBlocks, Lembre-se, NÃO instale o MinGW quando ele pedir. Instale as bibliotecas do OTClient Extraia o arquivo otclient-libs_mingw32-dwarf2.zip em C:/MinGW/. Esse arquivo zip contem três pastas *lib, include e bin, que serão fundidas a C:/MinGW/lib, C:/MinGW/include e C:/MinGW/bin. Configure a variável PATH do sistema Agora que todas as ferramentas necessárias estão instaladas, você deve configurar a variável PATH do sistema, para fazer o CMake encontrar o MinGW32 e as bibliotecas instaladas, vá para: Painel de controle -> Sistema -> Avançado -> Variáveis de Ambiente Verifique se na área Variáveis de usuário, existe a variável PATH, se não, crie uma e defina ela como: C:\Program Files\CMake 2.8\bin;C:\MinGW\bin;C:\MinGW\lib;C:\MinGW\include Tenha certeza que a variável do usuário PATH existe e que refere para o diretório do CMake. Baixe o código fonte do OTClient Vá para página de download e faça o download do código fonte do OTCLient. O diretório onde você colocará esses arquivos não deve ser longo. Por exemplo: "C:\OTClient\" é um bom diretório, mas "C:\Program Files\OTClient" não é. Gere o arquivo de projeto do CodeBlocks Rode o CMake-gui.exe localizado em \Program Files\CMake 2.8\bin, e especifique o diretório onde você colocou o código fonte do OTCLient, e onde você quer que os arquivos do projeto sejam criados. Clique em configure, seleciona CodeBlocks - MinGW Makefiles, como gerador e gere os arquivos do projeto. Compilando Abra o arquivo de projeto do CodeBlocks que foi gerado (**otclient.cbp**) pelo CMake com o CodeBlocks. Para compilar você deve primeiro configurar a pasta do MinGW32, indo em Settings > Compiler And Debugger... > Toolchain Executables. Tenha certeza de copiar os arquivos Tibia.dat e Tibia.spr dentro da pasta /data/things// antes de rodar o cliente. Suporte a Dx9 Se você quiser ativar a camada de suporte do dx9 para o OTClient, você deve compilar com -DOPENGLES=2.0. Agora o OTClient.exe vai pedir pelas dll libEGL.dll e libGLESv2.dll que você pode conseguir aqui >> https://dl.dropbox.c...nt/dx9_dlls.zip, coloque essas dll na pasta do OTClient.exe Créditos: Eu por traduzir do github e trazer pra cá Edubart pelo tutorial original1 ponto
-
Forge System
Arisen Trapzer reagiu a Oneshot por um tópico no fórum
ADVANCED FORGE SYSTEM O SISTEMA DE CRIAÇÃO DE ITENS PARA SEU SERVIDOR Creio que muitos já conhecem o sistema de forja criado por mim, acontece que o código já estava um pouco obsoleto, então resolvi reescrever ele do 0. Simplesmente consiste em um sistema de criação de itens avançado que ressuscita um pouco do RPG perdido nos servidores de hoje em dia. O jogador poderá criar itens através de forja, agindo como um verdadeiro ferreiro medieval. Adiciona itens em cima de uma bigorna previamente colocada no mapa e com um martelo cria um item totalmente novo. CARACTERÍSTICAS DA VERSÃO FINAL: - Configuração intuitiva e fácil de compreender; - Mini-tutorial auxiliando criação de novas receitas; - Receitas podem conter até 250 itens diferentes com suas respectivas quantidades; - Sistema inteligente que identifica uma receita em qualquer ordem; - Código totalmente orientado a objetos; - Possibilidade de configurar diferentes requerimentos, diferentes skills, magic level e level Há dois modos de instalar o Advanced Forge System, o primeiro é seguir os passos deste tópico e o segundo e baixar pasta data/ anexada no tópico com os arquivos em seus respectivos diretórios, precisando apenas o registro das chaves nos arquivos XML. Escolha o modo que mais convém a você. Crie um arquivo em data/lib chamado forgesystem.lua e cole o conteúdo abaixo: --[[ ADVANCED FORGE SYSTEM FINAL Criado por Oneshot É proibido a venda ou a cópia sem os devidos créditos desse script. ]]-- RecipeHandler = { itemtype = 0, items = {}, level = 1, maglevel = 0, skills = {[0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0, [6] = 0} } Forge = { type = nil, position = nil, magicEffect = CONST_ME_MAGIC_GREEN, messages = { class = MESSAGE_STATUS_DEFAULT, success = "You have successfully forged a %s.", needskill = "You don't have enough %s to create a %s.", needlevel = "You need level %s to create a %s.", needmaglevel = "You need magic level %s to create a %s." } } function RecipeHandler:new(itemtype, items, level, maglevel, skills) local obj = { itemtype = (itemtype or 0), items = (items or {}), level = (level or 1), maglevel = (maglevel or 0), skills = (skills or {[0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0, [6] = 0}) } table.insert(Recipes, obj) return setmetatable(obj, {__index = self}) end function RecipeHandler:setItem(itemtype) self.itemtype = (itemtype or 0) end function RecipeHandler:setRecipe(...) self.items = {...} end function RecipeHandler:setRecipeItem(itemid, amount) table.insert(self.items, {itemid, amount}) end function RecipeHandler:setSkill(skillid, value) self.skills[skillid] = value end function RecipeHandler:setLevel(value) self.level = value end function RecipeHandler:setMagLevel(value) self.maglevel = value end function RecipeHandler:check(position) local match = false for n, item in ipairs(self.items) do local thing = getTileItemById(position, item[1]) if thing.uid > 0 and math.max(1, thing.type) >= item[2] then if n == #self.items then match = true end else break end end return match end function RecipeHandler:get(position) if self:check(position) == true then return setmetatable({type = self, position = position}, {__index = Forge}) end return false end function Forge:create(cid) if self.type.itemid == 0 then print("[FORGE SYSTEM - ERROR] ATTEMPT TO CREATE A RECIPE ITEMID 0") return end local status = true if(cid) then if getPlayerLevel(cid) < self.type.level then doPlayerSendTextMessage(cid, self.messages.class, self.messages.needlevel:format(self.type.level, getItemNameById(self.type.itemtype))) return end if getPlayerMagLevel(cid) < self.type.maglevel then doPlayerSendTextMessage(cid, self.messages.class, self.messages.needmaglevel:format(self.type.maglevel, getItemNameById(self.type.itemtype))) return end for skillid, value in pairs(self.type.skills) do if getPlayerSkillLevel(cid, skillid) < value then status = false doPlayerSendTextMessage(cid, self.messages.class, self.messages.needskill:format(SKILL_NAMES[skillid], getItemNameById(self.type.itemtype))) break end end end if status == true then for _, item in ipairs(self.type.items) do local thing = getTileItemById(self.position, item[1]) doRemoveItem(thing.uid, item[2]) end doSendMagicEffect(self.position, self.magicEffect) doPlayerSendTextMessage(cid, self.messages.class, self.messages.success:format(getItemNameById(self.type.itemtype))) doCreateItem(self.type.itemtype, self.position) end end dofile(getDataDir() .."/lib/recipes.lua") Crie um arquivo em data/lib chamado recipes.lua e adicione o conteúdo abaixo: ---------------------------------------- -----** TUTORIAL DE CONFIGURAÇÃO **----- ---------------------------------------- --[[ O 'ADVANCED FORGE SYSTEM' é muito fácil e intuitivo de configurar, você só precisa chamar a função RecipeHandler:new(...), sendo que você já configurar os atributos da receita nela ou usar outras funções para isso. Por exemplo, quero criar uma Magic Sword que precise de 100 Gold Nuggets. RecipeHandler:new(2400, {{2157, 100}}) Ou então Magic_Sword = RecipeHandler:new() Magic_Sword:setItem(2400) Magic_Sword:setRecipe({2157, 100}) Funções do Sistema: RecipeHandler:new(itemtype, items, level, maglevel, skills) --> Cria uma nova instância de forja. RecipeHandler:setItem(itemtype) --> Atribui um certo itemid como resultado da receita. RecipeHandler:setRecipe(recipe) --> Atribui uma receita. RecipeHandler:setRecipeItem(itemid, amount) --> Adiciona um itemid e sua quantidade a receita. RecipeHandler:setSkill(skillid, value) --> Atribui um valor necessário de uma certa skill para poder criar a receita. RecipeHandler:setLevel(value) --> Atribui o level necessário para criar uma receita. RecipeHandler:setMagLevel(value) --> Atribui o magic level necessário para criar uma receita. ]]-- --[[ Este é um exemplo de receita usando algumas funções. É uma Magic Sword (ITEMID: 2400) que precisa de 100 Gold Nuggets (ITEMID: 2157), além disso, o personagem que tentar forjar, precisa ter Level 100 e Sword Fighting 50. ]]-- Recipes = {} magicsword = RecipeHandler:new() magicsword:setItem(2400) magicsword:setRecipeItem(2157, 100) magicsword:setLevel(100) magicsword:setSkill(2, 50) Agora em data/actions/scripts, crie um arquivo chamado iron_hammer.lua e adicione o conteúdo abaixo: function onUse(cid, item, fromPosition, itemEx, toPosition) local recipe = nil for _, v in ipairs(Recipes) do recipe = v:get(toPosition) if(recipe ~= false) then break end end if(recipe) then recipe:create(cid) else doPlayerSendCancel(cid, "This is not a valid recipe.") end return true end E por fim em actions.xml, adicione a seguinte linha: <action itemid="4846" event="script" value="iron_hammer.lua"/> OPCIONAL - TALKACTION A talkaction abaixo mostra ao jogadoras receitas configuradas no servidor que ele pode fazer. Em data/talkactions/scripts, crie um arquivo chamado recipes.lua e adicione o conteúdo abaixo: function onSay(cid, words, param, channel) local ret = {} local msg = " ADVANCED FORGE SYSTEM\n" for _, recipe in ipairs(Recipes) do local skills = true for skillid, value in pairs(recipe.skills) do if getPlayerSkillLevel(cid, skillid) < value then skills = false break end end if skills == true then if getPlayerLevel(cid) >= recipe.level and getPlayerMagLevel(cid) >= recipe.maglevel then table.insert(ret, {recipe, true}) else table.insert(ret, {recipe, false}) end else table.insert(ret, {recipe, false}) end end for _, recipe in ipairs(ret) do msg = msg .."\nRecipe for ".. getItemNameById(recipe[1].itemtype) ..":\n\n" if recipe[2] == true then for _, item in ipairs(recipe[1].items) do msg = msg .."* ".. getItemNameById(item[1]) .." [".. math.min(item[2], math.max(0, getPlayerItemCount(cid, item[1]))) .."/".. item[2] .."]\n" end else msg = msg .."[LOCKED]\n" end end doShowTextDialog(cid, 2555, msg) return true end Em data/talkactions/talkactions.xml, adicione a linha: <talkaction words="/recipes" event="script" value="recipes.lua"/> Siga as instruções para configuração de novas receitas. Em breve vídeo de funcionamento Advanced Forge System.rar1 ponto -
[PNA] Pokémon new age - Open source
BrunooMaciell reagiu a Danihcv por um tópico no fórum
Galera, vim postar um servidor que o Aberos (Mario Junior) editou. Informações Base do servidor: eron 12 Servidor com sistema de contagem de Pokeball's usadas para capturar pokemons Pokedex diferente, própia do servidor Servidor contém 1° geração com seus respectivos shiny's Loot's modificados, agora estão vindo cartinhas pokémon Colodown bar totalmente diferente Prints Pokedex Colldown bar Catch Download Servidor, source e cliente Versão modificada pelo membro [member=JairKevick22] Scan Servior, source e cliente Versão modificada pelo membro [member=JairKevick22] Créditos Aberos Criadores do eron site1 ponto -
Seção tibia global
Mudrock reagiu a Piabeta Kun por um tópico no fórum
Queria saber se tem como reativar a seção de tibia global, já que os updates vem com as atualizações de lá, sim é uma area pouco movimentada, mais antes do rolo que deu no forum que geral foi ban a area estava mo animada. Acho que vale a pena e talz! Qual a sua opinião membro?1 ponto -
Znote AAC 1.5 (TFS 0.2/0.3/0.4 & 1.0)
Filho do Beeny reagiu a Bruno por um tópico no fórum
Bom, você pode usar a base do tfs: https://github.com/otland/forgottenserver/blob/master/schema.sql1 ponto -
Show de bola AnnaFeeh reputado!1 ponto
-
Oque são as source? Source é todo o codigo fonte de seu trabalho/projeto, é lá onde fica todos os codigos utilizados para executar uma ação/função. Todo programa/jogo é escrito por um programador e esse programador deve escrever na linguagem de computador em uma ide para depois compilar e virar binário. Todo o código que o programador escreve, se chama source ou em portugues, código fonte. Não é obrigatório você mecher com a source de um otserv se você não tem domínio de programação. Pode continuar seu servidor normalmente baixando os arquivos data,executavel e dll. Como abrir uma source para editar? Como os códigos são apenas textos podemos abrir-los em um editor de texto normal, porem para facilitar o trabalho do programador usamos IDE, o mais popular no mundo dos otservs, Dev-cpp. Qualquer melhor servidor de poketibia para projeto? Como você já sabe, servidores sem source não presta então nem pense em usar PDA para projeto sério porq não vai durar uma semana já um servidor com source é diferente, claro que é difícil aprender a mexer nos arquivos da source mais só basta querer aprender. ai vai alguns servidores de poketibia com source: http://www.xtibia.com/forum/topic/233718-erondino-v17-bpo-open-source/ http://www.xtibia.com/forum/topic/233665-pokemon-imperium-open-source/ http://www.xtibia.com/forum/topic/232971-erondino-v16-bpo-open-source/ http://www.xtibia.com/forum/topic/232978-pokemon-dash-20-source/ http://www.xtibia.com/forum/topic/233057-pda-pokemon-dash-advanced-open-source-2015/ http://www.xtibia.com/forum/topic/232976-pna-pokemon-new-age-open-source/ http://www.xtibia.com/forum/topic/229673-pfield-project-open-source/ http://www.xtibia.com/forum/topic/230011-brpokeot-open-sources/ http://www.xtibia.com/forum/topic/222270-pokemon-online-x-com-sources/1 ponto
-
[Show Off] RetornoDeLaug
Gabriel Couto reagiu a RetornoDeLaug por um tópico no fórum
Medieval Yurots -----1 ponto -
Gutorb, peguei as redeas aqui da seção novamente para voltar a fazer a coisa acontecer por aqui, estarei a disposição para tirar as dúvidas da galera na medida do possível, voltarei com os concursos em breve também para recriar a dinâmica da seção. Continue postando, tente sempre fugir do padrão, quanto mais difícil for, será melhor, assim você irá evoluir mais rápido, pois ficar na mesmice não faz ninguém crescer.1 ponto
-
[Resolvido] Abrir base Pstorm 3.20 em windows
miliopah reagiu a Filho do Beeny por uma questão
Tem jeito sim seus mentirosos. baixe: 1 - https://www.virtualbox.org/ 2 - https://www.debian.org/index.pt.html Assista: 3 - http://www.youtube.com/watch?v=1JsHCzjczWU Rode a cabeça! Instale o debian na maquina virtual e depois coloque o game lá e comece a jogar. Depois de testa compre uma vps e deixe o serve 24h on e chame seus amigos! Mereço 1 rep+1 ponto -
Quest Simples
JonatasLucasf reagiu a Bruno por uma questão
Sim, você está certo, eu sempre testo antes de falar merda, mais aqui no trampo é praticamente impossível, eu tinha me perdido na indexação, lua está sendo uma aventura pra mim hahaha! @@zipter98 Na verdade, Lua não é uma linguagem puramente orientada a objetos, ela fornece meta-mecanismos para que possa ser feita a implementação de classes e herança. De qualquer forma, agora está funcionando em tfs 1.1 hahaha: local quest = { items = { {2394, 1}, -- { id, quantidade } {2160, 1} }, sto = 98770 -- storage da quest. } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local queststatus = player:getStorageValue(quest.sto) if queststatus ~= 1 then for _, item in pairs(quest.items) do player:addItem(item[1], item[2]) end player:sendTextMessage(MESSAGE_INFO_DESCR, "Parabens! Voce completou a quest.") player:setStorageValue(quest.sto, 1) else player:sendTextMessage(MESSAGE_INFO_DESCR, "Desculpe! Voce ja completou esta quest.") end return true end1 ponto -
Quest Simples
JonatasLucasf reagiu a zipter98 por uma questão
^ sim. @Bruno Neste loop, id assumiria o valor dos indexes da tabela e qtd, as tabelas contendo ID e quantidade. Assim, o correto seria: local quest = { items = { {2394, 1}, -- { id, quantidade } {2160, 1} }, sto = 98770 -- storage da quest. } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local queststatus = player:getStorageValue(quest.sto) if queststatus ~= 1 then for _, item in pairs(quest.items) do player:addItem(item[1], item[2]) end player:sendTextMessage(MESSAGE_INFO_DESCR, "Parabens! Voce completou a quest.") player:setStorageValue(quest.sto, 1) else player:sendTextMessage(MESSAGE_INFO_DESCR, "Desculpe! Voce ja completou esta quest.") end return true end1 ponto -
Quest Simples
JonatasLucasf reagiu a gabrielbsales por uma questão
Só não usei um valor de retorno booleano pois não era necessário, mas não tava bom mesmo. Uma pergunta, TFS 1.1 é orientado a objetos?1 ponto -
Quest Simples
JonatasLucasf reagiu a Wend ll por uma questão
Faça oque o krono disse ou tente assim: function onUse(cid, item, frompos, item2, topos) if item.uid == 20006 then queststatus = getPlayerStorageValue(cid,98770) if queststatus == -1 then doPlayerSendTextMessage(cid,22,"Voce completou essa quest.") doPlayerAddItem(cid,2394,20) setPlayerStorageValue(cid,98770,1) else doPlayerSendTextMessage(cid,22,"Voce Ja Concluiu A Quest.") end else return 0 end return 1 end ali onde está doPlayerAddItem(cid,2394,20) é onde você irar altera o ID do item e a quantidade1 ponto -
[MOD] Pokedex Window - PDA (Show Off)
Drk Shadow reagiu a david0703 por um tópico no fórum
Adicionada versão 1.41 ponto -
[Show Off] RetornoDeLaug
Gabriel Couto reagiu a RetornoDeLaug por um tópico no fórum
SLAYER EDITADO Montanha -----1 ponto -
Unknown Heal
SelimBredly reagiu a RigBy por um tópico no fórum
Unknown Heal Introdução Eu tava criando essa script pra participa da oms, mais não deu tempo de coloca então ta aqui. Coloquei o nome de unknown heal porque eu não conseguir pensa em um nome pra ela. ¬¬ O que a script faz : -Se algum monstro ou player tiver te atacando o dano se transforma em curar. por exemplo se você toma um dano de 100 quando a magia tiver ativa esse dano de 100 vai se transforma em life pode ser configurado. Vamos la. xD creaturescript: unknownheal.lua: -- Do not remove the credits -- -- [CREATURESCRIPT] Unknown Heal -- -- developed by Rigby -- -- Especially for the Xtibia.com -- function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS then local vida = (value) -- não mecha nisso local retira = 1 -- 1 vai absorve o life todo , 2 vai obsorve metade do life if (getPlayerStorageValue(cid, 54654644) == 1) then doCreatureAddHealth(cid, (vida / retira)) doSendAnimatedText(getCreaturePosition(cid), "+"..(vida / retira).."!", 25) return false end end return true end function onLogin(cid) doPlayerSetStorageValue(cid, 54654644, -1) return true end creaturescript.xml tag: <event type="Login" name="unknownheal" event="script" value="unknownheal.lua"/> <event type="StatsChange" name="unknownheal2" event="script" value="unknownheal.lua"/> Login.lua adicione isso antes do ultimo return registerCreatureEvent(cid, "unknownheal") em spells/script unknownheal.lua: -- Do not remove the credits -- -- [SPELL] Unknown Heal -- -- developed by Rigby -- -- Especially for the Xtibia.com -- local tempo = 5 -- quanto tempo a magia vai durar local timer = 5 -- quantos segundos em segundo vai pode usa a magia -- obs:so vai começa a conta quando a magia tiver terminado local effect = 28 -- efeito da magia local storage = 1231234343 local storagemag = 54654644 -- não mecha function onCastSpell(cid, var) if getPlayerStorageValue(cid, storagemag) == -1 then if getPlayerStorageValue(cid, storage) < os.time () then setPlayerStorageValue(cid, storagemag, 1) doSendMagicEffect(getThingPos(cid), 28) setPlayerStorageValue(cid, storage, os.time () + tempo + timer) addEvent(termina, tempo*1000, cid) else doPlayerSendCancel(cid, "Voce so pode usar esse magia daqui a "..getPlayerStorageValue(cid, storage) - os.time ().." segundos.") end else doPlayerSendCancel(cid, "Voce ja ta usando a magia.") end return true end function termina(cid) setPlayerStorageValue(cid, storagemag, -1) doSendMagicEffect(getThingPos(cid), 29) end end Spells.xml tag: <instant name="Unknownheal" words="unknown heal" lvl="1" mana="0" prem="0" range="10" blockwalls="0" exhaustion="0" needlearn="0" event="script" value="unknownheal.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="3"/> <vocation id="4"/> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="0"/> </instant> Bug Ageitado funcionando 100%1 ponto