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

Solved Monster spell damage with addEvent

rafaeru

Active Member
Joined
Mar 6, 2013
Messages
134
Solutions
10
Reaction score
29
Location
Poland
GitHub
rafaeru97
I have strange bug with spells where is addEvent (TFS 0.3.6).
onCastSpell1 show only position where spell will shoot and after 2 seconds onCastSpell2 deal damage but this damage depends on second attack "melee" in range = 1. When i change time in addEvent on >250 ms all works fine. I traced cobat.cpp, spells.cpp and monsters.cpp but i dont have idea what is wrong.

(White damage is spell damage, red is melee)
Deal ~3000 when range = 1 and ~20000 when range > 1
ucQD9CR.gif


Example monster attacks:
XML:
<attacks>
        <attack name="spell" interval="3000" chance="50" min="-28200" max="-35250"/>
        <attack name="melee" interval="1200" range="1" chance="100" min="-3000" max="-7500"/>
    </attacks>

Spell script:
Lua:
local condition = createConditionObject(CONDITION_PARALYZE)
setConditionParam(condition, CONDITION_PARAM_TICKS, 2000)
setConditionFormula(condition, -10.7, 0, -10.8, 0)

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_EFFECT, 181)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, 4)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -2.0, 1, -2.9, 1)

local arr1 = {
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 3, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
}

local arr2 = {
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 3, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
}

local area1 = createCombatArea(arr1)
local area2 = createCombatArea(arr2)

setCombatArea(combat1, area1)
setCombatArea(combat2, area2)

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

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


function onCastSpell(cid, var)
    doAddCondition(cid, condition)
    local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2}
    onCastSpell1(parameters)
    addEvent(onCastSpell2, 2000, parameters)
return true
end
 
Back
Top