Ir para conteúdo
  • 0

[Spell] Teleporte e attack


rogeriomatx

Pergunta

Olá galera do Xtibia, estou com essa spell de attack, ela faz o seguinte, teleporta até o target combando hits na criatura que está atacando, mas queria que ela teleporta-se o player nos 4 SQM, ao lado do target combando.

function onCastSpell(cid, var)
local playerpos = getCreaturePosition(cid)
local target = getCreatureTarget(cid)
local trapos = getCreaturePosition(target)
local level = getPlayerLevel(cid)
local levelz = (level*0.1)
for teleport = 1,3 do
if target == isMonster or isCreature then
doTeleportThing(cid,trapos)
doCreatureAddHealth(target, -levelz)
doSendMagicEffect(trapos, 39)
doSendAnimatedText(trapos, "Blink", math.random(1,255))
else
doPlayerSendTextMessage(cid,22,'Seu alvo não é um monstro nem player')
end
return true
end
end

 

tentei mudar por isso

local target = getCreaturePosition({x=x,y=y,z=target.z})
		    local x = math.random(pos.x-1,target.x+1)
		    local y = math.random(pos.y-1,target.y+1)

 

substituindo no script, mas não tive resultados pq nao sou scripter

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Tente com esse aqui, se der erro só dizer :D

function onCastSpell(cid, var)
local playerpos = getCreaturePosition(cid)
local target = getCreatureTarget(cid)
local trapos = getCreaturePosition(target, getPlayerLookDir(cid), 4) -- 4 é o SQM
local level = getPlayerLevel(cid)
local levelz = (level*0.1)
for teleport = 1,3 do
if target == isMonster or isCreature then
doTeleportThing(cid,trapos)
doCreatureAddHealth(target, -levelz)
doSendMagicEffect(trapos, 39)
doSendAnimatedText(trapos, "Blink", math.random(1,255))
else
doPlayerSendTextMessage(cid,22,'Seu alvo não é um monstro nem player')
end
return true
end
end

Link para o comentário
Compartilhar em outros sites

  • 0
function onCastSpell(cid, var)

local function blink(cid, target, turn)
	if not isCreature(cid) or not isCreature(target) or turn <= 0 then return end
	local dir, targetPos = {0, 1, 2, 3, 4, 5, 6, 7}, getThingPos(target)
	table.remove(dir, getDirectionTo(targetPos, getThingPos(cid)) + 1)
	doTeleportThing(cid, getPosByDir(targetPos, dir[math.random(#dir)]), false)
	doCreatureSetLookDir(cid, getDirectionTo(getThingPos(cid), targetPos))
	local dmg = getCreatureLevel(cid) / 10
	doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -dmg * 0.9, -dmg * 1.1, CONST_ME_BLOCKHIT)
	addEvent(blink, 650, cid, target, (turn or 3) - 1)
end

if not isCreature(getCreatureTarget(cid)) then
   doPlayerSendCancel(cid, "You need a target.")
return false
end

addEvent(blink, 1000, cid, target, 3)

return true
end

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

  • 0

Tente com esse aqui, se der erro só dizer :D

function onCastSpell(cid, var)
local playerpos = getCreaturePosition(cid)
local target = getCreatureTarget(cid)
local trapos = getCreaturePosition(target, getPlayerLookDir(cid), 4) -- 4 é o SQM
local level = getPlayerLevel(cid)
local levelz = (level*0.1)
for teleport = 1,3 do
if target == isMonster or isCreature then
doTeleportThing(cid,trapos)
doCreatureAddHealth(target, -levelz)
doSendMagicEffect(trapos, 39)
doSendAnimatedText(trapos, "Blink", math.random(1,255))
else
doPlayerSendTextMessage(cid,22,'Seu alvo não é um monstro nem player')
end
return true
end
end

 

Tive esse erro no console

bug.gif

 

function onCastSpell(cid, var)

local function blink(cid, target, turn)
	if not isCreature(cid) or not isCreature(target) or turn <= 0 then return end
	local dir, targetPos = {0, 1, 2, 3, 4, 5, 6, 7}, getThingPos(target)
	table.remove(dir, getDirectionTo(targetPos, getThingPos(cid)) + 1)
	doTeleportThing(cid, getPosByDir(targetPos, dir[math.random(#dir)]), false)
	doCreatureSetLookDir(cid, getDirectionTo(getThingPos(cid), targetPos))
	local dmg = getCreatureLevel(cid) / 10
	doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -dmg * 0.9, -dmg * 1.1, CONST_ME_BLOCKHIT)
	addEvent(blink, 650, cid, target, (turn or 3) - 1)
end

if not isCreature(getCreatureTarget(cid)) then
   doPlayerSendCancel(cid, "You need a target.")
return false
end

addEvent(blink, 1000, cid, target, 3)

return true
end

 

Cara seu script não apresentou erro no console, mais na teleporta á criatura, quando faz sem estar clicado no target aprenta msg do else lá

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

  • 0

é foi erro bobo meu>

 

function onCastSpell(cid, var)

       local function blink(cid, target, turn)
               if not isCreature(cid) or not isCreature(target) or turn <= 0 then return end
               local dir, targetPos = {0, 1, 2, 3, 4, 5, 6, 7}, getThingPos(target)
               table.remove(dir, getDirectionTo(targetPos, getThingPos(cid)) + 1)
               doTeleportThing(cid, getPosByDir(targetPos, dir[math.random(#dir)]), false)
               doCreatureSetLookDir(cid, getDirectionTo(getThingPos(cid), targetPos))
               local dmg = getCreatureLevel(cid) / 10
               doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -dmg * 0.9, -dmg * 1.1, CONST_ME_BLOCKHIT)
               addEvent(blink, 650, cid, target, (turn or 3) - 1)
       end

       if not isCreature(getCreatureTarget(cid)) then
          doPlayerSendCancel(cid, "You need a target.")
       return false
       end

       addEvent(blink, 1000, cid, getCreatureTarget(cid), 3)

return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

é foi erro bobo meu>

 

function onCastSpell(cid, var)

	local function blink(cid, target, turn)
			if not isCreature(cid) or not isCreature(target) or turn <= 0 then return end
			local dir, targetPos = {0, 1, 2, 3, 4, 5, 6, 7}, getThingPos(target)
			table.remove(dir, getDirectionTo(targetPos, getThingPos(cid)) + 1)
			doTeleportThing(cid, getPosByDir(targetPos, dir[math.random(#dir)]), false)
			doCreatureSetLookDir(cid, getDirectionTo(getThingPos(cid), targetPos))
			local dmg = getCreatureLevel(cid) / 10
			doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -dmg * 0.9, -dmg * 1.1, CONST_ME_BLOCKHIT)
			addEvent(blink, 650, cid, target, (turn or 3) - 1)
	end

	if not isCreature(getCreatureTarget(cid)) then
	   doPlayerSendCancel(cid, "You need a target.")
	return false
	end

	addEvent(blink, 1000, cid, getCreatureTarget(cid), 3)

return true
end

 

Agr funcionou, teleporta até a criatura, mas nao esta combando em 4 hits nos SQMs desejados ao lado do traget...

 

tipo assim , vc execulta a spell ela teleporta até o player, num sqm, dps para outro ate fizer os 4 sqm, ai dps vc pode fazer ela de volta

 

ERRO

bug2.gif

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

  • 0

troca essa linha:

 

local dmg = getCreatureLevel(cid) / 10

 

por essa:

 

local dmg = getPlayerLevel(cid) / 10

 

Não entendi direito isso que você está falando de "combar em 4 hits nos sqms desejados"

eu só reproduzi a script que você postou no tópico, só que ela tem um monte de variável inutilizada e coisas que poderiam ser simplificadas, o autor tentou usar for mas não se atentou ao fato de tudo ser executado ao mesmo tempo se não for utilizado addEvent e também na script original poderia dar erros se não tivesse alvo selecionado, já que a verificação de isCreature foi feito horrorosamente errada e sempre retornará true, e o player é teleportado em cima do alvo.

só esses erros aí que arrumei

Link para o comentário
Compartilhar em outros sites

  • 0

troca essa linha:

 

local dmg = getCreatureLevel(cid) / 10

 

por essa:

 

local dmg = getPlayerLevel(cid) / 10

 

Não entendi direito isso que você está falando de "combar em 4 hits nos sqms desejados"

eu só reproduzi a script que você postou no tópico, só que ela tem um monte de variável inutilizada e coisas que poderiam ser simplificadas, o autor tentou usar for mas não se atentou ao fato de tudo ser executado ao mesmo tempo se não for utilizado addEvent e também na script original poderia dar erros se não tivesse alvo selecionado, já que a verificação de isCreature foi feito horrorosamente errada e sempre retornará true, e o player é teleportado em cima do alvo.

só esses erros aí que arrumei

 

Percebi pelo seu script muito bem escrito, vou testar aqui não sei se você intendeu o que eu escrevi, vou explicar de volta;

 

Essa magia faz com que o player teleporta até o target em qualquer dos SQMs ao lado do target, vamos supor que o player foi teleportado do lado esquerdo da criatura, feito isso ele dará um hit, o próximo do lado superior da criatura, depois do lado direito, e assim sucessivamente ate rodar todo target por completo executando hits.. logo após isso a magia acaba...

 

Não sei se fui claro...

 

 

VLW @Brun123 Funcionou perfeitamente esta teleportando em 3 sqms... REP++ YOU

 

 

 

Como mostrei no vídeo, está acontecendo algo que nao deve, o player ta sendo teleportado em cima de da ground da agua ou qualquer item, tipo função goto de GOD, tem com ver isso?

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

  • 0

AEW brun123 ja dei rep...

 

Dá uma olhada nesse script que fiz,corrija os erros dele se voçê poder, tipo ele não cria a o summon quando tem trap de fogo no chaão

function onCastSpell(cid, var, pos)
local summons = getCreatureSummons(cid)
if(table.maxn(summons) <= 0) then -- no summons
   if getPlayerLevel(cid) >= 300  and getPlayerMana(cid) >= 1500 then --checking level
   doPlayerAddMana(cid,-1500)
pos = getCreaturePosition(cid)
local creature = doSummonCreature("wolf rider", pos)
doConvinceCreature(cid, creature)
doSendMagicEffect(getCreaturePosition(creature), CONST_ME_TELEPORT)
return TRUE
else
   if getPlayerLevel(cid) >= 200 and getPlayerMana(cid) >= 1000 then --checking level
pos = getCreaturePosition(cid)
local creature = doSummonCreature("archane wolf", pos)
doSendMagicEffect(getCreaturePosition(creature), CONST_ME_TELEPORT)
doConvinceCreature(cid, creature)
 doPlayerAddMana(cid,-1000)
return TRUE
else
 if getPlayerLevel(cid) >= 130 and getPlayerMana(cid) >= 500 then
pos = getCreaturePosition(cid)
local creature = doSummonCreature("wolf pala", pos)
doConvinceCreature(cid, creature)
doPlayerAddMana(cid,-500)
doSendMagicEffect(getCreaturePosition(creature), CONST_ME_TELEPORT)
return TRUE
else
   if getPlayerLevel(cid) >= 80 and getPlayerMana(cid) >= 250 then --checking level
pos = getCreaturePosition(cid)
local creature = doSummonCreature("baby wolf", pos)
doConvinceCreature(cid, creature)
doPlayerAddMana(cid,-250)
doSendMagicEffect(getCreaturePosition(creature), CONST_ME_TELEPORT)
return TRUE
  end
 end
 end
	    end
		 else
 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não pode summonar mais de um lobo!..")
  end
 end





Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...