GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: scott1 le 08 Mai 2010, 15:29:13

Titre: [RESOLUT]Commande qui change le model d'un véhicule IG
Posté par: scott1 le 08 Mai 2010, 15:29:13
Bonjour à tous, j'ai créé ceci

if(strcmp(cmd, "/amodel", true) == 0)
{
   if(IsPlayerConnected(playerid))
  {
new Float:x,Float:y,Float:z;
new Float:a;
GetPlayerName(playerid, playername, sizeof(playername));
GetVehiclePos(carid, x, y, z);
//GetPlayerFacingAngle(playerid, a);
GetVehicleZAngle(carid, a);
if(PlayerInfo[playerid][pAdmin] >= 1338)
{
   if(IsAnOwnableCar(carid))
{
   tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_WHITE, "USAGE: /amodel [model]");
return 1;
}
moneys = strval(tmp);
if(moneys < 400 || moneys > 603)
{
SendClientMessage(playerid, COLOR_GRAD1, "Modele de véhicule invalide, il doit etre compris entre 400 et 603");
return 1;
}
CarInfo[carid][cModel] = moneys;
format(string, sizeof(string), "Vous avez le modele du véhicule %d, son modele est désormais le %s", carid, PlayerVehicle[carid]);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string, sizeof(string), "AdmCmd: %s le modele du véhicule %d, son modele est désormais le %s.", playername, carid, PlayerVehicle[carid]);
ABroadCast(COLOR_YELLOW,string,1);
    DestroyVehicle(carid);
    CreateVehicle(moneys,CarInfo[carid][cLocationx],CarInfo[carid][cLocationy],CarInfo[carid][cLocationz]+1.0,CarInfo[carid][cAngle],CarInfo[carid][cColorOne],CarInfo[carid][cColorTwo],60000);
    OnPropUpdate();
OnPlayerUpdate(playerid);
return 1;
}
else
{
    SendClientMessage(playerid, COLOR_GREY, "Ce véhicule ne peut pas étre changé de modele!");
    return 1;
}
}
else
{
   SendClientMessage(playerid, COLOR_GREY, "Vous n'êtes pas autorisé a utilisé cette commande!");
   return 1;
}
}
return 1;
}

Le soucis s'est que quand je fait /amodel 500 ou un nombre entre 400 et 603, il me met serveur unknow command, je pense que ça vien de CarInfo[carid][cModel] = moneys; Mais je ne vois pas ce qui est faux. Merci de votre aide
Titre: Re : Commande qui change le model d'un véhicule IG
Posté par: Syg le 08 Mai 2010, 17:21:15
Ceci arrive lorsque qu'une ligne du code qui est exécuté merde.
Pour déterminé quelle ligne pose problème, la solution la plus simple est de mettre des printf pour savoir où le script s'arrête.

Dans ton cas, le problème se situe dans le bout de code suivant :
CarInfo[carid][cModel] = moneys;
format(string, sizeof(string), "Vous avez le modele du véhicule %d, son modele est désormais le %s", carid, PlayerVehicle[carid]);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string, sizeof(string), "AdmCmd: %s le modele du véhicule %d, son modele est désormais le %s.", playername, carid, PlayerVehicle[carid]);
ABroadCast(COLOR_YELLOW,string,1);
    DestroyVehicle(carid);
    CreateVehicle(moneys,CarInfo[carid][cLocationx],CarInfo[carid][cLocationy],CarInfo[carid][cLocationz]+1.0,CarInfo[carid][cAngle],CarInfo[carid][cColorOne],CarInfo[carid][cColorTwo],60000);
    OnPropUpdate();
OnPlayerUpdate(playerid);
return 1;

Il suffit que tu intercales de printf entre les lignes, que tu exécutes le code puis que tu regardes dans le log du serveur l'endroit où le bout de script s'est arrêté.
Ex :
CarInfo[carid][cModel] = moneys;
printf ("Avant format 1");
format(string, sizeof(string), "Vous avez le modele du véhicule %d, son modele est désormais le %s", carid, PlayerVehicle[carid]);
printf ("Avant SendClientMessage");
SendClientMessage(playerid, COLOR_YELLOW, string);
printf ("Avant format 2");
format(string, sizeof(string), "AdmCmd: %s le modele du véhicule %d, son modele est désormais le %s.", playername, carid, PlayerVehicle[carid]);
...

++
Syg
Titre: Re : Commande qui change le model d'un véhicule IG
Posté par: scott1 le 18 Mai 2010, 01:24:51
Voila Syg j'ai suivit ton conseil e s'est bel et bien cette ligne qui foire

CarInfo[carid][cModel] = moneys;
Titre: Re : Commande qui change le model d'un véhicule IG
Posté par: Syg le 19 Mai 2010, 10:56:44
Oui, pas étonnant, carid n'est pas initialisé (même si les variables sont normalement initialisées à 0 mais j'ai dit qu'il ne fallait pas compter dessus).
Il me semble qu'il manque un GetVehicleId au début de ta commande.

En tout cas, si c'est la ligne que tu montres qui plante, trace les valeurs de carid et cModel dans la log pour voir si elles ne sont pas hors des limites du tableau CarInfo.

++
Syg
Titre: Re : Commande qui change le model d'un véhicule IG
Posté par: scott1 le 19 Mai 2010, 13:09:22
Bisart avec les print s'etait la ligne que je disait qui merdais, mais en fait s'etait les sendclientmessage
Titre: Re : Re : Commande qui change le model d'un véhicule IG
Posté par: S!m le 19 Mai 2010, 23:29:31
Salut,

Oui, pas étonnant, carid n'est pas initialisé (même si les variables sont normalement initialisées à 0 mais j'ai dit qu'il ne fallait pas compter dessus).
Il me semble qu'il manque un GetVehicleId au début de ta commande.

En tout cas, si c'est la ligne que tu montres qui plante, trace les valeurs de carid et cModel dans la log pour voir si elles ne sont pas hors des limites du tableau CarInfo.

++
Syg

mais dans ce cas ça devrait bloquer au IsAnOwnableCar si la fonction est faite correctement....
un ID qui ne se retrouve pas dans le tableau devrait être bloqué dans la fonction...
bien sur il est possible que la fonction ne suive pas la logique

++Sim++
Titre: Re : Re : Re : Commande qui change le model d'un véhicule IG
Posté par: Ssk le 20 Mai 2010, 00:03:56
mais dans ce cas ça devrait bloquer au IsAnOwnableCar si la fonction est faite correctement....
un ID qui ne se retrouve pas dans le tableau devrait être bloqué dans la fonction...
bien sur il est possible que la fonction ne suive pas la logique
[/quote]

C'est un larp ^^

La logique n'est pas le mot d'ordre dans ce " GM "