GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: remy69400 le 02 Juillet 2011, 03:38:57
-
Bonjour (Bonsoir ? :))
J'avance peu à peu dans mon script grâce à tout les tutos présents sur gtao et vos conseils et je tiens d'abord à vous en remercier.
Si je post à nouveau c'est bien parceque je suis face à un problème que je ne surmonte pas malgré mes folles recherches.
Je suis en pleine création d'une fonction /demarrer qui fonctionne assez bien avec un Timer dont je suis assez fier (n'oublions pas que je débute :D).
Hélas je voudrais ajouter en condition le fait que le moteur soit allumé ou éteint via le engine.
J'ai eu beau trafiquer avec le GetVehicleParamsEx, et avoir rechercher durant de très longues heures, cela reste infructueux, j'en appel donc à vos connnaissances si vous le voulez bien.
Je vous remercie de votre lecture,
Remy.
post scriptum: J'ai pu voir par ci par là : engineOn[playerid], ou gEngine[GetPlayerVehicleID] mais ceci ne m'aide pas n'ayant aucune expliquation ou même le script en entier.
-
bojour j'ai creer un systeme de voiture avec cette option va faire un tour dans le showroom :) si tu ne trouve pas ou n'arrive pas a l'implanter je t'aiderais
-
J'ai cherché dans le showroom et ait trouvé un sujet qui est de toi avec tout un système de véhicule (essence, vente, code pin,etc...)
J'ai trouvé d'autre sujet intéressant mais je ne fais pas de lien avec mon problème de engine. Je vais essayer d'être clair.
Ce que je souhaite c'est que pour que ma condition de "if" soit que le moteur du véhicule dans lequel se trouve le joueur soit éteint. Et vice versa.
Voici ce que j'ai pu faire jusqu'à présent:
Voici mon script: if (strcmp("/demarrer", cmdtext, true, 10) == 0)
{
new engine, lights, alarm, doors, bonnet, boot, objective;
if(IsPlayerInAnyVehicle(playerid))
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, bonnet, boot, objective);
if(engine == VEHICLE_PARAMS_OFF)
{
new messagedemarrage[128], joueur[MAX_PLAYER_NAME];
GetPlayerName(playerid, joueur, sizeof(joueur));
format(messagedemarrage, sizeof(messagedemarrage), "Le véhicule de %s est entrain de démarrer...", joueur);
SendClientMessage(playerid, GRIS, messagedemarrage);
SetTimerEx("DemarrerVehicule", 5000, false, "i", playerid);
}
else
{
SendClientMessage(playerid, GRIS, "Le moteur est déjà allumé");
}
}
}
return 1;
}
Voici ton script:if(strcmp(cmdtext, "/moteur", true) == 0)
{
new veh = GetPlayerVehicleID(playerid);
new engine, lights, alarm, doors, bonnet, boot, objective;
if(IsPlayerInAnyVehicle(playerid))
{
if(veh != INVALID_VEHICLE_ID)
{
GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
if(engine == VEHICLE_PARAMS_OFF)
{
SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Vous venez d'allumer le moteur de la voiture.");
}
else
{
SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Vous venez d'eteindre le moteur de la voiture.");
}
}
}
return 1;
}
Dans mon script, le /demarrer me m"écrit à l'écran "Le moteur est allumé" car il rentre le "else".
Ce qui signifie que le "engine == VEHICLE_PARAMS_OFF" n'est pas validé, j'en déduis que mon engine ne doit pas correspondre au "engine" du véhicule en question.
Je pense que c'est là que se trouve mon erreur.
-
Dans mon script, le /demarrer me m"écrit à l'écran "Le moteur est allumé" car il rentre le "else".
Ce qui signifie que le "engine == VEHICLE_PARAMS_OFF" n'est pas validé, j'en déduis que mon engine ne doit pas correspondre au "engine" du véhicule en question.
Je pense que c'est là que se trouve mon erreur.
Je comprends pas ton problème...
-
ajoute ceci dans le OnGameModeInit ManualVehicleEngineAndLights(); je pense que sa doit corriger le GetVehicleParamsEx qui a tendance a ne pas retourner les bonne valeurs en temps normale
-
Je l'ai déjà le "ManualVehicleEngineAndLights();"
Dans mon script, le /demarrer me m"écrit à l'écran "Le moteur est allumé" car il rentre le "else".
Ce qui signifie que le "engine == VEHICLE_PARAMS_OFF" n'est pas validé, j'en déduis que mon engine ne doit pas correspondre au "engine" du véhicule en question.
Je pense que c'est là que se trouve mon erreur.
Je comprends pas ton problème...
Pour simplifier:
Quand je fais /demarrer cela m'écrit uniquement "Le moteur est déjà allumé", alors qu'il est éteint, et mon moteur ne s'allume jamais. (Mon SetTimerEx fonctionne très bien)
-
bizard sa
-
Ce genre de condition n'a jamais fonctionné avec moi non plus, il vaut mieux utiliser une variable Moteur qui prend la valeur 1 chaque fois qu'il est allumé et 0 lorsqu'il est éteint.
-
Ce genre de condition n'a jamais fonctionné avec moi non plus, il vaut mieux utiliser une variable Moteur qui prend la valeur 1 chaque fois qu'il est allumé et 0 lorsqu'il est éteint.
Après un très long travail de rechercher, de bricolage et d'expérience en tout genre je suis arrivé à ma fonction grâce à cette variable Moteur, merci à vous tous.
La réponse pour ceux qui sont dans le même cas que moi passe par la mise en place d'une variable du type:
new engineOn[MAX_VEHICLES];engineOn[GetPlayerVehicleID(playerid)] = false;engineOn[GetPlayerVehicleID(playerid)] = true;if (engineOn[GetPlayerVehicleID(playerid)])if (!engineOn[GetPlayerVehicleID(playerid)])
Merci à Foo pour son GM qui montre après beaucoup de réflexion l'utilisation de cette variable.