30.12.2016, 00:28
(
Last edited by RiqueP; 10/08/2017 at 08:33 PM.
)
♥ Introduзгo
- * Esse tutorial й destinado para 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 muita 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 conhecem ou querem conhecer um pouco mais sobre essa biblioteca e assim aproveita-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 o for й usado.
For:
PHP Code:
// Exemplo em C#
for(int x; x < 10; ++x)
{
Console.WriteLine(x);
}
/*
Resultado
1
2
3
4
5
6
7
8
9
*/
PHP Code:
// 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
*/
- 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 sera 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).
PHP Code:#include <foreach>
PHP Code:new Iterator:MinhaLista<21>; // Haverб uma lista com 20 slots, logo o valor mбximo que se pode ter incluido na lista й 20.
PHP Code: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)
PHP Code:Iter_Remove(MinhaLista, 8); // Vai remover o valor 8 da minha lista
PHP Code:new itens = Iter_Count(MinhaLista);
printf("Minha lista tem %d itens", itens);
PHP Code:{
foreach(new i : MinhaLista)
{
if(i == 5) Iter_SafeRemove(MinhaLista, 5, i); // Vai remover da 'MinhaLista' o item que possuн o valor 5
else
{
//...
}
}
}
- 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.
PHP Code:foreach(new x : MinhaLista)
{
//...
}
- Vamos a uma aula prбtica aplicando tudo que vocк aprendeu nesse tуpico, okay ?
Vou fazer com que o loop percorra apenas os jogadores conectados.
PHP Code: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;
}
PHP Code: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;
}
-
♪ Foi uma explicaзгo bem simples, mas procurei ser bem objetivo e claro.
♪ Nгo procurei escrever de forma muito formal e provavelmente haverб erros de escrita, mas os que forem reportados vou corrigir.
♪ Qualquer dъvida estarei respondendo
♪ Existem muitas outras funзхes, mas ensinei as mais simples porйm suficientes para poderem utiliza-lб. Vocк pode ver um tutorial mais completo (Inglкs) clicando aqui.
♪ Uma lista que salva o nome de todos os jogadores conectados jб estб definida nativamente pelo foreach. O nome da lista й 'Player'.
♪ Existem tambйm outras includes que vocк tambйm poderб criar listas e realizar as mesmas funзхes, basta dar uma procuradinha pelo fуrum.