Ir para conteúdo
  • 0

Spell - Colocar Target X,y,z Ao Invez De Area


milbradt

Pergunta

Então.. estou com um problema, queria que minha spell Solta-se tipo.. 2 EFFECTS IGUAIS UM DO LADO DO OUTRO... não é DANO e sim apenas o EFEITO!!!

 

Exemplo 1....Ao inves de colocar:

 

local area = createCombatArea({

{0, 1, 1}

})

 

Exemplo2...Colocar algo parecido como:

 

Local area = createCombatArea({x=getTargetPosition(cid).x+1, y=getTargetPosition(cid).y, z=getTargetPosition(cid).z})

 

Deu pra entender? =X

 

explicando que quero isso pois se coloco de acordo com o exemplo 1, o effect não sai onde o TARGET esta e sim em outra parte do mapa :S

 

Aqui esta a spell:

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 10)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 15)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 0, 0, -150)
local area = createCombatArea( { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } )
setCombatArea(combat, area)
function onUseWeapon(cid, var)
return doCombat(cid, combat, var)
end

Editado por milbradt
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Não entende direito, acho que você quer que a magia solte um efeito no target do player que solte a magia. Se for isso tenta assim.


doSendDistanceShoot(getThingPos(cid), getThingPositionWithDebug(target), 2)
local function damage(cid, target)
if not isPlayer(target) or not isMonster(target) then return true end
doAreaCombatHealth(cid, 25, getThingPositionWithDebug(target), boteaquisua area, -min, -max, aqui bote o efeito da magia)
end
addEvent(damage, 100, cid, target)
end

Link para o comentário
Compartilhar em outros sites

  • 0
Não entende direito, acho que você quer que a magia solte um efeito no target do player que solte a magia. Se for isso tenta assim.
 doSendDistanceShoot(getThingPos(cid), getThingPositionWithDebug(target), 2) local function damage(cid, target) if not isPlayer(target) or not isMonster(target) then return true end doAreaCombatHealth(cid, 25, getThingPositionWithDebug(target), boteaquisua area, -min, -max, aqui bote o efeito da magia) end addEvent(damage, 100, cid, target) end 

 

Infelizmente não deu certo o script =X, da erro no distro dizendo que a spell não possui um local area angry_smile.gif uahhuaha... e tipo.. eh apenas pra aparecer 2 EFFEITOS... tipo um do lado do outro no TARGET

 

tenho 1 spell que vcê solta no target, o player e teleportado para os 4lados do target e volta. tpw um ninja. se for isso avise.

 

Bah mano.. essa spell me interessa muito sim.. se puder me disponibilizar =D concerteza darei rep + tbm xD

Editado por milbradt
Link para o comentário
Compartilhar em outros sites

  • 0

Malz eu estava ban aqui no xtibia.

irei posta pra você.

 

va em data>spells>scripts > criei um arquivo ninja.lua e cole isso dentro.

 

local config = {
efeitoTele = 10, -- efeito q ira aparacer a cada teleport.
efeitoDamage = 1, -- efeito q ira aparecer ao hitar no alvo
hits = 5, -- quantos hits vai dar
delay = 200, -- intervalo de tempo a cada hit
min = 10000, -- dano minimo
max = 15000, -- dano maximo
damage = COMBAT_PHYSICALDAMAGE -- tipo do dano
}
function isWalkable(pos, creature, pz, proj) -- nord
   if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
   if getTopCreature(pos).uid > 0 and creature then return false end
   if getTileInfo(pos).protection and not pz then return false end
   local n = not proj and 3 or 2
   for i = 0, 255 do
	    pos.stackpos = i
	    local tile = getTileThingByPos(pos)
	    if tile.itemid ~= 0 and not isCreature(tile.uid) then
			    if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
					    return false
			    end
	    end
   end
   return true
end
function getPosDirs(p, dir) -- mkalo
   return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end
function validPos(pos)
tb = {}
for i = 1, 8 do
 newpos = getPosDirs(pos, i)
 if isWalkable(newpos) then
  table.insert(tb, newpos)
 end
end
table.insert(tb, pos)
return tb
end
spell = {
start = function (cid, target, markpos, hits)
   if not isCreature(cid) then return true end
   if not isCreature(target) or hits < 1 then
	 doTeleportThing(cid, markpos)
	 doSendMagicEffect(getThingPos(cid), config.efeitoTele)
	 return true
   end
   posAv = validPos(getThingPos(target))
   rand = #posAv == 1 and 1 or #posAv - 1
   doSendMagicEffect(getThingPos(cid), config.efeitoTele)
   doTeleportThing(cid, posAv[math.random(1, rand)])
   doAreaCombatHealth(cid, config.damage, getThingPos(target), 0, -config.min, -config.max, config.efeitoDamage)
   addEvent(spell.start, config.delay, cid, target, markpos, hits - 1)
  end
}
function onCastSpell(cid)
target = getCreatureTarget(cid)
if target then
 spell.start(cid, target, getThingPos(cid), config.hits)
end
return true
end

 

 

agora vá em data>spells>spells.xml cole isso.

 

 

<instant name="Ninja" words="ninja" lvl="9" mana="20" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="ninja.lua">

<vocation id="1"/>

<vocation id="2"/>

<vocation id="3"/>

<vocation id="4"/>

</instant>

 

 

AJUDEI? REP+

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...