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
-
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
-
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
-
Voila Syg j'ai suivit ton conseil e s'est bel et bien cette ligne qui foire
CarInfo[carid][cModel] = moneys;
-
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
-
Bisart avec les print s'etait la ligne que je disait qui merdais, mais en fait s'etait les sendclientmessage
-
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++
-
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 "