Em 08/08/2020 em 02:18, wevertonvrb disse:
Versão do Servidor: TFS - 1.0
Tipo de Script: actions
Código:
o script esta funcionando perfeitamente do jeito que eu quero porem mesmo funcionando ele esta gerando erro na distro e quero corrigir esse erro e lhes pesso por gentileza que me ajudem
o script esta funcionando perfeitamente do jeito que eu quero porem mesmo funcionando ele esta gerando erro na distro e quero corrigir esse erro e lhes peço por gentileza que me ajudem
o script é uma poção que enche vida por segundo durante um determinado tempo, quando eu uso a poção a vida enche certinho porem gera erro conforme a foto que esta abaixo
script
function onUse(cid, item, fromPos, itemEx, toPos)
local function doRegeneration(cid, formula, count)
doCreatureAddHealth(cid, formula.health)
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_GREEN)
if (count ~= 1) then
addEvent(doRegeneration, 2500, cid, formula, count - 1)
end
return true
end
local tempo = 30 -- tempo que a potion ira ficar healando (tempo em segundos)
local storage = 11148 -- não mexa aqui
local form = {health = 1}
if (getPlayerStorageValue(cid, storage) <= os.time()) then
doRegeneration(cid, form, tempo)
doChangeTypeItem(item.uid, item.type - 1)
setPlayerStorageValue(cid, storage, os.time())
end
return true
end
Eu refiz o seu código, pois a estrutura dele não estava legal. Não fazia sentido você setar a storage com tempo do os.time() sem nenhum acréscimo além dele, pois seria a mesma coisa que nada. E também não é bom fazer uma função dentro do onUse, é sempre bom fazer fora, como boas práticas.
Substitua seu código por:
---------------------------- FUNÇÃO DE HEALAR -----------------------------
local function doRegeneration(cid, health, effect, count)
if count > 0 then
doCreatureAddHealth(cid, math.floor(health))
doSendMagicEffect(getCreaturePosition(cid), effect)
addEvent(doRegeneration, 1000, cid, health, effect, count - 1)
end
end
---------------------------------------------------------------------------
local storage = 11148 -- STORAGE PARA ARMAZENAR UM TEMPO DE COOLDOWN PARA USAR A POTION NOVAMENTE
------------------------------ CÓDIGO --------------------------------------
function onUse(cid, item, fromPos, itemEx, toPos)
local tempo = 30 -- TEMPO EM SEGUNDOS QUE A POTION VAI HEALAR (ESSE MESMO TEMPO É ADICIONADO A STORAGE PARA FAZER UM EXHAUST E O PLAYER NÃO USAR MAIS DE UMA POTION DE UMA VEZ)
local health = 15 -- TANTO DE VIDA QUE O PLAYER VAI RECUPERAR
local effect = CONST_ME_MAGIC_GREEN -- EFEITO QUE VAI SAIR NO PLAYER QUANDO USAR A POTION
if getCreatureHealth(cid) == getCreatureMaxHealth(cid) then -- VERIFICA SE O PLAYER JÁ ESTÁ COM A VIDA TOTALMENTE CHEIA
return doPlayerSendCancel(cid, "Your health already is full.")
end
if not isPlayer(cid) then -- VERIFICA SE O PLAYER ESTÁ USANDO A POTION EM OUTRA CRIATURA
doPlayerSendCancel(cid, "You only can use the potion in you.")
return false
end
-- CONDIÇÃO PARA VER SE A POTION AINDA ESTÁ SENDO USADA NO PLAYER, PARA NÃO USAR MAIS DE UMA CORRENDO RISCO DE GASTAR POTION ATOA --
if getPlayerStorageValue(cid, storage) <= os.time() then
doRegeneration(cid, health, effect, tempo)
doChangeTypeItem(item.uid, item.type - 1)
setPlayerStorageValue(cid, storage, os.time() + tempo)
return true
else
doPlayerSendCancel(cid, "You are still being recovering.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are still being recovering.")
return true
end
end
Deixei tudo comentado para você entender, e também adicionei algumas verificações, como se o player já estiver com a vida totalmente cheia e se ele está tentando usar a potion em outra criatura. Também fiz para setar a storage com o tempo (definido na storage tempo) para setar mais o tempo do os.time() (momento que o player usa a potion), é bom isso porque não corre risco do player usar a potion duas vezes ou mais seguidas sem querer e também não gastar potion atoa, caso a primeira já encha a vida totalmente.
Também mudei o tempo do addEvent para 1 segundo, pois estava 2 segundos e meio.
Testa e me fala se der algum erro.