RO
dúvida

[Spell] Teleporte e attack

Por rogeriomatx, 12 de jan. de 2013 em Scripts

spells
teleport
attack
otserv
tibia
script
13
5.1k
rogeriomatxR
12 de janeiro de 2013 às 12:40

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

joadsonJ
12 de janeiro de 2013 às 13:26

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

brun123B
12 de janeiro de 2013 às 13:46
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 Janeiro 12 por brun123

rogeriomatxR
12 de janeiro de 2013 às 14:33

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 Janeiro 12 por rogeriok

brun123B
12 de janeiro de 2013 às 14:52

é 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

SlicerS
12 de janeiro de 2013 às 14:52

edit:

brun ninja ph34r.png

Editado Janeiro 12 por Slicer

rogeriomatxR
12 de janeiro de 2013 às 15:10

é 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 Janeiro 12 por rogeriok

brun123B
12 de janeiro de 2013 às 16:27

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

rogeriomatxR
12 de janeiro de 2013 às 19:38

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 Janeiro 13 por rogeriok

SlicerS
12 de janeiro de 2013 às 20:01

sanado, movido

rogeriomatxR
12 de janeiro de 2013 às 20:08

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





SlicerS
12 de janeiro de 2013 às 20:37

amigo eu ja havia movido o topico, por favor crie outro topico com esse seu novo pedido...

rogeriomatxR
12 de janeiro de 2013 às 20:41

amigo eu ja havia movido o topico, por favor crie outro topico com esse seu novo pedido...

OK, aconteceu isso por não atualizei a pagina...to criando outro topico