GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Hatomalis le 03 Juillet 2011, 12:20:17

Titre: [RESOLU][AIDE] Un message qui ne tient pas compte de la condition !
Posté par: Hatomalis le 03 Juillet 2011, 12:20:17
Salut à tous !

J'ai un gros soucis dans le code ci-dessous:

//-> Variables
new Ok = 0, v = 0;
new VINCOMP[30] = {592, 577, 511, 512, 593, 520, 553, 476, 519, 460, 513, 548, 425, 417, 487, 488, 497, 563, 447, 469, 472, 473, 493, 595, 484, 430, 453, 452, 446, 454};//Véhicules invalide
//-> On vérifie que le véhicule ne soit pas un Avion, Hélico ou un bateau
for(v = 0, Ok = 0; v < sizeof (VINCOMP) && Ok == 0; v++)
{
if(GetVehicleModel(vehicleid) == VINCOMP[v])Ok = 0;
else Ok = 1;
}
//-> Si c'est le cas, on affiche le message d'info
if(Ok == 1)Message_Information("INFORMATION: Tape /mission et gagne plein d'argent et plein de points !");

Le problème est que le message d'information apparait même si je suis dans un véhicule invalide (Les ID dans VINCOMP), donc je vous demande: Mais d'où vient ce bug ?

Merci d'avance si vous trouvez !
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: cristab le 03 Juillet 2011, 12:22:39
explique sa stp for(v = 0, Ok = 0; v < sizeof (VINCOMP) && Ok == 0; v++)
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: Hatomalis le 03 Juillet 2011, 12:47:58
C'est la boucle.

EDIT: Je viens de changer la boucle en ça:

for(new v =0; Ok == 0 && v < MAX_VOITURE; v++)
Mais sa fait toujours la même chose.
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: cristab le 03 Juillet 2011, 13:23:21
ou me sort tu le vehicleid car j'ai un gros doute a ce niveau la

new VINCOMP[30] = {592, 577, 511, 512, 593, 520, 553, 476, 519, 460, 513, 548, 425, 417, 487, 488, 497, 563, 447, 469, 472, 473, 493, 595, 484, 430, 453, 452, 446, 454};//Véhicules invalide
new Ok = 0, v = 0;
   for(v=0,v < sizeof (VINCOMP); v++)
   {
      if(GetVehicleModel(GetPlayerVehicleID(playerid)) == VINCOMP[v])
      {
         Ok = 0;
      }
      else
      {
         Ok = 1;
      }
   }
if(Ok == 1)Message_Information("INFORMATION: Tape /mission et gagne plein d'argent et plein de points !");
   
   
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: Hatomalis le 03 Juillet 2011, 14:37:06
J'ai oublié de préciser que le bout de code est dans OnPlayerEnterVehicle donc vehicleid est déjà définie.

J'ai essayer avec ton bout de code, sa  ne marche toujours pas.
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: S!m le 03 Juillet 2011, 18:16:59
Salut,

si j'ai bien compris, tu veut que si ton véhicule est l'un des modèles listés, tu envoie le message. Si c'est le cas, change simplement ton test dans ta boucle :

//-> Variables
new Ok = 0, v = 0;
new VINCOMP[30] = {592, 577, 511, 512, 593, 520, 553, 476, 519, 460, 513, 548, 425, 417, 487, 488, 497, 563, 447, 469, 472, 473, 493, 595, 484, 430, 453, 452, 446, 454};//Véhicules invalide
//-> On vérifie que le véhicule ne soit pas un Avion, Hélico ou un bateau
for(v = 0, Ok = 0; v < sizeof (VINCOMP) && Ok == 0; v++)
{
if(GetVehicleModel(vehicleid) == VINCOMP[v])Ok = 1;//si le véhicule est l'un des modèles testés, on accepte
}
//-> Si c'est le cas, on affiche le message d'info
if(Ok == 1)Message_Information("INFORMATION: Tape /mission et gagne plein d'argent et plein de points !");

Simple commentaire, tu devrais sortir ton GetVehicleModel de la boucle et utiliser une variable, ça t'évitera potentiellement quelques appels à la fonction.

++Sim++
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: Hatomalis le 03 Juillet 2011, 18:55:50
Non, en fait c'est le contraire, j'ai donc remplacer le == par un != mais encore le même résultat, le message s'affiche pour tous les type de véhicule  :wall
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: S!m le 03 Juillet 2011, 19:05:45
Salut,

si c'est le contraire que tu désire, remplace dans la dernière ligne:

if(Ok == 1)Message_Information("INFORMATION: Tape /mission et gagne plein d'argent et plein de points !");par
if(Ok != 1)Message_Information("INFORMATION: Tape /mission et gagne plein d'argent et plein de points !");
parce que ta boucle que tu utilisais au début va toujours avoir le même résultat peu importe ton véhicule. Le même véhicule ne peut pas être de 30 modèles différents en même temps...

++Sim++
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: Hatomalis le 03 Juillet 2011, 19:17:16
Là le message ne s'affiche plus sur aucun véhicule ^^
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: cristab le 03 Juillet 2011, 19:29:23
moi j'aurais fait de la sorte

Fonction cacher volontairement
est dans ta commande tu met if(Valid_Vehicle(playerid)==1)// voiture valide

dela tu evite une boucle inutile ^^


post editer pour cacher la fonction creer
Titre: Re : [AIDE] Un message qui ne tient pas compte de la condition !
Posté par: Hatomalis le 03 Juillet 2011, 19:39:58
C'est bon j'ai trouvé d'où venait le problème.

    new Ok = 1, v = 0;
new VINCOMP[30] = {592, 577, 511, 512, 593, 520, 553, 476, 519, 460, 513, 548, 425, 417, 487, 488, 497, 563, 447, 469, 472, 473, 493, 595, 484, 430, 453, 452, 446, 454};//Véhicules invalide
//-> Si le joueur est dans un véhicule valide
for(v = 0; v < sizeof (VINCOMP); v++)
  {
    if(GetVehicleModel(vehicleid) == VINCOMP[v])Ok = 0;
    }
//-> Si c'est le cas, on affiche le message d'info
if(Ok == 1)Message_Information("INFORMATION: Tape /mission et gagne plein d'argent et plein de points !");

Merci à toi et à Sim pour m'avoir aider !