Ir para conteúdo
  • 0

Spell trap (REP+)


Flash001

Pergunta

Quero uma spell que faz uma barreira em volta do seu personagem e que suma em 5 segundos! REP+

 

Informações adicionais:

 

barreira feita com o item 1050.

OTserv TSF.

versao: 8.6

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

11 respostass a esta questão

Posts Recomendados

  • 0

tenta ae

 

Vá em Data/spells/scripts copie qualquer arquivo .lua e renomeie para prision.lua apague tudo e cole o seguinte code.

 

local remove_time = 5

local item_id = 1050

 

function onCastSpell(cid, var)

 

local pos = getThingPosition(getCreatureTarget(cid))

posTile1 = {x=pos.x+1,y=pos.y+1,z=pos.z,stackpos=1}

posTile2 = {x=pos.x+1,y=pos.y,z=pos.z,stackpos=1}

posTile3 = {x=pos.x+1,y=pos.y-1,z=pos.z,stackpos=1}

posTile4 = {x=pos.x,y=pos.y-1,z=pos.z,stackpos=1}

posTile5 = {x=pos.x-1,y=pos.y-1,z=pos.z,stackpos=1}

posTile6 = {x=pos.x-1,y=pos.y,z=pos.z,stackpos=1}

posTile7 = {x=pos.x-1,y=pos.y+1,z=pos.z,stackpos=1}

posTile8 = {x=pos.x,y=pos.y+1,z=pos.z,stackpos=1}

posAll = {posTile1,posTile2,posTile3,posTile4,posTile5,posTile6,posTile7,posTile8}

 

for i=1, #posAll do

if isWalkable(posAll) then

doCreateItem(item_id, 1, posAll)

end

end

addEvent(removeItem, remove_time*1000, posAll)

 

return true

end

 

function isWalkable(pos, creature, pz, proj)

if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end

local creature = getTopCreature(pos)

if creature.type > 0 then return false end

if getTilePzInfo(pos) 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 removeItem(posAll)

for i=1, #posAll do

for j=0, 255 do

pos_stack = {x=posAll.x,y=posAll.y,z=posAll.z,stackpos=j}

removeTile = getThingfromPos(pos_stack)

if removeTile.itemid == item_id then

doRemoveItem(removeTile.uid)

end

end

end

end

 

 

 

Adicione a seguinte tag em spells.xml

 

<instant name="Prision" words="prision" lvl="100" mana="100" aggressive="1" range="5" blockwalls="1" needtarget="1" exhaustion="1000" needlearn="0" event="script" value="prision.lua">

<vocation id="1"/>

<vocation id="2"/>

<vocation id="3"/>

<vocation id="4"/>

<vocation id="5"/>

<vocation id="6"/>

<vocation id="7"/>

<vocation id="8"/>

</instant>

 

 

 

Ve se da certo ai qualquer coisa avisa ae ^^.

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

  • 0

È para ser usado em volta de si mesmo não target.

e deu o seguinte erro:

 

[06/06/2013 23:52:06] [Error - Spell Interface]

[06/06/2013 23:52:06] In a timer event called from:

[06/06/2013 23:52:06] data/spells/scripts/orochimaru/Kuchiyose Rashoumon.lua:onCastSpell

[06/06/2013 23:52:06] Description:

[06/06/2013 23:52:06] (luaGetThingFromPos) Tile not found

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

  • 0
function onCastSpell(cid)

   local item = 1337
   local tempo = 5 * 1000
   local efeito_ao_criar = CONST_ME_MAGIC_GREEN
   local efeito_ao_remover = CONST_ME_POFF

   for direction = 0, 7 do
       local position = getPosByDir(getThingPos(cid), direction)
       doCreateItem(item, position)
       doSendMagicEffect(position, efeito_ao_criar)
   end

   addEvent(function (center, id)
       for direction = 0, 7 do
           local position = getPosByDir(center, direction)
           local item = getTileItemById(position, id).uid
           if item > 1 then
               doSendMagicEffect(position, efeito_ao_remover)
               doRemoveItem(item)
           end
       end
   end, tempo, getThingPos(cid), item)

return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Spell trap (REP+)

 

 

voce pediu uma spell que trapasse o seu personagem que coisa demente cara.. e tile not found é porque não existe esse tile no seu ot.

 

 

@brun123

 

Seu script remove apenas 4 Tiles da prisão arruma ae.

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

  • 0

function onCastSpell(cid)

local item = 1337
local tempo = 5 * 1000
local efeito_ao_criar = CONST_ME_MAGIC_GREEN
local efeito_ao_remover = CONST_ME_POFF

for direction = 0, 7 do
	local position = getPosByDir(getThingPos(cid), direction)
	doCreateItem(item, position)
	doSendMagicEffect(position, efeito_ao_criar)
end

addEvent(function (center, id)
	for direction = 0, 7 do
		local position = getPosByDir(center, direction)
		local item = getTileItemById(position, id).uid
		if item > 1 then
			doSendMagicEffect(position, efeito_ao_remover)
			doRemoveItem(item)
		end
	end
end, tempo, getThingPos(cid), item)

return true
end

 

É esse mesmo que eu queria, só que esta removendo apenas 4 ! e os outros 4 continuam, se der pra remover todos REP+

 

exemplo:

 

C, R, R,

C, M, R,

R, C, C.

 

C = CONTINUA

R = REMOVIDO

M = MEU PERSONAGEM

Link para o comentário
Compartilhar em outros sites

  • 0

bom, testei aqui e funcionou certinho

pega esse script abaixo, executa a spell uma vez e olha o console do seu servidor, depois dos itens serem removidos vão aparecer 8 mensagens, aí você me mostra elas:

 

function onCastSpell(cid)

   local item = 1337
   local tempo = 5 * 1000
   local efeito_ao_criar = CONST_ME_MAGIC_GREEN
   local efeito_ao_remover = CONST_ME_POFF

   for direction = 0, 7 do
       local position = getPosByDir(getThingPos(cid), direction)
       doCreateItem(item, position)
       doSendMagicEffect(position, efeito_ao_criar)
   end

   addEvent(function (center, id)
       print(string.format("Centro: %d/%d", center.x or -1, center.y or -1))
       for direction = 0, 7 do
           local position = getPosByDir(center, direction)
           local item = getTileItemById(position, id)
           print(string.format("Dir. % %d/%d / uid: %d", direction, position.x or -1, position.y or -1, item.uid))
           if item.uid > 1 then
               doSendMagicEffect(position, efeito_ao_remover)
               doRemoveItem(item.uid)
           end
       end
   end, tempo, getThingPos(cid), item)

return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Apareceu o seguinte:

 

[07/06/2013 18:17:57] Centro: 1143/927
[07/06/2013 18:17:57] Dir. 0: 1143/926 / uid: 73976
[07/06/2013 18:17:57] Dir. 1: 1144/926 / uid: 73977
[07/06/2013 18:17:58] Dir. 2: 1144/927 / uid: 73978
[07/06/2013 18:17:58] Dir. 3: 1143/927 / uid: 0
[07/06/2013 18:17:58] Dir. 4: 1142/928 / uid: 73979
[07/06/2013 18:17:58] Dir. 5: 1143/929 / uid: 0
[07/06/2013 18:17:58] Dir. 6: 1142/928 / uid: 0
[07/06/2013 18:17:58] Dir. 7: 1143/927 / uid: 0

Link para o comentário
Compartilhar em outros sites

  • 0

é porque a sua função getposbydir modifica o parâmetro em vez de criar novas tabelas, como eu modifiquei essa função eu não tenho esse problema, mas o tfs padrão tem que fazer de outro jeito pra não dar problemas, testa assim:

 

function onCastSpell(cid)

   local item = 1337
   local tempo = 5 * 1000
   local efeito_ao_criar = CONST_ME_MAGIC_GREEN
   local efeito_ao_remover = CONST_ME_POFF

   for direction = 0, 7 do
       local position = getPosByDir(getThingPos(cid), direction)
       doCreateItem(item, position)
       doSendMagicEffect(position, efeito_ao_criar)
   end

   addEvent(function (center, id)
       for direction = 0, 7 do
           local position = getPosByDir({x = center.x, y = center.y, z = center.z}, direction)
           local item = getTileItemById(position, id).uid
           if item > 1 then
               doSendMagicEffect(position, efeito_ao_remover)
               doRemoveItem(item)
           end
       end
   end, tempo, getThingPos(cid), item)

return true
end

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...