Não sei se entendi direito o que você queria.
Mas acho que eu tinha uma spell assim, que usei a um tempo atrás.
Não testei atualmente (mas quando usei funcionava perfeitamente).
Só funciona em party.
local config = {
tempo = 20, --- tempo que vai durar a spell
intervalo = 1, --- intervalo que leva pra recuperar X de mana/vida (em segundos)
hp = 5000, -- quanto de hp ganha a cada intervalo
mana = 5000, -- quanto de mana ganha a cada intervalo
}
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, 349) -- efeito
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE)
CROSS5X5 = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
}
local area = createCombatArea(CROSS5X5)
setCombatArea(combat, area)
local condition = createConditionObject(CONDITION_FOOD)
setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_MANAGAIN, config.mana)
setConditionParam(condition, CONDITION_PARAM_MANATICKS, config.intervalo*1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, config.hp)
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, config.intervalo*1000)
local baseMana = 120
function onCastSpell(cid, var)
local waittime = 30 -- Tempo de exhaustion
local storage = 115826
if exhaustion.check(cid, storage) then
doPlayerSendCancel(cid, "Podera usar novamente dentro de 30 segundos.")
return false
end
local pos = getCreaturePosition(cid)
local membersList = getPartyMembers(cid)
if(membersList == nil or type(membersList) ~= 'table' or table.maxn(membersList) <= 1) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
local affectedList = {}
for _, pid in ipairs(membersList) do
if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
table.insert(affectedList, pid)
end
end
local tmp = table.maxn(affectedList)
if(tmp <= 1) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
local mana = math.ceil((0.9 ^ (tmp - 1) * baseMana) * tmp)
if(getCreatureMana(cid) < mana) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
if(doCombat(cid, combat, var) ~= LUA_NO_ERROR) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
doCreatureAddMana(cid, -(mana - baseMana), FALSE)
doPlayerAddSpentMana(cid, (mana - baseMana))
for _, pid in ipairs(affectedList) do
doAddCondition(pid, condition)
end
exhaustion.set(cid, storage, waittime)
return LUA_NO_ERROR
end