• 06 Juin 2026, 04:02:27


Auteur Sujet: KM pour une voiture  (Lu 2003 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne JaCky38

  • *
  • Tueur
  • Messages: 68
    • Voir le profil
KM pour une voiture
« le: 01 Janvier 2009, 13:22:53 »
Salut
Je voulias savoir si avec le FS Taxi xtreame management , on pouvait sovgarder les KM D'une voiture? En creer une fonction? Merci d'avance

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : KM pour une voiture
« Réponse #1 le: 01 Janvier 2009, 16:27:06 »
Salut,

à la base, le fs de taxi n'a pas cette fonction, par contre tu pourrais utilisé le fs de r@f que l'on trouve [ur=http://www.gtaonline.fr/forums/index.php/topic,1832.0.html]ICI[/url]

par contre r@f à dit qu'il en ferait probablement bientôt une nouvelle version afin d'en améliorer les performances.

++Sim++





Hors ligne JaCky38

  • *
  • Tueur
  • Messages: 68
    • Voir le profil
Re : KM pour une voiture
« Réponse #2 le: 01 Janvier 2009, 16:37:28 »
Salut
Je parle pas des KM/H mais des Kilometre aux compteur

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : KM pour une voiture
« Réponse #3 le: 01 Janvier 2009, 16:50:13 »
salut,

dans ce cas tu ajoute la distance parcourue par...disons 10 secondes

alors un timer de dix seconde, une variable distance parcourue (un float) et je te donne une expression qui te sera utile: distance[playerid] += (floatsqroot(x*x+y*y+z*z)/1000)

voilà, essaie de trouver maintenant, tu peut t'inspirer d'une fonction qu'on retrouve dans un de mes post ici

++Sim++





Hors ligne JaCky38

  • *
  • Tueur
  • Messages: 68
    • Voir le profil
Re : KM pour une voiture
« Réponse #4 le: 01 Janvier 2009, 17:07:19 »
désolé sim mais je suis débutant et j'ai un petit peut de mal avec ça

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : KM pour une voiture
« Réponse #5 le: 01 Janvier 2009, 18:32:30 »
Salut,

je me sens généreux là alors je t'explique,

tu doit lancé un timer dans onGameModeInit() qui te permettra de calculer la distance parcourue par les joueurs, tu doit donc mesurer la distance parcourue et la mettre en km (c'est ce que tu veut or les mesures de gta (on le présume) sont en mètres.

donc tu doit faire une loop qui testera tous les joueurs et ajoutera la distance qu'ils ont parcourue durant ce laps de temps, la meilleure base pour ceci serait le speedomètre de raf, en modifiant grandement....

voici le code de base:
enum SavePlayerPosEnum {
Float:LastX,
Float:LastY,
Float:LastZ
}

new SavePlayerPos[MAX_PLAYERS][SavePlayerPosEnum];
public UpdateSpeed()
{
new Float:x,Float:y,Float:z;
new Float:distance,value,string[256];
new Float:health;
for(new i=0; i<SLOTS; i++)
{
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
{
TextDrawDestroy(Speedo[i]);
}
}

for(new i=0; i<SLOTS; i++)
{
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
{
GetPlayerPos(i, x, y, z);
GetVehicleHealth(GetPlayerVehicleID(i), health);
distance = floatsqroot(floatpower(floatabs(floatsub(x,SavePlayerPos[i][LastX])),2)+floatpower(floatabs(floatsub(y,SavePlayerPos[i][LastY])),2)+floatpower(floatabs(floatsub(z,SavePlayerPos[i][LastZ])),2));
value = floatround(distance * 5000);
if(UpdateSeconds > 1)
{
value = floatround(value / UpdateSeconds);
}
format(string,sizeof(string),"~g~Vehicle : ~w~%s ~n~~b~MPH : ~w~%d / ~b~KM/H : ~w~%d~n~~r~Vehicle Health:~w~ %.2f",CarName[GetVehicleModel(GetPlayerVehicleID(i))-400],floatround(value/1600),floatround(value/1000),health);
Speedo[i] = TextDrawCreate(320.00, 380.00, string);
TextDrawSetOutline(Speedo[i], 0);
TextDrawFont(Speedo[i], 3);
TextDrawSetProportional(Speedo[i], 2);
TextDrawAlignment(Speedo[i], 2);
TextDrawShowForPlayer (i, Speedo[i]);
}
SavePlayerPos[i][LastX] = x;
SavePlayerPos[i][LastY] = y;
SavePlayerPos[i][LastZ] = z;
}
}

maintenant, on commence en retirant toutes les parties qui nous seront complètement inutiles (les textdraw, mais que tu devra faire plus tard afin d'afficher la valeur au joueur) :

public UpdateSpeed()
{
new Float:x,Float:y,Float:z;
new Float:distance;
for(new i=0; i<SLOTS; i++)
{
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
{
GetPlayerPos(i, x, y, z);
distance = floatsqroot(floatpower(floatabs(floatsub(x,SavePlayerPos[i][LastX])),2)+floatpower(floatabs(floatsub(y,SavePlayerPos[i][LastY])),2)+floatpower(floatabs(floatsub(z,SavePlayerPos[i][LastZ])),2));
}
SavePlayerPos[i][LastX] = x;
SavePlayerPos[i][LastY] = y;
SavePlayerPos[i][LastZ] = z;
}
}

Maintenant il faut ajouté une variable distance, alors on reprend l'énumération:
enum SavePlayerPosEnum {
Float:LastX,
Float:LastY,
Float:LastZ,
Float:Distance
}

new SavePlayerPos[MAX_PLAYERS][SavePlayerPosEnum];

Et voilà qu'on a une variable qui représente la distance parcourue par chaque joueur.

Il ne reste plus qu'a bien là paramétré, il ne faut pas écrire par dessus la valeur de cette variable à chaque fois mais plutôt y ajouter une certaine valeur, ainsi on y arrivera:

public UpdateSpeed()
{
new Float:x,Float:y,Float:z;
new Float:dx,Float:dy,Float:dz;
for(new i=0; i<SLOTS; i++)
{
if(GetPlayerPos(i, x, y, z))//les fonction native retourne toutes ou presque une valeur importante: réussite ou non
{
dx -= SavePlayerPos[i][LastX];
dy -= SavePlayerPos[i][LastY];
dz -= SavePlayerPos[i][LastZ];
SavePlayerPos[i][Distance] += floatsqroot(dx*dx+dy*dy+dz*dz);
SavePlayerPos[i][LastX] = x;
SavePlayerPos[i][LastY] = y;
SavePlayerPos[i][LastZ] = z;
}
}
}

et voilà

il est possible que le code comporte certaines défaut mais bon...

bonne chance

++Sim++
« Modifié: 01 Janvier 2009, 19:40:49 par Sim »





Hors ligne JaCky38

  • *
  • Tueur
  • Messages: 68
    • Voir le profil
Re : KM pour une voiture
« Réponse #6 le: 01 Janvier 2009, 20:15:53 »
Salut SIM , merci pour l'aide
J'ai juste un probleme , Il me pose une erreur a la ligne new SavePlayerPos[MAX_PLAYERS][SavePlayerPosEnum];
Je pense qu'il faut que je creer quelque chose dans scriptfile non?

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : KM pour une voiture
« Réponse #7 le: 01 Janvier 2009, 20:58:02 »
Salut,

si tu veut enregistrer la distance parcourue, effectivement

++Sim++





Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : KM pour une voiture
« Réponse #8 le: 06 Janvier 2009, 23:36:38 »
Juste deux remarques :
1) Un timer de 10 secondes pour mesurer la distance parcouru risque d'être grandement erroné.
Car en 10 secondes, je allègrement faire un petit tour et revenir à ma position de départ. Vu par le timer, je n'aurais pas bougé.
Pour ça, le timer doit être au maximum de 1 seconde (moins si on veut plus de précision).

2) Par contre, le problème va résider dans les téléports. Par exemple, si on se téléporte du skate park au mont chiliad (plusieurs kilomètres de distance), on le fera instantanément. Cette distance sera donc cumulée dans la distance parcourue par le véhicule.
Pour faire simple, il suffit de contrôler que la distance parcourue en 1 seconde est inférieur à 140 mètre (140 m/s = 504 km/h qui est environs la vitesse max que l'on peut atteindre en chute libre dans SAMP). Si la distance parcourue en 1 s est inférieure à 140, on cumul sinon, on ne la prend pas en compte.
NB : Avec un timer plus court, il suffit de faire la division (70 m en 500 ms par exemple)

++
Syg
Courtesy of GtaManiac