LE

Ajuda!script De Fechar Portas Por Talkactions.

Por leandroskt8, 06 de fev. de 2012 em Scripts

ajuda!script de fechar portas
tibia
script
otserv
29
4.6k
leandroskt8L
06 de fevereiro de 2012 às 02:44

O.giflá amigos e colaboradores.

Venho aqui mais uma vez pedir um script para meu evento coliseum.

Então eu quero uma talkaction com que god digite/open coliseum as porta abrissem,ai quando eu terminar evento /close coliseum para fechar as portas. Servidor utilizado Real server 8.6 versão 3.1.0.0,

coliseum.jpg

Bom Tirei uma foto, como é coliseum, essas são as cordenadas das portas, "p"representa grupo de portas e "123" são as cordenadas de cada porta que serão aberta e fechadas.tentei ser máximo, especifico para não dificultar a criação do escript, espero que alguém me ajude Obg. Rep + para quem conseguir.

 

p.1> 1x:361 y: 72 z:7 ,2x:362 y:72 z:7 ,3x:363 y:72 z:7

p.2> 1x:369 y:68 z:7 ,2x:370 y:68 z:7 ,3x:371 y:68 z:7

p.3> 1x:377 y:68 z:7 ,2x:378 y:68 z:7 ,3x:379 y: 68 z:7

p.4> 1x:385 y:72 z:7 ,2x:385 y:73 z:7 ,3x:385 y:74 z:7

p.5> 1x:384 y:76 z:7 ,2x:383 y:76 z:7 ,3x:382 y:76 z:7

p.6> 1x:377 y:80 z:7 ,2x:376 y:80 z:7 ,3x:375 y:80 z:7

p.7> 1x:373 y:78 z:7 ,2x:372 y:78 z:7 ,3x:371 y:78 z:7

p.8> 1x:366 y:82 z:7 ,2x:365 y:82 z:7 ,3x:264 y:82 z:7

p.9> 1x:357 y:78 z:7 ,2x:357 y:77 z:7 ,3x:357 y:76 z:7

Editado Fevereiro 6 por godleandro

bepokemonB
06 de fevereiro de 2012 às 03:45

Existiam duas formas de fazer, adicionando todas as portas e posicoes em uma tabela ou pegando uma area que contenha todas elas, achei mais pratico a segunda forma entao aqui vai:

function onSay(cid, words, param)
local table, config = {
toClose = {[idportaaberta] = idportafechada}, -- Coloque aqui os ids das portas seguindo o exemplo, a segunda tabela vai ser criada sozinha
toOpen = {}
}, {
fromPos = {x=x,y=y,z=z},
toPos = {x=x,y=y,z=z}
}

for opened,closed in ipairs(table.toClose) do
table.toOpen[closed] = opened
end

for x=config.fromPos.x, config.toPos.x do
for y=config.fromPos.y, config.toPos.y do
local doorPos = {x=x,y=y,z=config.fromPos.z}
for stack=1,20 do
doorPos.stackpos = stack
for _,to in ipairs(table) do
door = getThingFromPos(doorPos)
if to[door.itemid] then
doTransformThing(door.uid, to[door.itemid])
end
end
end
end
end
return true
end

 

Aqui tambem coloquei o script identado no pastebin.

 

OBS: Esse script vai ser como !coliseum e vai abrir se tiver fechado e fechar se tiver aberto.

leandroskt8L
06 de fevereiro de 2012 às 13:36

Bom não sei que pode ser porque, ta dando esse erro.

 

[Error - TalkAction Interface]

data/talkactions/scripts/coliseum.lua:onSay

Description:

data/talkactions/scripts/coliseum.lua:14: 'for' initial value must be a number

stack traceback:

data/talkactions/scripts/coliseum.lua:14: in function <data/talkactions/scripts/coliseum.lua:1>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

<talkaction log="yes" words="!coliseum" access="5" event="script" value="coliseum.lua"/>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

door.jpg

function onSay(cid, words, param)

local table, config = {

toClose = {[9169] = 9170}, -- Coloque aqui os ids das portas seguindo o exemplo, a segunda tabela vai ser criada sozinha

toOpen = {}

}, {

fromPos = {x=x,y=y,z=z},

toPos = {x=x,y=y,z=z}

}

 

for opened,closed in ipairs(table.toClose) do

table.toOpen[closed] = opened

end

 

for x=config.fromPos.x, config.toPos.x do

for y=config.fromPos.y, config.toPos.y do

local doorPos = {x=x,y=y,z=config.fromPos.z}

for stack=1,20 do

doorPos.stackpos = stack

for _,to in ipairs(table) do

door = getThingFromPos(doorPos)

if to[door.itemid] then

doTransformThing(door.uid, to[door.itemid])

end

end

end

end

end

return true

end

Editado Fevereiro 6 por godleandro

bepokemonB
06 de fevereiro de 2012 às 14:45

Bom não sei que pode ser porque, ta dando esse erro.

 

[Error - TalkAction Interface]

data/talkactions/scripts/coliseum.lua:onSay

Description:

data/talkactions/scripts/coliseum.lua:14: 'for' initial value must be a number

stack traceback:

data/talkactions/scripts/coliseum.lua:14: in function <data/talkactions/scripts/coliseum.lua:1>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

<talkaction log="yes" words="!coliseum" access="5" event="script" value="coliseum.lua"/>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

door.jpg

function onSay(cid, words, param)

local table, config = {

toClose = {[9169] = 9170}, -- Coloque aqui os ids das portas seguindo o exemplo, a segunda tabela vai ser criada sozinha

toOpen = {}

 

Voce mudous as posicoes em config.fromPos e config.toPos?

E eh o contrario .. [9170] = 9169

leandroskt8L
06 de fevereiro de 2012 às 15:24

"Voce mudous as posicoes em config.fromPos e config.toPos?"

Você diz essas aqui ?

fromPos = {x=x,y=y,z=z},

toPos = {x=x,y=y,z=z}

 

bom mudei

fromPos = {x=361,y=72,z=7},

toPos = {x=362,y=72,z=7}

só que eu aplico comando !coliseum, as porta continua fechada não acontece nada .

Editado Fevereiro 6 por godleandro

bepokemonB
06 de fevereiro de 2012 às 18:29

"Voce mudous as posicoes em config.fromPos e config.toPos?"

Você diz essas aqui ?

fromPos = {x=x,y=y,z=z},

toPos = {x=x,y=y,z=z}

 

bom mudei

fromPos = {x=361,y=72,z=7},

toPos = {x=362,y=72,z=7}

só que eu aplico comando !coliseum, as porta continua fechada não acontece nada .

 

Voce tem que deixar /\< na agua e \/> na agua.

Como se fosse selecionar uma area.

leandroskt8L
06 de fevereiro de 2012 às 20:13

não entendi. na minha visão que você ta querendo dizer e coloca posição fromPos, Topos,na água isso ?Porque tentei não deu serto rolleyes.gif.

jhon992J
06 de fevereiro de 2012 às 23:36

Troca por esse:

function onSay(cid, words, param)
local table, config = {
toClose = {[9170] = 9169}, -- Coloque aqui os ids das portas seguindo o exemplo, a segunda tabela vai ser criada sozinha
toOpen = {}
}, {
fromPos = {x=356,y=69,z=7},
toPos = {x=386,y=81,z=7}
}

for opened,closed in ipairs(table.toClose) do
table.toOpen[closed] = opened
end

for x=config.fromPos.x, config.toPos.x do
for y=config.fromPos.y, config.toPos.y do
local doorPos = {x=x,y=y,z=config.fromPos.z}
for stack=1,20 do
doorPos.stackpos = stack
for _,to in ipairs(table) do
door = getThingFromPos(doorPos)
if to[door.itemid] then
doTransformThing(door.uid, to[door.itemid])
end
end
end
end
end
return true
end

leandroskt8L
07 de fevereiro de 2012 às 09:00

é continua sem nem um efeito eu faço comando as porta continua mesmo jeito wacko.png.

MatheusGladM
07 de fevereiro de 2012 às 13:22

local doors = {
[1] = {x=361, y=72, z=7},
[2] = {x=362, y=72, z=7},
}

local config = {
   openID = 9170,
   closedID = 9169
}

function onSay(cid, words, param)
   if param == "open" then
    for i,x in ipairs(doors) do
      	 for stack = 0, 255 do
          	 x.stackpos = stack
      		 local item = getThingFromPos(x)
          	 if item.itemid == config.closedID then
          		 doTransformItem(item.uid, config.openID)
                   break
               end
           end
       end
   elseif param == "close" then
    for i,x in ipairs(doors) do
      	 for stack = 0, 255 do
          	 x.stackpos = stack
      		 local item = getThingFromPos(x)
          	 if item.itemid == config.openID then
          		 doTransformItem(item.uid, config.closedID)
                   break
               end
           end
       end
   end
   return true
end

 

!coliseum open

!coliseum close

 

Bota o resto das pos la, soh ir botando todas as pos das portas... flw

bepokemonB
07 de fevereiro de 2012 às 15:32

 

Teria como você ver se existe algum erro no meu script?

Se tiver e você puder concertar fica muito mais fácil pra ele configurar o script...

 

@Seu script

local doors = {
[1] = {x=361, y=72, z=7},
[2] = {x=362, y=72, z=7},
}

local config = {
openID = 9170,
closedID = 9169
}

function onSay(cid, words, param)
if param == "open" then
		for i,x in ipairs(doors) do
		for stack = 0, 255 do
			 x.stackpos = stack
			 local item = getThingFromPos(x)
			 if (item.itemid == config.closedID and param == "open") then
				doTransformItem(item.uid, config.openID)
                elseif (item.itemid == config.openID and param == "close") then
				doTransformItem(item.uid, config.closedID)
			 end
		end
		end
end
return true
end

 

Dá no mesmo, não?

Editado Fevereiro 7 por Byerne

MatheusGladM
07 de fevereiro de 2012 às 16:05

Tem erro sim pq soh vai funcionar quando falar open n vai dar pra fexar (se funcionar tem que testar)

 

Eu fiz da forma que ta la pra ficar mais organizado...

 

E nao consigui oq seria "mais facil" de configurar ai na ediçao que voce fez, ja que o script ele soh tem que configurar a table doors...

Editado Fevereiro 7 por MatheusMkalo

bepokemonB
07 de fevereiro de 2012 às 16:17

E nao consigui oq seria "mais facil" de configurar ai na ediçao que voce fez, ja que o script ele soh tem que configurar a table doors...

 

O meu se estivesse funcionando seria só mudar fromPos e toPos e o script procuraria todas as portas e trocaria elas.

No caso da table doors teria que adicionar 27 portas. O entendimento do seu script é bem mais fácil. Mas colocar 27 portas e mais tenso que duas posicoes. Anyways, nao to querendo competir nem nada ._. [ironic]Afinal, todos sabemos que voce nao sabe nada de scripting e perderia muito feio.[/ironic]

MatheusGladM
07 de fevereiro de 2012 às 16:30

Seria mais facil configurar mas daria lag se a area fosse mto grande, afinal o script roda em todos os sqms 256 stackpos checando se tem a porta...

Editado Fevereiro 7 por MatheusMkalo

leandroskt8L
07 de fevereiro de 2012 às 20:11

http://youtu.be/OrJwbBkh40E




Ai galera não sei que e ;s ajuda ai. que tiver net boa coloca 720 p ;)
nem, um script deu certo.
MatheusMkalo e nem Byerne enem Jhon992 ;s

Obs:As cordernas estão certas das 2 primeiras portas.



E nao consigui oq seria "mais facil" de configurar ai na ediçao que voce fez, ja que o script ele soh tem que configurar a table doors...


O meu se estivesse funcionando seria só mudar fromPos e toPos e o script procuraria todas as portas e trocaria elas.
No caso da table doors teria que adicionar 27 portas. O entendimento do seu script é bem mais fácil. Mas colocar 27 portas e mais tenso que duas posicoes. Anyways, nao to querendo competir nem nada ._. [ironic]Afinal, todos sabemos que voce nao sabe nada de scripting e perderia muito feio.[/ironic]
Bom realmente e verdade seria mais fácil ;/.

Editado Fevereiro 7 por godleandro