local config = {
healAmount = 50, -- how much per tick
interval = 2000, -- ms between heals
duration = 10000, -- ms total duration
radius = 1, -- tiles around caster
maxInstances = 2 -- maximum active auras
}
local activeAuras = {}
local function doHealingAura(cid, position, ticksLeft)
local player = Player(cid)
if not player then
activeAuras[cid] = nil
return
end
local spectators = Game.getSpectators(position, false, true, config.radius, config.radius, config.radius, config.radius)
for _, target in ipairs(spectators) do
if target:isPlayer() then
target:addHealth(config.healAmount)
position:sendMagicEffect(CONST_ME_MAGIC_BLUE)
end
end
if ticksLeft > 0 then
addEvent(doHealingAura, config.interval, cid, position, ticksLeft - 1)
else
activeAuras[cid] = nil
end
end
function onCastSpell(creature, var)
local cid = creature:getId()
local activeCount = 0
for _, _ in pairs(activeAuras) do
activeCount = activeCount + 1
end
if activeCount >= config.maxInstances then
creature:sendCancelMessage("Too many healing auras are already active.")
return false
end
activeAuras[cid] = true
local ticks = math.floor(config.duration / config.interval)
doHealingAura(cid, creature:getPosition(), ticks)
return true
end