• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Lua Monster Healing Spell [TFS 1.2]

Siegh

Thronar Developer
Joined
Mar 12, 2011
Messages
1,278
Solutions
1
Reaction score
635
Location
Brazil
Hello!!

I made a simple spell where a static enemy will heal other monsters inside its area, but I'm not being able to make it identify the proper creatures in the area and add health to them.

What am I doing wrong? Thanks in advance!

LUA:
local combat = Combat()

local area = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 1, 3, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}
--=======================================

setCombatArea(combat, createCombatArea(area))

function onCastSpell(creature, variant)
    function onTargetCreature(creature, target)    
        if not target:isPlayer() then
            local rand = math.random(1500,4500)
            target:addHealth(rand)
        end
        return true
    end
    combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
    creature:getPosition():sendMagicEffect(46)
    doCreatureSay(creature, "HEALING", TALKTYPE_ORANGE_1)
    combat:execute(creature, variant)
return true
end
 
Last edited:
Solution
LUA:
local area = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 1, 3, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
}

local combatArea = createCombatArea(area)

function onCastSpell(creature, variant)
    local pos = creature:getPosition()
    pos:sendMagicEffect(CONST_ME_MAGIC_GREEN)...
LUA:
local area = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 1, 3, 1, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
}

local combatArea = createCombatArea(area)

function onCastSpell(creature, variant)
    local pos = creature:getPosition()
    pos:sendMagicEffect(CONST_ME_MAGIC_GREEN)
    creature:say("HEALING", TALKTYPE_MONSTER_SAY)

    local spectators = Game.getSpectators(pos, false, false, 6, 6, 6, 6)

    for _, target in ipairs(spectators) do
        if target:isMonster() then
            
            if target ~= creature then
                local heal = math.random(1500, 4500)
                doCreatureAddHealth(target, heal)
                target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            end

        end
    end

    return true
end
 
Solution
Back
Top