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] Dicas e Truques e Otimizações

    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] Dicas e Truques e Otimizações Empty [Tutorial] Dicas e Truques e Otimizações

    Mensagem por Weslley_Script Dom 2 Abr 2023 - 13:10

    [size=32]Pegar item de uma enum[/size]

    Este truque é legal para pegar o item de uma enum sem saber o nome do item

    Basta fazer:
    PHP como:

    Código:
    enum bruno {
    a,b,c,d,e
    }
        printf( "E enum tem %d itens", bruno:2 ); // mesmo que "c"
        


    [size=32]Pegar números de itens de uma enum[/size]

    Este truque é legal para fazer loop em enums, de maneira bem fácil. É como um sizeof para enum.

    Basta fazer:
    PHP como:

    Código:
    enum bruno {
    a,b,c,d,e
    }
        printf( "E enum tem %d itens", _:bruno ); // note _:bruno
        


    [size=32]Referenciar parametros[/size]

    Digamos que você tenha:
    PHP como:

    Código:
    oi_amigo ( amigo1 = 0, amigo2 ) {
        printf( "%d e %d ", amigo1 , amigo2 );
        


    e você quer apenas mudar o valor de amigo2 sem mexer no amigo1

    Para isto basta referenciar o parâmetro pelo próprio nome, use:
    peão Код:
    oi_amigo ( .amigo2 =  3  ) ; // amigo2 referenciado

    E o valor 3 irá para o amigo2

    [size=32]Declaraзгo fбcil[/size]
    Quando vocк estб com preguiзa de contar quantos dados contйm em uma array para declara-la corretamente.

    Como:
    peão Код:
    nova var [ 5 ]  =  {  1 , 2 , 3 , 4 , 5  } ;

    Basta fazer:
    peão Код:
    nova var [ ]  =  {  1 , 2 , 3 , 4 , 5  } ;


    Limitações : Neste caso, não pode fazer elipse ( ... ). Pois desconhece o tamanho da



    [size=32]incompatibilidade de tag[/size]
    variável Em alguns casos, você pode facilmente resolver este erro adaptando usando tag:

    Exemplo
    PHP como:

    Código:
    new Text: oi ; 

    ao usar
    PHP como:

    Código:
    oi = 10; 

    Dará aviso, entгo você faz:
    peão Код:

    Código:
    oi =  Texto : 10 ;


    e irá funcionar [Tutorial] Dicas e Truques e Otimizações Razz

    [size=32]Else e Operador NOT[/size]
    A maioria das vezes você nгo dб conta, mas vocк acaba fazendo:
    peão Код:

    Código:
    [size=14][size=13]if ( ! var )  {
    // código var == 0
    }

    else  {
    // código var != 0
    }[/size][/size]

    Quando é melhor
    peão Код:

    Código:
    if ( var )  {
    // codigo var != 0
    }

    else  {
    // codigo var == 0
    }


    É bobo, mas muita gente esquece disto. Observe que o operador NÃO "!" nгo foi utilizado, sendo mais rбpido [Tutorial] Dicas e Truques e Otimizações Razz

    [size=32]Diminuindo MAX_PLAYERS[/size]
    O MAX PLAYERS da SA:MP tem valor 500. Mas tem gente que nгo tem nem 20 slots no servidor, estй MUITO І desotimizado.

    Use isto no topo do gamemode, abaixo de include a_samp
    peão Код:

    Código:
    #if definido MAX_PLAYERS
        #undef MAX_PLAYERS
    #endif

    #define MAX_PLAYERS 20


    [size=32]Char Arrays[/size]
    Essa é outra dica interessante para economizar memória. Em Pawn não tem arrays diferentes de 32 bits, exceto, se usar char .

    novo arr[100 caracteres];

    Então o acesso deve ser feito da seguinte forma:
    PHP como:

    Código:
    arr{0} 

    Cada parte da array vai ocupar 4 vezes a menos que as arrays normais

    Limites : O problema disto é que o valor armazenado nгo pode ser maior que 255. Mas isto é suficiente para bool, ou textos, por exemplo.

    Como já disse no tópico de Slice

    [size=32]Static e New[/size]
    Na grande maioria dos casos usa static é mais viável que new. Porque?
    static é criada uma vez, e nгo é criada novamente, assim nгo precisa criar a cada execuзгo do cуdigo tornando-se mais rбpido.

    Limitações : O problema disto é que ela abriga sempre um último valor, então você precisa limpar uma string (caso for uma array, claro) usando
    PHP como:

    Código:
    string[0] = 0;
    // caso nгo for
    valor = 0; 

    Mas normalmente as funções da SA:MP como GetPlayerName, GetPlayerHealth, Format, já fazem a limpeza da variável nelas, logo é mais otimizado usar:
    peão Код:

    Código:
    nome de jogador estático [ MAX_PLAYER_NAME ] ;
    GetPlayerName ( playerid, playername, MAX_PLAYER_NAME ) ;


    faça o que
    peão Код:

    Código:
    novo nome de jogador [ MAX_PLAYER_NAME ] ;
    GetPlayerName ( playerid, playername, MAX_PLAYER_NAME ) ;


    [size=32]Loop players rápido s/ foreach[/size]
    Com este código você deixa o loop em jogadores mais rápido, inclusive mais rápido que foreach, se estiver com slots praticamente lotado (porque este método nгo acessou arrays para contar os jogadores)
    peão Код:

    Código:
    i estático ;  // static mais otimizado, como disse antes
    for ( i = GetMaxPlayers ( )  -  1 ; i >  - 1 ; -- i )  {
        if ( IsPlayerConnected ( i ) )  {
            // code
        }
    }


    Limitações: Isto faz o loop inverso, do id maior para o id menor, mas na maioria das vezes não tem problema e é MUITO otimizado

    [size=32]Operador OR[/size]
    Quando para checar valores máximos ou se várias matrizes são nulas, é aconselhável usar o operador bit a bit OU

    Em vez dê
    peão Код:

    Código:
    if ( var1 ==  0  && var2 ==  0  && var3 ==  0 )


    Você faz:
    peão Код:

    Código:
    if ( var1 | var2 | var3 ==  0 )


    É muito mais rápido

    [size=32]Floatpower c/ 2[/size]
    Caso você esteja fazendo

    Por exemplo:
    peão Код:

    Código:
    floatpower ( 2 , 40 ) ;


    é mais otimizado:
    peão Код:

    Código:
    1  <<  40


    É bastante mais otimizado. Como o prуprio Ken disse em um post.

    [size=32]Menos acesso nas variáveis[/size]
    ​​Essa dica, bem como a do OR. É interessante para quem está acessando a variável mais de uma vez sem necessidade, mas preste atenção ao usar ISTO.

    Exemplo lento:
    peão Код:
    // caso 0 for menor que var e var for menor que 9


    Código:
    if ( 0  >= var && var <=  9 )


    Exemplo rápido:
    peão Код:
    // caso 0 for menor que var. var para menor que 9

    Código:
    if ( 0  <= var <=  9 )


    Ambas fazem a mesma diversão. Mas o segundo método é mais otimizado, por nгo processador o operador "&&" e nem acessa a variбvel duas vezes


    [size=32]Parentese de Retorno[/size]
    Outra dica interessante para quem quer economizar linha em cуdigo й fazer o parвmetro retornar o ъltimo valor tido nele:

    Exemplo longo:
    peão Код:

    Código:
    formato ( string, 12 , "%d" , 15 ) ;
    nova var [ ]  = string;


    Exemplo curto:
    peão Код:

    Código:
    new var [ ]  =  (  formato ( string, 12 , "%d" , 15 ) , string ) ;


    Isto é, se você faz
    PHP como:

    Código:
    printf("%d", (5,4)); 

    apenas o valor 4 serб impresso, o valor 5 serб processo mas nгo impresso.


    [size=32]Strings #[/size]
    Se você é o cara que curte deixe seus cуdigos dнficeis e de chato entenda use # para representar strings
    PHP como:

    Código:
    print( # oi amigo ); 

    [size=32]Concatenar Strings Pre Compiladas[/size]

    Para strings que nгo estгo alocadas em variбveis vocк pode "junta-las" - concatena-las fazendo:
    PHP como:

    Código:
    printf("oi bruno da"  " ips team"); 

    [size=32]Limpar Arrays rapidamente[/size]
    Um método super rápido para limpar strings fazendo a cópia uma a outra


    Método lento:
    peão Код:

    Código:
    for ( new i ; i !=  sizeof arrayaserlimpa ; i ++ )  {
         arrayaserlimpa [ i ]  =  0 ;
    }


    Método rápido
    peão Код:

    Código:
    new arrayaserlimpa [ 200 ]  =  { 1 ,... } ;

    novo arrreset [  sizeof arrayaserlimpa ] ;

    arrayaserlimpa = arrreset;


    [size=32]Condicionando/Colocando valor em variáveis ​​rapidamente[/size]

    Como eu disse anteriormente, colocando parêntese você retorna o valor do que há dentro. Logo outro truque interessante é que você pode condicionar variáveis ​​em condicional com menos instruções, fazendo:

    Invйs de
    peão Код:

    Código:
    cmdindex =  strfind ( string, "" ) ;

    if ( cmdindex !=  - 1 )  {
     // coisas
    }


    Você faz:
    peão Код:

    Código:
    if (  ( cmdindex =  strfind ( string, " " )  )  !=  - 1 )  {
     // coisas
    }


    [size=32]VÁRIAS CONDICIONAIS x &&[/size]
    JÁ foi feito os testes e usando && você acaba fazendo mais instruções do que aplicando VÁRIAS CONDICIONAIS

    Logo

    Método lento:
    peão Код:

    Código:
    if ( var1 &&  ! var2 )  {
      // coisas
    }


    Mais rápido
    peão Код:

    Código:
    if ( var1 )  {
       if ( ! var2 )  {
          // coisas
       }
    }


    [size=32]stock sгo inъteis[/size]


    Normalmente o pessoal nгo sabe. Mas " stock func" serve para nгo dar "unused function". Mas caso a função seja usada, o "não usado" não será exibido. Logo :copyright: redundante

    Logo:

    Lento
    peão Код:

    Código:
    função de estoque ( )  {
    }


    Rápido:
    peão Код:

    Código:
    função ( )  {
    }



    [size=32]Checar se a string é packeada[/size]

    Para checar se o cуdigo usa "packet" strings basta fazer uma coisinha simples:
    peão Код:

    Código:
    if  ( str [  0  ]  > 0xff ) {
     // é compactado
    }


    Isto porque o modo correto de uso é str{0}. Quando são embalados a declaração correta é "string"

    [size=32]Alfabeto com Elipse[/size]

    Nгo posso deixar de publicar este, hehe. Fiz isso esses dias porque estava com a preguiçã de fazer o alfabeto inteiro e por numa array:
    PHP como:

    Código:
    new alfabeto [ 1 + ('z' - 'a') ] = { 'a', 'b', ...}  ; 

    [Tutorial] Dicas e Truques e Otimizações Mrgreen

    --

    Dicas de rjj


    [size=32]Igualar variáveis[/size]

    ​​Método lento:
    PHP como:

    Código:
    x = 2
    y = 2 

    Método rápido
    PHP como:

    Código:
    x = y = 2; 


    - Tutorial por Bruno da Silva. Pendente de Modificaзхes



    [Tutorial] Dicas e Truques e Otimizações D07Xwqb
    [Tutorial] Dicas e Truques e Otimizações Yjab9HN

      Data/hora atual: Sex 8 Nov 2024 - 0:56