SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 13 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Usando y_iterate/foreach

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11625
    Moedas : 1032881
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Usando y_iterate/foreach Empty [Tutorial] Usando y_iterate/foreach

    Mensagem por Weslley_Script Qui 30 Mar 2023 - 8:42

    :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
      */ 
      Para cada:
      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
      */ 
      Você deve estar se perguntando, "Como isso pode me beneficiar?". Você pode montar listas em seu servidor como por exemplo: jogadores que estão gerados, jogadores que estão mortos, veículos criados, veículos que pertencem aos policiais, etc. mais precisa usar o MAX_PLAYERS em seu loop. Como ele não vai percorrer o ID dos jogadores que não estão logados você vai economizar mais tempo no loop.


    :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> 
      2° Criando uma lista: A segunda coisa a se fazer é declarar uma variável para a identificação de sua lista. As variáveis ​​devem ser declaradas com pré-fixo 'Iterator:' e devem possuir entre <> o valor máximo dos itens que vão ter na lista +1.
      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. 
      3є Adicionando itens: O terceiro passo após a lista ser criada é adicionar coisas a ela. Você pode adicionar itens em sua lista usando a função 'Iter_Add'.
      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) 
      4° Removendo itens: Caso você queira remover qualquer item que esteja em sua lista, basta apenas usar a função 'Iter_Remove'.
      Código PHP:
      Código:
      Iter_Remove(MinhaLista, 8); // Vai remover o valor 8 da minha lista 
      5° Total de itens: Você também pode ver quantos itens tem na sua lista usando a função 'Iter_Count'.
      Código PHP:
      Código:
      new itens = Iter_Count(MinhaLista);
      printf("Minha lista tem %d itens", itens); 
      * 6є Removendo itens em um loop: Se usarmos a função Iter_Remove no meio de loop, vai acontecer que alйm de removedor o item da lista, o loop serб parado. Porém, existe uma função que pode remover o item e o loop continuar percorrendo normalmente ignorando esse item. Usando um divertido 'Iter_SafeRemove'.
      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
              {
                  //...
              }
          }

      O último parâmetro da função é uma referência a variável do loop, no caso ali em cima, a variável i .


    :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) 
      {
          //...

      Não existe muito o que falar, a sintaxe é totalmente clara se você já sabe usar um loop. Se você não sabe usar o loop, recomendo esse tutorial.


    :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;

      Vou fazer também com que o loop percorra todos os admins conectados.
      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



    [Tutorial] Usando y_iterate/foreach D07Xwqb
    [Tutorial] Usando y_iterate/foreach Yjab9HN

      Data/hora atual: Sex 8 Nov 2024 - 3:16