FJ
pedido

Regen constante

Por Fjinst, 30 de jun. de 2015 em Scripts

resolvido
script
20
3.8k
FjinstF
30 de junho de 2015 às 16:06

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 Junho 30 por Fjinst

atakashiA
30 de junho de 2015 às 16:22

Só uma idéia, já penso em por um item que desse esse regen, e com o level o player troca-se de item?

 

RigByR
30 de junho de 2015 às 16:29

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.

 

FjinstF
30 de junho de 2015 às 16:32

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 Junho 30 por Fjinst

RigByR
30 de junho de 2015 às 16:45

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 Junho 30 por RigBy

FjinstF
30 de junho de 2015 às 17:00

 

 

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

HeelNoxH
30 de junho de 2015 às 17:08

Vai ter tanta regen que vai travar o servidor todo é crashar cara.

FjinstF
30 de junho de 2015 às 17:09

Não há nenhum jeito de ter esse script então? já vi alguns servidores com ele, que pensei que era possivel

RigByR
30 de junho de 2015 às 17:22

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 Junho 30 por RigBy

FjinstF
30 de junho de 2015 às 17:39

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!

RigByR
30 de junho de 2015 às 17:59

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 Junho 30 por RigBy

FjinstF
30 de junho de 2015 às 18:15

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
RigByR
30 de junho de 2015 às 18:34

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.

FjinstF
30 de junho de 2015 às 19:03

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 Junho 30 por Fjinst

RigByR
30 de junho de 2015 às 19:27

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 Junho 30 por RigBy