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

TFS 0.X spell area + 3 times

warriorfrog

Active Member
Joined
Jul 29, 2015
Messages
334
Reaction score
35
I have this spell
Code:
local manaporlevel = 3

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)

local area = createCombatArea(AREA_SQUARE1X1)
setCombatArea(combat, area)

function onGetFormulaValues(cid, level, maglevel)
    min = ( (maglevel * 40) * 0.5 ) * -1
    max = ( (maglevel * 40) * 1.0 ) * -1
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)
    if getPlayerMana(cid) >= (getPlayerLevel(cid)*manaporlevel) then
        doPlayerAddMana(cid, -(getPlayerLevel(cid)*manaporlevel))
        return doCombat(cid, combat, var)
    end
    return doPlayerSendCancel(cid, "You don't have mana. ["..tostring(getPlayerLevel(cid)*manaporlevel).."]")
end

And i want to change 2 things


1) change area to this area:
Screenshot-from-2019-12-04-00-24-24.png


2) make the spell run 3 times, i mean, after call the spell
3 times i mean, the attack runs 3 times each second
 
Solution
Same but simplified and area as requested

Lua:
SPELL_AREA_DAMAGE = {
    {0, 0, 1, 0, 0},
    {0, 1, 1, 1, 0},
    {1, 1, 3, 1, 1},
    {0, 1, 1, 1, 0},
    {0, 0, 1, 0, 0}
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)

local area = createCombatArea(SPELL_AREA_DAMAGE)
setCombatArea(combat, area)

function onGetFormulaValues(cid, level, maglevel)
    min = ( (maglevel * 40) * 0.5 ) * -1
    max = ( (maglevel * 40) * 1.0 ) * -1
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)...
You meant something like this?
Lua:
local manaporlevel = 3

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat1, COMBAT_PARAM_USECHARGES, true)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat2, COMBAT_PARAM_USECHARGES, true)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat3, COMBAT_PARAM_USECHARGES, true)

local area1 = createCombatArea(AREA_CIRCLE3X3)
local area2 = createCombatArea(AREA_CIRCLE3X3)
local area3 = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat1, area1)
setCombatArea(combat2, area2)
setCombatArea(combat3, area3)

function onGetFormulaValues1(cid, level, maglevel)
    min = ( (maglevel * 40) * 0.5 ) * -1
    max = ( (maglevel * 40) * 1.0 ) * -1
    return min, max
end

function onGetFormulaValues2(cid, level, maglevel)
    min = ( (maglevel * 40) * 0.5 ) * -1
    max = ( (maglevel * 40) * 1.0 ) * -1
    return min, max
end

function onGetFormulaValues3(cid, level, maglevel)
    min = ( (maglevel * 40) * 0.5 ) * -1
    max = ( (maglevel * 40) * 1.0 ) * -1
    return min, max
end

setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues1")
setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues2")
setCombatCallback(combat3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues3")

function onCastSpell(cid, var)
    if getPlayerMana(cid) >= (getPlayerLevel(cid)*manaporlevel) then
        doPlayerAddMana(cid, -(getPlayerLevel(cid)*manaporlevel))
        addEvent(doCombat, 0, cid, combat1, var)
        addEvent(doCombat, 1000, cid, combat2, var)
        addEvent(doCombat, 2000, cid, combat3, var)
        return
    end
    return doPlayerSendCancel(cid, "You don't have mana. ["..tostring(getPlayerLevel(cid)*manaporlevel).."]")
end
First combat will start immediately after casting the spell, Second one will start after 1 second and third one will start after 2 seconds.
 
Same but simplified and area as requested

Lua:
SPELL_AREA_DAMAGE = {
    {0, 0, 1, 0, 0},
    {0, 1, 1, 1, 0},
    {1, 1, 3, 1, 1},
    {0, 1, 1, 1, 0},
    {0, 0, 1, 0, 0}
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)

local area = createCombatArea(SPELL_AREA_DAMAGE)
setCombatArea(combat, area)

function onGetFormulaValues(cid, level, maglevel)
    min = ( (maglevel * 40) * 0.5 ) * -1
    max = ( (maglevel * 40) * 1.0 ) * -1
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)
    local requiredMana = (getPlayerLevel(cid) * 3)
    if getPlayerMana(cid) >= requiredMana then
        doPlayerAddMana(cid, -requiredMana)
        doCombat(cid, combat, var)
        for i = 1, 2 do
            addEvent(function() if not isPlayer(cid) then return end doCombat(cid, combat, var) end, 1000 * i)
        end
        return true
    end
    return doPlayerSendCancel(cid, "You don't have mana. ["..tostring(requiredMana).."]")
end
 
Solution
ty guys
i would like to give 2 best answers...

@Deatthraz

what this 3 in the middle means?
Code:
    {0, 0, 1, 0, 0},
    {0, 1, 1, 1, 0},
    {1, 1, 3, 1, 1},
    {0, 1, 1, 1, 0},
    {0, 0, 1, 0, 0}
 
ty guys
i would like to give 2 best answers...

@Deatthraz

what this 3 in the middle means?
Code:
    {0, 0, 1, 0, 0},
    {0, 1, 1, 1, 0},
    {1, 1, 3, 1, 1},
    {0, 1, 1, 1, 0},
    {0, 0, 1, 0, 0}

Like CreaturePosition, it's used to guide the spell in how nor what direction will be casted.
You can take a look on spells/libs/spells.lua to better understand about how it works.
 
Back
Top