• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Solved Extra target wand

MadMOOK

Hoo
Joined
Apr 20, 2011
Messages
802
Reaction score
44
How do I make rod, NOT to attack players in pz with its extra targeting??

Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_CARNIPHILA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_EARTH)
function onGetFormulaValues(cid, level, maglevel)
    local min = level / 5 + maglevel * 1.4 + 8
    local max = level / 5 + maglevel * 2.2 + 14
    return -min, -max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local hitExtraTargets = 3
local hitExtraTargetsInRange = 2

function getCreaturesInRange(position, radiusx, radiusy, showMonsters, showPlayers)
   local creaturesList = {}
   for x = -radiusx, radiusx do
      for y = -radiusy, radiusy do
         if not (x == 0 and y == 0) then
            creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z, stackpos = STACKPOS_TOP_CREATURE})
            if (creature.type == 1 and showPlayers == 1) or (creature.type == 2 and showMonsters == 1) then
               table.insert(creaturesList, creature.uid)
            end
         end
      end
   end
   return creaturesList
end

function onUseWeapon(cid, var)
   local ret = doCombat(cid, combat, var)
   if(ret == LUA_ERROR) then
      return LUA_ERROR
   end
  
   local target = variantToNumber(var)
   local hitplayers = 0
   if(target ~= 0) then
      if(isPlayer(target) == TRUE) then
         hitplayers = 1
      end
      local nowHit = 0
      local randomId = 0
      local otherTargets = getCreaturesInRange(getCreaturePosition(target), hitExtraTargetsInRange, hitExtraTargetsInRange, 1, hitplayers)
      if(#otherTargets > 0) then
         for i = 1, hitExtraTargets do
               randomId = math.random(1, #otherTargets)
               nowHit = otherTargets[randomId]
               if(isCreature(nowHit) == TRUE) then
                  table.remove(otherTargets, randomId)
                  ret = doCombat(cid, combat, numberToVariant(nowHit))
                  if(ret ~= LUA_ERROR) then
                  end
               if(#otherTargets == 0) then
                  break
               end
            else
               break
            end
         end
      end
   end
   return TRUE
end
 
Change
Code:
if (creature.type == 1 and showPlayers == 1) or (creature.type == 2 and showMonsters == 1) then
To
Code:
if ((creature.type == 1 and showPlayers == 1) or (creature.type == 2 and showMonsters == 1)) and not getTilePzInfo(getCreaturePosition(creature.uid)) then
 
Back
Top