Ir para conteúdo
  • 0

Regen constante


Fjinst

Pergunta

Olá, dei uma olhada no forum e não encontrei, então resolvi pedir

 

 

Gostaria que vocês me ajudem com um script que seja um regen passivo, tanto de mana quanto de vida

 

EX: O player vai healar 2 em 2 a cada segundo, mesmo sem comer food, como se fosse uma passiva de regen, e com o decorrer do level do player o regen vai aumentando, desde já grato pela atenção de ambos.

 

obs: De preferencia que fique aparecendo também a quantidade que healou, tipo healou 2, aparece um texto verde falando +2 encima do personagem.

Editado por Fjinst
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Pronto agora ta totalmente funcional, não vai ter nenhum bug assim.

onThink, em exaust você coloca o tempo entre cada heal

 

function doDoT(cid)
local exaust = 2 -- tempo entre cada heal
    local a = {
        {levelMin = 0, levelMax = 10, heal = 1}, 
        {levelMin = 11, levelMax = 20, heal = 4},
        {levelMin = 21, levelMax = math.huge, heal = 20},
}
    if not isCreature(cid) then
        return false
    end
    if getCreatureHealth(cid) < getCreatureMaxHealth(cid) then
        for _, b in pairs(a) do
            if getPlayerLevel(cid) >= b.levelMin and getPlayerLevel(cid) <= b.levelMax then
                if getPlayerStorageValue(cid, 83742397438247932) < os.time() then
                    doCreatureAddHealth(cid, b.heal)
                    addEvent(doDoT, exaust*1000, cid)
                    setPlayerStorageValue(cid, 83742397438247932, os.time() + exaust - 1)
                end
            end
        end
    end
return true
end
 
function onThink(cid, interval)
    doDoT(cid)
return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

Ele so fica se regenerando quando ta em combate que nem aquele outro script ou assim que logar começa a se regenera.

precisa ter feito alguma coisa para começar a regenera.

 

Link para o comentário
Compartilhar em outros sites

  • 0

Exatamente, eu tentei usar o sistema de passiva, mas só se regenera em combate, não tem como por no creaturescripts alguma função que checa o tempo? ou até então um looping infinito assim quando o player logar?

 

Da até para usar o sistema de passiva, caso tiver essa função de ficar repetindo o tempo ou então ativar de 5 em 5 segundos

Editado por Fjinst
Link para o comentário
Compartilhar em outros sites

  • 0

Exatamente, eu tentei usar o sistema de passiva, mas só se regenera em combate, não tem como por no creaturescripts alguma função que checa o tempo? ou até então um looping infinito assim quando o player logar?

 

Da até para usar o sistema de passiva, caso tiver essa função de ficar repetindo o tempo ou então ativar de 5 em 5 segundos

 

Mudei para ativa em 5 em 5 segundos quando tiver em combate, so basta criar uma magia de se healar

pera erei uma parada

#pronto ai

 

local magia = "blood rage" -- magia que ele ira solta, tem que ser o nome da magia e não a palavra magica
local storage = 5834843857 -- storage que vai ser usada, o valor é 1 para ser ativado
local hps = 5 -- 5 em 5 vai acontecer
 
function onCombat(cid, target)
    if isPlayer(cid) then
        if getPlayerStorageValue(cid, storage) == 1 then
            if getPlayerStorageValue(cid, 5345435432534543) < os.time() then
                doCreatureCastSpell(cid, magia) 
                setPlayerStorageValue(cid, 5345435432534543, os.time() + hps)
            end
        end
    end
return true
end
 
function onStatsChange(cid, attacker, type, combat, value)
    if isPlayer(cid) then
        if getPlayerStorageValue(cid, storage) == 1 then
            if getPlayerStorageValue(cid, 5345435432534543) < os.time() then
                doCreatureCastSpell(cid, magia) 
                setPlayerStorageValue(cid, 5345435432534543, os.time() + hps)
            end
        end
    end
return true
end
Editado por RigBy
Link para o comentário
Compartilhar em outros sites

  • 0

 

 

Mudei para ativa em 5 em 5 segundos quando tiver em combate, so basta criar uma magia de se healar

pera erei uma parada

#pronto ai

local magia = "blood rage" -- magia que ele ira solta, tem que ser o nome da magia e não a palavra magica
local storage = 5834843857 -- storage que vai ser usada, o valor é 1 para ser ativado
local hps = 5 -- 5 em 5 vai acontecer
 
function onCombat(cid, target)
    if isPlayer(cid) then
        if getPlayerStorageValue(cid, storage) == 1 then
            if getPlayerStorageValue(cid, 5345435432534543) < os.time() then
                doCreatureCastSpell(cid, magia) 
                setPlayerStorageValue(cid, 5345435432534543, os.time() + hps)
            end
        end
    end
return true
end
 
function onStatsChange(cid, attacker, type, combat, value)
    if isPlayer(cid) then
        if getPlayerStorageValue(cid, storage) == 1 then
            if getPlayerStorageValue(cid, 5345435432534543) < os.time() then
                doCreatureCastSpell(cid, magia) 
                setPlayerStorageValue(cid, 5345435432534543, os.time() + hps)
            end
        end
    end
return true
end

Tipo, não era isso que eu queria, falei que eu tinha usado desse jeito também mas não servia, pois só seria ativado em combate

 

Queria um regen passivo no char, mesmo o personagem parado, ficaria healando 3 em 3, etc., como se fosse uma passiva de regeneration só que para todo mundo, todos os chares, tem alguma função no creaturescripts que checa o tempo? ou que funcione desse jeito

Link para o comentário
Compartilhar em outros sites

  • 0

Eu também penso como o darkhell, mas pode ser que de certo.

Fiz um onLogin

 

function doDoT(cid)
    if not isCreature(cid) then -- Se o player tiver deslogado
        return false
    end
    doCreatureAddHealth(cid, 25) -- quanto vai healar
    addEvent(doDoT, 5000, cid) -- em quantos segundos vai healar, no caso 5000 = 5 segundos
return true
end
 
function onLogin(cid)
    doDoT(cid)
return true
end
Editado por RigBy
Link para o comentário
Compartilhar em outros sites

  • 0

Era exatamente isso Rigby o que queria, testei esse script ai com uns 30 players online, não houve nenhum lag, você poderia adicionar para mim que se o player tiver vida máxima pare de healar? e também que seja configuravel por level, ex: level 1 cure 2, level 2, 3, assim por diante, desde já grato pela atenção e pela ajuda!

Link para o comentário
Compartilhar em outros sites

  • 0

Ai, não repita os levels, coloque sempre 1 a mais, math.huge que dizer infinito.

function doDoT(cid)
    local a = {
        {levelMin = 0, levelMax = 10, heal = 1}, 
        {levelMin = 11, levelMax = 20, heal = 4},
        {levelMin = 21, levelMax = math.huge, heal = 20},
}
    if not isCreature(cid) then
        return false
    end
    if getCreatureHealth(cid) < getCreatureMaxHealth(cid) then
        for _, b in pairs(a) do
            if getPlayerLevel(cid) >= b.levelMin and getPlayerLevel(cid) <= b.levelMax then
                doCreatureAddHealth(cid, b.heal)
                addEvent(doDoT, 2000, cid)
            end
        end
    end
return true
end
 
function onLogin(cid)
    doDoT(cid)
return true
end

 

Editado por RigBy
Link para o comentário
Compartilhar em outros sites

  • 0

Ta funcionando show, só que você poderia pra ser em level individual? tipo assim

 

{level = 1, heal = 1},
{level = 2, heal = 4},
{level = 3, heal = 20},
Ao invez de levelmin e levelmax
Link para o comentário
Compartilhar em outros sites

  • 0

Da para fazer assim, mas vai da muito mais maitoooooooooo trabalho, porque você terá que adicionar um por um, porque caso eu use >= os heal vai começar a se junta tipo 25...75...225...655.

Recomendo você usar esse dai de cima.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, consegui fazer o que queria, troquei o getPlayerLevel(cid) por getPlayerExperience(cid) e funcionou como eu queria, por que como eu coloquei um level máximo no meu servidor, não posso fazer assim a cada 2 leveis mudar o regen, rsrs, muito obrigado Rigby

 

 

 

Edittt

 

Percebi uma falha, se o player ficar logando e deslogando, fica curando cada vez que logar, não tem como colocar um exhaust tipo uma storage value?

Editado por Fjinst
Link para o comentário
Compartilhar em outros sites

  • 0

para de funciona e so volta quando loga de novo?

mudei para onThink(cid, interval), não se esqueça de registra o evento.

function doDoT(cid)
    local a = {
        {levelMin = 0, levelMax = 10, heal = 1}, 
        {levelMin = 11, levelMax = 20, heal = 4},
        {levelMin = 21, levelMax = math.huge, heal = 20},
}
    if not isCreature(cid) then
        return false
    end
    if getCreatureHealth(cid) < getCreatureMaxHealth(cid) then
        for _, b in pairs(a) do
            if getPlayerLevel(cid) >= b.levelMin and getPlayerLevel(cid) <= b.levelMax then
                doCreatureAddHealth(cid, b.heal)
                addEvent(doDoT, 2000, cid)
            end
        end
    end
return true
end
 
function onThink(cid, interval)
    doDoT(cid)
return true
end
Editado por RigBy
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...