[Ajuda] #define
#1

Galera
quero entender esses defines
serб que alguйm pode/consegue me ajudar?

POR FAVOR, NГO QUERO SABER APENAS O QUE ELES FAZEM
E SIM COMO ELES FORAM FEITOS...

PHP код:
#define YesNo(%0) ((%0) == (1)) ? ("Yes") : ("No")
#define Answer(%0,%1,%2) (%0) == (1) ? (%1) : (%2)
#define IsPlayerInHouse(%0,%1) ((GetPVarInt(%0, "LastHouseCP") == (%1)) && (IsInHouse{%0} == (1))) ? (1) : (0)
#define ShowInfoBox(%0,%1,%2) do{CMDSString = ""; format(CMDSString, 1000, %1, %2); ShowPlayerDialog(%0, HOUSEMENU-1, DIALOG_STYLE_MSGBOX, INFORMATION_HEADER, CMDSString, "Close", "");}while(FALSE)
#define GameTextEx(%0,%1,%2,%3,%4) do{CMDSString = ""; format(CMDSString, 1000, %3, %4); GameTextForPlayer(%0, CMDSString, %1, %2);}while(FALSE)
#define Loop(%0,%1,%2) for(new %0 = %2; %0 < %1; %0++)
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define HOLDING(%0) \
    
((newkeys & (%0)) == (%0))
    
#define PRESSED(%0) \
    
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
#define RELEASED(%0) \
    
(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0))) 
bom, coloquei todos que eu conheзo ae... Vamos аs perguntas:


1) pergunta: em:
PHP код:
#define HOLDING(%0) \
    
((newkeys & (%0)) == (%0)) 
pq tem a "\" dps do "#define PRESSED(%0)" ?

2) pergunta: em
PHP код:
#define ShowInfoBox(%0,%1,%2) do{CMDSString = ""; format(CMDSString, 1000, %1, %2); ShowPlayerDialog(%0, HOUSEMENU-1, DIALOG_STYLE_MSGBOX, INFORMATION_HEADER, CMDSString, "Close", "");}while(FALSE) 
o que quer dizer o "while(FALSE)" ?
(se for o obvio, qual seria a funзгo desta macro?"


3) pergunta: em
PHP код:
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 
pq o "#" em "if ((strcmp((%3)[1], #%1, true, (%2)) == 0)" ??
Reply
#2

#define й uma diretiva, com uma diretiva й possнvel emitir uma ordem direta ao compilador, a diretiva define й usada frequentemente para setar cores e valores, o que poderia ser facilmente setado com o const.
As diretivas аs quais vocк se refere sгo chamadas de macro, um macro pode servir pra muitas coisas de acorco com o pra que ele foi programado, vocк pode por exemplo traduzir uma funзгo ou criar novas possibilidades para ela.
#define DarArma GivePlayerWeapon < com isto, dararma serб equivalente а giveplayerweapon, ou seja, terб o mesmo papel, um macro geralmente executa uma sйrie de funзхes ordenadas separadas pelo vнrgula e/ou laзos ( )
Vou usar como exemplo o primeiro macro citado por vocк:
pawn Код:
#define YesNo(%0) ((%0) == (1)) ? ("Yes") : ("No")
O simbolo de interrogaзгo ? й um operador condicional, com este macro й criado a funзгo YesNo(valor); o %0 й o primeiro parametro, com isto: ((%0) == (1)) Serб verificado se o valor obtido no primeiro parвmetro que й %0 й igual == а 1, caso seja verdadeiro, true com o operador condicional isso retornarб а ("Yes"), caso contrбrio, retornarб а ("No").

Vocк pode por exemplo expandir uma funзгo usando macro, veja 2 macros que criei:

pawn Код:
#define VDaOrg(%0,%1,%2) GetPlayerVehicleID(playerid) >= %0[%1] && GetPlayerVehicleID(playerid) <= %0[%2]
Com este macro serб possнvel verificar se o veнculo que o player estб й o mesmo veнculo setado em uma variбvel com array.
Por exemplo:
pawn Код:
new CarrosDoJosma[3];
CarrosDoJosma[1] = CreateVehicle(...);
Eu poderia setar nele:
pawn Код:
if(VDaOrg(CarrosDoJosma, 0, 3))
E entгo ele verificaria se eu estou em algum carro setado nas arrays de 0 а 3 da variбvel CarrosDoJosma utilizando para isso o GetPlayerVehicleID presente no macro.
Veja este outro exemplo:
pawn Код:
#define CriarUmaExplosao(%0,%1,%2,%4,%5) CreateExplosion(%0, %1, %2, %4, %5), CreateExplosion(%0+5, %1+5, %2, %4, %5), CreateExplosion(%0-5, %1-5, %2, %4, %5), CreateExplosion(%0-10, %1-10, %2, %4, %5), CreateExplosion(%0+10, %1+10, %2, %4, %5)
Й criada uma nova funзгo com o nome de "CriarUmaExplosao", os parвmetros sгo:
Код:
%0 = X
%1 = Y
%2 = Z
%4 = Estilo de explosгo
%5 = Raio de alcance.
Repare que o primeiro parвmetro do CriarUmaExplosгo й nomeado de %0 e estб sendo usado em todos os CreateExplosion seguidos dele, ou seja, se o primeiro parвmetro й a coordenada X, todas as outras funзхes criarгo a explosгo na coordenada X, porem, se vocк notar nesta coordenada estб sendo incrementada ou decrementada valores, como: %1-10 ele criarб a explosгo na coordenada Y - 10 pontos, em resumo juntando tudo este macro criarб uma explosгo na coordenada principal, X, Y e Z, e outras 4 explosхes ao seu redor incrementando ou decrementando valores.

Espero nгo ter deixado nenhuma lacuna, mas acho que deixei to com sono kk.
Reply
#3

Pergunta: "pq tem a "\" dps do "#define PRESSED(%0)" ?"

Resposta: Й para continuar na linha de baixo!(usado para organizar o script!)
EX:
PHP код:
#define HOLDING(%0) \ 
    
((newkeys & (%0)) == (%0))
// й igual a..
#define HOLDING(%0) ((newkeys & (%0)) == (%0)) 
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)