Ir para conteúdo
  • 0

erro na potion


wevertonvrb

Pergunta

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

Spoiler

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

 

aaaaaaaaaaaaa.png

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
1 hora atrás, wevertonvrb disse:
Versão do Servidor: TFS - 1.0
Tipo de Script: actions
Código:
  Mostrar conteúdo oculto


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

  Ocultar conteúdo

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

 

aaaaaaaaaaaaa.png

É pq o jeito que ta seu script, da pra crashar o sv dependendo das circunstâncias, tenta editar essa spell aqui e troca pra onUse
 

local function eventRegeneration(playerId, seconds)
    local player = Player(playerId)
    if seconds > 0 and player then
        local healvalue = ((player:getMaxHealth * 0.05))
        player:addHealth(healvalue)
        player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
        addEvent(eventRegeneration, 1000, playerId, seconds - 1)
    end
end

local coolDownStorageID = 666777
local coolDownSeconds = 10

function onCastSpell(player, variant)
    if player:getStorageValue(coolDownStorageID) <= os.time() then
        player:setStorageValue(coolDownStorageID, os.time() + (coolDownSeconds - 1))
        return eventRegeneration(player:getId(), coolDownSeconds)
    end
    return not player:sendCancelMessage("You are exhausted.")
end
Link para o comentário
Compartilhar em outros sites

  • 0
Em 08/08/2020 em 02:18, wevertonvrb disse:
Versão do Servidor: TFS - 1.0
Tipo de Script: actions
Código:
  Mostrar conteúdo oculto


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

  Ocultar conteúdo

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

 

aaaaaaaaaaaaa.png

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.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

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