04.08.2012, 20:38
(
Последний раз редактировалось ipsBruno; 04.08.2012 в 23:06.
)
Pegar item de uma enum
Este truque й legal para pegar o item de uma enum sem saber o nome do item
Basta fazer:
Pegar nъmeros de itens de uma enum
Este truque й legal para fazer loop em enums, de maneira bem fбcil. Й como um sizeof para enum.
Basta fazer:
Referenciar parametros
Digamos que vocк tenha:
e vocк queira apenas mudar o valor de amigo2 sem mexer no amigo1
Para isto basta referenciar o parвmetro pelo prуprio nome, use:
E o valor 3 irб para o amigo2
Declaraзгo fбcil
Quando vocк estб com preguiзa de contar quantos dados contйm em uma array para declara-la corretamente.
Como:
Basta fazer:
Limitaзхes: Neste caso nгo pode fazer elipse (...). Pois desconhece o tamanho da variбvel
tag mismatch
Em alguns casos, vocк pode facilmente resolver este erro adaptando usando tag:
Exemplo
ao usar
Darб aviso, entгo vocк faz:
e irб funcionar
Else e Operador NOT
A maioria das vezes vocк nгo dб conta, mas vocк acaba fazendo:
Quando й melhor
Й bobo, mas muita gente esquece disto. Note que o operador NOT "!" nгo foi utilizado, sendo mais rбpido
Diminuindo MAX_PLAYERS
O MAX PLAYERS da SA:MP tem valor 500. Mas tem gente que nгo tem nem 20 slots no servidor, isto й MUITO І desotimizado.
Use isto no topo do gamemode, abaixo de include a_samp
Char Arrays
Essa й outra dica interessante para poupar memуria. Em Pawn nгo tem arrays diferente de 32 bits, exceto, se usar char.
new arr[100 char];
Entгo o acesso deve ser feito da seguinte forma:
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б dito no tуpico de Slice
Static e New
Na grande maioria dos casos usar 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 mais rбpido.
Limitaзхes: O problema disto й que ela abriga sempre um ъltimo valor, entгo vocк precisa limpar a string (caso for uma array, claro) usando
Mas normalmente as funзхes da SA:MP como GetPlayerName, GetPlayerHealth, Format, jб fazem a limpeza da variбvel nelas, logo й mais otimizado usar:
do que
Loop players rбpido s/ foreach
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 acessa arrays para contar os jogadores)
Limitaзхes: Isto faz o loop inverso, do id maior para o id menor, mas na maioria das vezes nгo terб problema e й MUITO otimizado
Operador OR
Quando for checar valores mбximos ou se vбrias arrays sгo nulas, й aconselhбvel usar o operador bit a bit OR
Em vez dк
Vocк faz:
Й muito mais rбpido
Floatpower c/ 2
Caso vocк estiver fazendo
Por exemplo:
й mais otimizado fazer:
Й bastante mais otimizado. Como o prуprio Ken disse em um post.
Menos acesso nas variбveis
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 quando usar ISTO.
Exemplo lento:
Exemplo rбpido:
Ambas fazem a mesma funзхes. Mas o segundo mйtodo й mais otimizado, por nгo processar o operador "&&" e nem acessar a variбvel duas vezes
Parentese de Retorno
Outra dica interessante para quem quer poupar linha em cуdigo й fazer o parвmetro retornar o ъltimo valor tido nele:
Exemplo longo:
Exemplo curto:
Isto й, se vocк fazer
apenas o valor 4 serб imprimido, o valor 5 serб processo mas nгo imprimido.
Strings #
Se vocк й o cara que curte deixar seus cуdigos dнficeis e de chato entendimento use # para representar strings
Concatenar Strings Pre Compiladas
Para strings que nгo estгo alocadas em variбveis vocк pode "junta-las" - concatena-las fazendo:
Limpar Arrays rapidamente
Um mйtodo super rбpido para limpar strings й fazendo a copia uma a outra
Mйtodo lento:
Mйtodo rбpido
Condicionando/Colocando valor em variбveis rapidamente
Como eu disse anteriormente, colocando parкntese vocк retorna o valor do que hб dentro. Logo outro truque interessante й que vocк pode condicionar variaveis em condicional com menos instruзхes, fazendo:
Invйs de
Vocк faz:
Vбrias Condicionais x &&
Jб foi feito os testes e usando && vocк acaba fazendo mais instruзхes do que aplicando vбrias condicionais
Logo
Mйtodo lento:
Mais rбpido
stock sгo inъteis
Normalmente o pessoal nгo sabe. Mas "stock func" serve para nгo dar "unused function". Mas caso a funзгo for usada, o "unused" nгo irб ser mostrado. Logo й redundante
Logo:
Lento
Rбpido:
Checar se a string й packeada
Para checar se o cуdigo usa "packet" strings basta fazer uma coisinha simples:
Isto porque o modo correto de uso й str{0}. Quando sгo packeadas a declaraзгo correta й !"string"
Alfabeto com Elipse
Nгo posso deixar de publicar este, hehe. Fiz isto esses dias porque estava com preguiзa de fazer o alfabeto inteiro e por numa array:
--
Dicas de rjj
Igualar variбveis
Mйtodo lento:
Mйtodo rбpido
- Tutorial por Bruno da Silva. Pendente de Modificaзхes
Este truque й legal para pegar o item de uma enum sem saber o nome do item
Basta fazer:
PHP код:
enum bruno {
a,b,c,d,e
}
printf( "E enum tem %d itens", bruno:2 ); // mesmo que "c"
}
Este truque й legal para fazer loop em enums, de maneira bem fбcil. Й como um sizeof para enum.
Basta fazer:
PHP код:
enum bruno {
a,b,c,d,e
}
printf( "E enum tem %d itens", _:bruno ); // note _:bruno
}
Digamos que vocк tenha:
PHP код:
oi_amigo ( amigo1 = 0, amigo2 ) {
printf( "%d e %d ", amigo1 , amigo2 );
}
Para isto basta referenciar o parвmetro pelo prуprio nome, use:
pawn Код:
oi_amigo( .amigo2 = 3 ) ; // amigo2 referenciado
Declaraзгo fбcil
Quando vocк estб com preguiзa de contar quantos dados contйm em uma array para declara-la corretamente.
Como:
pawn Код:
new var[5] = { 1 , 2 , 3 , 4 , 5 };
pawn Код:
new var[] = { 1 , 2 , 3 , 4 , 5 };
Limitaзхes: Neste caso nгo pode fazer elipse (...). Pois desconhece o tamanho da variбvel
tag mismatch
Em alguns casos, vocк pode facilmente resolver este erro adaptando usando tag:
Exemplo
PHP код:
new Text: oi ;
PHP код:
oi = 10;
pawn Код:
oi = Text:10;
Else e Operador NOT
A maioria das vezes vocк nгo dб conta, mas vocк acaba fazendo:
pawn Код:
if(!var) {
// codigo var == 0
}
else {
// codigo var != 0
}
pawn Код:
if(var) {
// codigo var != 0
}
else {
// codigo var == 0
}
Diminuindo MAX_PLAYERS
O MAX PLAYERS da SA:MP tem valor 500. Mas tem gente que nгo tem nem 20 slots no servidor, isto й MUITO І desotimizado.
Use isto no topo do gamemode, abaixo de include a_samp
pawn Код:
#if defined MAX_PLAYERS
#undef MAX_PLAYERS
#endif
#define MAX_PLAYERS 20
Essa й outra dica interessante para poupar memуria. Em Pawn nгo tem arrays diferente de 32 bits, exceto, se usar char.
new arr[100 char];
Entгo o acesso deve ser feito da seguinte forma:
PHP код:
arr{0}
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б dito no tуpico de Slice
Static e New
Na grande maioria dos casos usar 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 mais rбpido.
Limitaзхes: O problema disto й que ela abriga sempre um ъltimo valor, entгo vocк precisa limpar a string (caso for uma array, claro) usando
PHP код:
string[0] = 0;
// caso nгo for
valor = 0;
pawn Код:
static playername[MAX_PLAYER_NAME];
GetPlayerName( playerid, playername, MAX_PLAYER_NAME );
pawn Код:
new playername[MAX_PLAYER_NAME];
GetPlayerName( playerid, playername, MAX_PLAYER_NAME );
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 acessa arrays para contar os jogadores)
pawn Код:
static i ; // static mais otimizado, como disse antes
for( i = GetMaxPlayers() - 1; i > -1; --i) {
if(IsPlayerConnected(i)) {
// code
}
}
Operador OR
Quando for checar valores mбximos ou se vбrias arrays sгo nulas, й aconselhбvel usar o operador bit a bit OR
Em vez dк
pawn Код:
if( var1 == 0 && var2 == 0 && var3 == 0)
pawn Код:
if( var1 | var2 | var3 == 0)
Floatpower c/ 2
Caso vocк estiver fazendo
Por exemplo:
pawn Код:
floatpower(2, 40);
pawn Код:
1 << 40
Menos acesso nas variбveis
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 quando usar ISTO.
Exemplo lento:
pawn Код:
// caso 0 for menor que var e var for menor que 9
if(0 >= var && var <= 9)
pawn Код:
// caso 0 for menor que var. var for menor que 9
if(0 <= var <= 9)
Parentese de Retorno
Outra dica interessante para quem quer poupar linha em cуdigo й fazer o parвmetro retornar o ъltimo valor tido nele:
Exemplo longo:
pawn Код:
format(string, 12, "%d", 15);
new var[] = string;
pawn Код:
new var[] = ( format(string, 12, "%d", 15), string );
PHP код:
printf("%d", (5,4));
Strings #
Se vocк й o cara que curte deixar seus cуdigos dнficeis e de chato entendimento use # para representar strings
PHP код:
print( # oi amigo );
Para strings que nгo estгo alocadas em variбveis vocк pode "junta-las" - concatena-las fazendo:
PHP код:
printf("oi bruno da" " ips team");
Um mйtodo super rбpido para limpar strings й fazendo a copia uma a outra
Mйtodo lento:
pawn Код:
for(new i ; i != sizeof arrayaserlimpa ; i++) {
arrayaserlimpa [i] = 0;
}
pawn Код:
new arrayaserlimpa[200] = {1, ...};
new arrreset[ sizeof arrayaserlimpa ];
arrayaserlimpa = arrreset;
Como eu disse anteriormente, colocando parкntese vocк retorna o valor do que hб dentro. Logo outro truque interessante й que vocк pode condicionar variaveis em condicional com menos instruзхes, fazendo:
Invйs de
pawn Код:
cmdindex = strfind(string, " ");
if(cmdindex != -1) {
// stuff
}
pawn Код:
if( ( cmdindex = strfind(string, " ") ) != -1) {
// stuff
}
Jб foi feito os testes e usando && vocк acaba fazendo mais instruзхes do que aplicando vбrias condicionais
Logo
Mйtodo lento:
pawn Код:
if(var1 && !var2) {
//stuff
}
pawn Код:
if(var1) {
if(!var2) {
//stuff
}
}
Normalmente o pessoal nгo sabe. Mas "stock func" serve para nгo dar "unused function". Mas caso a funзгo for usada, o "unused" nгo irб ser mostrado. Logo й redundante
Logo:
Lento
pawn Код:
stock func() {
}
pawn Код:
func() {
}
Checar se a string й packeada
Para checar se o cуdigo usa "packet" strings basta fazer uma coisinha simples:
pawn Код:
if ( str [ 0 ] > 0xff ){
// is packed
}
Alfabeto com Elipse
Nгo posso deixar de publicar este, hehe. Fiz isto esses dias porque estava com preguiзa de fazer o alfabeto inteiro e por numa array:
PHP код:
new alfabeto [ 1 + ('z' - 'a') ] = { 'a', 'b', ...} ;
--
Dicas de rjj
Igualar variбveis
Mйtodo lento:
PHP код:
x = 2
y = 2
PHP код:
x = y = 2;
- Tutorial por Bruno da Silva. Pendente de Modificaзхes