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

Lua Light chain

Yes it didn't work. It causing damage for only 1 monster.

Can anyone can help me please?? :(

Bump
 
Last edited by a moderator:
no errors? ftw
Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)

local condition = createConditionObject(CONDITION_PARALYZE)
setConditionParam(condition, CONDITION_PARAM_TICKS, 3000)
setConditionFormula(condition, -0.2, 0, -0.2, 0)
setCombatCondition(combat, condition)

local combatSmall = createCombatObject()
setCombatParam(combatSmall, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)

function getSpellDamageLightChain(cid, level, maglevel)
    local damage = -math.floor(((math.random(200, 400) * level) + (math.random(200, 300) * maglevel)) / 100)
    return damage, damage --The random part of the formula has already been made, just return the normal damage
end

function getSpellDamageLightChainSmall(cid, level, maglevel)
    local damage = -math.floor(((math.random(200, 400) * level) + (math.random(200, 300) * maglevel)) / 400)
    return damage, damage --The random part of the formula has already been made, just return the normal damage
end

function lightChainHit(param)
    if isCreature(param.cid) and isCreature(variantToNumber(param.var)) then
        doSendDistanceShoot(param.fromcidpos, getCreaturePosition(variantToNumber(param.var)), CONST_ANI_HOLY)
        doCombat(param.cid, param.combat, param.var)
        param.fromcidpos = getCreaturePosition(variantToNumber(param.var))
        param.count = param.count + 1
        local enemies = getMonstersInArea3(param.fromcidpos, param.notHitCidArray)
        if (enemies.number > 0) and (param.count < 5) then
            local enemiesList = enemies.list
            local randenemy = math.random(1, enemies.number)
            param.var = numberToVariant(enemiesList[randenemy])
            table.insert(param.notHitCidArray, variantToNumber(param.var))
            local subenemies = getMonstersInArea1(param.fromcidpos, param.notHitCidArray)
            if (subenemies.number > 0) then
                local nearenemieslist = subenemies.list
                for i = 1, subenemies.number do
                    doCombat(param.cid, param.combatSmall, numberToVariant(nearenemieslist[i]))
                    doSendDistanceShoot(param.fromcidpos, numberToVariant(nearenemieslist[i]), CONST_ANI_ENERGY)
                end
            end
            addEvent(lightChainHit, 200, param)
        end
    end
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getSpellDamageLightChain")
setCombatCallback(combatSmall, CALLBACK_PARAM_LEVELMAGICVALUE, "getSpellDamageLightChainSmall")

function onCastSpell(cid, var)
    if(variantToNumber(var) ~= 0) then
        if isCreature(variantToNumber(var)) then
            local param = {}
            param.cid = cid
            param.fromcidpos = getCreaturePosition(cid)
            param.var = var
            param.combat = combat
            param.combatSmall = combatSmall
            param.count = 0
            param.lastshot = 0
            param.notHitCidArray = {cid, variantToNumber(var)}
            addEvent(lightChainHit, 50, param)
        end
    end
    return true
end

function getMonstersInArea3(cidpos, notCidArray)
    local playernumber = 0
    local playersInRange = {}
        local pPos = cidpos
        local positionsToCheck = {
        {x=pPos.x-3,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
        {x=pPos.x-3,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
        {x=pPos.x-3,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
        {x=pPos.x-3,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
        {x=pPos.x-3,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
        {x=pPos.x-3,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
        {x=pPos.x-3,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE}
        }
        for i = 1, table.maxn(positionsToCheck) do
            local creatureToHit = getThingfromPos(positionsToCheck[i])
            if getTilePzInfo(positionsToCheck[i]) == 0 then
                if isCreature(creatureToHit.uid) == TRUE and creatureToHit.uid ~= cid and isInArray(notCidArray, creatureToHit.uid) ~= TRUE then
                    table.insert(playersInRange, creatureToHit.uid)
                    playernumber = playernumber + 1
                end
            end
        end
    return {list = playersInRange, number = playernumber}
end

function getMonstersInArea1(cidpos, notCidArray)
    local playernumber = 0
    local playersInRange = {}
        local pPos = cidpos
        local positionsToCheck = {
        {x=pPos.x-1,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
        {x=pPos.x-1,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
        {x=pPos.x-1,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
        }
        for i = 1, table.maxn(positionsToCheck) do
            local creatureToHit = getThingfromPos(positionsToCheck[i])
            if getTilePzInfo(positionsToCheck[i]) == 0 then
                if isCreature(creatureToHit.uid) == TRUE and creatureToHit.uid ~= cid and isInArray(notCidArray, creatureToHit.uid) ~= TRUE then
                    table.insert(playersInRange, creatureToHit.uid)
                    playernumber = playernumber + 1
                end
            end
        end
    return {list = playersInRange, number = playernumber}
end
 
Back
Top