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] Compactação & Melhorias de Codigo!

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


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

    [Tutorial] Compactação & Melhorias de Codigo! Empty [Tutorial] Compactação & Melhorias de Codigo!

    Mensagem por Weslley_Script Ter 28 Mar 2023 - 11:38

    [Tutorial] Compactação & Melhorias de Codigo! SmileBom dia galera!

    venho hoje com mais um tutorial simples, mais do coraзгo, e vai ajudar muito vocкs!

    INTRODUЗГO:
    Bom muito de vocкs ja foram fazer alguma logica, simples pode ser atй de um comando, mas ficou aquele cуdigo enorme e monstro que atй pode ser feio, alguns ainda nгo sabe diminuir e otimizar seu codigo, para ficar algo bonito organizado.
    NOTAS:
    • eu recomendo que vocкs sabem pelo-menos o basico de ScanF, para eu nгo precisar explicar!


    • por favor, se forem usar em outro lugar este tutorial, coloquem os crйditos!


    • Se vocкs acharem coisa parecidas, por favor me perdoem, eu nгo copiei de ninguйm, fiz esta explicaзгo sozinho,deve ser alguйm que teve a ideia muito parecida!


    • se forem mostrar para alguйm, me marque nos crйditos, eu ficarei muito feliz por isso!


    • se vocкs melhorarem o cуdigo, nгo guarde para si! coloque aqui para compartilhar seu conhecimento! ^^


    O QUE VAMOS APRENDER?
    A deixar o seu codigo, grotescamente menor, organizado e otimizado, sem perder a funcionalidade, e talvez atй ganhar mais desempenho [Tutorial] Compactação & Melhorias de Codigo! Wink



    PRATICAS & CODE:

    Situaзгo 1:
    Vocк fez um comando de teleporte para esta logado na rcon, porem este codigo ta muito grande e estranho,
    dificil de entrepretar...
    PHP код:

    Código:
        if(strcmp(cmd, "/ir", true) == 0)
        {
            if(pAdmin[playerid] > 0) //N1
            {
                new plid, Float:X, Float:Y, Float:Z;
                if(sscanf(cmdtext, "s[4]d", cmd, plid))//N2
                {
                    SendClientMessage(playerid, Vermelho, "Digite: /ir [id]");
                    return 1;
                }
                if(IsPlayerConnected(plid))//N3
                {
                    GetPlayerPos(plid, X, Y, Z);
                    SetPlayerInterior(playerid, GetPlayerInterior(plid));
                    if(IsPlayerInAnyVehicle(playerid))//N4
                    {
                        SetVehiclePos(GetPlayerVehicleID(playerid), X+2, Y+2, Z);
                        PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
                    }
                    else
                    {
                        SetPlayerPos(playerid, X+2, Y+2, Z);//N5
                    }
                    format(string, sizeof(string), "O(A) ADM %s (%d) foi atй sua posiзгo para ajuda-lo(a)!", GetPlayerNameEx(playerid), playerid);
                    SendClientMessage(plid, tcadm, string);
                }
                else
                {
                    SendClientMessage(playerid, Vermelho, "Jogador Nгo Conectado!");//N3
                }
            }
            else
            {
                SendClientMessage(playerid, Vermelho, "sem permissгo!");//N1
            }
            return 1;
        } 

    nуs podemos retirar algumas chaves e mover coisas de lugar!
    PHP код:

    Código:
        if(strcmp(cmd, "/ir", true) == 0)
        {
            new plid, Float:X, Float:Y, Float:Z;
            if(pAdmin[playerid] == 0)                return SendClientMessage(playerid, Vermelho, "sem permissгo!");//N1
            if(sscanf(cmdtext, "s[4]u", cmd, plid))    return SendClientMessage(playerid, Vermelho, "Digite: /ir [nick/id]");//N2
            if(!IsPlayerConnected(plid))                return SendClientMessage(playerid, Vermelho, "Jogador Nгo Conectado!");//N3
            GetPlayerPos(plid, X, Y, Z);
            SetPlayerInterior(playerid, GetPlayerInterior(plid));
            if(IsPlayerInAnyVehicle(playerid)) SetVehiclePlayerPos(playerid, X,Y,Z);//N4
            else SetPlayerPos(playerid, X+2, Y+2, Z);//N5
            
            format(string, sizeof(string), "O(A) ADM %s (%d) foi atй sua posiзгo para ajuda-lo(a)!", GetPlayerNameEx(playerid), playerid);
            return SendClientMessage(plid, tcadm, string);    
        } 

    PHP код:

    Código:
    SetVehiclePlayerPos(playerid, Float:X,Float:Y,Float:Z)
    {
       SetVehiclePos(GetPlayerVehicleID(playerid), X+2, Y+2, Z);
       PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);//N4 


    Quote:


    N1->Antes: sу executava a funзгo, se fosse admin, se nгo, aparecia uma mensagem sem permissгo!
    N1->Depois: agora se nгo for admin, mostra a mensagem e cancela o comando, caso for, roda diretamente o CODE!
    N1->Conclusгo: Pode melhorar um pouco do desempenho, e retirou uma parte inutil, e separada do codigo, alem de resumir 7 linhas para 1!

    N2->Antes: Consumia muitas linhas de codigo, e sу podia teleportar para determinado ID! (aceitava sу inteiros
    N2->Depois: Ficou mais compactado, alem de agora aceita NICK ou ID do jogador a se teleportado ("d"-> inteiros | "u"-> Inteiros ou nick que sera convertido para id inteiro)
    N2->Conclusгo: Melhorou a funcionalidade, alem de que agora o codigo foi resumido de 4 linhas para 1!

    N3->Antes: Sу executava a funзгo se o player estive-se Conectado, se nгo, aparecia uma mensagem sobre o jogador nгo estar online!
    N3->Depois: O codigo funicona normalmente, caso o player nгo estiver online, exibe a mensagem e cancela o comando!
    N3->Conclusгo: Pode melhorar um pouco do desempenho, e retirou muitas linhas desnecessarias, alem de resumir junto com N4 & N5 de 21 linhas para 5!

    N4->Antes: Consumia grande espaзo, mesmo sendo funзoes de nome pequeno e da mesma coisa!
    N4->Depois: Ficou tudo na mesma linha, entre { } para que ler as 3 funзхes na mesma linha, e assim o espaзo ficou bem mais aproveitado!
    N4->Conclusгo: com isso o codigo deu uma melhorada monstra, e pode reduzir 5 linhas para 1!
    N4->Motivo:As 3 funзхes sгo respectivas do teleporte, entгo desde que vocк tenha pequenas funзхes de mesmo objetivo, vocк pode unilas!

    N4->Alteraзгo:resolvi separar a funзгo, por que os bonzinhos, se sentirгo muito ofendido com 2 linhas em uma, e comeзaram a difamar o tutorial!

    N5->Antes: Um abrimento e fechamento de chaves desnecessarias, e um retorn do inteiro 1, com um grande disperdicio de espaзo!
    N5->Depois: Como existe uma funзгo sу vocк nгo precisa de { } em sua funзгo, vocк pode simplesmente colocar na frente, que vai ser intepetrado como funзгo de determinada condiзгo.

    NOFF-> SendClientMessage(...): Return Values:
    1: The function executed successfully. Success is reported when the string is over 144 characters, but the message won't be sent.
    0: The function failed to execute. The player is not connected.
    isto й como o player deu o comando entгo ele deve estбr online, e ira retornar 1, que no caso nгo mostra-ra a mensagem: "Server UNKNOWN Command"
    Situaзгo 2:
    Vocк fez estб fazendo algo que precisa saber arma que o player estб segurando, pode ser um antixiter para kicka-lo talvez
    mas tome cuidado com o jeito que for fazer.
    PHP код:

    Código:
    //jeito errado:
    if(GetPlayerWeapon(playerid) == ... || GetPlayerWeapon(playerid) == ... || GetPlayerWeapon(playerid) == ...) 

    Bom, espero que vocк tenha percebido o erro, pode afetar muito no desempenho, e desperdicar muita banda & memoria nesta situaзгo
    PHP код:

    Código:
        //jeito correto:
        new arma = GetPlayerWeapon(playerid); 
        if(arma == ... || arma == ... || arma == ...) 

    Quote:


    N->Antes: vocк estavб testando requesitando muitas vezes a mesma coisa em uma condiзгo, entгo recebia muitos pacotes duplicados.
    N->Depois: agora estб reduzido o consumo de banda, pуs й feito somente uma vez a captaзгo da arma do jogador
    Situaзгo 3:
    String й algo delecidado, deve se ter cuidado com ela, й o principal viгo do server mal otimizado, onde um simples numero, pode causar um delay de quase 1 segundo, й imporante sempre estar tudo bem planejado e calculado, para desfrutar do melhor.
    PHP код:

    Código:
    //jeito ruim
    stock GetPlayerNameEx(playerid)
    {
        new playerName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playerName, sizeof(playerName));
        return playerName;


    Bom, algo desnessario captar mais de 1 vez o nick do jogador, visto que ele nгo pode alterar nome pelo client, somente pelo servidor,
    no caso fazer 1 requesiгo e armazenar o valor seria melhor, e vocк pode alterar o nome, em conjuto com o Sv....
    PHP код:

    Código:
    //corretamente
    new nome[MAX_PLAYERS][MAX_PLAYER_NAME];  
    public OnPlayerConnect(playerid)  
    {  
         GetPlayerName(playerid,nome[playerid],24);  
         return 1;   


    Quote:


    N->Antes: vocк estavб uma requisгo que iria sempre ser a mesma coisa, e perdendo muito memoria, pois string sгo vilгo nisso.
    N->Depois: agora vocк solicia somente uma vez o nick do jogador, e mantem armazendo captar quando precisar, com isso todo o GM agradece, por causa q o nome do jogador й muito utilizado em todo ele!

    Quote:

    Originally Posted by RazorGuigo
    [Tutorial] Compactação & Melhorias de Codigo! Viewpost
    Se vocкs gostaram disso, me avisem que eu posso trazer mais situaзхes!
    CREDITOS:
    RazorG: Situação 1
    Jelly23: Situação 2 & 3



    [Tutorial] Compactação & Melhorias de Codigo! D07Xwqb
    [Tutorial] Compactação & Melhorias de Codigo! Yjab9HN

      Data/hora atual: Qui 30 maio 2024 - 21:18