GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Eloctro le 06 Novembre 2007, 22:08:10
-
Voila j'ai eisseiller toute la soirée avec la commande /vec ses pour prend n'importe qu'elle véhicule avec l'id exemple : /vec 522 .
Je vous montre commeme le résultat .
En haut :
new Float:Pos[3];En bas :
if(strcmp(cmd, "/vec", true) == 0) {
GetPlayerPos(if,Pos[0],Pos[1],Pos[2]);
CreateVehicle(cmdtext[strlen (cmd)] ,Pos[0],Pos[1],Pos[2],0,0,0);}
return 1;
}
-
Uhum... Pas mal comme commande :)
Mais le problème c'est que c'est difficile pour les autres joueurs de trouver les ID :(
EDIT : Euuh, La ca créer un objet et pas un véhicule ???
-
A désolé j'ai éditer.
-
1 - Le premier paramètre de CreateVehicule est un nombre et tu lui passes une chaîne de caractères à la place.
2 - Déplace un peu le véhicule, pour qu'il n'apparaise pas sur le joueur (sinon il va rester coincé dessous si c'est un camion).
3 - Je te conseille vivement de faire un test sur cette valeur sinon ton serveur va crasher.
4 - Fait apparaitre ton véhicule un peu en l'air pour éviter qu'il ne se retrouve planter dans le sol.
Voilà :
new VehicleModel = strval (cmdtext[strlen (cmd)]);
if (VehicleModel >= 400 && VehicleModel <= 622)
{
CreateVehicle (VehicleModel, Pos[0]+2.0, Pos[1]+2.0, Pos[2]+2.0, 0.0, -1, -1, 20000);
}
J'ai aussi rajouté le paramètre angle (0.0) qui manquait et j'ai mis les couleurs à -1,-1 parce que 0,0 ça fait noir,noir. (-1,-1 c'est couleurs aléatoires parmis les couleurs associées au véhicule)
Et pour le dernier paramètre (durée avant le respawn du véhicule) Si tu mets 0, dès que tu vas quitter le véhicule, il sera respawné à l'endroit de sa création. Donc je te conseille de mettre une valeur un peu plus grande (20000 ms = 20 s)
Dernière chose, les véhicules ne seront JAMAIS détruits. Donc ton serveur risque vite d'être engorgé par des centaines de véhicules. Au pire, il plantera au 700eme véhicule crée ou au 70eme type de véhicule crée.
++
Syg
-
Don si j'ai compirs sa fait sa :
En haut :
new VehicleModel = strval (cmdtext[strlen (cmd)]);
En bas :
if(strcmp(cmd, "/vec", true) == 0) {
if (VehicleModel >= 400 && VehicleModel <= 622)
{
CreateVehicle (VehicleModel, Pos[0]+2.0, Pos[1]+2.0, Pos[2]+2.0, 0.0, -1, -1, 20000);
}
SendClientMessage(playerid, COLOR_GREEN, "Ton véhicule est la.");
return 1;
}
-
Presque, il faut que la ligne contenant le strval soit après le test avec strcmp :
if(strcmp(cmd, "/vec", true) == 0)
{
new VehicleModel = strval (cmdtext[strlen (cmd)]);
if (VehicleModel >= 400 && VehicleModel <= 622)
{
CreateVehicle (VehicleModel, Pos[0]+2.0, Pos[1]+2.0, Pos[2]+2.0, 0.0, -1, -1, 20000);
}
SendClientMessage(playerid, COLOR_GREEN, "Ton véhicule est la.");
return 1;
}
++
Syg
-
Petite astuces: rajouter
if(IsPlayerAdmin(playerid))si vous voulez utiliser cette commande seulement en tant qu'admin ::)
-
Merci SYG ,
Omar ses mal expliquer il faut rajouté les crochés .
{
if(IsPlayerAdmin(playerid))
}
-
Si tu mets ton code dans cet ordre ça ne marchera jamais xD..
if(IsPlayerAdmin(playerid)) {
/*
Faites quelque chose ici
*/
}
Mais sache aussi que si tu veux ne pas mettre d'accolades tu peux quand l'expression reste simple et condensée sur quelques lignes bien indentés.
Syg en dira surement plus que moi et d'une meilleure façon mais bon :D
if(IsPlayerAdmin(playerid)) /* faites quelque chose ici */
else /*fait encore quelque chose */
Ca peut être utile pour optimiser le code quand tu as des structures conditionnelles légères.
-
Personnellement, je mets systématiquement les accolades, expérience oblige.
Si tu veut rajouter une ligne, il faudra mettre les accolades sinon ton code sera faux.
Exemple :
if (IsPlayerAdmin)
GetPlayerPos(X, Y, Z);
PlayerIsAdmin = True;On voit bien l'erreur de rajout.
Mais bon, c'est comme pour l'indentation, avec l'expérience, on se rend compte que c'est ce genre de petits trucs qui font la différence en programmation. De toutes façons, se donner des règles et les suivre demande de la rigueur et en programmation, c'est une qualité non négligeable.
Sinon, Spyker à raison, les accolades ne sont pas nécessaires si le test ne porte que sur UNE ligne de code.
++
Syg