C'est à la ligne 547 du script que tu as donné, la vitesse est calculée et stockée dans la variable Dis.
Tout d'abord, ce FS démarre un timer par slot du serveur, ce qui fait vraiment beaucoup de timers (si ton serveur à 200 slots, le FS démarrera 200 timers !!).
Ensuite, la vitesse n'est calculée qu'avec les coordonnées X et Y ce qui fait que lors d'une chute verticale, cette vitesse sera de 0 (alors qu'elle est de l'ordre de 500 km/h lors d'une chute libre avec un véhicule).
De plus, l'unité est m/h, ce qui n'est pas très intéressant. Il faudrait faire un division par 1000 pour avoir des km/h.
Enfin le calcul de la vitesse est fait de manière très compliqué (floatabs, floatsub, floatpower) alors que les opérateurs de base fonctionnent très bien avec les nombres à virgule flottante (et font exactement la même chose).
NB : D'ailleurs, c'est une hérésie de prendre la valeur absolue d'une différence qu'on va élever au carré. Dans tous les cas, abs((X2-X1)^2) = (X2-X1)^2
Bref, FS fait pour quelqu'un qui est fâché avec les math et la programmation ...
Mais il existe beaucoup de FS où tu trouveras le calcul de la vitesse plus simple et plus juste.
Mais le mieux, c'est d'utiliser GetPlayerVelocity ou GetVehicleVelocity, ces fonctions sont beaucoup plus justes qu'un timer dont la durée reste aléatoire.
Exemple :
new Float:Vitesse, Float:Vx, Float:Vy, Float:Vz;
/* Vitesse du vehicule */
GetVehicleVelocity (GetPlayerVehicleID (playerid), Vx, Vy, Vz); // Si le joueur est dans un véhicule
Vitesse = floatsqroot(Vx*Vx+Vy*Vy+Vz*Vz)*200.0;
++
Syg