Original Credits + instructions -- [weapon]Multitarget wand 'star shoter' (https://otland.net/threads/weapon-multitarget-wand-star-shoter.13967/)
Credits to the legend @Gesior.pl
Works on TFS 1.3+ without errors.
Known bugs --
1. when attacking single target, it will take the mana of two targets
for example: when attacking 1 monster it SHOULD take 2 mana, but instead takes 4 mana, when attacking 2 targets it takes 4 mana, when attacking 3 targets it takes 6 mana.
2. doesn't actually add magic level, instead adds distance fighting.
for example: at magic level 0 you will stay magic level 0, but at distance 10, you will increase to distance 11,12, etc.
3. shoots even with 0 mana.
EDIT - fix for #2, instead of making it distance weapon in weapons.xml, make it a wand
Credits to the legend @Gesior.pl
Works on TFS 1.3+ without errors.
Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.2, -25, -0.2, -3)
local manaNeededPerTarget = 2
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 getPlayerMana(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
doPlayerAddMana(cid, -manaSpent)
return true
end
Known bugs --
1. when attacking single target, it will take the mana of two targets
for example: when attacking 1 monster it SHOULD take 2 mana, but instead takes 4 mana, when attacking 2 targets it takes 4 mana, when attacking 3 targets it takes 6 mana.
2. doesn't actually add magic level, instead adds distance fighting.
for example: at magic level 0 you will stay magic level 0, but at distance 10, you will increase to distance 11,12, etc.
3. shoots even with 0 mana.
EDIT - fix for #2, instead of making it distance weapon in weapons.xml, make it a wand
Lua:
<wand id="1111" script="starshoter.lua" level="7"> <!-- Star Shoter -->
<vocation name="Druid" />
</wand>
Last edited: