• 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!

Lua Help with a spell

Pifafa

Member
Joined
Nov 9, 2010
Messages
48
Reaction score
5
I would really like to do the magic to heal my friend, it stays for 10 seconds healing the player he chose, like a long-lasting spell. ( TFS 1.2 )

Lua:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(player, level, maglevel)
    local base = 190
    local variation = 40
   
    local formula = 3 * maglevel + (3 * level)
   
    local min = (formula * (base - variation)) / 100
    local max = (formula * (base + variation)) / 100
    return min, max
end

combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(creature, variant)
    creature:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
    return combat:execute(creature, variant)
end
 
Last edited:
Solution
Weird, variant:getNumber() did not work in RevScripts and variant:getString() did not work here.
Try this:
Lua:
local config = {
    range = 5, -- Max range from player you want to heal
    duration = 10, -- How long the heal should last (seconds)
    delay = 1, -- Delay between each heal (seconds)
}

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(player, level, maglevel)
    local base = 190
    local variation = 40
    local formula = 3 * maglevel + (3 * level)
    local min = (formula * (base -...
RevScript, goes into data/scripts.

Usage: healFriend "playerName
Lua:
local config = {
    range = 5, -- Max range from player you want to heal
    duration = 10, -- How long the heal should last (seconds)
    delay = 1, -- Delay between each heal (seconds)
}

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(player, level, maglevel)
    local base = 190
    local variation = 40
    local formula = 3 * maglevel + (3 * level)
    local min = (formula * (base - variation)) / 100
    local max = (formula * (base + variation)) / 100
    return min, max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local spell = Spell(SPELL_INSTANT)
function spell.onCastSpell(creature, variant, isHotkey)
    local player = Player(creature:getId())
    local target = Player(variant:getString())
    local stillValid = true

    if player:getPosition():getDistance(target:getPosition()) <= config.range then
        creature:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)

        for i = 1, (config.duration / config.delay) do
            addEvent(function()
                if not stillValid then return end -- Lazy fix for if a player has died or logged out
                local p = Player(creature:getId())
                local v = Variant(variant:getString())

                if p and v then
                    return combat:execute(p, v)
                else
                    stillValid = false
                end
            end, i * (config.delay * 1000))
        end

        return true
    else
        player:sendCancelMessage("Not in range to heal player: " .. target:getName())
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end
end

spell:name("healFriend")
spell:words("healFriend")
spell:hasParams(true)
spell:hasPlayerNameParam(true)
spell:id(159)
spell:group("healing")
spell:cooldown(2000)
spell:groupCooldown(2000)
spell:isSelfTarget(false)
spell:isAggressive(false)
spell:needLearn(false)
spell:vocation("druid")
spell:register()
 
RevScript, goes into data/scripts.

Usage: healFriend "playerName
Lua:
local config = {
    range = 5, -- Max range from player you want to heal
    duration = 10, -- How long the heal should last (seconds)
    delay = 1, -- Delay between each heal (seconds)
}

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(player, level, maglevel)
    local base = 190
    local variation = 40
    local formula = 3 * maglevel + (3 * level)
    local min = (formula * (base - variation)) / 100
    local max = (formula * (base + variation)) / 100
    return min, max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local spell = Spell(SPELL_INSTANT)
function spell.onCastSpell(creature, variant, isHotkey)
    local player = Player(creature:getId())
    local target = Player(variant:getString())
    local stillValid = true

 if player:getPosition():getDistance(target:getPosition()) <= config.range então
 criatura:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)

 para i = 1, (config.duration / config.delay) fazer
 addEvent(função()
 se não for aindaVálido então volte fim -- Correção preguiçosa para se um jogador morreu ou desconectou-se
 local p = Jogador(criatura:getId())
                local v = Variant(variant:getString())

 se p e v então
 Combate de retorno: Executar (P, V)
 mais
 stillValid = falso
 fim
 fim, i * (config.delay * 1000))
 fim

 retornar true
 mais
 player:sendCancelMessage("Não está no alcance para curar o jogador: " .. target:getName())
 jogador:getPosition():sendMagicEffect(CONST_ME_POFF)
 retornar false
 fim
fim

feitiço:nome("healFriend")
feitiço:palavras("healFriend")
feitiço:hasParams(true)
feitiço:hasPlayerNameParam(true)
feitiço:id(159)
feitiço:grupo("cura")
Feitiço:Cooldown (2000)
feitiço:groupCooldown(2000)
feitiço:isSelfTarget(false)
feitiço:isAgressivo(falso)
spell:needLearn(falso)
feitiço:vocação("druida")
spell:register()[/CÓDIGO]
[/QUOTE]
 usar
use TFS 1.2
 
use TFS 1.2
Lua:
local config = {
    range = 5, -- Max range from player you want to heal
    duration = 10, -- How long the heal should last (seconds)
    delay = 1, -- Delay between each heal (seconds)
}

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(player, level, maglevel)
    local base = 190
    local variation = 40
    local formula = 3 * maglevel + (3 * level)
    local min = (formula * (base - variation)) / 100
    local max = (formula * (base + variation)) / 100
    return min, max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(creature, variant)
    local player = Player(creature:getId())
    local target = Player(variant:getString())
    local stillValid = true

    if player:getPosition():getDistance(target:getPosition()) <= config.range then
        creature:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)

        for i = 1, (config.duration / config.delay) do
            addEvent(function()
                if not stillValid then return end -- Lazy fix for if a player has died or logged out
                local p = Player(creature:getId())
                local v = Variant(variant:getString())

                if p and v then
                    return combat:execute(p, v)
                else
                    stillValid = false
                end
            end, i * (config.delay * 1000))
        end

        return true
    else
        player:sendCancelMessage("Not in range to heal player: " .. target:getName())
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end
end
 
Lua:
local config = {
    range = 5, -- Max range from player you want to heal
    duration = 10, -- How long the heal should last (seconds)
    delay = 1, -- Delay between each heal (seconds)
}

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(player, level, maglevel)
    local base = 190
    local variation = 40
    local formula = 3 * maglevel + (3 * level)
    local min = (formula * (base - variation)) / 100
    local max = (formula * (base + variation)) / 100
    return min, max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(creature, variant)
    local player = Player(creature:getId())
    local target = Player(variant:getString())
    local stillValid = true

    if player:getPosition():getDistance(target:getPosition()) <= config.range then
        creature:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)

        for i = 1, (config.duration / config.delay) do
            addEvent(function()
                if not stillValid then return end -- Lazy fix for if a player has died or logged out
                local p = Player(creature:getId())
                local v = Variant(variant:getString())

                if p and v then
                    return combat:execute(p, v)
                else
                    stillValid = false
                end
            end, i * (config.delay * 1000))
        end

        return true
    else
        player:sendCancelMessage("Not in range to heal player: " .. target:getName())
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end
end
error :(

Code:
Lua Script Error: [Spell Interface]
data/spells/scripts/spells/heal friend max.lua:onCastSpell
data/spells/scripts/spells/heal friend max.lua:28: attempt to index local 'target' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/spells/scripts/spells/heal friend max.lua:28: in function <data/spells/scripts/spells/heal friend max.lua:23>
 
error :(

Code:
Lua Script Error: [Spell Interface]
data/spells/scripts/spells/heal friend max.lua:onCastSpell
data/spells/scripts/spells/heal friend max.lua:28: attempt to index local 'target' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/spells/scripts/spells/heal friend max.lua:28: in function <data/spells/scripts/spells/heal friend max.lua:23>
Did you add these lines to the spell in spells.xml?
XML:
playernameparam="1" params="1"
 
Did you add these lines to the spell in spells.xml?
XML:
playernameparam="1" params="1"
Lua:
    <instant name="Heal Friend Max" words="exura max sio" maglv="7" mana="70" aggressive="0" blockwalls="1" needtarget="1" playernameparam="1" params="1" needlearn="0" script="spells/heal friend max.lua">
        <vocation name="Druid" />
        <vocation name="Elder Druid" />
    </instant>
 
Weird, variant:getNumber() did not work in RevScripts and variant:getString() did not work here.
Try this:
Lua:
local config = {
    range = 5, -- Max range from player you want to heal
    duration = 10, -- How long the heal should last (seconds)
    delay = 1, -- Delay between each heal (seconds)
}

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(player, level, maglevel)
    local base = 190
    local variation = 40
    local formula = 3 * maglevel + (3 * level)
    local min = (formula * (base - variation)) / 100
    local max = (formula * (base + variation)) / 100
    return min, max
end
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(creature, variant)
    local player = Player(creature:getId())
    local target = Player(variant:getNumber())
    local stillValid = true

    if player:getPosition():getDistance(target:getPosition()) <= config.range then
        creature:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)

        for i = 1, (config.duration / config.delay) do
            addEvent(function()
                if not stillValid then return end -- Lazy fix for if a player has died or logged out
                local p = Player(creature:getId())
                local v = Variant(variant:getNumber())

                if p and v then
                    return combat:execute(p, v)
                else
                    stillValid = false
                end
            end, i * (config.delay * 1000))
        end

        return true
    else
        player:sendCancelMessage("Not in range to heal player: " .. target:getName())
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end
end
 
Solution
Weird, variant:getNumber() did not work in RevScripts and variant:getString() did not work here.
Try this:
Lua:
local config = {
    range = 5, -- Max range from player you want to heal
    duration = 10, -- How long the heal should last (seconds)
    delay = 1, -- Delay between each heal (seconds)
}

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(player, level, maglevel)
base local = 190
variação local = 40
fórmula local = 3 * maglevel + (3 * level)
min local = (fórmula * (base - variação)) / 100
max local = (fórmula * (base + variação)) / 100
retorno min, max
fim
combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

função onCastSpell(criatura, variante)
jogador local = Player(creature:getId())
destino local = Player(variant:getNumber())
    local stillValid = true

if player:getPosition():getDistance(target:getPosition()) <= config.range então
criatura:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)

para i = 1, (config.duration / config.delay) fazer
addEvent(função()
se não for aindaVálido então volte fim -- Correção preguiçosa para se um jogador morreu ou desconectou-se
local p = Jogador(criatura:getId())
                local v = Variant(variant:getNumber())

se p e v então
Combate de retorno: Executar (P, V)
mais
stillValid = falso
fim
fim, i * (config.delay * 1000))
fim

retornar true
mais
player:sendCancelMessage("Não está no alcance para curar o jogador: " .. target:getName())
jogador:getPosition():sendMagicEffect(CONST_ME_POFF)
retornar false
fim
fim[/CÓDIGO]
[/QUOTE]
fectPor
It worked well, now I feel like a luxury!
 
Back
Top