local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_HOLY)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.2, -25, -0.2, -3)
local manaNeededPerTarget = 20
local hitExtraTargets = 2 -- number of extra targets, so it should attack our target + X other monsters/players
local hitExtraTargetsInRange = 2 -- distance to 'extra target' from our target
function onUseWeapon(cid, var)
local ret = doCombat(cid, combat, var)
if(ret == LUA_ERROR) then
return LUA_ERROR
end
local manaSpent = manaNeededPerTarget
local target = variantToNumber(var)
local hitplayers = false
if(target ~= 0) then
if(isPlayer(target)) then
hitplayers = true
end
local otherTargets = getSpectators(getCreaturePosition(target), hitExtraTargetsInRange, hitExtraTargetsInRange, false)
if(#otherTargets > 0) then
local i = 1
while(i ~= #otherTargets) do
local pid = otherTargets[i]
if(isNpc(pid) or pid == cid or pid == target or (isPlayer(pid) and (not hitplayers or getTileInfo(getCreaturePosition(pid)).protection))) then
table.remove(otherTargets, i)
else
i = i + 1
end
end
end
for i = 1, hitExtraTargets do
if(#otherTargets > 0 and getCreatureMana(cid) >= manaSpent + manaNeededPerTarget) then
local randomId = math.random(1, #otherTargets)
local nowHit = otherTargets[randomId]
table.remove(otherTargets, randomId)
ret = doCombat(cid, combat, numberToVariant(nowHit))
if(ret ~= LUA_ERROR) then
manaSpent = manaSpent + manaNeededPerTarget
end
else
break
end
end
end
doPlayerAddSpentMana(cid, manaSpent)
doCreatureAddMana(cid, -manaSpent)
return true
end