Ir para conteúdo
  • 0

Ajuda Doton Prision (Magic wall nao some)


Thiach

Pergunta

Galera, que bug tosco que estou aqui..

 

O script estava funcionando perfeitamente ontem, nao mechi em nada que possa te-lo alterado, ja conferi as sources e nao é, os tibia spr e dat tbm não.. o script ta intacto porém a id da magic wall nao está sumindo agora, nao mexi nos items.xml, nem nada que possa ter afetado, o script estava funcionando 100% ,nao sei o que houve alguem poderia dar um help?

 

Spell:



local remove_time = 5 -- tempo em segundos para remover as magic wall
local item_id = 5750 -- id da magic wall

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[i]) then
doCreateItem(item_id, 1, posAll[i])
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[i].x,y=posAll[i].y,z=posAll[i].z,stackpos=j}
removeTile = getThingfromPos(pos_stack)
if removeTile.itemid == item_id then
doRemoveItem(removeTile.uid)
end
end
end
end

 

Valendo rep+ ae

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Tenta ae

 

 

function onCastSpell(cid, var)

 

local 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

return true

end

end

end

 

local remove_time = 5 -- tempo em segundos para remover as magic wall

local item_id = 5750 -- id da magic wall

 

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)

 

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

 

Link para o comentário
Compartilhar em outros sites

  • 0

Opa, deu esse erro aqui:

 

 

[10/04/2013 13:43:11] [Error - Spell Interface] 
[10/04/2013 13:43:11] In a timer event called from: 
[10/04/2013 13:43:11] data/spells/scripts/kakashi/prision.lua:onCastSpell
[10/04/2013 13:43:11] Description: 
[10/04/2013 13:43:11] data/spells/scripts/kakashi/prision.lua:4: attempt to get length of local 'posAll' (a nil value)
[10/04/2013 13:43:11] stack traceback:
[10/04/2013 13:43:11]  data/spells/scripts/kakashi/prision.lua:4: in function <data/spells/scripts/kakashi/prision.lua:3>

 

e a magic wall tbm nao removeu =x

Link para o comentário
Compartilhar em outros sites

  • 0

local remove_time = 5 -- tempo em segundos para remover as magic wall
local item_id = 5750 -- id da magic wall

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[i]) then
doCreateItem(item_id, 1, posAll[i])
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)
local item = 0
for i=1, #posAll do
item = getTileItemById(posAll[i], item_id).uid
if item > 0 then
  doRemoveItem(item)
end
end
end

 

testa ae e posta o resultado :D

Link para o comentário
Compartilhar em outros sites

  • 0

Nao deu nenhum erro mais tbm nao removeu a magic wall.

 

Olha, no meus items .xml essa id 5750 é uma rocks, mais nao tem duration nela, antes funcionava 100% e removia, e dps parou de funcionar do nada isso vey, que estranho..

 

ta dificil resolver esse bug tosco, =x

Link para o comentário
Compartilhar em outros sites

  • 0

Seguinte, voce poderia ver a sprite do item que voce quer no dat editor, depois criar um novo item no Item.OTB com a sprite escolhida, ir no Items.xml e adicionar um decay 0 na tag do item, ai voce só escolheria o tempo que ela iria sumir ou não e na spell era só colocar pro item que foi escolhido aparecer em volta do target.

 

Não sei se irá entender , mais enfim ... aqui fiz assim.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu entendi, estava pensando em fazer isso mesmo se nao conseguise, mais eu queria mesmo saber o motivo desse bug, e resolver tbm..

 

Pq nao é possivel uma coisa dessas, nao tem explicação pra isso, nao é o .exe, nem nada, nao mexi em nada velho, mtu estranho.. se nao conseguir resolver de jeito nenhum e se ngm tiver 1 soluçao eu faço isso msm.. ta foda=/

Link para o comentário
Compartilhar em outros sites

  • 0

não tem sentido não estar sumindo oO

 

posso refazer a magia com a mesma funcionalidade, só que do meu jeito?

 

teste:

 

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 onCastSpell(cid, var)
local pos = getThingPosition(getCreatureTarget(cid))
for x = -1,1 do
 for y = -1,1 do
 if x ~= 0 and y ~= 0 then
	posicao = {x = pos.x + x, y = pos.y + y, z = pos.z}
	if isWalkable(posicao) then
	   doCreateItem(5750,1,posicao)
	end
 end
 end
end
addEvent(function()
for x = -1,1 do
 for y = -1,1 do
 if x ~= 0 and y ~= 0 then
	posicao = {x = pos.x + x, y = pos.y + y, z = pos.z}
	if getTileItemById(posicao, 5750).uid > 0 then
	   doRemoveItem(getTileItemById(posicao, 5750).uid)
	end
 end
 end
end
end,5*1000)
return true
end

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

  • 0

Aee sumiu , so que os positions das rocks nao estão certas, ta tipo assim agora:

 

{1, 0, 1}

{0, 3, 0

{1, 0, 1}

 

antes cobria uma trap inteira

Link para o comentário
Compartilhar em outros sites

  • 0

pera é algo no for entao.. vou arrumar e ja edito kk

 

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 onCastSpell(cid, var)
local pos = getThingPosition(getCreatureTarget(cid))
for x = -1,1 do
 for y = -1,1 do
		    posicao = {x = pos.x + x, y = pos.y + y, z = pos.z}
		    if isWalkable(posicao) and posicao ~= {x = pos.x,y = pos.y,z = pos.z} then
			   doCreateItem(5750,1,posicao)
		    end
 end
end
addEvent(function()
for x = -1,1 do
 for y = -1,1 do
		    posicao = {x = pos.x + x, y = pos.y + y, z = pos.z}
		    if getTileItemById(posicao, 5750).uid > 0 then
			   doRemoveItem(getTileItemById(posicao, 5750).uid)
		    end
 end
end
end,5*1000)
return true
end

 

teste agora

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...