OT
dúvida

Script Pra Quest!

Por othereality, 05 de mai. de 2012 em Scripts

script
11
1.5k
otherealityO
05 de maio de 2012 às 13:47

Então galera!

Esse é um script que pretendo usar nas Dungeons do meu OT...

O que ele teria que fazer:

> Teleportar de 2 a 4 players pra dentro da dungeon por alavanca.

> Adicionar uma "x" storage a todos player.

 

E foi ai que tive problemas.. porque não sei como adicionar uma storage a um player que não de "use" na alavance.

A solução que eu pensei foi fazer o teleport teleportar pra cida de um outro teleport que adicione a storage por "stepIn" mas nem sei se funcionaria.

 

Se alguém souber reduzir meu script também agradeço!

Aqui está o que eu fiz:

 

 

 

function onUse(cid, item)

 

local pos1= {x=1054, y=1005, z=8, stackpos=253}

local pos2= {x=1055, y=1005, z=8, stackpos=253}

local pos3= {x=1056, y=1005, z=8, stackpos=253}

local pos4= {x=1057, y=1005, z=8, stackpos=253}

local newpos1, newpos2, newpos3, newpos4 = {x=1086, y=563, z=7}, {x=1087, y=563, z=7}, {x=1088, y=563, z=7}, {x=1089, y=563, z=7}

local thing = getThingFromPos

 

if (isPlayer(thing(pos4).uid)) then

doPlayerSendTextMessage(cid, 22, "No minimo duas pessoas para entrar na dungeon!")

elseif (isPlayer(thing(pos4).uid)) and isPlayer(thing(pos3).uid) then

doTeleportThing(thing(pos4).uid, newpos4)

doTeleportThing(thing(pos3).uid, newpos3)

doCreateItem(5787, 1, pos4)

doCreateItem(5787, 1, pos3)

elseif (isPlayer(thing(pos2).uid) and isPlayer(thing(pos3).uid) and isPlayer(thing(pos4).uid)) then

doTeleportThing(thing(pos1).uid, newpos1)

doTeleportThing(thing(pos2).uid, newpos2)

doTeleportThing(thing(pos3).uid, newpos3)

doCreateItem(5787, 1, pos1)

doCreateItem(5787, 1, pos2)

doCreateItem(5787, 1, pos3)

elseif (isPlayer(thing(pos1).uid) and isPlayer(thing(pos2).uid) and isPlayer(thing(pos3).uid) and isPlayer(thing(pos4).uid)) then

doTeleportThing(thing(pos1).uid, newpos1)

doTeleportThing(thing(pos2).uid, newpos2)

doTeleportThing(thing(pos3).uid, newpos3)

doTeleportThing(thing(pos4).uid, newpos4)

doCreateItem(5787, 1, pos1)

doCreateItem(5787, 1, pos2)

doCreateItem(5787, 1, pos3)

doCreateItem(5787, 1, pos4)

end

return true

end

 

só pra esclarecer o "pos4" é o tile que fica do lado da alavanca, "pos3" é um pra esquerda e assim por diante.

E aquele CreateItem cria um item que impede que dois grupos façam a dungeon ao mesmo tempo.

Eu precisa de alguma coisa como "setPalyerStorageByPos(cid, pos)"

eauheaueaheu

 

Obrigado desde já a quem ajudar!

Editado Junho 13 por Vilden

VodkartV
05 de maio de 2012 às 14:23

usa for '-'

 

local t = {
entrada =
{
{x = 192, y = 57, z = 7},
{x = 191, y = 57, z = 7},
{x = 190, y = 57, z = 7}
},
saida =
{
{x = 192, y = 59, z = 7},
{x = 191, y = 59, z = 7},
{x = 190, y = 59, z = 7}
}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
local check = {}
for _, k in ipairs(t.entrada) do
local x = getTopCreature(k).uid
if(isPlayer(x)) then
table.insert(check, x)
			end
end
if(#check < 2) then
return doPlayerSendCancel(cid, 'Está faltando player.')
end
for i, tid in ipairs(check) do
doSendMagicEffect(t.entrada[i], CONST_ME_POFF)
doTeleportThing(tid, t.saida[i], false)
setPlayerStorageValue(tid,78455,1)
doSendMagicEffect(t.saida[i], CONST_ME_ENERGYAREA)
end
doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
return true
end

 

coloquei para dar a storage 78455

Editado Maio 5 por Vodkart

otherealityO
05 de maio de 2012 às 17:47

Talvez eu tenha entendido errado mas eu alterei o script adicionando mais um lugar por que pode entrar até 4 player na dungeon...

local t = {
entrada =
{
{x = 1054, y = 1005, z = 8},
{x = 1055, y = 1005, z = 8},
{x = 1056, y = 1005, z = 8},
{x = 1057, y = 1005, z = 8}
},
saida =
{
{x = 1086, y = 563, z = 7},
{x = 1087, y = 563, z = 7},
{x = 1088, y = 563, z = 7},
{x = 1089, y = 563, z = 7}
}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
local check = {}
for _, k in ipairs(t.entrada) do
local x = getTopCreature(k).uid
if(isPlayer(x)) then
table.insert(check, x)
							end
end
if(#check < 2) then
return doPlayerSendCancel(cid, 'No minimo duas pessoas para entrar na dungeon!')
end
for i, tid in ipairs(check) do
doSendMagicEffect(t.entrada[i], CONST_ME_POFF)
doTeleportThing(tid, t.saida[i], false)
setPlayerStorageValue(tid,23122,1)
doSendMagicEffect(t.saida[i], CONST_ME_ENERGYAREA)
end
doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
return true
end

O magic effect só sai no cara que puxa a alavanca...

 

 

Edit:

 

Acabei de perceber que vc não botou pra criar aquele item tb. =P

Eu faria isso, mas esse script vai alem da minha compreensão. AUEHaUEhauehAUEH

Editado Maio 5 por OtheReality

VodkartV
05 de maio de 2012 às 18:26

para criar o item só adicionar antes de

 

doTeleportThing(tid, t.saida, false)

 

isso:

 

doCreateItem(5787, 1, t.entrada)

otherealityO
08 de maio de 2012 às 02:27

Pronto agora o script ta criando o item certinho mas quero fazer com que ele suma depois de um tempo.

Essa foi minha tentativa obviamente FAIL:

 

local t = {

entrada =

{

{x = 1057, y = 1005, z = 8},

{x = 1056, y = 1005, z = 8},

{x = 1055, y = 1005, z = 8},

{x = 1054, y = 1005, z = 8}

},

saida =

{

{x = 1089, y = 563, z = 7},

{x = 1088, y = 563, z = 7},

{x = 1087, y = 563, z = 7},

{x = 1086, y = 563, z = 7}

}

}

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

local check = {}

for _, k in ipairs(t.entrada) do

local x = getTopCreature(k).uid

if(isPlayer(x)) then

table.insert(check, x)

end

end

if(#check < 1) then

return doPlayerSendCancel(cid, 'No minimo uma pessoas para entrar na dungeon!')

end

for i, tid in ipairs(check) do

doSendMagicEffect(t.entrada, CONST_ME_POFF)

doCreateItem(5787, 1, t.entrada)

doTeleportThing(tid, t.saida, false)

setPlayerStorageValue(tid,23122,1)

doSendMagicEffect(t.saida, CONST_ME_ENERGYAREA)

end

doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)

return true

end

 

function tirar( ) --não tenho ideia do que devo colocar aqui.

local pos = {

pedras =

{

{x = 1057, y = 1005, z = 8},

{x = 1056, y = 1005, z = 8},

{x = 1055, y = 1005, z = 8},

{x = 1054, y = 1005, z = 8}

}}

for _, as in ipairs(pos.pedras) do --não tenho ideia de como se usa for.

local y = getTileItemById(as, 5787)

if y then

local ri = doRemoveItem(items.uid, 1)

local me = doSendMagicEffect(pedras.pos, CONST_ME_POFF)

addEvent(tirar, 10000, ri)

addEvent(tirar, 10000, me)

end

end

return true

end

Editado Maio 8 por OtheReality

VodkartV
08 de maio de 2012 às 11:10

local t = {
create = {5787,1},
entrada = {
{x = 1057, y = 1005, z = 8, stackpos = 1},
{x = 1056, y = 1005, z = 8, stackpos = 1},
{x = 1055, y = 1005, z = 8, stackpos = 1},
{x = 1054, y = 1005, z = 8, stackpos = 1}
},
saida ={
{x = 1089, y = 563, z = 7},
{x = 1088, y = 563, z = 7},
{x = 1087, y = 563, z = 7},
{x = 1086, y = 563, z = 7}
}
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
local check = {}
for _, k in ipairs(t.entrada) do
local x = getTopCreature(k).uid
if(isPlayer(x)) then
table.insert(check, x)
end
end
if(#check < 2) then
return doPlayerSendCancel(cid, 'Minimo 2 pessoas.')
end
for i, tid in ipairs(check) do
function remove()
if getTileItemById(t.entrada[i], t.create[1]).uid > 0 then 
doRemoveItem(getThingfromPos(t.entrada[i]).uid,1)
end
end
doSendMagicEffect(t.entrada[i], CONST_ME_POFF)
doCreateItem(t.create[1], 1, t.entrada[i])
doTeleportThing(tid, t.saida[i], false)
setPlayerStorageValue(tid,t.storage,1)
doSendMagicEffect(t.saida[i], CONST_ME_ENERGYAREA)
addEvent(remove, t.create[2]*1000*60)
end
doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
return true
end

 

create = {5787,1},

 

5787 é o id do item

1 é o tempo em minutos que irá remover os items

otherealityO
08 de maio de 2012 às 12:25

if(#check < 2) then
return doPlayerSendCancel(cid, 'Minimo 2 pessoas.')

eu tinha posto uma pessoa poder testar.. aeuaeuh

 

---

 

ta funcionando direito. vlw!

agora quero fazer o player ser teleportado para fora da area assim que suma o item, se ele ainda estiver na area da quest.

Mas eu acho que eu consigo deixa eu tentar.... euaheauehuae

 

edit:

 

da uma olhada na merda que eu pensei aqui.. aeuaheuhae

 

 

function remove()
if getTileItemById(t.entrada[i], t.create[1]).uid > 0 then
doRemoveItem(getThingfromPos(t.entrada[i]).uid,1)
doSendMagicEffect(t.entrada[i], 2)
if getPlayerStorageValue(cid, 23122) then
doTeleportThing(cid, t.entrada[i])
end
end
end

 

eu fiz assim pra sair o Magic effect quando sumir o item, mas não funcionou. =/

e também botei aquela parte da storage, porque quando mata entra no tp pra sair da quest remove essa storage, então eu ia limitar o tempo do cara dentro da quest.

o problema é que eu acho que só funcionaria pra quem puxou a alavanca né? não vai teleportar os outros... (eu testei sozinho e funcionou)

vou tentar com MC aqui pra ver oque da...

 

edit:

 

é só teleporta quem puxa a alavanca =/

 

eu tava olhando uns scripts e pensei em fazer assim:

 

 

function remove()
if getTileItemById(t.entrada[i], t.create[1]).uid > 0 then
doRemoveItem(getThingfromPos(t.entrada[i]).uid,1)
doSendMagicEffect(t.entrada[i], 2)
local from, to = {x = 1071, y = 515, z = 7}, {x = 1203, y = 597, z = 7}
local ch = getTopCreature(from, to).uid
if(isPlayer(ch)) then
doTeleportThing(cid, t.entrada[i])
end
end
end

 

vou ver se funciona.

 

edit:

 

não deu. =/

desisto.

aeauehuahe

Editado Maio 8 por OtheReality

VodkartV
08 de maio de 2012 às 12:48

rsrsrs

td bem =]

otherealityO
08 de maio de 2012 às 13:26

VODKART !!!!

vê meus edits..

auehaueaheuah

 

 

(sabe como é esse xtibia bugado, tu não sabe quando alguém postou a menos que fique atualizando a pagina -.-)

Editado Maio 8 por OtheReality

VodkartV
08 de maio de 2012 às 13:46
function remove()
local from, to = {x = 1071, y = 515, z = 7}, {x = 1203, y = 597, z = 7}
if getTileItemById(t.entrada[i], t.create[1]).uid > 0 then 
doRemoveItem(getThingfromPos(t.entrada[i]).uid,1)
end
if isInRange(getCreaturePosition(tid), from, to) then
doTeleportThing(tid, t.entrada[i])
end
end

1 mês depois...
Nathan FischerN
12 de junho de 2012 às 17:40

preciso de 1 tile que quando o player faz a quest não pode passar pelo tile