FA
dúvida

[Dúvida] Bloco de Repetição

Por Farathor, 18 de dez. de 2015 em Scripts

14
2k
FarathorF
18 de dezembro de 2015 às 20:53

Gostaria de saber, como eu faço para esse script ficar do jeito que eu quero, sem ele ficar essa coisa feia, cheia de coisas repetidas, que só muda algumas coisas?

 

 

local pos = {x = 1195, y = 1247, z = 7}
addEvent(doCleanTile, 0, pos, false) 
addEvent(doSendMagicEffect,0, pos, 7)
 
local pos2 = {x = 1195, y = 1248, z = 7}
addEvent(doCleanTile, 100, pos2, false) 
addEvent(doSendMagicEffect,100, pos2, 7)
 
local pos3 = {x = 1196, y = 1247, z = 7}
addEvent(doCleanTile, 200, pos3, false) 
addEvent(doSendMagicEffect,200, pos3, 7)
 
local pos4 = {x = 1196, y = 1248, z = 7}
addEvent(doCleanTile, 300, pos4, false) 
addEvent(doSendMagicEffect,300, pos4, 7)
 
local pos5 = {x = 1197, y = 1247, z = 7}
addEvent(doCleanTile, 400, pos5, false) 
addEvent(doSendMagicEffect,400, pos5, 7)
 
local pos6 = {x = 1197, y = 1248, z = 7}
addEvent(doCleanTile, 500, pos6, false) 
addEvent(doSendMagicEffect,500, pos6, 7)
 
local pos7 = {x = 1195, y = 1253, z = 7}
addEvent(doCleanTile, 600, pos7, false) 
addEvent(doSendMagicEffect,600, pos7, 7)

 

 

Editado Dezembro 18 por Farathor

OneshotO
18 de dezembro de 2015 às 21:10


for y = 0, 6 do

local pos = {x=1195, y=1247+i, z=7}

addEvent(function()

doCleanTile(pos, false)

doSendMagicEffect(pos, 7)

end, i * 100)

end

 

FarathorF
18 de dezembro de 2015 às 21:13

Por exemplo, tem 20 pisos, e a cada 10 adiciona +1 no X, como eu faço isso?

 

20 é só um número, a arena começa em

 

{x = 1195, y = 1245, z = 7}

 

termina em

 

{x = 1208, y = 1254, z = 7}

Editado Dezembro 18 por Farathor

CaronteC
18 de dezembro de 2015 às 22:40

Assumindo que essas posições sejam os cantos:

 

local pos1 = {x = 1195, y = 1245, z = 7}
local pos2 = {x = 1208, y = 1254, z = 7}

 for u = pos1.x, pos2.x do 
    for p = pos1.y, pos2.y do 
       local position = {x = u, y = p, z = 7}
       doCleanTile(position, false)
       doSendMagicEffect(position, 7)
    end
 end
FarathorF
18 de dezembro de 2015 às 22:47

Só que dessa forma, ele deu o clean na area toda de uma vez, eu queria que ele desse o clean de piso por piso 1 de cada vez com um intervalo de 100 no script

CaronteC
18 de dezembro de 2015 às 23:02
Melhor resposta

Quando eu pegar o PC eu faço um addEvent....

 

 

Você tem preferência de direção?

Começa da esquerda pra direita ou de cima para baixo?

FarathorF
18 de dezembro de 2015 às 23:04

Faz Assim, é por fileira por exemplo, primeiro vai a direita {x = 1195, y = 1245, z = 7} até {x = 1195, y = 1254, z = 7}, dai vai e adiciona +1 no X e faz o mesmo processo até chegar na ultima fileira {x = 1208, y = 1245, z = 7} até {x = 1208, y = 1254, z = 7}

Editado Dezembro 18 por Farathor

CaronteC
18 de dezembro de 2015 às 23:28

Eu sei como é que é, só tava perguntando a direção, como você disse, então é ao contrário do que eu fiz.

o processo de limpeza é o mesmo, só muda a velocidade...

local pos1 = {x = 1195, y = 1245, z = 7}
local pos2 = {x = 1208, y = 1254, z = 7}
local tempo = 1000
local i = 0
 
 for p = pos1.y, pos2.y do 
    for u = pos1.x, pos2.x do 
       local position = {x = u, y = p, z = 7}
       i = i + 1
       addEvent(function() 	doCleanTile(position, false)
				doSendMagicEffect(position, 7)
		end, tempo * i)
    end
 end
No tempo é em Milissegundo, coloquei para multiplicar por um valor, para que fique um efeito em cadeia...

Editado Dezembro 19 por Caronte

FarathorF
18 de dezembro de 2015 às 23:44

Testei aqui, e ele deu o clean na area toda e não em piso por piso

CaronteC
19 de dezembro de 2015 às 00:32

Tenta novamente, editei aqui

FarathorF
19 de dezembro de 2015 às 14:40

Funcionou, mas teria como vc mudar a posição? Invés de direita pra esquerda, sem de cima para baixo?

CaronteC
19 de dezembro de 2015 às 14:44


local pos1 = {x = 1195, y = 1245, z = 7}

local pos2 = {x = 1208, y = 1254, z = 7}

local tempo = 1000

local i = 0

 

for p = pos1.x, pos2.x do

for u = pos1.y, pos2.y do

local position = {x = p, y = u, z = 7}

i = i + 1

addEvent(function() doCleanTile(position, false)

doSendMagicEffect(position, 7)

end, tempo * i)

end

end

 

 

Editado Dezembro 19 por Caronte

FarathorF
19 de dezembro de 2015 às 14:46

@: Consegui corrigir, obrigado cara, valeu

LumusL
21 de dezembro de 2015 às 11:33

Tópico Movido
Este tópico foi movido de "OTServSuporte OTServSuporte Scripting"
para "OTServSuporte OTServSuporte ScriptingPedidos e dúvidas resolvidos - Scripting".