Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 03/01/16 em todas áreas

  1. CONTEÚDO REMOVIDO: AGORA VOCÊ VAI TER QUE TER CRIATIVIDADE OU SE PENDURAR-SE NAS COSTA DE ALGUÉM, MENOS NA MINHA - BOA SORTE! error 404 - I do not serve the forum I retired.
    4 pontos
  2. Antes do if not target:isPlayer() then return true end coloque isso: local creature, target = Creature(creature), Creature(target)
    2 pontos
  3. Pô nem fala, eu to ansioso para caralho também, eu já disse que eu tenho a primeira aula já pronta kkkkk mas o lançamento da escolinha tinha que ser sincronizado junto com outro evento... e esse evento independe de mim... haha, se eu der muitos detalhes como quem é/são o/os responsáveis eu vou dar spoiler. Na verdade já to meio que dando...
    2 pontos
  4. Sirarcken

    Editor de Sprites? Object builder!

    Atualizou para 10.90 e esta funcionando. Todos os Creditos ao Jano que modificou e fez funcionar Object Builder Scan A scan esta acusando um virus ou seja la oque for isso ,mais e na source. O executável funcionando. ObjectBuilderJano FIX2.rar sources obj 1076+ fix 0.2.rar
    2 pontos
  5. Tony Araujo

    [OrochiElf] New OTRestarter v1.0

    New OTRestarter version: 1.0 developer: Tony Araújo (OrochiElf) pt. Gabriel Nogueira (Idéias) Funções: - Auto Restarter (Ele inicia o servidor assim que ele não detectar mais que o processo está ativo, ou seja, toda vez que o seu servidor fechar sozinho, o programa automaticamente irá reconhecer e irá reinicia-lo.) - Auto Crash Timer (Uma nova função inédita foi adicionada, esta função é responsável por detectar quando o processo do servidor para de funcionar, algo que acontece frequentemente, então ele irá reconhecer e reiniciar o processo.) - Auto Restarter Timer (Outra função nova adicionada nesta versão, esta função é responsável por programar os horários que você deseja reiniciar o seu servidor. ela é bastante usada para evitar o desperdício de memória usada no consumo do processo do servidor, ou seja, quando um servidor está ativo por muito tempo o gasto de memória aumenta, então esta função irá reiniciar o processo do seu servido de acordo com os horários que você marcar. Para próxima versão: - OTRestarter hosting (Esta função será uma inovação bastante bacana, ela dará o direito de você acessar o Restarter *que estará provavelmente instalado no VPS/Dedicado do servidor* sem que a pessoa precise acionar a conexão remota, ou seja, funcionará parecido com um FTP Control, você poderá controlar o Restarter e ter acesso as informações gravadas no LOG do programa através de um simples client, deixando possível ser acessado em computadores diferentes, e em breve uma versão para mobile/celular.) Imagem do funcionamento do programa: Download: Link Aqui
    1 ponto
  6. L3K0T

    OtPokémonDBR Online

    CONTEÚDO REMOVIDO: AGORA VOCÊ VAI TER QUE TER CRIATIVIDADE OU SE PENDURAR-SE NAS COSTA DE ALGUÉM, MENOS NA MINHA - BOA SORTE! error 404 - I do not serve the forum I retired.
    1 ponto
  7. t[item.uid] muda pra t[item.itemid], é quase oque o danih falou mas é itemid e não somente id.
    1 ponto
  8. tente assim: function onSay(cid, words, param) if(param == "") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hunted [BOUNTY HUNTERS] Use: \"!hunted kks,nick\".") return TRUE end local t = string.split(param, ",") if(not t[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hunted [BOUNTY HUNTERS] Use: \"!hunted kks,nick\".") return TRUE end local sp_id = getPlayerGUIDByName(t[2]) if sp_id == nil then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hunted [BOUNTY HUNTERS] Esse player nao existe.") return TRUE end local result_plr = db.storeQuery("SELECT * FROM `bounty_hunters` WHERE `sp_id` = "..sp_id.." AND `killed` = 0;") if(result_plr ~= false) then is = tonumber(result.getDataInt(result_plr, "sp_id")) result.free(result_plr) else is = 0 end prize = tonumber(t[1]) if(prize == nil or prize < 1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hunted [BOUNTY HUNTERS] Use: \"!hunted kks,nick\".") return TRUE end if(prize >= 100000000000000000000) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hunted [BOUNTY HUNTERS] Desculpe,numero muito grande!") return TRUE end if is ~= 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hunted [BOUNTY HUNTERS] Este player ja esta hunted, confira em nosso site a lista.") return TRUE end if doPlayerRemoveMoney(cid, prize*1000000) == TRUE then db.query("INSERT INTO `bounty_hunters` VALUES (NULL,"..getPlayerGUID(cid)..","..sp_id..",0," .. os.time() .. ","..prize..",0,0);") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hunted [BOUNTY HUNTERS] Hunted adicionado com sucesso!") for _, pid in pairs(Game.getPlayers()) do local player = Player(pid) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("Hunted Update:\n %s deu hunted em %s e esta pagando por sua cabeça: %d kks!", Player(cid):getName(), t[2], prize)) end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hunted [BOUNTY HUNTERS] Você não tem dinheiro!") end return 1 end
    1 ponto
  9. NPC <?xml version="1.0" encoding="UTF-8"?> <npc name="Nick" script="tournament1.lua" walkinterval="999000" floorchange="0"> <health now="150" max="150"/> <look type="150" head="20" body="100" legs="50" feet="99" corpse="2212"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|. Sou o NIKE, Encarregado pelo Torneio diario caso queira entrar diga: {torneio}."/> </parameters> </npc> lib torneio torneio = { awardTournament = 2160, awardAmount = 1000, playerTemple = {x = 1044, y = 883, z = 7}, tournamentFight = {x = 894, y = 538, z = 15}, area = {fromx = 1240, fromy = 1782, fromz = 7, tox = 922, toy = 572, toz= 15}, waitPlace = {x = 1219, y = 1805, z = 7}, waitArea = {fromx = 957, fromy = 536, fromz = 15, tox = 983, toy = 552, toz= 15}, startHour1 = "07:50:00", endHour1 = "08:00:00", startHour2 = "11:50:00", endHour2 = "12:00:00", startHour3 = "17:50:00", endHour3 = "18:00:00", startHour4 = "22:50:00", endHour4 = "23:00:00", price = 500, revivePoke = 12344, } function getPlayersInArea(area) local players = {} for x = area.fromx,area.tox do for y = area.fromy,area.toy do for z = area.fromz,area.toz do local m = getTopCreature({x=x, y=y, z=z}).uid if m ~= 1 and isPlayer(m) then table.insert(players, m) end end end end return players end
    1 ponto
  10. L3K0T

    Sistema Torneio 4x ao dia PRA SITE + NPC

    algum erro na distro ? poderia me mandar caso houver. tente essa lib de NPC/liblib.rar antes de baixar tente assim <?xml version="1.0" encoding="UTF-8"?> <npc name="Nick" script="tournament1.lua" walkinterval="999000" floorchange="0"> <health now="150" max="150"/> <look type="150" head="20" body="100" legs="50" feet="99" corpse="2212"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|. Sou o NIKE, Encarregado pelo Torneio diario caso queira entrar diga: {torneio}."/> </parameters> </npc>
    1 ponto
  11. L3K0T

    Aumentando o ShootEffect /x

    CONTEÚDO REMOVIDO: AGORA VOCÊ VAI TER QUE TER CRIATIVIDADE OU SE PENDURAR-SE NAS COSTA DE ALGUÉM, MENOS NA MINHA - BOA SORTE! error 404 - I do not serve the forum I retired.
    1 ponto
  12. CONTEÚDO REMOVIDO: AGORA VOCÊ VAI TER QUE TER CRIATIVIDADE OU SE PENDURAR-SE NAS COSTA DE ALGUÉM, MENOS NA MINHA - BOA SORTE! error 404 - I do not serve the forum I retired.
    1 ponto
  13. L3K0T

    Sistema Torneio 4x ao dia PRA SITE + NPC

    troca function onTime() por function onTimer() no script torneio.lua do globalevents
    1 ponto
  14. Tente assim: local config = { level = 700, -- level que ganha o dinheiro coin = 10000 -- coin é em gold coin, ou seja, 1 é 1 gold coin, 100 é 1 platinum coin, 10000 é 1 crystal coin } function onKill(cid, target) if isPlayer(cid) and isPlayer(target) then if getPlayerLevel(target) >= config.level then broadcastMessage(getCreatureName(target).."["..getPlayerLevel(target).."] acabou de ser morto pelo jogador "..getCreatureName(cid).."["..getPlayerLevel(cid).."].", MESSAGE_EVENT_ADVANCE) Player(cid):addMoney(config.coin) Player(cid):sendTextMessage(MESSAGE_STATUS_DEFAULT, string.format('Você ganhou %d golds por matar o jogador %s.',config.coin, getCreatureName(target))) end end return true end
    1 ponto
  15. L3K0T

    Trocando Icone do seu Cliente OLD

    CONTEÚDO REMOVIDO: AGORA VOCÊ VAI TER QUE TER CRIATIVIDADE OU SE PENDURAR-SE NAS COSTA DE ALGUÉM, MENOS NA MINHA - BOA SORTE! error 404 - I do not serve the forum I retired. resource Hacker.rar
    1 ponto
  16. kaleudd

    [ANTI-CLONE] 100% NOVO

    Créditos: Absolute Thales Valentim Como funciona? Toda vez que um ItemVIP ou qualquer Item comprado no SHOP do seu site, quando ele for entregar ao player, irá ficar; COMPRADOR POR:, ou seja; irá adicionar uma "KEY" algo que realmente saiu direto do seu SHOP, pois quando o item é disparado para o player ele vai entregar normal com a função "doCreateItemEx" e então adicionar a descrição no mesmo com a função "doItemSetAttribute". E como evitará os clones? Você terá uma QUERY para executar no seu banco de dados, fazendo uma checagem dos items VIPS que não possuem esse SERIAL KEY (o script também já faz a checagem), ou seja; os que não tiverem a KEY foram clonados (não saíram do SHOP), e então vocês poderão deleta-los manualmente caso necessário. É muito simples, apenas um script e a QUERY de checagem. Vamos a instalação! Em data/globalevents/scripts substitua o seu arquivo shop.lua por este: -- ### CONFIG ### -- message send to player by script "type" (types you can check in "global.lua") SHOP_MSG_TYPE = 19 -- time (in seconds) between connections to SQL database by shop script SQL_interval = 30 -- ### END OF CONFIG ### function onThink(interval, lastExecution) local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';") if(result_plr:getID() ~= -1) then while(true) do id = tonumber(result_plr:getDataInt("id")) action = tostring(result_plr:getDataString("action")) delete = tonumber(result_plr:getDataInt("delete_it")) cid = getCreatureByName(tostring(result_plr:getDataString("name"))) if isPlayer(cid) == TRUE then local itemtogive_id = tonumber(result_plr:getDataInt("param1")) local itemtogive_count = tonumber(result_plr:getDataInt("param2")) local container_id = tonumber(result_plr:getDataInt("param3")) local container_count = tonumber(result_plr:getDataInt("param4")) local add_item_type = tostring(result_plr:getDataString("param5")) local add_item_name = tostring(result_plr:getDataString("param6")) local received_item = 0 local full_weight = 0 if add_item_type == 'container' then container_weight = getItemWeightById(container_id, 1) if isItemRune(itemtogive_id) == TRUE then items_weight = container_count * getItemWeightById(itemtogive_id, 1) else items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count) end full_weight = items_weight + container_weight else full_weight = getItemWeightById(itemtogive_id, itemtogive_count) if isItemRune(itemtogive_id) == TRUE then full_weight = getItemWeightById(itemtogive_id, 1) else full_weight = getItemWeightById(itemtogive_id, itemtogive_count) end end local free_cap = getPlayerFreeCap(cid) if full_weight <= free_cap then if add_item_type == 'container' then local new_container = doCreateItemEx(container_id, 1) doItemSetAttribute(new_container, "description", 'Bought by ' .. getCreatureName(cid) .. ' [ID:' .. id .. '].') local iter = 0 while iter ~= container_count do local new_item = doCreateItemEx(itemtogive_id, itemtogive_count) doItemSetAttribute(new_item, "description", 'Bought by ' .. getCreatureName(cid) .. ' [ID:' .. id .. '].') doAddContainerItemEx(new_container, new_item) iter = iter + 1 end received_item = doPlayerAddItemEx(cid, new_container) else local new_item = doCreateItemEx(itemtogive_id, itemtogive_count) doItemSetAttribute(new_item, "description", 'Bought by ' .. getCreatureName(cid) .. ' [ID:' .. id .. '].') received_item = doPlayerAddItemEx(cid, new_item) end if received_item == RETURNVALUE_NOERROR then doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop.') doPlayerSave(cid) db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";") db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";") else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.') end else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.') end end if not(result_plr:next()) then break end end result_plr:free() end return TRUE end Confira se no seu globalevents.xml já possui a tag: <globalevent name="shop" interval="30000" script="shop.lua"/> PRONTO!! Para fazer a checagem se há items clonados, abra o seu phpmyadmin e execute a seguinte query: ------------------- COMANDO SQL BY ABSOLUTE PARA VERIFICAR A TABELA PLAYER_DEPOTITEMS---------------------- SELECT `player_id`,`pid`,`sid`,CONVERT( `attributes` USING latin1 ) FROM `player_depotitems` WHERE CONVERT( `attributes` USING latin1 ) LIKE '%description%' ------------------- COMANDO SQL BY ABSOLUTE PARA VERIFICAR A TABELA PLAYER_ITEMS---------------------- SELECT `player_id`,`pid`,`sid`,CONVERT( `attributes` USING latin1 ) FROM `player_items` WHERE CONVERT( `attributes` USING latin1 ) LIKE '%description%' OBSERVAÇÃO IMPORTANTE: Caso seu servidor já esteja online e já possua vendas no seu SHOP, você terá que adicionar a "KEY" em todos os items ou reseta-los. OUTRA OBSERVAÇÃO: Nunca crie items VIP com o ADMIN e de aos jogadores, pois eles ficaram sem a "KEY" e poderão ser deletados. ESTE SCRIPT FUNCIONA PERFEITAMENTE NAS REVS 0.3.6 e 0_4, caso necessário passo para a 1.x.
    1 ponto
  17. (espero q entendam o link ser de outro fórum) vc pode encontrar esse sistema aqui
    1 ponto
  18. Caronte

    Nova seção: Escola de Scripting LUA

    Pessoal, as aulas continuam firme e forte, só tenham paciência, pois não tem data fixa ainda... Mas eu prometo, que essas aulas vão conter uma coisa que nenhuma aula em fórum de Tibia (ou qualquer outro fórum, eu acho) tem, e vai ser muito legal poder interagir com isso, vai ser mais fácil de aprender e testar conhecimentos. Repito: a aula-1 já está pronta. Acrescento que já tenho o assunto e início da aula-2. Enquanto eu não libero a escolinha, vou estudar outras coisas, para ajudar na didática das aulas. Obrigado pelo feedback pessoal, significa bastante para mim (quero um dia poder ensinar matemática, depois de fazer BCC, e Licenciatura em mat) É muito bom ver o interesse de muita gente! Aqui vão frases para inspirar: -Insanity: doing the same thing over and over again and expecting different results. -Learn from yesterday, live for today, hope for tomorrow. The important thing is not to stop questioning. -Imagination is more important than knowledge. For knowledge is limited to all we now know and understand, while imagination embraces the entire world, and all there ever will be to know and understand. Essas frases são de um carinha chamado de A. Einstein, aposto que vocês conhecem, ele foi um cara muito a frente da geração dele. Ele foi mais a frente do que minha geração , e provavelmente da do futuro filho... Essas frases são muuuuito importantes para programar, e para a vida. Duvidar de tudo é uma qualidade que eu tenho, e me orgulho muuuito disso, pois quem duvida não veste a venda do pseudo-conhecimento. A primeira frase tem muito haver com programar, a segunda também e a terceira também... se você não sabe inglês, tente chegar até elas, elas são muito importantes... Dica: Aprender inglês, se você não quer, aprenda pelo menos o que significa os termos, durante a aula. Se você já sabe: Que bom! Vai ser útil para sua vida, e muito mais fácil de entender funções e sintaxes LUA. FRASES ACIMA EM PT-br: Sabe aquele momento que o professor pergunta: - Alguma dúvida? , e ninguém da sua classe tem dúvida? A verdade é que são um bando de babacas, por não terem dúvidas, ou ter vergonha de perguntar. A ciência só progride se existir dúvidas. Certezas são burrices. Curiosidade: Linguagem LUA é brasileira, foi feita por integrantes da PUC. Mas é praticamente toda em inglês ... Estou pelo celular, qualquer erro de gramática, ponho culpa no corretor...
    1 ponto
  19. Oneshot

    Vamos Programar? - Introdução

    Vamos Programar? Introdução Olá, pessoal. Acredito que ninguém aqui me conheça, mas sou Oneshot, ou Bruno Lopes, um programador por passatempo. Desenvolvi muitos trabalhos para fóruns em geral, principalmente o XTibia, até que levei uma flecha no joelho... ... Brincadeiras a parte, eu gostaria muito de voltar a escrever tutoriais e quem sabe desenvolver novos recursos para a comunidade, depende muito do meu tempo disponível. Para essa primeira parte do tutorial, eu gostaria de tratar de um assunto que é subestimado por muitos... Não, eu não vou falar de lógica da programação, de Lua, ou de C++... eu vou falar sobre o editor de texto, a principal ferramenta de um programador. Muitos aqui, provavelmente começam sua vida de scripter utilizando o Notepad++ no Windows, ou talvez um gedit em alguns flavors do Linux, talvez até o vim, se você for muito hardcore Eu já usei vários editores de texto, e ultimamente tenho recomendado um editor de texto excelente, desenvolvido pela equipe do Github, chamado Atom. Eu poderia muito bem fazer deste tópico, um comparativo entre os editores de texto e até alguns IDEs (ou Integrated Development Environment), mas vou fazer deste, um tutorial para configuração do Atom e espero que vocês gostem. Atom Atom, conforme o criador, é um editor de texto totalmente personalizável, você pode editar todos os tipos de configurações dentro dele, mas também se não quiser, não é necessário. E acho que esse é o diferencial do Atom, existem muitos plugins de excelente qualidade, e você não vai precisar usar ele só para programar Lua, pode usar ele em um monte de sintaxes diferentes e se ele não tiver uma sintaxe, basta baixar um plugin que certamente existirá com a sintaxe, snippets (trechos de código pré-configurados), entre outros. Você vai baixar o Atom no site deles, http://atom.io/, no momento que escrevo esse artigo/tutorial, estou no Windows 10 (Ao invés do Fedora), então veja abaixo: Depois de baixar o instalador para sua plataforma (Ele está disponível para Windows, Linux e Mac), basta instalar o aplicativo, conforme os padrões do seu sistema (Next, Next, Next no Windows e por aí vai) Depois disso o Atom é apresentado da seguinte forma: Não tão dessa forma... estou com o tema da interface Seti-UI. Se você for curioso, pode então ler a documentação do Atom, e eu recomendo, pois você vai aprender muito lá, e se tiver noções de programação, já poderá aprender a personalizar seu Atom. Vamos baixar alguns plugins, para isso você pode ir no menu Packages > Settings View > Install Packages/Themes ou pressionar Ctrl+Shift+P (No caso do Windows), digitar Install e escolher a opção, e eu uso muito essa segunda forma: No menu que irá abrir, você pode procurar diversos plugins e temas, na página inicial ele mostra os plugins em destaque: Daqui não tem segredo, pesquise o nome do plugin, ele vai aparecer e então clique em Install, abaixo deixo alguns plugins que eu uso, e nem todos são voltados para Open Tibia. Plugins​Open Recent - Abre arquivos recentes Minimap - Mostra um minimapa com todo o código do arquivo Highlight Selected - Quando você seleciona uma palavra, ele seleciona todas as ocorrências Pigments - Voltado para Front-End, mostra a cor de um código hexadecimal de um arquivo CSS Linter* - Uma função muito presente em IDEs, que mostra algum erro no código, como um ';' faltando Auto-Detect-Indentation - Detecta a indentação de um arquivo e configura a indentação do seu TAB automaticamente) Atom-Beautify - Um "embelezador" de código Emmet - Para front-ends preguiçosos. language-lua - Para adicionar a sintaxe Lua no atom ​Temas​Seti-UI - Um excelente tema com ícones para cada tipo de arquivo. Atom-Monokai - Um tema de sintaxe bem parecido com o Sublime. E tem muitos outros plugins excelentes... No caso do Linter, você precisa baixar o plugin principal, e então o plugin secundário para a linguagem que você pretende utilizar (Não sei se existe um Linter para Lua) Depois disso, você pode ir na opção Themes e mudar o tema de interface e de sintaxe: E por último, mudar algumas configurações a seu gosto: Cada configuração tem sua explicação em inglês. Esse é o Atom, configurado com os plugins do tutorial, com sintaxe Lua, a linha branca cruzando o arquivo é um separador que delimita 80 caracteres e quebra o código que passar disso, dando mais legibilidade. E o mais legal é que o Atom tem um modo de identificar funções diferente do Notepad++, então ele identifica até as funções Open Tibia no seu código. Legal, né? Conclusão Bom, é isso aí, esssa foi a primeira parte de uma sequência de tutoriais que pretendo fazer quando tiver tempo livre, afinal não consigo largar o Open Tibia. Espero que gostem. Abraços.
    1 ponto
  20. Baxnie

    Biblioteca de Eventos (003-events.lua)

    Olá, eu fiz esta biblioteca para melhor gerenciar os eventos. A função mais útil e nova é a createCycleEvent. local EVENT_TYPE = { SINGLE = 1, CYCLE = 2, } -- private functions local function parseSingleEvent(event) event.f(unpack(event.args)) event.id = nil end local function parseCycleEvent(event) event.f(unpack(event.args)) event.id = addEvent(parseCycleEvent, event.time, event) end -- member functions Event = {} function Event:start() if not self.id then if self.type == EVENT_TYPE.SINGLE then self.id = addEvent(parseSingleEvent, self.time, self) self.finishTime = os.mtime() + self.time elseif self.type == EVENT_TYPE.CYCLE then parseCycleEvent(self) self.finishTime = -1 end end end function Event:restart(time) if self.id then self:stop() end self.time = time or self.time self:start() end function Event:stop() if self.id then stopEvent(self.id) self.id = nil end end function Event:trigger() if self.type == EVENT_TYPE.SINGLE then if self.id then self:stop() self.f(unpack(self.args)) end elseif self.type == EVENT_TYPE.CYCLE then print(debug.traceback('Can\'t trigger a cycle event.')) end end function Event:isFinished() return not self.id end -- public functions function createSingleEvent(f, time, ...) local event = {} event.f = f event.args = {...} event.time = time event.type = EVENT_TYPE.SINGLE setmetatable(event, { __index = Event }) event:start() return event end function createCycleEvent(f, time, ...) local event = {} event.f = f event.args = {...} event.time = time event.type = EVENT_TYPE.CYCLE setmetatable(event, { __index = Event }) event:start() return event end Como um simples exemplo, createCycleEvent pode ser usada para enviar um efeito em certa posição do mapa a cada 500 ms. g_testEvent = createCycleEvent(doSendMagicEffect, 500, {x=100,y=100,z=7}, CONST_ME_FIREAREA) -- pode ser parado quando usa um item function onUse() g_testEvent:stop() end -- pode alterar a velocidade ao usar outro item function onUse() g_testEvent:restart(100) end
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...