SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

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

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 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 matrizes para agilizar o desenvolvimento

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


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

    [Tutorial] Usando matrizes para agilizar o desenvolvimento Empty [Tutorial] Usando matrizes para agilizar o desenvolvimento

    Mensagem por Weslley_Script Ter 11 Abr 2023 - 14:32

    Usando matrizes para aumentar a produtividade


    Índice
    • Introdução

    • Importante

    • Matrizes: Teoria

    • Criando um sistema de GangZones domináveis


    Introdução

    Decidir fazer este tutorial porque nгo aguentava mais ver cуdigos como:
    PHP como:

    Código:
    new 
        donocasarao,
        donopista; 

    ou entгo:
    PHP como:

    Código:
    public OnPlayerEnterCheckpoint(playerid)
    {
    if (estaemtallugar)
        SetPlayerCheckpoint(...);
    if (estaemoutrolugar)
        SetPlayerCheckpoint(...);


    Mas qual o problema de cуdigos como este? Além do claro problema de manutenção (é muito trabalhoo atualizar um sistema desse), é muito complicado adicionar um novo local, são necessárias muitas linhas de código para fazer algo simples como uma rota completa de motorista, ou uma carga de caminhão. Sim, todos estes são sistemas extremamente simples de serem feitos, e se foram feitos da forma correta, é possível adicionar uma nova rota ou um novo território dominável com apenas uma linha .

    Importante

    Este tutorial é um tutorial intermediário, se você não tem nenhuma referência de o que seja uma matriz, um enum, um loop FOR, este tutorial não é pra você. Aprenda o que são os itens anteriores primeiro, ou tente a sorte lendo o tutorial. Este tutorial pressiona o que você sabepelo menos o básico de matrizes

    Matrizes: Teoria

    Talvez o código mais comum em todos os gamemodes seja a matriz/array PlayerInfo (e variantes):
    PHP como:

    Código:
    enum PlayerData
    {
        pMoney,
        pScore,
        pJob,
        ...
    }
    new PlayerInfo[MAX_PLAYERS][PlayerData]; 

    Porém poucos sabem o que de fato fazem quando criam uma matriz como esta. Uma matriz nada mais é que uma tabela . Portanto, o código acima pode ser descrito visualmente como:

    [Tutorial] Usando matrizes para agilizar o desenvolvimento 6HQox6q

    Onde para cada playerid existe um elemento do enum PlayerData.

    Porém este raciocínio, de relacionar IDs com um Enum, pode ser expandido e usado de outras formas:
    PHP como:

    Código:
    enum E_PICKUPS
    {
        modelo,
        Float:x,
        Float:y,
        Float:z
    }
    new const gPickups[][E_PICKUPS] = //As coordenadas usadas sгo aleatуrias

        {348, 0.00, 0.00, 5.00},
        {350, 1238.00, 542.00, 10.00}
    }; 

    Aqui relacionamos IDs de captadores com seus respectivos modelos e suas coordenadas X, Y e Z. Baseando-se nesta matriz, podemos criar um sistema automaticamente que cria todos os captadores declarados nesta matriz:
    PHP como:

    Código:
    CreatePickups()
    {
        for (new i = 0; i <= sizeof(gPickups) - 1; ++i)
            CreatePickup(gPickups[i][modelo], 1, gPickups[i][x], gPickups[i][y], gPickups[i][z]);


    Agora com muita calma vou explicar o que está associado. O loop FOR está percorrendo a matriz inteira, independente de seu tamanho. Por quê? Porque ele começa em 0 e vai até sizeof(gPickups) - 1, que é a última posição da matriz (ou seja, seu tamanho - 1, pois os índices começam em 0. Portanto uma matriz com SIZEOF = 5, tem a posição inicial = 0 e final = 4). Concluindo, o FOR passa por cada índice da matriz.

    O CreatePickup cria uma pickup baseada nas informações do índice da matriz atual. O que este para faz, em outras palavras, é:
    PHP como:

    Código:
    CreatePickup(gPickups[0][modelo], 1, gPickups[0][x], gPickups[0][y], gPickups[0][z]);
    CreatePickup(gPickups[1][modelo], 1, gPickups[1][x], gPickups[1][y], gPickups[1][z]); 

    Espero ter sido claro, é fundamental entender este mecanismo do FOR para continuar com o tutorial. Qualquer coisa me avise, por favor.

    Criando um sistema de GangZones domináveis

    ​​Se a lуgica dos IDs x Enum ficou clara pra vocк, nгo serб difнcil entender como este sistema serб feito. Primeiramente, vamos definir o Enum dos territórios:
    PHP como:

    Código:
    enum E_TERRITORIOS
    {
        GangZone_ID, //Nгo confundir ID do territуrio com o ID da gangzone que serб criada
        NomeTerritorio[30],
        OrgsPodemDominar[10],
        OrgDona,
        Float:MinX,
        Float:MinY,
        Float:MaxX,
        Float:MaxY,
        bool:TerritorioEmGuerra


    Acho que tudo é auto explicativo, sу vou dar uma atenção para o vetor OrgsPodemDominar. Este vetor possui 10 posições, onde cada uma delas é uma organização que pode dominar o território atual (ID atual). Nгo й obrigatуrio que todas as posiзхes sejam usadas!
    Vamos agora à declaração da matriz: (lembrando: cada linha é um território)
    PHP como:

    Código:
    new Territorios[][E_TERRITORIOS] =  //Novamente, coordenadas aleatуrias
    {
        {-1, "Pista de Skate", {5, 4, 7, 9, 10}, 0, 42.00, 45.2, 454.20, 12.3, false},
        {-1, "Favela", {5, 4, 7, 9, 10}, 0, 42.00, 45.2, 454.20, 12.3, false},
        {-1, "Casarгo", {12,  5}, 0, 42.00, 45.2, 454.20, 12.3, false},
        {-1, "Groove Street", {18, 14, 2, 6, 75}, 0, 42.00, 45.2, 454.20, 12.3, false}
    }; 

    Os próximos cуdigos farгo com que ao adicionar uma linha nesta matriz, um novo territуrio dominбvel e funcional seja criado:
    PHP como:

    Código:
    CreateTerritorios()
    {
        for (new i; i <= sizeof(Territorios) - 1; ++i)    
            Territorios[i][GangZone_ID] = GangZoneCreate(Territorios[i][MinX], Territorios[i][MinY], Territorios[i][MaxX], Territorios[i][MaxY]);
        


    Certo, a gangzone foi criada segundo a lógica anterior. Agora basta uma função para verificar se um jogador pode dominar o território, e o sistema só precisa ser adaptado em um comando:
    PHP como:

    Código:
    bool:PlayerPodeDominar(playerid, trid) //ID do territуrio, nгo da gangzone criada
    {
        //Para um player poder dominar um territуrio, uma das orgs do territуrio tem que ser a org dele. Portanto, vamos percorrer todo o vetor OrgsPodemDominar e ver se algum deles й a org do player
        for (new i; i < 10; ++i)
            if (Territorios[trid][OrgsPodemDominar][i] == PlayerInfo[playerid][pOrg])
                return true;
        return false;


    Outras funções que podem ser criadas facilmente com esta matriz, e funcionar com todo o território declarado na matriz:
    PHP como:

    Código:
    //Lembrando que trid й o ID do territуrio, nгo da gangzone criada
    bool: IsPlayerInGangZone(playerid, trid); 
    bool: EstaEmGuerra(trid); //basta retornar o valor de TerritorioEmGuerra
    ColocarEmGuerra(trid); //basta alterar o valor de TerritorioEmGuerra, e piscar a gangzone criada
    AtualizarTerritorios(playerid); //Mostra as gangzones para o playerid, com as cores da org que a domina 

    Espero ter demonstrado como as matrizes podem ser ъteis e como todo gamemode deveria aproveitá-las melhor. Um bom exemplo de gamemode que usa as matrizes de forma inteligente é o PPC Trucking, onde criar uma rota de caminhão, motorista de фnibus e piloto é extremamente simples, pois ele segue esta lógica de matrizes. Quem tem um servidor neste estilo e já se desenvolveu a estudá-lo, ouve a "mágica" que ele faz quando se altera as matrizes dele, tudo é integrado ao gamemode sem que mais coisas tenham que ser feitas. Na minha opinião, vale a pena se dedicar a adaptar seu gamemode no que for possível a este sistema, pois será mais fácil adicionar coisas nele, dar manutenção e corrigir bugs, pois uma vez atualizado, tudo que depende dele (comandos, diálogos, etc ) ficará atualizado e desbugado.


    Por favor, deem dicas para melhorar o tutorial no que for possível e deem sugestões. Obrigado.


    Creditos: Juniiro3



    [Tutorial] Usando matrizes para agilizar o desenvolvimento D07Xwqb
    [Tutorial] Usando matrizes para agilizar o desenvolvimento Yjab9HN

      Data/hora atual: Sex 17 maio 2024 - 3:24