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
-
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 !
-
explique sa stp for(v = 0, Ok = 0; v < sizeof (VINCOMP) && Ok == 0; v++)
-
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.
-
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 !");
-
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.
-
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++
-
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
-
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++
-
Là le message ne s'affiche plus sur aucun véhicule ^^
-
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
-
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 !