:hearts: Introdução
- * Esse tutorial é destinado a quem já possui conhecimentos básicos/intermediários em programação.
Antigamente, quando eu utilizava a biblioteca YSI, eu tinha imensa dificuldade em aprender a utilizar outras includes que existiam na biblioteca. Eu utilizava y_commands na йpoca e era muito burrice carregar uma biblioteca tгo grande para usar 2, 3 funзхes. Mas hoje, isso nгo й mais um problema para mim, entгo quero ajudar vocкs que nгo querem conhecer ou conhecer um pouco mais sobre essa biblioteca e assim aproveitar-la mais.
- Foreach é uma estrutura de repetição (loop) que existe em outras linguagens de programação como o C# por exemplo. A diferença dessa estrutura de repetição é que ela vai percorrer uma lista. Ela não é usada para funcionar como um contador como geralmente ou para é usada.
Para:
Código PHP:
- Código:
// Exemplo em C#
for(int x; x < 10; ++x)
{
Console.WriteLine(x);
}
/*
Resultado
1
2
3
4
5
6
7
8
9
*/
Código PHP:
- Código:
// Exemplo em C#
int[] lista = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 };
foreach (int x in lista)
{
Console.WriteLine(x);
}
/*
Resultado
0
1
1
2
3
5
8
13
*/
:hearts: Criando e gerenciando uma lista
- Vou procurar ser o mais claro possível sobre as funções, vou tentar explicar todas as funções essenciais para a criação e administração de suas listas. Qualquer dúvida será respondida, exceto perguntas extremamente idiotas.
1° Incluindo: Antes de iniciar com o cуdigo, você deve baixar e importar o foreach ao seu projeto (lembre-se de ter a YSI e o Foreach ).
Código PHP:
- Código:
#include <foreach>
Código PHP:
- Código:
new Iterator:MinhaLista<21>; // Haverб uma lista com 20 slots, logo o valor mбximo que se pode ter incluido na lista й 20.
Código PHP:
- Código:
Iter_Add(MinhaLista, 0); // Vai adicionar o valor 0 na minha lista
Iter_Add(MinhaLista, 1); // Vai adicionar o valor 1 na minha lista
Iter_Add(MinhaLista, 2); // Vai adicionar o valor 2 na minha lista
Iter_Add(MinhaLista, 3); // Vai adicionar o valor 3 na minha lista
Iter_Add(MinhaLista, 5); // Vai adicionar o valor 5 na minha lista
Iter_Add(MinhaLista, 8); // Vai adicionar o valor 8 na minha lista
Iter_Add(MinhaLista, 13); // Vai adicionar o valor 13 na minha lista
...
Iter_Add(MinhaLista, 20); // Vai adicionar o valor 20 na minha lista (como definido a cima esse й o valor mбximo da lista)
Código PHP:
- Código:
Iter_Remove(MinhaLista, 8); // Vai remover o valor 8 da minha lista
Código PHP:
- Código:
new itens = Iter_Count(MinhaLista);
printf("Minha lista tem %d itens", itens);
Código PHP:
- Código:
{
foreach(new i : MinhaLista)
{
if(i == 5) Iter_SafeRemove(MinhaLista, 5, i); // Vai remover da 'MinhaLista' o item que possuн o valor 5
else
{
//...
}
}
}
:hearts: Usando um foreach divertido
- Logo após você ter montado sua lista, você provavelmente vai estar querendo acessar os valores da sua lista certo? pois bem,é ai que entra a função foreach .
A sintaxe da função é a seguinte.
Código PHP:
- Código:
foreach(new x : MinhaLista)
{
//...
}
:hearts: Prática
- Vamos a uma aula prática aplicando tudo o que você aprendeu nesse típico, okay ?
Vou fazer com que o loop percorra apenas os jogadores conectados.
Código PHP:
- Código:
new Iterator:JogadoresOn<MAX_PLAYERS+1>; // Criei uma lista
public OnPlayerConnect(playerid)
{
Iter_Add(JogadoresOn, playerid); // Adicionei na lista 'JogadoresOn' o 'ID' do jogador que acabou de entrar
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
Iter_Remove(JogadoresOn, playerid); // Removi da lista 'JogadoresOn' o 'ID' do jogador que acabou de sair do server
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/kickartodos", cmdtext, true, 10) == 0)
{
foreach(new i : JogadoresOn)
{
Kick(i); // Kickei todos os jogadores que estavam online
}
return 1;
}
return 0;
}
Código PHP:
- Código:
new Iterator:AdminsOn<MAX_PLAYERS+1>; // Criei uma lista
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/viraradmin", cmdtext, true, 10) == 0)
{
Iter_Add(AdminsOn, playerid); // Virei admin e coloquei meu ID na lista 'AdminsOn'.
Admin[playerid] = true;
return 1;
}
if (strcmp("/admins", cmdtext, true, 10) == 0)
{
new string[128], adminname[MAX_PLAYER_NAME];
foreach(new i : AdminsOn) // Pego o ID de cada Admin
{
GetPlayerName(i, adminname, MAX_PLAYER_NAME);
SendClientMessage(playerid, "» Admin %s (ID: %d)", adminname, i);
}
return 1;
}
return 0;
}
public OnPlayerDisconnect(playerid, reason)
{
if(Admin[playerid] == true) Iter_Remove(AdminsOn, playerid); // Removi da lista 'AdminsOn' o 'ID' do jogador que acabou de sair do server
return 1;
}
:hearts: Notas Finais
- ♪ Foi uma explicação bem simples, mas procurei ser bem objetivo e claro.
♪ Não procuro escrever de forma muito formal e provavelmente haverá erros de escrita, mas os que foram relatados vou corrigir.
♪ Qualquer dъvida estarei respondendo
♪ Existem muitas outras funções, mas ensinei as mais simples porйm suficientes para poderem utilizar-lб. Você pode ver um tutorial mais completo .
♪ Uma lista que salva o nome de todos os jogadores conectados já está definido nativamente pelo foreach. O nome da lista é 'Player'.
♪ Existem também outras inclui que você também pode criar listas e realizar as mesmas funções, basta dar uma procuradinha pelo fуrum. - Creditos: RIQUEP