• 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 Add formula LVL to spell --- Sudden Comb0---

tuduras

Well-Known Member
Joined
Jun 4, 2017
Messages
340
Solutions
2
Reaction score
58
Hello,
after many attempts I decided add on this forum. I have got spell with
LUA:
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -2,7, 0, -2,7, 0)

and I want to add level formula :
Code:
function onGetFormulaValues(cid, level, maglevel)

    if getPlayerVocation(cid) ~= 3 or 7 then

        min = -(level * 4.9 + maglevel * 7.05) * 1.3

        max = -(level * 4.7 + maglevel * 7.60) * 1.2

        return min, max

    end

end



setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
Can Anybody help me with mix this spell ?
Best regards
PS: spell :
Code:
----------------------
-----Made by Mkshiwa-----
----------------------

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_BLOCKARMOR, FALSE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -2,7, 0, -2,7, 0)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_BLOCKARMOR, FALSE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -2,7, 0, -2,7, 0)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_BLOCKARMOR, FALSE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)
setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -2,7, 0, -2,7, 0)


local function onCastSpell1(parameters)
doCombat(parameters.cid, parameters.combat1, parameters.var)
end
local function onCastSpell2(parameters)
doCombat(parameters.cid, parameters.combat2, parameters.var)
end
local function onCastSpell3(parameters)
doCombat(parameters.cid, parameters.combat3, parameters.var)
end

function onCastSpell(cid, var)
local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2, combat3 = combat3}
addEvent(onCastSpell1, 0, parameters)
addEvent(onCastSpell2, 150, parameters)
addEvent(onCastSpell3, 300, parameters)

return true
end
 
Hello,

try it:


LUA:
lua----------------------
-----Made by JonDrops :) /opensource -----
----------------------

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_BLOCKARMOR, FALSE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_BLOCKARMOR, FALSE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_BLOCKARMOR, FALSE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)

function onGetFormulaValues(cid, level, maglevel)
    local vocation = getPlayerVocation(cid)
    
    -- Apply custom formula for vocations 3 or 7
    if vocation == 3 or vocation == 7 then
        local min = -(level * 4.9 + maglevel * 7.05) * 1.3
        local max = -(level * 4.7 + maglevel * 7.60) * 1.2
        return min, max
    else
        -- Default formula for other vocations
        local min = -(level * 2 + maglevel * 7) * 1.0
        local max = -(level * 2 + maglevel * 7) * 1.0
        return min, max
    end
end

setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
setCombatCallback(combat3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local function onCastSpell1(parameters)
    doCombat(parameters.cid, parameters.combat1, parameters.var)
end

local function onCastSpell2(parameters)
    doCombat(parameters.cid, parameters.combat2, parameters.var)
end

local function onCastSpell3(parameters)
    doCombat(parameters.cid, parameters.combat3, parameters.var)
end

function onCastSpell(cid, var)
    local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2, combat3 = combat3}
    addEvent(onCastSpell1, 0, parameters)
    addEvent(onCastSpell2, 150, parameters)
    addEvent(onCastSpell3, 300, parameters)
    return true
end
 
I tried but occurs error. ;/

LUA:
[18:44:41.678] [Error - Spell Interface]
[18:44:41.678] data/spells/scripts/attack/sudden combo.lua
[18:44:41.679] Description:
[18:44:41.679] (LuaInterface::luaSetCombatCallBack) Cannot load callback
[18:44:41.679] [Warning - CallBack::loadCallBack] Event onGetFormulaValues not found.

Code:
[18:45:19.471] [Error - Spell Interface]
[18:45:19.472] (Unknown script file)
[18:45:19.472] Description:
[18:45:19.472] attempt to call a nil value

You know what, It works but only 1 cast works . There in script are 3 cast
 
Last edited:
If your TFS is 1.2, do like that

LUA:
----------------------
-----Made by JonDrops :) /opensource -----
----------------------

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_BLOCKARMOR, false)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_BLOCKARMOR, false)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_BLOCKARMOR, false)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)

--  Define this function BEFORE setting the callbacks
function onGetFormulaValues(cid, level, maglevel)
    local vocation = getPlayerVocation(cid)
    
    if vocation == 3 or vocation == 7 then
        local min = -(level * 4.9 + maglevel * 7.05) * 1.3
        local max = -(level * 4.7 + maglevel * 7.60) * 1.2
        return min, max
    else
        local min = -(level * 2 + maglevel * 7)
        local max = -(level * 2 + maglevel * 7)
        return min, max
    end
end

--  Now we register the callback
setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
setCombatCallback(combat3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

-- Spell casting with timed delay
local function onCastSpell1(parameters)
    doCombat(parameters.cid, parameters.combat1, parameters.var)
end

local function onCastSpell2(parameters)
    doCombat(parameters.cid, parameters.combat2, parameters.var)
end

local function onCastSpell3(parameters)
    doCombat(parameters.cid, parameters.combat3, parameters.var)
end

function onCastSpell(cid, var)
    local parameters = {
        cid = cid,
        var = var,
        combat1 = combat1,
        combat2 = combat2,
        combat3 = combat3
    }

    addEvent(onCastSpell1, 0, parameters)
    addEvent(onCastSpell2, 150, parameters)
    addEvent(onCastSpell3, 300, parameters)
    return true
end

TIP:
If you're still getting "attempt to call a nil value", double-check:
That the script file is saved correctly (no typos in function or file name).Your spells.xml or data/spells/scripts/attack/*.lua file points to this script correctly.
 
Back
Top