Jump to content

DUVIDA COM LOOPS E IPAIRS


Recommended Posts

Bom eu tava conversando com um amigo meu, aele queria que eu lhe ajudasse fazendo um script de destruir carros porem eu n sabia, ele me mandou uma funcao feita pela comunidade e queria tirar algumas duvidas aqui.
 

function destroyVehiclesOfModel(modelID)
    local vehicles = getElementsByType("vehicle")
    for i,v in ipairs(vehicles) do
        if (getElementModel(v) == modelID) then
            destroyElement(v)
        end
    end
end

Queria entender como funcionar esse for i,v in ipairs(vehicles) do
Queria saber oque eh ipairs, do in e for, e suas funcionalidades se alguem puder explicar eu agradeco!

  • Like 1
Link to comment

O que é for?

Assim como while ou do...while, o for  é uma estrutura de repetição, que serve pra que? Repetir as coisas xd

Por exemplo:

local vehicles = getElementsByType("vehicle")

Essa parte do seu código retorna uma tabela de veículos, contendo vários veículos que você deseja destruir. Não existe uma função nativa do MTA que destrói todos os carros, você deve destruir um a um. Imagina como seria fazer isso sem uma estrutura de repetição ?

Então basicamente é isso, estrutura de repetição serve pra repetir alguma função ou pedaço de código. Por exemplo, se você quer contar de 1 até 1000 e exibir isso no chat do player, ou você faz 1000 linhas de código dando outputChatBox ou faz um for que se repetirá 1000 vezes, se resolvendo em 3 linhas de código.

for i=0, 1000, 1 do -- Enquanto i for menor ou igual a 1000 ele é incrementado de 1 a 1
	outputChatBox (i) --Vai exibir o índice, que vai de 0 a 1000
end -- fecha o for

(Foi só um for limitado de 0 a 1000, que não percorremos tabela, então a sintaxe não exige que usemos o in ipairs)

Se você quer saber programar melhor, não somente MTA mas qualquer coisa, deve aprender sobre estruturas de condição e repetição, são importantíssimos!

 

for INDICE, VALOR in ipairs (TABELA) do

end

INDICE: Uma tabela tem várias posições, índice é em qual posição da tabela o seu for está executando naquele momento.

VALOR: É o valor da tabela naquele índice rodando no momento. Por exemplo, se estiver rodando uma tabela de carros (como vc fez), a minha variável VALOR vai representar todos os carros enquanto roda o for, um de cada vez. No seu exemplo o que cumpriu esse papel foi a variável v.

in ipairs: Faz com que o for varra uma tabela em modo sequencial (posição 1, posição 2, posição 3...). Também tem o in pairs que varre uma tabela em modo aleatório (posição 3, posição 8, posição 1...)

O "for" e o "do" são só parte da sintaxe.

  • Thanks 2
Link to comment

@Boechatmuito bem !. Mas deixarei um exemplo aqui usando o elemento 'player' no getElementsByType().

Vamos supor que desejamos puxar um player pelo seu ID, então faremos assim:

print(getPlayerName(getPlayerFromID(23))) -- aqui daremos um print no nome do player que tem o id 23.

function getPlayerFromID(ID) -- aqui é a function que puxa o player pelo ID
	v = false -- aqui criamos uma variavel que atribuimos o valor boolean 'false'
	for INDICE, VALOR in ipairs (getElementsByType('player')) do -- aqui iniciamos um loop de todos os players
		if getElementData(VALOR, "ID") == ID then -- aqui verificamos os players que tem o elementData 'ID' igual o que botamos no print acima
            v = VALOR -- aqui transformamos a variavel no player selecionado.
            break -- aqui quebramos o loop
		end
	end
	return v -- aqui retornamos para o 'print' o 'player or false'
end

 

  • Like 1
  • Thanks 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...