Ir para conteúdo

FeeTads

Membro
  • Registro em

  • Última visita

Tudo que FeeTads postou

  1. por isso estão sumindo ao morrer, não existe o corpse no xml pra ele criar, ai vc tem 2 opções, cria no XML, ou muda o corpse
  2. Não posso dar suporte de scripts postados aki, fora do TibiaKing manin segue o código arrumado: caso tenha algum bug, manda print do erro do console. data > npc > scripts > NPCtroca.lua -- make by FeeTads //assistente TibiaKing local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} -- function de tempo //NÃO MEXER local function getTimeString(self) local format = { {'dia', self / 60 / 60 / 24}, {'hora', self / 60 / 60 % 24}, {'minuto', self / 60 % 60}, {'segundo', self % 60} } local out = {} for k, t in ipairs(format) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end local ret = table.concat(out) if ret:len() < 16 and ret:find('segundo') then local a, b = ret:find(' e ') ret = ret:sub(b+1) end return ret end local itemid = { -- id dos items necessários pra troca [1] = {item = 7775, count = 1}, -- item = ID do item // count = quantidade de items } local save_items = 0 -- variavel apenas pra salvar a quantidade de items //nao mexer local tempo_de_espera = 1 -- em minutos local storage = 58458711 -- storage //se não souber, não mexer local storageAceitar = 58458712 -- storage //se não souber, não mexer local item_trocado = 7775 -- id do item que vira após a troca local trocar_mais_de_uma_vez = true -- o player pode trocar varias vezes esse 4 items por 1? //true pode trocar mais de 1x //false só troca uma vez function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) if isInArray({"items", "items", "lista"}, msg) then -- se o player disser "lista" local lista = '' -- string pra salvar a lista de items for i=1, #itemid do lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item) -- salva a quantidade e o nome dos items if i+1 <= #itemid then lista = lista..', ' -- caso ainda tenha items, coloca uma virgula pra separar //n mexer end end selfSay("A lista de items são: {"..lista.."}", cid) -- mostra a lista de items selfSay("Você {aceita} pegar esses items?", cid) talkState[talkUser] = 10 elseif isInArray({"no", "não", "nop", "not"}, msg) and talkState[talkUser] == 10 then -- caso o player n aceite, só da BYE selfSay("OK, Bye!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"yes", "aceito", "sim"}, msg) and talkState[talkUser] == 10 then -- se o player aceitar selfSay("OK! estarei a espera!", cid) setPlayerStorageValue(cid, storageAceitar, 1) -- seta a storage pra1 talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"trocar","troca","trocar item"}, msg) then -- mensagem do player if getPlayerStorageValue(cid, storageAceitar) == 1 then -- se o player ja tiver aceitado a missão local lista = '' for i=1, #itemid do lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item) if i+1 <= #itemid then lista = lista..', ' end end selfSay("Você deseja trocar {"..lista.."} pelo supremo item?", cid) -- msg do NPC mostrando a lista talkState[talkUser] = 2 else selfSay("Primeiro gostaria de ver a {lista} de items?", cid) -- se o player não tiver aceitado, pede pra ele ver a lista talkState[talkUser] = 11 end elseif isInArray({"no","não","bye","not"}, msg) and talkState[talkUser] == 11 then selfSay("OK, Bye!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 11 then local lista = '' for i=1, #itemid do lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item) if i+1 <= #itemid then lista = lista..', ' end end selfSay("A lista de items são: {"..lista.."}", cid) selfSay("Você {aceita} pegar esses items?", cid) talkState[talkUser] = 10 -- basicamente mostra a lista... elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 2 then if trocar_mais_de_uma_vez == false and getPlayerStorageValue(cid, storage) ~= -1 then -- se puder trocar apenas 1x deixar false selfSay("Desculpe, você já fez sua troca!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) return true end for i=1, #itemid do -- for pra fazer a contagem dos items if getPlayerItemCount(cid, itemid[i].item) >= itemid[i].count then -- caso o player tenha o item save_items = save_items + 1 -- salva na variavel end end if save_items >= #itemid then -- se tiver todos os items necessários selfSay("Parabéns! agora vou craftar seu item, ele irá demorar "..getTimeString(tempo_de_espera*60).." pra ficar pronto.", cid) -- manda a mensagem setPlayerStorageValue(cid, storage, os.time() + (tempo_de_espera*60)) -- seta a storage pra 60 minutos for i=1, #itemid do doPlayerRemoveItem(cid, itemid[i].item, itemid[i].count) -- remove os items do player end else selfSay("Desculpe, você não tem os items necessários!", cid) -- mensagem caso não tenha os items necessários talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end elseif isInArray({"no","não","nao","not"}, msg) and talkState[talkUser] == 2 then -- caso o player não queira trocar, só da tchau selfSay("Tudo bem então, Bye!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"receber","receber item"}, msg) then -- caso o player digite "receber" if (getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0) then -- checa se já passou [tempo de espera], e não é 0 local new_item = doCreateItemEx(item_trocado, 1) local receive = doPlayerAddItemEx(cid, new_item) if receive == RETURNVALUE_NOERROR then -- caso o player tenha slot na bp, etc.. selfSay("Parabéns! seu item está entregue, bom jogo!", cid) -- msg do NPC setPlayerStorageValue(cid, storage, 0) -- seta a storage do player pra 0 talkState[talkUser] = 0 npcHandler:releaseFocus(cid) else selfSay("Seu item está pronto, deixe espaço em sua BP!", cid) -- caso não consiga entregar o item só pede pra deixar espaço talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end elseif getPlayerStorageValue(cid, storage) - os.time() > 0 then selfSay("Seu item {não está pronto}, volte em "..getTimeString((getPlayerStorageValue(cid, storage)-os.time()))..".", cid) -- caso ainda não esteja pronto o item talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif getPlayerStorageValue(cid, storage) == 0 then selfSay("Você não me entregou nenhum item ainda!", cid) -- caso ainda não esteja pronto o item talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) e o XML do NPC, troca pra esse: data > npc > NPCtroca.xml <?xml version="1.0" encoding="UTF-8"?> <npc name="[NPC] Troca" script="data/npc/scripts/NPCtroca.lua" walkinterval="0" floorchange="0" emblem="3"> <health now="100" max="100"/> <look type="133" head="21" body="1" legs="76" feet="25" addons="3"/> <parameters> <parameter key="message_greet" value="Ola, voce gostaria de saber a {lista}, {trocar} seus items pelo item supremo, ou {receber}?" /> </parameters> </npc>
  3. FeeTads postou uma resposta no tópico em Suporte & Pedidos
    25 anos de tibia, acho que o tibia ainda dura uns bons 10 anos ai facil, e a CIP não vai se importar com os OT's caso ela chegue falir, provavelmente ela vai engatar outro tipo de jogo, o fato de em +15 anos ela não ter se importado, acho muito improvável ela se importar agora.
  4. e me parece que seu array 2, não é igual a 100 a chance total, da igual a 78 logo se o numero for maior que 78, creio que não entra no script mesmo
  5. FeeTads postou uma resposta no tópico em Suporte & Pedidos
    A cip meio que "nunca se importou" com OT's, tanto que em 2018 creio eu, teve *****vazamento***** de que a CIP ia licenciar e fazer parcerias com alguns OT's, vi meio por cima na época mas nunca foi nada pra frente, e atualmente a CIP não se importa com OT a ponto de exigir direitos autorais, entretanto, se a CIP copiar alguma coisa do seu OT, é legal ela roubar sua ideia kkkkkkkkkkk, mas tendo em vista OT's full global que pegam 2000 players, nunca tiveram problema referente a algo judicial com a CIP, creio que 99,9% de chance de nunca dar nada, até porque a comunidade de OTserv, fornece ideias ilimitadas pra CIP, tipo, critical, dodge, refine system, etc.. muitos ai vieram da comunidade de OTserv. Bom resumindo chance EXTREMAMENTE IMPROVAVEL da cip vir a pedir direito autoral sobre OTservs
  6. trocou os ID's certinho no cabeçalho? confere o ID do "item_trocado" nesse, troque isso: selfSay("Seu item {não está pronto}, volte em"..((getPlayerStorageValue(cid, storage)-os.time())/60).." minutos", cid) -- caso ainda não esteja pronto o item pra isso: selfSay("Seu item {não está pronto}, volte em"..math.floor((getPlayerStorageValue(cid, storage)-os.time())/60).." minutos e"..((getPlayerStorageValue(cid, storage)-os.time())%60).." segundos", cid) -- caso ainda não esteja pronto o item caso esteja certo os ID's, tenta essa script: 1º fix: coloquei o "doCreateItemEx" antes de add -- make by FeeTads //assistente TibiaKing local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} local itemid = {8976,8978} -- id dos items necessários pra troca local save_items = 0 -- variavel apenas pra salvar a quantidade de items //nao mexer local tempo_de_espera = 20 -- em minutos local storage = 58458711 -- storage //se não souber, não mexer local item_trocado = 7775 -- id do item que vira após a troca local trocar_mais_de_uma_vez = true -- o player pode trocar varias vezes esse 4 items por 1? //true pode trocar mais de 1x //false só troca uma vez function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) if isInArray({"trocar","troca","trocar item"}, msg) then -- mensagem do player selfSay("Você deseja trocar"..#itemid.." items pelo supremo item?", cid) -- msg do NPC talkState[talkUser] = 2 elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 2 then if trocar_mais_de_uma_vez == false and getPlayerStorageValue(cid, storage) ~= -1 then selfSay("Desculpe, você já fez sua troca!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) return true end for i=1, #itemid do -- for pra fazer a contagem dos items if getPlayerItemCount(cid, itemid[i]) > 0 then -- caso o player tenha o item save_items = save_items + 1 -- salva na variavel end end if save_items >= #itemid then -- se tiver todos os items necessários selfSay("Parabéns! agora vou craftar seu item, ele irá demorar"..tempo_de_espera.." pra ficar pronto", cid) -- manda a mensagem setPlayerStorageValue(cid, storage, os.time() + (tempo_de_espera)) -- seta a storage pra 60 minutos for i=1, #itemid do doPlayerRemoveItem(cid, itemid[i], 1) -- remove os items do player end else selfSay("Desculpe, você não tem os items necessários!", cid) -- mensagem caso não tenha os items necessários talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end elseif isInArray({"no","não","nao","not"}, msg) and talkState[talkUser] == 2 then -- caso o player não queira trocar, só da tchau selfSay("Tudo bem então, Bye!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"receber","receber item"}, msg) then -- caso o player digite "receber" if getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0 then -- checa se já passou [tempo de espera], e não é 0 local new_item = doCreateItemEx(item_trocado, 1) local receive = doPlayerAddItemEx(cid, new_item) if receive == RETURNVALUE_NOERROR then -- caso o player tenha slot na bp, etc.. selfSay("Parabéns! seu item está entregue, bom jogo!", cid) -- msg do NPC setPlayerStorageValue(cid, storage, 0) -- seta a storage do player pra 0 talkState[talkUser] = 0 npcHandler:releaseFocus(cid) else selfSay("Seu item está pronto, deixe espaço em sua BP!", cid) -- caso não consiga entregar o item só pede pra deixar espaço talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end else selfSay("Seu item {não está pronto}, volte em"..math.floor((getPlayerStorageValue(cid, storage)-os.time())/60).." minutos e"..((getPlayerStorageValue(cid, storage)-os.time())%60).." segundos", cid) -- caso ainda não esteja pronto o item talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  7. checa no items.xml se o corpse existe, e se tem decay mt baixo
  8. procura o xml do monster data > monster > hero.xml (exemplo) e dentro do arquivo, tem a seguinte TAG: **exemplo** <look type="12" head="114" body="114" legs="114" feet="114" corpse="6547"/> os seus monsters, não terão a parte corpse="6547" adicione esse corpse a tag, (o corpse precisa ser correspondente ao looktype, isso é mais dificil de achar)
  9. vai em e cria um arquivo .lua chamado NPCtroca.lua vai ficar assim: data > npc > scripts > NPCtroca.lua ai add esse código: -- make by FeeTads //assistente TibiaKing local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} local itemid = {1111,2222,3333,4444} -- id dos items necessários pra troca local save_items = 0 -- variavel apenas pra salvar a quantidade de items //nao mexer local tempo_de_espera = 60 -- em minutos local storage = 58458711 -- storage //se não souber, não mexer local item_trocado = 6565 -- id do item que vira após a troca local trocar_mais_de_uma_vez = true -- o player pode trocar varias vezes esse 4 items por 1? //true pode trocar mais de 1x //false só troca uma vez function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) if isInArray({"trocar","troca","trocar item"}, msg) then -- mensagem do player selfSay("Você deseja trocar"..#itemid.." items pelo supremo item?", cid) -- msg do NPC talkState[talkUser] = 2 elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 2 then if trocar_mais_de_uma_vez == false and getPlayerStorageValue(cid, storage) ~= -1 then selfSay("Desculpe, você já fez sua troca!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) return true end for i=1, #itemid do -- for pra fazer a contagem dos items if getPlayerItemCount(cid, itemid[i]) > 0 then -- caso o player tenha o item save_items = save_items + 1 -- salva na variavel end end if save_items >= #itemid then -- se tiver todos os items necessários selfSay("Parabéns! agora vou craftar seu item, ele irá demorar"..tempo_de_espera.." pra ficar pronto", cid) -- manda a mensagem setPlayerStorageValue(cid, storage, os.time() + (tempo_de_espera*60)) -- seta a storage pra 60 minutos for i=1, #itemid do doPlayerRemoveItem(cid, itemid[i], 1) -- remove os items do player end else selfSay("Desculpe, você não tem os items necessários!", cid) -- mensagem caso não tenha os items necessários talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end elseif isInArray({"no","não","nao","not"}, msg) and talkState[talkUser] == 2 then -- caso o player não queira trocar, só da tchau selfSay("Tudo bem então, Bye!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"receber","receber item"}, msg) then -- caso o player digite "receber" if getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0 then -- checa se já passou [tempo de espera], e não é 0 if (doPlayerAddItemEx(cid, item_trocado, true) ~= RETURNVALUE_NOERROR) then -- caso o player tenha slot na bp, etc.. selfSay("Parabéns! seu item está entregue, bom jogo!", cid) -- msg do NPC setPlayerStorageValue(cid, storage, 0) -- seta a storage do player pra 0 talkState[talkUser] = 0 npcHandler:releaseFocus(cid) else selfSay("Seu item está pronto, deixe espaço em sua BP!", cid) -- caso não consiga entregar o item só pede pra deixar espaço talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end else selfSay("Seu item {não está pronto}, volte em"..math.floor((getPlayerStorageValue(cid, storage)-os.time())/60).." minutos e"..((getPlayerStorageValue(cid, storage)-os.time())%60).." segundos", cid) -- caso ainda não esteja pronto o item talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) ai cria o xml do NPC data > npc > NPCtroca.xml <?xml version="1.0" encoding="UTF-8"?> <npc name="[NPC] Troca" script="data/npc/scripts/NPCtroca.lua" walkinterval="0" floorchange="0" emblem="3"> <health now="100" max="100"/> <look type="133" head="21" body="1" legs="76" feet="25" addons="3"/> <parameters> <parameter key="message_greet" value="Ola, voce gostaria de {trocar} seus items pelo item supremo, ou {receber}?" /> </parameters> </npc>
  10. ja existe no forum um tópico assim segue link: nesse script em questão, é necessario ser da vocação 1 até 12, pra usar o item, tendo em vista que "getPlayerVocation(cid) > 13" ou seja, vocação maior que 13 não usa. há uns dias você pediu um script de food que heala por tempo, que só algumas vocações pode usar, vc pode fazer a mesma tabela de vocação e usar o for que checa qual a necessária pra usar
  11. Este tópico foi movido para a seção de Suporte Otserv. cara eu fraguei +/- a idéia, você consegue fazer um video explicando como está, e como deveria funcionar? ou alguma imagem que exemplifique pf?
  12. creio que o empty não fecha na comparação tenta assim: if (empty(strlen($newchar_name)) >= 5)
  13. mas esse script só vai mandar o texto "voc vip" no sqm kkkkkk segue o script, adicionar o script em globalEvents data > globalEvents > scripts > DamageTile.lua local config = { damage = 100, --quantidade de dano effect = 26, -- efeito que sairá na position, pra saber qual efeito usar, vá no seu god e usa /z e um numero entre 0-49, exemplo /z 30 cor = 180 -- cor do texto } function onThink(interval, lastExecution) local positions = { [1] = {pos = {x = 143, y = 155, z = 7}}, --[2] = {pos = {x = 1, y = 1, z =1}}, -- pra add outras posições só colocar assim e em sequencia, precisa da virgula no final } for i=1, #positions do -- vai da posição 1, até o tamanho de posições doSendMagicEffect(positions[i].pos, config.effect) -- envia o efeito na posição if isPlayer(getTopCreature(positions[i].pos).uid) then -- se tiver player na posiçao player = getTopCreature(positions[i].pos).uid doSendAnimatedText(getCreaturePosition(player), "-"..config.damage, config.cor) doCreatureAddHealth(player, -config.damage) -- retira a vida do player na posição end end return true end e add essa tag no globalEvents.xml data> globalEvents > globalEvents.xml <globalevent name="DamageTile" interval="3000" event="script" value="DamageTile.lua"/> "interval="3000" singnifca 3s 3000 ms = 3s
  14. mano, vou dar uma ideia basica kkkk, se não conseguir me avisa. que dou uma base faz um global event com interval de 3s ai quando ele chamar esse global event, checa se tem player em cima da position, se tiver, da um doCreatureAddHealth(cid, -danoConfigurado)
  15. FeeTads postou uma resposta no tópico em Suporte Tibia OTServer
    olá bom dia. mano não mexo muito com TFS, mas tenta compilar usando o tutorial do luan luciano, grande mestre do TK link: https://tibiaking.com/forums/topic/105633-compilando-e-configurando-servidor-tfs-1x-no-ubuntu-2204/?tab=comments#comment-562412 alias, se vc for no perfil dele, há também outros tutorias de mysql, etc...
  16. tmj meu bom, não esquece de deixar o REP+ ali no canto direito kkkkkkkkk pra deixar aquela moral, tmj
  17. vai na pasta do teu site accountmanagement.php procura por "registered" vc vai achar algo que demonstra que está nessa parte provavelmente ai add embaixo $user_premium_points = $account_logged->getCustomField('premium_points'); $main_content .= '<small><br>(Balance of Premium Points: <font color="green"><b>'.$user_premium_points.'</b></font> Points)</small>'; ai tu edita e ajeita com seu conhecimento em HTML pra melhorar o visual kkkkkkkk
  18. tenta esse arquivo como shop.lua shop.lua ou esse shop.lua > shop do baiak.pvp caso nenhum de certo, possivelmente poderá ser o seu php com problema shopsystem.php caso seja o seu php, tente por esse no lugar. caso nada entregue cheque o interval da tag do global events data > globalevents > globalevents.xml <globalevent name="shop" interval="10000" script="shop.lua" /> caso não seja nada disso possivelmente pode ser DB
  19. manda o seu shop.lua data > globalevents > scripts > shop.lua
  20. não sabia que existia essa função, eu procurei por item.slotype kkkkk, mas isso ja vai ser de grande ajuda mano que isso, perfeito, obrigado
  21. config.lua pzlockOnAttackSkulledPlayers = false bota true
  22. local tempo = getPlayerStorageValue(cid, storage) - os.time() if tempo > 0 then if tempo > 60 then doPlayerSendCancel(cid,"Você precisa esperar "..math.floor(tempo/60).." minutos e "..(tempo%60).." segundos.") else doPlayerSendCancel(cid,"Você precisa esperar "..(tempo%60).." segundos.") end return true end eu uso assim pra checar tempo em segundos tempo/60 ou seja, tempo da storage - os.time() se for 600 segundos vai pegar 600/60 = 10 e tempo%60 = resto da equação, ou seja, o que sobra da divisão são segundos math.floor = arredonda pra baixo math.ceil = arredonda pra cima uso o arredonda pra baixo pq normalmente os.time/60 da um numero tipo 21.0505850, ai sempre arredonda pra 2 digitos
  23. tua source não possui a função "getPlayersOnline()" e pra fazer essa checagem ai, precisaria dela, da pra fazer ela em .lua, mas eu n me recordo como faz a checagem da database mano, acho que sua source é desatualizada, sugiro vc procurar uma TFS1.3 ou se for OTX, a OTX2 do mattyx
  24. GG mano, testa certinho, faz varios tipos de testes que os players podem tentar fazer, tipo usar e deslogar, usar varios, etc.. e ve se da algum bug, se der volta aki kkkkkkkk, tmj mano
  25. a distro deixou o erro ali kkkkkk " ' , ' expected near '#' " ? kkkkkk faltou uma virgula no for da linha 46 aki nesse for i=1 #need_vocation for i=1 #need_vocation do -- checa as vocações que podem usar o food //setadas no cabeçalho if getPlayerVocation(cid) == need_vocation[i] then -- se for, aparece msg de sucesso na tela doPlayerSendTextMessage(cid, 22, msg_sucess) else doPlayerSendTextMessage(cid, 22, msg_no_vocation) -- se não tiver a vocação necessaria, manda msg avisando return true -- e sai da função end end coloca assim for i=1, #need_vocation do só uma virgula após o i=1 de qualquer maneira, atualizei a linha 46 no código ali em cima, qualquer coisa só copiar e colar kkk e caso funcione 100%, deixa o REP+ e o Mark as Solution ? tmj meu mano po mano e percebi um "mini erro" meu aqui, quando estava chamando a função, caso fosse diferente de 1 segundo, iria bugar deixando o código arrumado aki pra baixo fix: GARANTE que o buff vai durar exatamente o tempo descrito no cabeçalho, independente de quantas curas executar. fix2: arrumei a checagem de vocação do for também, da outra maneira ia checar apenas a primeira vocação e sair. sugiro muito que copie esse script \/ local itemID = 9998 -- id do item local tempoDeBuff = 60 -- em segundos local porcentagemDeCura = 2 -- vai curar 2% por [tempo entre curas] durante [tempo de buff] local qtdDeSkill = 10 -- quantidade de skill que dará local efeito = 4 -- efeito que sairá do player local removerItem = true -- remover o item? true = remove, false = não remove local tempoEntreCuras = 1 * 1000 -- tempo entre o efeito da cura, 1 * 1000 = 1000ms logo //1 segundo local need_vocation = {1,2,3,4,5} -- IDs da vocações QUE PODEM usar o food local buff = SKILL_FISHING -- qual skill vai aumentar //pra saber qual skill vc quer aumentar procure por "skill" em "lib/000-constant.lua" local storage = 5474767 -- pode ser qualquer numero //não pode repetir numero de outra storage existente local storage_buff_ativo = 5474768 local function CuraFoodBuff(cid, flag) if isCreature(cid) then --se estiver logado entra, se não termina o loop, ou seja, se deslogar/morrer perde o efeito do food if flag > 0 then doCreatureAddHealth(cid, (getCreatureMaxHealth(cid) * (porcentagemDeCura/100))) -- n mexer :P doSendMagicEffect(getThingPos(cid), efeito) -- efeito que vai sair do player flag = getPlayerStorageValue(cid, storage) - os.time() -- garante que execute a função pelo [tempo de buff] addEvent(CuraFoodBuff, tempoEntreCuras, cid, flag) -- chama de novo a função passando -1 segundo pro tempo else doPlayerAddSkill(cid, buff, -qtdDeSkill, true) -- quando acabar o efeito seta o fishing pro normal setPlayerStorageValue(cid, storage_buff_ativo, -1) return true end else return true end end function onUse(cid, item, frompos, item2, topos) local msg_no_vocation = "Sua Vocação não pode usar esse item!" -- mensagem caso não tenha a voc necessária local msg_sucess = "Você usou o Heal Food, o efeito irá durar"..tempoDeBuff.." segundos" -- mensagem de sucesso if item.itemid == itemID then local tempo = getPlayerStorageValue(cid, storage) - os.time() -- tempo recebe o tempo restante pra usar a potion de novo if tempo > 0 then -- se tempo for maior que 0, significa que está em uso if tempo > 60 then -- só pra mostrar bonitinho doPlayerSendCancel(cid,"Você precisa esperar "..math.floor(tempo/60).." minutos e "..(tempo%60).." segundos.") else doPlayerSendCancel(cid,"Você precisa esperar "..(tempo%60).." segundos.") end return true end for i=1, #need_vocation do -- checa as vocações que podem usar o food //setadas no cabeçalho if getPlayerVocation(cid) == need_vocation[i] then -- se for, aparece msg de sucesso na tela doPlayerSendTextMessage(cid, 22, msg_sucess) no_have_voc = false -- seta a variavel de não ter voc pra false, ou seja tem a voc necessaria break -- quebra o for depois disso //necessario deixar o BREAK end end if no_have_voc then doPlayerSendTextMessage(cid, 22, msg_no_vocation) -- se não tiver a vocação necessaria, manda msg avisando return true -- e sai da função end setPlayerStorageValue(cid, storage, os.time() + tempoDeBuff) -- storage pra salvar o tempo de buff, apenas pra tirar o skill de fishing caso o player deslogue/morra doPlayerAddSkill(cid, buff, qtdDeSkill, true) -- aumenta o skill setado no cabeçalho setPlayerStorageValue(cid, storage_buff_ativo, 1) if removerItem then -- se removerItem no cabeçalho for true REMOVE O ITEM, se não, não remove doRemoveItem(item.uid, 1) -- função de remover o item, não precisa mexer end CuraFoodBuff(cid, tempoDeBuff) -- chama a função end return true end

Informação Importante

Confirmação de Termo