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

Multi hit Spell

luigilc

Lua Learner
Joined
Mar 24, 2010
Messages
863
Reaction score
36
Location
A music box
how can I do for this spell hit 3 times and not only 1?
Lua:
local arr = {
 
{
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 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, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
},
 
{
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}
}
 
}
 
local combat = {}
for i = 1, 3 do
        combat[i] = createCombatObject()
end
 
        setCombatArea(combat[1], createCombatArea(arr[1]))
        setCombatParam(combat[1], COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
        setCombatArea(combat[2], createCombatArea(arr[2]))
        setCombatParam(combat[2], COMBAT_PARAM_EFFECT, CONST_ME_POISONAREA)

        
    local condition = createConditionObject(CONDITION_POISON)
        setConditionParam(condition, CONDITION_PARAM_DELAYED, 1)
    addDamageCondition(condition, 6, 1000, -500)
    addDamageCondition(condition, 5, 1000, -450)
    addDamageCondition(condition, 4, 1000, -400)
    addDamageCondition(condition, 3, 1000, -350)
    addDamageCondition(condition, 2, 1000, -200)
    addDamageCondition(condition, 1, 1000, -150)

 
function spellCallbackStorm(param)
    if param.count > 0 or math.random(0, 1) == 1 then
        doSendMagicEffect(param.pos, CONST_ME_HITBYPOISON)
        doSendDistanceShoot({ x = param.pos.x - 7, y = param.pos.y - 7, z = param.pos.z}, param.pos, CONST_ANI_POISON)
        addEvent(doSendMagicEffect, 50, param.pos, CONST_ME_GREEN_RINGS)
    end
 
    if(param.count < 3) then
        param.count = param.count + 1
        addEvent(spellCallbackStorm, math.random(0, 500), param)
    end
end
 
function onTargetTile(cid, pos)
    local param = {}
    param.cid = cid
    param.pos = pos
    param.count = 0
    spellCallbackStorm(param)
end

function onTargetTile2(cid, pos)
    doCombat(cid, combat[3], positionToVariant(pos))
end
 
function onGetFormulaValues(cid, level, maglevel)
    local min = -((level/5)+(maglevel*15))
    local max = -((level/5)+(maglevel*18))
    return min, max
end
 
setCombatCallback(combat[1], CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
setCombatCallback(combat[1], CALLBACK_PARAM_TARGETTILE, "onTargetTile")
setCombatCallback(combat[2], CALLBACK_PARAM_TARGETTILE, "onTargetTile2")
 
function onCastSpell(cid, var)
    doCombat(cid, combat[1], var)
    doCombat(cid, combat[2], var)
    return true
end
 
Code:
doCombat(cid, combat[1], var)
doCombat(cid, combat[2], var)
doCombat(cid, combat[1], var)
doCombat(cid, combat[2], var)
doCombat(cid, combat[1], var)
doCombat(cid, combat[2], var)

Not sure though
 
Oh sorry, for a delay you'll need to use addEvent for castSpellDelay. Making each different effect that you want to be delayed as a function inside of the spell
 
Code:
function onCastSpell(cid, var)
	for i = 0, repeatAmount - 1 do
		for k, combat in ipairs(deathFlames) do
			addEvent(castSpellDelay, (150 * k) + #deathFlames * 150 * i + 700 * i, {cid, combat, var})
		end
		addEvent(castSpellDelay, (150 * #deathFlames) + #deathFlames * 150 * i + 700 * i, {cid, bigFlames, var})
	end
 
	return LUA_NO_ERROR
end

Excerpt from a Colandus spell
 
That should do
Lua:
local arr = {
 
{
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 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, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
},
 
{
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}
}
 
}
 
local combat = {}
for i = 1, 3 do
        combat[i] = createCombatObject()
end
 
        setCombatArea(combat[1], createCombatArea(arr[1]))
        setCombatParam(combat[1], COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
        setCombatArea(combat[2], createCombatArea(arr[2]))
        setCombatParam(combat[2], COMBAT_PARAM_EFFECT, CONST_ME_POISONAREA)
 
 
    local condition = createConditionObject(CONDITION_POISON)
        setConditionParam(condition, CONDITION_PARAM_DELAYED, 1)
    addDamageCondition(condition, 6, 1000, -500)
    addDamageCondition(condition, 5, 1000, -450)
    addDamageCondition(condition, 4, 1000, -400)
    addDamageCondition(condition, 3, 1000, -350)
    addDamageCondition(condition, 2, 1000, -200)
    addDamageCondition(condition, 1, 1000, -150)
 
 
function spellCallbackStorm(param)
    if param.count > 0 or math.random(0, 1) == 1 then
        doSendMagicEffect(param.pos, CONST_ME_HITBYPOISON)
        doSendDistanceShoot({ x = param.pos.x - 7, y = param.pos.y - 7, z = param.pos.z}, param.pos, CONST_ANI_POISON)
        addEvent(doSendMagicEffect, 50, param.pos, CONST_ME_GREEN_RINGS)
    end
 
    if(param.count < 3) then
        param.count = param.count + 1
        addEvent(spellCallbackStorm, math.random(0, 500), param)
    end
end
 
function onTargetTile(cid, pos)
    local param = {}
    param.cid = cid
    param.pos = pos
    param.count = 0
    spellCallbackStorm(param)
end
 
function onTargetTile2(cid, pos)
    doCombat(cid, combat[3], positionToVariant(pos))
end
 
function onGetFormulaValues(cid, level, maglevel)
    local min = -((level/5)+(maglevel*15))
    local max = -((level/5)+(maglevel*18))
    return min, max
end
 
setCombatCallback(combat[1], CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
setCombatCallback(combat[1], CALLBACK_PARAM_TARGETTILE, "onTargetTile")
setCombatCallback(combat[2], CALLBACK_PARAM_TARGETTILE, "onTargetTile2")
 
function castSpell(cid, var, occurences)
    if(isCreature(cid) == FALSE) then
        return
    end

    occurences = occurences - 1
    doCombat(cid, combat[1], var)
    doCombat(cid, combat[2], var)
    if(occurences > 0) then
        addEvent(castSpell, 800, cid, var, occurences)
    end
end

function onCastSpell(cid, var)
    castSpell(cid, var, 3)
    return true
end
 
Last edited:
I'm gettin this error:
Lua:
[15/09/2010 14:37:33] [Error - LuaScriptInterface::loadFile] data/spells/scripts/attack/poison storm.lua:98: 'then' expected near 'addEvent'
[15/09/2010 14:37:33] [Warning - Event::loadScript] Cannot load script (data/spells/scripts/attack/poison storm.lua)
[15/09/2010 14:37:33] data/spells/scripts/attack/poison storm.lua:98: 'then' expected near 'addEvent'
 
Back
Top