Ir para conteúdo

Talk Movimentando Objetos


Posts Recomendados

Faaala galera! Estou gostando de ver, todo mundo postando os scripts e participando do SDS, é isso mesmo pessoal! Vamos continuar fazendo o XTibia crescer nesta magnifica área de scripts. Fiz um script para um pedido que me fizeram por messenger, e aqui vou posta-lo.

 

Como funciona: Você deve estar na frente do item e falar c1 para norte, c2 para oeste, c3 para sul e c4 para leste para que o item literalmente comece a andar. O número de sqms e a velocidade que o item irá se mover variam de acordo com o level do jogador.

O item deve poder ser movido, por exemplo, uma parede não vai se mover.

 

 

Talkaction

 

function onSay(cid, words, param)

dir = {["c1"] = 0, ["c2"] = 3, ["c3"] = 2, ["c4"] = 1}
sqms = math.ceil(getPlayerLevel(cid)/10)
id = {2160, 2421}
vel = {[10] = 5000, [20] = 4500, [30] = 4000, [50] = 3500, [70] = 3000, [90] = 2500, [100] = 2000, [150] = 1000}

if dir[words] then
for _, i in pairs(id) do
if getTileItemById(getPlayerLookPos(cid), i).itemid == i then
addEvent(doMoveObject, getPlayerVel(cid, vel), getPlayerLookPos(cid), dir[words], sqms, getPlayerVel(cid, vel), i)
break
end
end
end

end

function getItemUid(posi, id)

if getTileItemById(posi, id).itemid ~= id then return nil end
for i = 1, 255 do
posi = {x=posi.x, y=posi.y, z=posi.z, stackpos=i}
if getThingFromPos(posi).itemid == id then
return getThingFromPos(posi).uid
end
end

end

function getPlayerVel(uid, tab)

a = 0

for level, milisec in pairs(tab) do
if getPlayerLevel(uid) >= level then
if level >= a then
a = level
end
end
end

return tab[a]
end

function doMoveObject(pos, dir, sqms, delay, id)

if getItemUid(pos, id) ~= nil then
doTeleportThing(getItemUid(pos, id), getPosByDir(pos, dir, 1))
if sqms > 1 then
addEvent(doMoveObject, delay, pos, dir, sqms-1, delay, id)
end
end

end

 

 

Editando o Script

 

sqms = math.ceil(getPlayerLevel(cid)/10)

 

Essa é a fórmula que eu fiz para a contagem dos sqms, aumenta 1 sqm a cada 10 leveis. Se souber, pode edita-la.

 

id = {2160, 2421}

 

Estes são os ids dos itens que podem ser movidos.

 

vel = {[1] = 5000, [10] = 4750], [20] = 4500, [30] = 4000, [50] = 3500, [70] = 3000, [90] = 2500, [100] = 2000, [150] = 1000}

 

Nesta tabela estão as velocidades, ou seja, de quantos em quantos milisegundos o item vai se mover de um sqm para o outro. No caso acima, a partir do level 1 vai se mover de 5 em 5 segundos, a partir do level 10 de 4,75 segundos em 4,75 segundos e assim por diante.

 

 

Tag

 

<talkaction words="c1;c2;c3;c4" script="NomeDoArquivo.lua" />

 

 

É isso galerinha, abraços.

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

[27/07/2011 20:38:15] Lua Script Error: [TalkAction Interface]

[27/07/2011 20:38:15] in a timer event called from:

[27/07/2011 20:38:15] data/talkactions/scripts/box.lua:onSay

[27/07/2011 20:38:15] data/talkactions/scripts/box.lua:24: attempt to call global 'getThingFromPos' (a nil value)

[27/07/2011 20:38:15] stack traceback:

[27/07/2011 20:38:15] [C]: in function 'getThingFromPos'

[27/07/2011 20:38:15] data/talkactions/scripts/box.lua:24: in function 'getItemUid'

[27/07/2011 20:38:15] data/talkactions/scripts/box.lua:48: in function <data/talkactions/scripts/box.lua:46>

 

 

O Que é??

 

obs: uso versão 9.10

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

×
×
  • Criar Novo...