local function isWalkable(cid,pos)
local aux = pos
aux.stackpos = 253
if doTileQueryAdd(cid, pos) == 1 and getTilePzInfo(pos) == FALSE and isCreature(getThingFromPos(aux).uid) == FALSE then
return TRUE
end
return FALSE
end
local combatcrash1 = createCombatObject()
setCombatParam(combatcrash1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combatcrash1, COMBAT_PARAM_EFFECT, 30)
setCombatFormula(combatcrash1, COMBAT_FORMULA_LEVELMAGIC, -0.3, -200, -0.3, -300)
local combatcrash2 = createCombatObject()
setCombatParam(combatcrash2, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combatcrash2, COMBAT_PARAM_EFFECT, 11)
setCombatFormula(combatcrash2, COMBAT_FORMULA_LEVELMAGIC, -0.3, -100, -0.3, -100)
local combatcrash3 = createCombatObject()
setCombatParam(combatcrash3, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combatcrash3, COMBAT_PARAM_EFFECT, 34)
setCombatFormula(combatcrash3, COMBAT_FORMULA_LEVELMAGIC, -0.2, -200, -0.2, -200)
local crasharr1 = {
{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, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 3, 1, 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, 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 crasharr2 = {
{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, 0},
{0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
}
local area1 = createCombatArea(crasharr1)
local area2 = createCombatArea(crasharr2)
setCombatArea(combatcrash1, area1)
setCombatArea(combatcrash3, area2)
local function chargeBolt(cid, pos)
for i = 1,6 do
addEvent(doSendDistanceShoot, 45 * i, { x = pos.x - 7, y = pos.y - 7, z = pos.z}, pos, 35)
end
addEvent(doCombat, 380, cid, combatcrash1, positionToVariant(pos))
addEvent(doCombat, 380, cid, combatcrash2, positionToVariant(pos))
addEvent(doCombat, 380, cid, combatcrash3, positionToVariant(pos))
end
local function onThunderStrike(parameters)
local amount = parameters.amount
local lenght = parameters.lenght
if getCreatureTarget(parameters.cid) == 0 then
if parameters.cidDir == 0 then -- North
parameters.atkPos = { x = parameters.cidPos.x + math.random(-1, 1), y = parameters.cidPos.y - lenght, z = parameters.cidPos.z}
elseif parameters.cidDir == 1 then -- East
parameters.atkPos = { x = parameters.cidPos.x + lenght, y = parameters.cidPos.y + math.random(-1, 1), z = parameters.cidPos.z}
elseif parameters.cidDir == 2 then -- South
parameters.atkPos = { x = parameters.cidPos.x + math.random(-1, 1), y = parameters.cidPos.y + lenght, z = parameters.cidPos.z}
elseif parameters.cidDir == 3 then -- West
parameters.atkPos = { x = parameters.cidPos.x - lenght, y = parameters.cidPos.y + math.random(-1, 1), z = parameters.cidPos.z}
end
else
parameters.atkPos = { x = parameters.targetPos.x + math.random(-2, 1), y = parameters.targetPos.y + math.random(-1, 2), z = parameters.targetPos.z}
end
if isWalkable(parameters.cid, parameters.atkPos) then
chargeBolt(parameters.cid, parameters.atkPos)
end
parameters.amount = parameters.amount - 1
if getCreatureTarget(parameters.cid) == 0 then
parameters.lenght = ((parameters.maxamount - parameters.amount)/2)
end
if parameters.amount > 0 then
addEvent(onThunderStrike, 75, parameters)
end
end
function onCastSpell(cid, var)
local parameters = { cid = cid, var = var, amount = getPlayerMagLevel(cid)/6, lenght = 1, toplenght = 8, maxamount = getPlayerMagLevel(cid)/6, cidPos = getCreaturePosition(cid), cidDir = getCreatureLookDirection(cid), targetPos = getCreaturePosition(cid), atkPos = getCreaturePosition(cid)}
if getCreatureTarget(cid) ~= 0 then
parameters.targetPos = getCreaturePosition(getCreatureTarget(cid))
end
addEvent(onThunderStrike, 50, parameters)
return TRUE
end