new string[12] = "Salut à tous";//12 cell 48 bytes
new string[12 char] = !"Salut à tous";//3 cell 12 bytes
Comme on peut le voir d'après les commentaires (code original de Y_Less), le string compressé est 4 fois plus petit.time = GetTickCount();
Il en va ainsi pour toutes les variables,new Float:x,nb,string[128],string2[64],Float:y,maVar;
//les expressions suivantes sont fausses:
x=nb;//type de variable différent
string = string2//longueur de string différent
maVar = y;//type différent
y=string;//type différent
//Les expressions suivantes sont vraies:
x=maVar;//deux entiers
x=y;//deux float
format(string,sizeof(string),"%s",string2);//ici on change les caractère de string pour devenir ceux de string2, du moins en partie (car string plus long que string2)
nb = string[34];//comme l'on prend seulement le 34e caractère, il s'agit d'un nombre entier tout comme nb, donc aucun problème ici
maVar=floatround(y);//on arrondi le nombre à virgule, donc on obtient un entier
new int1 = 3;
new int2 = 45;
new int3 = 3;
if(int1 == 3)//on compare avec une valeur constante
{
//le code suivant sera exécuté
}
if(int2 == 34)
{
//le code suivant ne sera pas exécuté (int2 n'égale pas 45)
}
if(int1 == int3)//on compare les variables entre eux
{
//le code suivant sera exécuté
}
if(int2 == int3)
{
//le code suivant ne sera pas exécuté
}
if(GetPlayerVehicleID == int2)//ici on compare la valeur retourné par la fonction et la variable
{
//le code suivant sera peut-être exécuté, dépendant de la valeur retournée par la fonction
}
new Float:float1 = 34.3453;
new Float:float2 = 456.5461;
new Float:float3 = 34.3453;
new Float:x,Float:y,Float:z;
GetPlayerPos(23,x,y,z);//on récupère la position du joueur numéro 23
if(float1 == float3)//on compare les deux variable
{
//ce code sera exécuté
}
if(float2 == 345.231)//compare une variable à virgule avec un nombre à virgule constant
{
//ce code ne sera pas exécuté
}
if(float2 == y)/on compare le y du GetPlayerPos avec la float2
{
//ce code peut être exécuté selon la position du joueur 23
}
new variable = 857;
if(variable & 16)..//si la variable à le 4e bit à 1...
stock IsImpair(Number)
{
return number & 1;
}
#define IsImpair(%0) %0 & 1
if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))....//ce code ne s'exécutera que si le joueur est connecté ET dans un véhicule
new local1 = 2,
local2 = 3,
local3 = 2;
if(local1 < local2)...//le code sera exécuté car local1 est plus petit que local2
if(local1 < local3)...//ne sera pas exécuté car local1 n'est pas plus petit que local2
if(local1 <= local3)....//sera exécuté car local1 est égale à local3
if(local2 > local3)....//sera exécuté car local2 est plus grand que local3
if ((a << 30) >>> 31)
0|0 = 0
1|0 = 1
0|1 = 1
1|1 = 1
if(IsPlayerInAnyVehicle(playerid) || GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)....//le joueur est dans un véhicule ou encore il n'est pas à pied
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)//si le joueur conduit un véhicule
{
AddVehicleComponent(GetPlayerVehicleID(playerid),1010);//on lui donne de la nitro
}
if(30 == 10)//expression évidemment fausse
{
AddVehicleComponent(GetPlayerVehicleID(playerid),1010);//on donne de la nitro
}
else
{
SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu a été méchant ^^");
}
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)//si le joueur conduit un véhicule
{
AddVehicleComponent(GetPlayerVehicleID(playerid),1010);//on lui donne de la nitro
}
else if(IsOn == 2)
{
SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu a été méchant ^^");
}
else if(IsOn == 3)
{
SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu n'as pas mangé ton gateau ^^");
}
else if(IsOn == 4)
{
SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu n'as pas nourrit le chien ^^");
}
else
{
SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu n,est pas en véhicule!");
}
new entier;//un entier
new Float:NbVirgules;//un nombre a virgule (float en anglais pour floating point (point flottant, bref qui bouge^^))
new MyText[128];//un string, array, peut contenir du texte comme la suivante
new MyText2[] = "salut à tous!!!";//lorsque l'on place déjà un texte dans une variable, aucun besoin d'assigner une taille à la variable
new bool:MyBool;//on crée une variable booléenne (vrai ou faux)
new MyArray[32] = {-1,0,2,3,5,6,74,45...};//un array, contient différentes valeurs ayant toutes une signification quelconque;
new playerid = 9;
new entier = playerid;
playerid = 13;
new entier2 = playerid;
entier = entier2;
new entier = 6;//un entier
printf("%d",entier);//écrit 6
entier++;
printf("%d",entier);//écrit 7 (6+1)
new entier = 6;//un entier
printf("%d",entier);//écrit 6
entier--;
printf("%d",entier);//écrit 5 (6-1)
new entier = 6;//un entier
printf("%d",entier);//écrit 6
entier+= 10;
printf("%d",entier);//écrit 16 (6+10)
new entier = 58;//un entier
printf("%d",entier);//écrit 58
entier-=25;
printf("%d",entier);//écrit 33 (58-25)
new entier = 6;//un entier
printf("%d",entier);//écrit 6
entier*=5;
printf("%d",entier);//écrit 30 (6*5)
new stock myNumber = 5;
new ILike = 15;
printf("%d",ILike);
Dans ce code myNumber ne sera pas compiler car il n'est pas utilisénew stock myNumber = 5;
printf("%d",myNumber);
do
{
......//votre code
}
while(//une condition);
ainsi le code passera en premier par le do{....} et ce code sera exécuté, par la suite, si la condition est vraie, on refait le do{....} ainsi de suite jusqu'à ce que la condition ne soit plus vraie.while(//une condition)
{
.....
}
Ainsi, le code test en premier lieu la condition et si elle s'avère vraie, le code contenu entre les {} sera exécuté, un fois cela fait, on retourne au début et si la condition est vraie, on recommence le code, sinon, on passe par dessus et continue la suite du code...new IsOk;
while(IsOk == 0)
{
IsOk = KillTimer(timerquelconque);
}
bien entendu, le résultat de cette loop est quelque peut étrange (je ne suis pas sûr d'où vient la plupart des problèmes de timers qui ne se stoppent pas, mais s'il s'agit de la fonction qui ne fonctionne pas correctement, ceci devrait corrigé le problème.for(new i = 0; i<VALEUR; i++)
{
.....
}
Donc, à voir la structure de cette loop, on voit aisément qu'une variable doit être déclaré, on pose ensuite une condition, et une variation de cette variable à chaque fois que le code est exécuté.new i;
while(i<VALEUR)
{
......
i++;
}
for(new i = 0,j = getMaxPlayers(); i<j; i++)
{
...
}
switch(variable ou expression)
{
case /*les/la valeur(s) pour lesquelles la même action sera exécutés/*:
{
....
}
case/*d'autre(s) valeur(s) pour lesquelles on exécutera le même code*/:
{
....
}
default:
{
//tous les cas qui ne sont pas énumérés plus haut
}
}
#define USE_LANGUE_SYS
#if defined USE_LANG_SYS
SendMsg(playerid........);
#else
SendClientMessage(playerid.....);
#endif
Les autres expressions contenues dans cet exemples seront cités plus loin#define NOMBRE_DE_KICK_AVANT_BAN 3
public OnPlayerDisconnect(playerid,reason)
{
if(KickCount[playerid] == NOMBRE_DE_KICK_AVANT_BAN)Ban(playerid);
}
#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 USE_POWER
#if defined USE_POWER
#include .....inc
#else
#error Could not load include
#endif
Bon tuto :D
Je connais pas le pawn, mais doit bien avoir des boucles DO, WHILE et FOR :D
Pour la condition SWITCH, je sais pas si elle existe.
Donc si un de ces 4 éléments existent en Pawn, quelqu'un peut les rajouter :)
for(new i,j; j = getMaxPlayers(); i<j; i++)
Il ne peut y avoir que 2 ; dans un for.for(new i,j = getMaxPlayers(); i<j; i++)
alors je vais expliqué rapidement ce que j'ai compris aux différents opérateurs présents en pawn,Les opérateurs sont sensiblement les même dans la plupart des languages de programmation :king
new Var = 10;
Var = Var - 3;
new Var = 10;
Var -= 3;
new Var = 10;
Var = Var + 3;
new Var = 10;
Var += 3;
new Var = 10;
Var = Var * 3;
new Var = 10;
Var *= 3;
new Var = 10;
if(Var != 10)
{
//Instructions...
}
else
{
//Instructions...
}
L'opérateur ^ est un ou exclusif bit à bit qui n'est pas cité par Sim mais dont l'utilité en PAWN/SA-MP est discutable.
public Encript(string[])
{
for(new x=0; x < strlen(string); x++)
{
string[x] += (3^x) * (x % 15);
if(string[x] > (0xff))
{
string[x] -= 256;
}
}
return 1;
}
Tous les opérateurs que tu cites Rider sont déjà dans le tuto de Sim.J'avais pas vu :P
Et effectivement, tous ces opérateurs sont exactement les mêmes qu'en C/C++
++
Syg
if (strlen(Variable) == 0)
{
/* Action */
}
if (!strlen(Variable))
{
/* Action */
}
if ((IsPlayerConnected(playerid)) ^ (IsPlayerAdmin(playerid)))
0 ^ 0 = 0
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
9 % 3 = 0
25 % 5 = 0
10 % 6 = 4
40 % 3 = 1
if ((IsPlayerConnected(playerid)) ^ (IsPlayerAdmin(playerid)))
if (!IsPlayerAdmin(playerid))