GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: ApocKalipsS le 11 Avril 2009, 17:03:21
-
Bonjour,
J'ai ce code là :
If X != 1 || X !=2
{
Et si je suis X=1 ou 2, mon action me dit que je suis pas X=1/2.
Comment faire ?
Merci.
-
enleve le ! devant chaque =
-
J'ai oublier de préciser, en fait c'est dans une commande, je te donne plus de précision :
if (X !=1|| X !=2)
{
Send... "Tu n'es pas X !");.
}
-
j' arrive pas a comprendre ce que tu veut
-
Salut,
remarque simplement un truc:
ton code est exécuté si ta variable X est différente de 1 et 2, est-ce réellement ce que tu désire?
explique toi davantage!
++Sim++
-
if(strcmp(cmd,"/achetermat",true)==0) // By Ellis
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] == 0)
{
SendClientMessage(playerid, COLOR_GREY, "Vous devez être loggé !");
return 1;
}
if(PlayerInfo[playerid][pJob] != 23 || PlayerInfo[playerid][pJob] != 9)// ICI -----------------------------------------------------------------------------------------------------------
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'êtes pas un fabriquant d'armes.");
return 1;
}
if(!PlayerToPoint(2.0, playerid, 2230.3579,-2286.2107,14.3751))
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'êtes pas à la banque de materiaux !");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_WHITE, "UTTILISATION: /achetermat [ammount]");
return 1;
}
new mammount;
mammount = strval(tmp);
if(mammount > matssys[MatsAmmount])
{
SendClientMessage(playerid, COLOR_WHITE, "Banque: Désolé, on a pas assez de materiaux.");
return 1;
}
if(GetPlayerMoney(playerid) < mammount * 15 - 1)
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'avez pas assez d'argent !");
return 1;
}
matssys[MatsAmmount] -= mammount;
PlayerInfo[playerid][pMats] += mammount;
SafeGivePlayerMoney(playerid, - mammount * 15);
format(string, sizeof(string), "Vous achetez %d materiaux pour $%d.", mammount, mammount * 15);
SendClientMessage(playerid, COLOR_GREY, string);
SaveMatsSystem();
return 1;
}
return 1;
}
-
Salut,
laisse moi deviner.... 9 et 23 sont les fabricants d'armes?
dans ce cas, tu dois remplacer le || par &&
++Sim++
-
En fait, soit il est 9, soit il est 29, mais il peut pas être les deux.
-
Il suffit de traduire avec des mots :
if (x!=2 || x!=5)
Se traduit par:
Si x est différent de 2 ou x est différent de 5
Et on se rend compte (en réfléchissant un peu) que x est forcément différent de 2 ou de 5 (ou alors il faudra que x puisse être à la fois égal à 2 et à 5, ce qui n'est pas possible). Ceci fait que ton test est toujours vérifié et que donc il ne sert à rien.
Sim t'as donné le solution.
if (x!=2 && x!=5)
-> Si x est différent de 2 et x est différent de 5
Si on traduit ça en bon français pour ton gamemode :
si le joueur n'est pas marchand d'arme et qu'il n'est pas fabricant d'arme
++
Syg
-
Salut,
fais comme j'ai dit....
ne pas oublier : tu teste l'inverse dans ce cas
donc si un joueur fais partie du job 9, il ne peut nécessairement pas être dans le job 23
donc si tu effectue le test que tu exécutais:
si le joueur n'est pas dans le 9 ou n'est pas dans le 23, on arrête
exemple:
PlayerInfo[playerid][pjob] = 23;//le joueur est dans la team 23
ici ca va, le joueur est dans cette job mais pas ici, il n,est pas dans la 9
if(PlayerInfo[playerid][pJob] != 23 || PlayerInfo[playerid][pJob] != 9)// ICI
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'êtes pas un fabriquant d'armes.");
return 1;
}
en espérant que tu aie compris
EDIT: désolé Syg, j'ai posté presque au même moment
++Sim++
-
Ca marche, c'est un peu bizzarre je trouve ;D
-
Non, ce n'est pas bizarre, c'est de la logique binaire pure et dure.
J'ai longtemps re-réfléchi à ce test et j'ai même cru m'être trompé. Mais bon, ça m'arrive rarement :angelnot.
Je vais essayer d'être plus clair.
if(PlayerInfo[playerid][pJob] != 23 || PlayerInfo[playerid][pJob] != 9)// ICI
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'êtes pas un fabriquant d'armes.");
return 1;
}Ce test est toujours vérifié, quelque soit la valeur de PlayerInfo[playerid][pJob].
Prenons 3 cas :
PlayerInfo[playerid][pJob] = 22 Ce qui donne Si 22 != 23 ou 22 != 9 -> VRAI ou VRAI -> VRAI -> Ce n'est pas un fabricant d'arme
PlayerInfo[playerid][pJob] = 23 Ce qui donne Si 23 != 23 ou 22 != 9 -> FAUX ou VRAI -> VRAI -> Ce n'est pas un fabricant d'arme
PlayerInfo[playerid][pJob] = 9 Ce qui donne Si 9 != 23 ou 9 != 9 -> VRAI ou FAUX -> VRAI -> Ce n'est pas un fabricant d'arme
La bonne solution est celle qu'avait donnée Sim en premier :
if(PlayerInfo[playerid][pJob] != 23 && PlayerInfo[playerid][pJob] != 9)// ICI
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'êtes pas un fabriquant d'armes.");
return 1;
}Si on reprend nos 3 cas :
PlayerInfo[playerid][pJob] = 22 Ce qui donne Si 22 != 23 et 22 != 9 -> VRAI et VRAI -> VRAI -> Ce n'est pas un fabricant d'arme
PlayerInfo[playerid][pJob] = 23 Ce qui donne Si 23 != 23 et 22 != 9 -> FAUX et VRAI -> FAUX -> C'est un fabriquant d'arme
PlayerInfo[playerid][pJob] = 9 Ce qui donne Si 9 != 23 et 9 != 9 -> VRAI et FAUX -> FAUX -> C'est un fabriquant d'arme
Pour plus de compréhension, il aurai fallu inverser le test :
if(PlayerInfo[playerid][pJob] == 23 || PlayerInfo[playerid][pJob] == 9)
{
// C'est un fabriquant d'arme 23 ou 9, on fait ce qu'on doit faire
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'êtes pas un fabriquant d'armes.");
return 1;
}
++
Syg
-
Merci Syg :)