• 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 1.X+ Why area/wave spells are not working but target spells works fine

Lopaskurwa

Active Member
Joined
Oct 6, 2017
Messages
878
Solutions
2
Reaction score
49
So i tried to add area/wave spells to my server but i have no idea why it doesnt work. Like example one of my wave spells
Code:
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, 87)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr1 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{1, 2, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}

local area1 = createCombatArea(arr1)

setCombatArea(combat1, area1)

local combat10 = createCombatObject()
setCombatParam(combat10, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat10, COMBAT_PARAM_EFFECT, 88)
setCombatFormula(combat10, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr10 = {
{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, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 2},
{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 area10 = createCombatArea(arr10)

setCombatArea(combat10, area10)

local combat100 = createCombatObject()
setCombatParam(combat100, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat100, COMBAT_PARAM_EFFECT, 89)
setCombatFormula(combat100, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr100 = {
{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, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 2},
{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 area100 = createCombatArea(arr100)

setCombatArea(combat100, area100)


local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, 89)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr2 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{2, 1, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}

local area2 = createCombatArea(arr2)

setCombatArea(combat2, area2)



local combat20 = createCombatObject()
setCombatParam(combat20, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat20, COMBAT_PARAM_EFFECT, 88)
setCombatFormula(combat20, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr20 = {
{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, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 2, 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},
}

local area20 = createCombatArea(arr20)

setCombatArea(combat20, area20)

local combat200 = createCombatObject()
setCombatParam(combat200, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat200, COMBAT_PARAM_EFFECT, 87)
setCombatFormula(combat200, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr200 = {
{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, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{2, 0, 0, 0, 0, 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},
}

local area200 = createCombatArea(arr200)

setCombatArea(combat200, area200)



local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, 92)
setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)


local arr3 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 2, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}

local area3 = createCombatArea(arr3)

setCombatArea(combat3, area3)

local combat30 = createCombatObject()
setCombatParam(combat30, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat30, COMBAT_PARAM_EFFECT, 91)
setCombatFormula(combat30, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr30 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 2, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 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, 0},
{0, 0, 0, 0, 0},
}

local area30 = createCombatArea(arr30)

setCombatArea(combat30, area30)


local combat300 = createCombatObject()
setCombatParam(combat300, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat300, COMBAT_PARAM_EFFECT, 90)
setCombatFormula(combat300, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr300 = {
{0, 0, 2, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
}

local area300 = createCombatArea(arr300)

setCombatArea(combat300, area300)




local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, 90)
setCombatFormula(combat4, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr4 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 2, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}

local area4 = createCombatArea(arr4)

setCombatArea(combat4, area4)



local combat40 = createCombatObject()
setCombatParam(combat40, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat40, COMBAT_PARAM_EFFECT, 91)
setCombatFormula(combat40, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr40 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 2, 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, 0},
{0, 0, 0, 0, 0},
}


local area40 = createCombatArea(arr40)

setCombatArea(combat40, area40)


local combat400 = createCombatObject()
setCombatParam(combat400, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat400, COMBAT_PARAM_EFFECT, 92)
setCombatFormula(combat400, COMBAT_FORMULA_LEVELMAGIC, -4.0, 0, -4.1, 0)

local arr400 = {
{0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 2, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
}

local area400 = createCombatArea(arr400)

setCombatArea(combat400, area400)


function onCastSpell(cid, var)
if isCreature(cid) == 1 then
      addEvent(ka,0,cid)
 end
end
Console is not giving any errors, so i'm pretty confused what could be wrong. So i would like to know where is the problem so that next time i could fix by my own.
Code:
    <instant name="wave" words="test" lvl="300" maglv="100" mana="2000" prem="0" exhaustion="1" direction="1" enabled="1" script="LvL300/wave.lua"></instant>
 
Solution
Spell is one line wave. Example in paint
dgdfgdfg.png

I was thinking to use original tibia wave spell but what if i want to use different effect ids if he turns to the other side lets say if he truns north wave has 1id if he turns south spell has 2id. I think u get it what i mean. Thats why that code has so much functions because of directions.
Im not to familiar whit TFS 1.x but i think this should work, and you should get different dmg type and spell effect depending on your direction. Whitout the use of events

Lua:
local combatNorth = Combat()
combatNorth:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combatNorth:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)...
Lua:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setArea(createCombatArea(AREA_BEAM5))

function onGetFormulaValues(cid, level, maglevel)
    min = -((level / 5) + (maglevel * 1.8) + 11)
    max = -((level / 5) + (maglevel * 3) + 19)
    return min, max
end

combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)
    local player = Player(cid)
    local playerPos = player:getPosition()
    local playerDir = player:getDirection()

    if playerDir == NORTH then
        Position(playerPos.x, playerPos.y - 1, playerPos.z):sendMagicEffect(15)
    elseif playerDir == SOUTH then
        Position(playerPos.x, playerPos.y + 1, playerPos.z):sendMagicEffect(16)
    elseif playerDir == WEST then
        Position(playerPos.x - 1, playerPos.y, playerPos.z):sendMagicEffect(17)
    elseif playerDir == EAST then
        Position(playerPos.x + 1, playerPos.y, playerPos.z):sendMagicEffect(18)
    end

    return combat:execute(cid, var)
end

15, 16, 17, 18 should correspond to the effect you want to send. Ugly if statements though so I guess it can be written better
Works perfectly. Say thanks to your friend :) appreciate.
 
Back
Top