Ir para conteúdo

dalvorsn

Conde
  • Total de itens

    750
  • Registro em

  • Última visita

  • Dias Ganhos

    8

Tudo que dalvorsn postou

  1. Foi somente um erro logico no seu script, voce soma 19 e subtrai logo em seguida, obviamente voce nao altera nada quando faz isso '-' n = n + 19 - 19, ou seja n = n kk function changeOutfit local events = {} function newColor(n) if n >= 132 then n = n - 19 else n = n + 19 end return n end function changeOutfit(cid) local sec = 0.5 local temp = getCreatureOutfit(cid) if type(temp) == "number" then return true end local outfit = { lookType=temp.lookType, lookHead=newColor(temp.lookHead), lookBody=newColor(temp.lookBody), lookLegs=newColor(temp.lookLegs), lookFeet=newColor(temp.lookFeet), lookAddons = temp.lookAddons } doSetCreatureOutfit(cid, outfit, sec) local event = addEvent(changeOutfit, 3.0*sec*450, cid) events[cid] = event return true end function onLogin(cid) local storage = getPlayerStorageValue(cid, 13340) if storage == 1 then local event = addEvent(changeOutfit, 0, cid) events[cid] = event end return TRUE end function onLogout(cid) if events[cid] then stopEvent(events[cid]) end return TRUE end Da pra mudar bastante coisa, principalmente se a função doSetCreatureOutfit trabalhar com miliseconds, mas acho que e com segundos entao deixei da forma que esta ai mesmo que nao ta ruim nao
  2. voce aumentou o limite de sprites, mas antes procurou saber se o editor tinha suporte a isso? pois quando voce aumenta o limite, voce está adicionando dois bytes no spr que sao referentes ao numero de sprites, isso num leitor normal obviamente daria erro, pois ele le em sequencia, colocando dois bytes no começo voce bagunça toda a sequencia se o seu editor nao tem suporte a fazer essa leitura, voce tera que editar as sources do mesmo, porem ainda assim é complicado, pois voce vai sempre excluir um, ou ele nao vai ler o cliente normal da versao, ou nao vai ler o cliente estendido
  3. se me disser onde vai usar fica mais facil aplicar, eu fiz um exemplo meio gambiarra, acho que vai ser um pouco dificil de intender function onUse(cid, item) local outfit = getCreatureOutfit(cid) local fator = 19 local time = os.time() + 10 local changed = false local function recursive(delay, cid, fator, changed, outfit, time) if time > os.time() then doCreatureChangeOutfit(cid, swapOutfitColor(fator, changed, outfit)) changed = not changed print(delay, cid,fator, changed, outfit) addEvent(recursive, delay, delay, cid,fator, changed, outfit, time) end end recursive(1000, cid, fator, changed, outfit, time) return true end function swapOutfitColor(factor, sum, outfit) -- factor: (number) fator de soma/subtração -- sum: (bolean) booleano que define se o fator deve ser somado ou subtraido -- outfit: (table) tabela de outfit outfit.lookHead = outfit.lookHead + (sum and factor or -factor) outfit.lookLegs = outfit.lookLegs + (sum and factor or -factor) outfit.lookBody = outfit.lookBody + (sum and factor or -factor) outfit.lookFeet = outfit.lookFeet + (sum and factor or -factor) return outfit end Tem zilhoes de parametros na função recursive, mas na realidade so precisariam mesmo de alguns: delay, cid, changed e factor delay que é o tempo que ela vai se repetir, sendo que ele pode ser declarado ate dentro da função; cid creature id, é necessario pra poder executar funções que usam ele changed variavel booleana usada pra permutar, ela define se deve somar ou subtrair e factor que e o valor a ser somado/subtraido
  4. somar e subtrair 19 nas cores do outfit alternadamente?
  5. tem que registrar a creature script no cid, la no login, da uma olhada no login.lua que vai ver como funfa tu basicamente vai usar a função registerCreatureEvent(cid, "eventname") o eventname tu vai pegar da tag do xml que tu fez la em creaturescripts.xml, fui pra facul mais tarde volto, flws
  6. Use essa funções para produzir spells fora da pasta spells: doAreaCombatHealth(cid, type, pos, area, min, max, effect) doTargetCombatHealth(cid, target, type, min, max, effect) doAreaCombatMana(cid, pos, area, min, max, effect) doTargetCombatMana(cid, target, min, max, effect) doAreaCombatCondition(cid, pos, area, condition, effect) doTargetCombatCondition(cid, target, condition, effect) doAreaCombatDispel(cid, pos, area, type, effect) doTargetCombatDispel(cid, target, type, effect) ficaria assim: local SQUARE1X1 = { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } local min, max = 200, 220 local armor_id = 7897 local chance = 100 function onStatsChange(cid, attacker, type, combat, value) if not isPlayer(cid) then return true end if value >= 1 and type == STATSCHANGE_HEALTHLOSS then if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).itemid == armor_id then local random = math.random(100) if random <= chance then doAreaCombatHealth(cid, COMBAT_ICEDAMAGE, getCreaturePosition(cid), SQUARE1X1, min, max, CONST_ME_ICEATTACK) return true end end end return true end Adicionei o healthLoss para funcionar apenas para perda de vida, faz mas sentido a armadura tem que revidar perdas, e do jeito que estava ela ativaria tambem para ganhos de vida e mana, não incluir mana, se quiser o faça, a variavel dela é: STATSCHANGE_MANALOSS
  7. quando tu usa <!-- --> está transformando tudo que esta compreendido dentro em comentarios, que nao sao interpretados, ou seja voce simplesmente tira ele do game, agora tem que ver qual erro ta dando no console, tira o comentario e manda o erro
  8. Loop siginifica sequencia, você pode tê-la em lua basicamente de 4 modos for, while, reapeat e atraves de funções por meio de recursão #for Existem dois tipos de for, o for numerico, que e bem simples for i= init, final, increment do -- bloco end i é a variavel de controle, ela serve apenas para receber os valores do contador, ela só existe dentro do laço do for(bloco) init é um valor numerico que voce atribui, ele é o valor onde o loop ira iniciar final é o valor numerico onde ele termina increment é de quanto em quanto ele vai iterar, por padrão esse valor é 1 Ex.: for i=10, 0, -1 do print(i) end for i=50, 100, 10 do print(i) end E existe também dentro do for, o for genérico, que é o que é usado com funções iteradoras por exemplo: for i,v in pairs(table) do print(i,v) end A estrutura dele e assim: for variavel1, [...], variaveln in iterator_function(params) do end Essa funções chamadas de iteradoras existem nativamente, e podem também ser criadas (http://www.xtibia.com/forum/topic/227983-funcoes-iteradoras-em-lua/) o while e repeat são quase iguais, porem tem uma pequena diferença entre eles while (condição for verdadeira) do -- repete enquanto a condição for verdadeira --bloco end --" 'enquanto' tal coisa for verdadeira repita" repeat -- bloco until (condição seja falsa) -- para quando é verdadeira -- 'repetir' 'ate' que condição seja verdadeira Ambas podem ser paradas a qualquer momento com o uso de um 'break' local time = os.time() while true do if time + 5 < os.time() then break end end Particularmente nao gosto de usar break, quase sempre e possivel faze-lo diretamente nas condicionais, mas se quiser usar esta disponivel E por fim existem as funções recursivas, que sao basicamente funções que que chamam elas mesma function it(init, final) print(init) if init + 1 <= final then it(init+1, final) end end
  9. joga na roda pra gente ver
  10. Nesse caso é melhor fazer por query, tu vai fazer a query ordenando da maior para menor, Caso não saiba executar queries, use esse site para estudo: http://www.w3schools.com/sql/default.asp As funções de database são: local result = db.getResult(query) result.getDataInt(resId, s) result.getDataLong(resId, s) result.getDataString(resId, s) result.getDataStream(resId, s, length) result.next(resId) result.free(resId) Porem o uso constante de database é um pouco perigoso, faça um sistema de cache, que só executa a query de tempos em tempos, independente de quem requisita o rank(ou seja, salvando numa global storage) Não ha um modo mais fácil ? Não que eu conheça, porque não tem como tu fazer a seleção de todos os storages de certa key por funções lua, se tiver provavelmente vai ser muito mais trabalhoso, ou feito pelas sources, ai tambem daria. Eu fiz ai, porque é um pouco mais complicado esse, entao se tiver duvidas em algum ponto me diga que eu tento esclarecer --#config# local global_storage = 5666 -- global storage do cache local rank_storage = 3600 -- storage do rank local limit = 10 -- limite de players aparecendo no rank local cache_time = 10 -- segundos local function getStorages(key, limit) local ret = {} local query = db.getResult("SELECT player_id, value FROM player_storage WHERE key = "..key.." ORDER BY value DESC LIMIT 10") repeat local player_id, value = query:getDataInt("player_id"), query:getDataInt("value") table.insert(ret, {pid = player_id, value = value}) until not query:next() query:free() return ret end local function getRankStr(key, limit, cache, cache_time) -- getRankStr(key, limit[,cache,[cache_time]]) local ret_str = "Request Board\n\n" if cache then local str = getStorage(global_storage) if str ~= -1 then local last_update = str:match("Last Update: (%d+)") if os.time() <= (tonumber(last_update) + cache_time) then return str:gsub("Last Update: %d+$", "Last Update: ".. os.date("%c", last_update)) end end end local rank_data = getStorages(key, limit) for it, data in pairs(rank_data) do ret_str = ret_str .. string.format("%d \- %s \n", it, getPlayerNameByGUID(data.pid)) end ret_str = ret_str .. "\nLast Update: "..os.time() doSetStorage(global_storage, ret_str) ret_str = ret_str:gsub("Last Update: %d+$", "Last Update: ".. os.date("%c", os.time())) return ret_str end function onUse(cid, item, fromPosition, itemEx, toPosition) return doShowTextDialog(cid, 1950, tostring(getRankStr(rank_storage, limit, true, cache_time))) end Primeiro erro: A função getCreatureSummons retorna uma table, logo quando você faz isso: if #getCreatureSummons(cid) then Está retornando o tamanho da tabela, mas é o mesmo que fazer "if 1 then"(numero de summons do player) porem em lua, quase tudo é true em uma condicional, se bota entao uma função que retorna um numero num if, esse if nao faz sentido pois sempre vai ser true, compare ele com algum numero if #getCreatureSummons(cid) >= 1 then -- exemplo Segundo erro: monster = getCreatureSummons(cid) Voce está salvando na variavel monster o endereço da tabela que a função retorna, esse endereço nao é uma creatureId, use getCreatureSummons(cid)[numero], getCreatureSummons(cid)[1] e etc Terceiro erro: Voce usou o mesmo nome de variavel (monster) tanto para configuração como pra salvar o creatureid, no seu script não está errado, porem cuidado ao fazer isso, só não te deu problemas porque voce nao utilizou os dados da tabela inicial monster depois de alterará-la
  11. esse 1 no doTargetCombatCondition ta errado pow, ,tu tem que colocar ai o valor do creature id de quem vai receber a condition, no caso a variavel target
  12. Nesse caso é melhor fazer por query, tu vai fazer a query ordenando da maior para menor, Caso não saiba executar queries, use esse site para estudo: http://www.w3schools.com/sql/default.asp As funções de database são: local result = db.getResult(query) result.getDataInt(resId, s) result.getDataLong(resId, s) result.getDataString(resId, s) result.getDataStream(resId, s, length) result.next(resId) result.free(resId) Porem o uso constante de database é um pouco perigoso, faça um sistema de cache, que só executa a query de tempos em tempos, independente de quem requisita o rank(ou seja, salvando numa global storage)
  13. HEIHEIHE Que bom que tu fez a replica, eu jurava que era retornado normal, dai fui conferir nas sources, pelo visto parece que só retorna o sexo do gamemaster se usar o parametro opcional full //getPlayerSex(cid[, full = false]) player.h uint16_t getSex(bool full) const {return full ? sex : sex % 2;} Mas como tu nao usa ele, nunca vai retornar 2 *.* 0 % 2 >> 0 -- female 1 % 2 >> 1 -- male 2 % 2 >> 0 -- female logo se full é false todo gm é moçinha huehue Obs.: postei pra implicar mesmo HEIHEIH' eu sei que seu balão enche rápido ;D Cara pra que tu troca o que ta certo vei? Não entendo, tu meche aonde não tem necessidade, a função getPlayerSex retorna 0 e 1, tu bota index 1 e 2 porque diabos? voce que inverteu na configuração se ta vindo trocado local VOCATION_OUTFITS = { [1] = { [0] = 136, [1] = 128, }, } function onLogin(cid) local tmp = VOCATION_OUTFITS[getPlayerVocation(cid)][getPlayerSex(cid)] if tmp then local outfit = getCreatureOutfit(cid) outfit.lookType = tmp doCreatureChangeOutfit(cid, outfit) end return true end O primeiro tu faz por weapons mesmo: #data/weapons/scripts/stunner_axe.lua local chance = 25 -- porcentagem(int) local cooldown = 20 -- segundos local cooldown_storage = 3600 local stun_effect = 34 local duration = 5 -- tempo que vai ficar stunnado em segundos function onUseWeapon(cid, var) if chance >= math.random(100) and exhaustion.make(cid, cooldown_storage, cooldown) then stun(var.number, duration) end return true end function stun(target, seconds) if not isCreature(target) then return false end doChangeSpeed(target, -getCreatureSpeed(target)) doSendMagicEffect(getCreaturePosition(target), stun_effect) addEvent(function(target) if isCreature(target) then doChangeSpeed(target, -getCreatureSpeed(target)+getCreatureBaseSpeed(target)) end end, seconds * 1000, target) return true end #data/weapons/weapons.xml: <melee id="2429" level="20" event="script" value="stunner_axe.lua"/> O outro to com preguiça de fazer, mas e basicamente usar uma creaturescripts onStatsChange(cid, attacker, type, combat, value) onde o cid e attacker sao players, e o type é STATSCHANGE_HEALTHLOSS, dai tu faz o combate normal com a condicional da chance, que nem a da magia de cima ai, sendo que quando true, executa a magia em area que tu quer, basicamente isso
  14. Isso feito por lua é ruim cara, tem pra ficar bacana e bom fazer pelas sources, e de graça acredito que ninguém vá fazer rs
  15. Só uma objeção, existe ainda assim um sexo alem de male e female, PLAYERSEX_FEMALE = 0 PLAYERSEX_MALE = 1 PLAYERSEX_GAMEMASTER = 2 Pog mode: local tmp = VOCATION_OUTFITS[getPlayerVocation(cid)][math.min(1, getPlayerSex(cid))] hu3 substitui sua script pela minha , após logar em um char ele nao fica com a outfit ue deveria ficar , fica com uma tipo " inivisivel " em todos chars . é um azul fica brilhando ... Poste o erro do console, eu nao testei in game.
  16. kavaskiva Vei, eu deixei o script certo pra tu, tu estragou >.<' Entenda uma coisa, esse cid, só vai funcionar dentro de callbacks(funções como onUse, onStatsChange e etc), se tu usa do lado de fora, como usou nas tabelas, fica errado porque quando tenta usar o cid é nil voce tem que carregar dentro do corpo da função, e nao do lado de fora e nao precisa colocar nas configurações quando eu fiz isso: local myOutfit = getCreatureOutfit(cid) Eu salvei na variavel 'myOutfit' uma tabela com os dados do outfit atual do player, e quando eu fiz: if getPlayerSex(cid) == 0 then myOutfit.lookType = outfits_female[voc_id] else myOutfit.lookType = outfits_male[voc_id] end Eu alterei da tabela, apenas ao indice lookType, que é numero do outfit, mantendo assim os referentes a cores e addon. Voce nao deveria ter alterado o script, ele ja estava certo >.<'
  17. Cara, o outfit é uma tabela, que conte os seguintes dados: {lookType = 266, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0} -- valores exemplares apenas O valor que voce está configurando é referente ao lookType, que é o numero do outfit, os demais sao as cores e os addons. Logo para fazer a troca sem desfazer as cores, basta salvar o outfit numa variavel usando a função getCreatureOutfit(cid), e alterar o campo lookType como mostrado abaixo: local outfits_male = { [1] = {lookType = 128}, -- Sorcerer Female [2] = {lookType = 134}, -- Druid Female [3] = {lookType = 129}, -- Paladin Female [4] = {lookType = 130}, [5] = {lookType = 133}, [6] = {lookType = 131}, [7] = {lookType = 143}, [8] = {lookType = 145}, [9] = {lookType = 153}, [10] = {lookType = 289}, [11] = {lookType = 273}, [12] = {lookType = 146}, [13] = {lookType = 154} } local outfits_female = { [1] = {lookType = 136}, -- Sorcerer Male [2] = {lookType = 142}, -- Druid Male [3] = {lookType = 139}, -- Paladin Male [4] = {lookType = 138}, -- Knight Male [5] = {lookType = 141}, [6] = {lookType = 139}, [7] = {lookType = 147}, [8] = {lookType = 157}, [9] = {lookType = 149}, [10] = {lookType = 288}, [11] = {lookType = 270}, [12] = {lookType = 150}, [13] = {lookType = 158} } function onLogin(cid) local voc_id = getPlayerVocation(cid) local myOutfit = getCreatureOutfit(cid) if voc_id > 0 then if getPlayerSex(cid) == 0 then myOutfit.lookType = outfits_female[voc_id] else myOutfit.lookType = outfits_male[voc_id] end doCreatureChangeOutfit(cid, myOutfit) end return true end
  18. No caso dele acho melhor fazer por recursão brow, porque se o player entrar la e morrer rapido, vão continuar sendo criador varios monstros, dai o proximo que entrar vai ja sair no prejuizo. Quanto a parte da criação apenas, ficaria assim: local monstros = {"Demon", "Rat", "Hydra", "Dragon"} local interval = 500 -- valor em ms local position = {x=1,y=1,z=2} local limit_time = 5 * 60 * 1000 -- min * 60 * 1000 function createNewMonster(cid, it) it = it and it + interval or 0 -- variavel contadora de tempo if isCreature(cid) then -- verifica se o referido valor cid corresponde a uma criatura doCreateMonster(monstros[math.random(#monstros)], position) -- cria um monstro randomico na posição position if not it >= limit_time then -- verifica se o contador nao esgotou o limite de tempo addEvent(createNewMonster, interval, cid, it) -- se sim, cria um novo monstro apos interval end end end Mas e claro que ainda falta muita coisa para o que ele quer, isso inclui creature scripts, checagens na alavanca que aciona o evento, mensagem no fim do tempo, limpeza da area removendo os monstros que nao foram mortos(isso aconselho a salvas todos os uids numa tabela para que a remoção seja facil), alem disso tem a premiação # Não tenho certeza, mas acho que onKill teoricamente ainda não ocorreu a morte, entao ele não reconheceria o skull. Acho que seria mais interessante usar onDeath, pois ai ja teria o corpses no proprio parametro e so executaria para player, pois deverá ser registrado no login.lua. Quanto ao corpo do codigo, acredito que esteja certo, so trocaria a callback mesmo deve ser algum erro de sintaxe, coisa boba porque a estrutura em si parece certa, mas cara tem como reduzir e otimizar muito isso ai, veja local outfits = { -- [vocNumber] = { femaleOutfit, maleOutfit } [1] = {137, 129}; -- hunter [2] = {138, 130}; -- mage [3] = {139, 131}; -- kina [4] = {140, 132}; -- noble } function onLogin(cid) local voc = getPlayerVocation(cid) if outfits[voc] then doPlayerAddOutfit(cid,outfits[voc][getPlayerSex(cid) == 0 and 1 or 2],0) end return true end
  19. Apenas complementando, a funcao que vai ser usada dentro da iteracao pode tambem receber parametros, e ele deve ser colocado no return, apos o nome da funcao. Ex.: function pairs(tab) local function void(_table, last_index) local index = next(_table, last_index) if not index then return nil else return index, _table[index] end end return void, tab, nil end Note que no return da funcao pairs, eu retorno primeiro o nome da funcao, e em seguida seus parametros, o nil e meramente ilustrativo pois o last_index nesse caso inicia nulo A estrutura de funcoes iteradoras e assim: function iterator(...) return function(...) if exp then -- condicao de repeticao return ... -- valores retornados a cada iteracao else return nil -- retorno nulo para parar a iteracao end end, ... end
  20. Fico muito bom, bem util inclusive. Só um alerta, quanto ao uso de banco de dados, quando for usar consultas ao db tem que pensar tambem na quantidade de vezes que elas podem ser executadas in game, algumas funções ai pode ser usadas simultaneamente por diversos players, e pra cada um deles é uma consulta no banco de dados, isso pode crashar ele. O ideal seria criar um meio de passar os dados do banco de dados para a memoria dinamica, que fosse uma tabela lua mesmo, daria mais agilidade tambem as consultas. Tu pode fazer ate algo bem simples como uma tabela na lib, que tu atualiza de tempo em tempo no banco de dados, dessa forma nao teria tantas consultas e teria acesso mais rapido a informação e de forma mais "leve". A estrutura dos dados em lua poderia ficar assim: Guilds = { guild_storages = { [guild_id_1] = {key1=value1, ..., keyN=valueN}; [guild_id_N] = {key1=value1, ..., keyN=valueN}; }; guilds = { [guild_id_1] = {points = 0, balance = 0}; [guild_id_N] = {points = 0, balance = 0}; }; } Dai tu carrega ela toda vez que ligar o servidor, uma consulta so no banco de dados. E salva ela de tempos em tempos, ai vai da estabilidade do servidor. Um exemplo de uma das funções ai que tu usou, ficaria algo assim: function getGuildStorageValue(guild_id, key) return Guilds.guild_storages[guild_id][key] -- obs.: só um exemplo, logico que nao seria tão direto, poderia dar erros de index. end E as de definir dados, tu simplesmente alteraria a tabela em lua, dai quando voce salvar a tabela em lua no db, tu atualiza. Eu sei que parece meio trabalho e as vezes e até desnecessario, mas vai dar uma otima performance fazendo isso. Só tem um porem, no banco de dados tu tem mais mobilidade pra colher os dados, mas ai vai de como tu monta a tabela em lua, e da pra fazer que nem no db, mas teria que usar uns loops dependendo do que for Bom, de qualquer modo teu script ta excelente, meus parabéns! Otima ideia aliás,
  21. dalvorsn

    Pagina de Shop

    Poste algo construtivo, poste algo que resolve a duvida do nosso amigo, ele pelo que vi nao tem noção nem de adicionar um shop quanto mais saber oque é jquery . Segue sistema com tutorial. http://www.4shared.com/zip/Ga1CHFM2ba/SHOP.html Desculpe-me, senhor. Eu deveria mesmo fazer o script para ele e deixá-lo dependente e burro, erro meu. É por essas e outras que nesse forum só tem leechers, querem tudo de mão beijada, não se dão ao trabalho nem de procurar. Eu posso lhe apostar que se ele procurasse por "acordion como usar/tutorial" ele encontraria e conseguiria fazer se tentasse. Agora o senhor moderador vir até aqui me dar um "esporro" por eu não entregar de mão beijada a solução, ai já é o cúmulo. Mas que se danem todo vocês, continuem assim, foda-se.
  22. catch system.lua Linha 94 local levelChance = getItemAttribute(corpse, "level") * 0.02 Provavelmente esse attribute está retornando null, e está ocasionando os dois primeiros erros. Procure saber o porque de o attribute não estar sendo definido, resolvendo isso acaba o erro. level_system.lua --[[616]] local this = getCreatureName(cid) --[[627]] levelRange = math.random(pokes[this].wildLvlMin, pokes[this].wildLvlMax) Verifique o que está errado ai, tem duas possibilidades: - prmieiro a tabela pokes não conter os dados pokes[pokename].wildLvlMin/Max, neste caso basta encontrar o pokemon cujo configuração não está presente - segundo, a variável 'this' não está retornando nome algum Obs.: pode ainda ser outro problema, a função getCreatureName pode estar pegando o "nick", caso haja no servidor isso, dai precisará encontrar outro modo de retornar o nome do pokemon, o primitivo no caso, provavelmente terá que pegar o atributo da bola. #alias Para facilitar o reconhecimento de quando e com que criaturas está ocorrendo o erro, use e abuse dos prints, irão lhe ajudar bastante.
  23. se não postar os scripts não da pra falar como concertar, da só pra ter uma noção do que e o erro os primeiros tu ta tentando somar um valor nulo com um numero e no segundo o parametro #1 da função random precisa de um numero e esta recebendo nil tem que ver o porque esses valores estão nulos e colocar uma exceção para corrigir o erro, geralmente um simples if not nome_da_variavel then antes é capaz de resolver, mas tem que analisar
  24. dalvorsn

    Pagina de Shop

    É só usar acordion, é um script do jqueryui, ve la exemplos dele, é fácil implementar
  25. Cara, acho que tu ta gastando banco de dados atoa, tu usa uma storage pra identificar que o cara tem que ganhar e uma outra pra identificar que ele ja ganhou, porque nao usa a mesma storage só trocando o vaor dela? function onLogin(cid) local storage = 0 local item = 0 local count = 0 if getPlayerStorageValue(cid, storage) == 1 then setPlayerStorageValue(cid, storage, 2) doPlayerAddItem(cid, item, count) end return true end Ou a storage tem necessariamente que ser 1 para a marcar a conclusao da quest?
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...