TO
dúvida

como eu faço para mover item sem usar esse metodo?

Por tonynamoral, 03 de jan. de 2013 em Scripts

resolvido
27
3.7k
brun123B
03 de janeiro de 2013 às 09:00

a função doTeleportThing funciona com qualquer coisa que tenha uid, pode ser item ou criatura (npcs, monstros e players), qualquer coisa que tenha unique id, só não funciona com grounds se não me engano.

a função getThingPosition faz a mesma coisa, retorna a posição de qualquer coisa que tenha uid

tonynamoralT
03 de janeiro de 2013 às 09:56

getThingPos() <-- skymagnum

SlicerS
03 de janeiro de 2013 às 10:43

function doMoveItem(id, pos, dir)
  local item = getTileItemById(pos, id)
  if item.uid > 1 then
  local newPos = getPosByDir(pos, dir)
  if newPos then
	 doTeleportThing(item.uid, newPos)
	 return true
  end
  end
return false
end

local dirs = {0, 1, 2, 5}
local pos = {x = 100, y = 100, z = 7} --pos do item
local id = 2155 --id do item
for i = 1, #dirs do
   addEvent(doMoveItem, i * 100, id, pos, dirs[i])
end

achu q assim fica melhor '--'

brun123B
03 de janeiro de 2013 às 12:56

só que não ia funcionar, pois você executaria a doMoveItem com o parâmetro "pos" exatamente igual em todas as execuções, mas na verdade a posição do item vai variando

 

teria que ir atualizando a variável pos também

 

function doMoveItem(id, pos, dir)
  local item = getTileItemById(pos, id)
  if item.uid > 1 then
  local newPos = getPosByDir(pos, dir)
  if newPos then
	 doTeleportThing(item.uid, newPos)
	 return true
  end
  end
return false
end

local dirs = {0, 1, 2, 5}
local pos = {x = 100, y = 100, z = 7} --pos do item
local id = 2155 --id do item
for i = 1, #dirs do
   addEvent(doMoveItem, i * 100, id, pos, dirs[i])
   pos = getPosByDir(pos, dirs[i])
end

Editado Janeiro 3 por brun123

SlicerS
03 de janeiro de 2013 às 13:04

opa big mistake...

function doMoveItem(id, pos, dir)
  if type(dir) ~= "table" or not next(dir) then return false end
  local item = getTileItemById(pos, id)
  local dirs = dir
  if item.uid > 1 then
	  local newPos = getPosByDir(pos, dirs[1])
	  if newPos then
			 doTeleportThing(item.uid, newPos)
			 table.remove(dirs, 1)
			 addEvent(doMoveItem, 100, id, newPos, dirs)
			 return true
	  end
  end
return false
end

--///--
local dirs = {0, 1, 2, 5}
local pos = {x = 100, y = 100, z = 7} --pos do item
local id = 2155 --id do item
doMoveItem(id, pos, dirs)
--///--

 

edit: brun eh um ninja o.O

Editado Janeiro 3 por Slicer

SkymagnumS
03 de janeiro de 2013 às 18:20

Então ficaria assim brun?

 

function doMoveItem(item, dir)

local uidPos = getThingPos(item.uid)
uidPos.stackpos = 253

local dirTab = {
[0] = {x = uidPos.x, y = uidPos.y - 1, z = uidPos.z},
[1] = {x = uidPos.x + 1, y = uidPos.y, z = uidPos.z},
[2] = {x = uidPos.x, y = uidPos.y + 1, z = uidPos.z},
[3] = {x = uidPos.x - 1, y = uidPos.y, z = uidPos.z}
}

return doRemoveItem(getThingFromPos(uidPos)) and doCreateItem(item.itemid, 1, dirTab[dir])
end

brun123B
03 de janeiro de 2013 às 19:17

isso funciona com itens simples, mas itens que tem action id, unique id ou qualquer atributo, vai perder suas características, já que ele está sendo removido e criando outro com mesmo id em outro lugar, parecendo que ele teletransportou...

então na verdade o "certo" seria só:

 

doTeleportThing(item.uid, newPos)

 

isso pode mover um item de qualquer lugar pra uma determinada posição, pode estar dentro de um container, pode estar com algum player ou qualquer lugar, mas usando o teleport você se limita apenas a mover ele pra algum chão

Editado Janeiro 3 por brun123

tonynamoralT
04 de janeiro de 2013 às 11:41

E os dirs , como eu configuro? '-'

SlicerS
04 de janeiro de 2013 às 11:52

colocando o numero da direçao q tu quer? ;x

NORTH = 0
EAST = 1
SOUTH = 2
WEST = 3
SOUTHWEST = 4
SOUTHEAST = 5
NORTHWEST = 6
NORTHEAST = 7

tonynamoralT
04 de janeiro de 2013 às 12:46

ty *----*

SlicerS
04 de janeiro de 2013 às 14:09

funcionou? posso mover?

OneshotO
04 de janeiro de 2013 às 15:15

Tópico movido para a seção de dúvidas e pedidos resolvidos.