GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: vincentdu90 le 29 Novembre 2008, 14:56:18

Titre: Aide compteur et pickup
Posté par: vincentdu90 le 29 Novembre 2008, 14:56:18
Bonjour a tous,
Je voudrais savoir comment on fais pour faire un compteur car je voudrais l'utiliser pour un truc que je voudrais faire .
Juste un compteur simple avec Km (et essence).

Je voudrais aussi savoir quand un joueur prend un pickup sa lui donne de l'essence ou des armes ect...

Merci d'avance.
Titre: Re : Aide compteur et pickup
Posté par: momo77190 le 29 Novembre 2008, 16:19:02
Salut pour le compteur tu as le compteur a raf
http://www.gtaonline.fr/forums/index.php/topic,1832.0.html (http://www.gtaonline.fr/forums/index.php/topic,1832.0.html)
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 29 Novembre 2008, 16:21:21
Oui je sais mais voila je l'ai dit moi je veut pas le nom est tout et moi je veut faire un truc different donc faut que je comprenne le fonctionnement .
Donc ça serait sympa de m'aider .
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 30 Novembre 2008, 19:01:03
Un petit up !! (je sais pas si c'est autoriser)
Titre: Re : Aide compteur et pickup
Posté par: cristab le 30 Novembre 2008, 19:49:49
sur le forum samp il y en a un tout simple juste les mph et le fuel ;) tu t'en inspire et tu le modifie pour toi
PS: si je le retrouve je te donne le lien

EDIT:  http://forum.sa-mp.com/index.php?topic=77552.0 (http://forum.sa-mp.com/index.php?topic=77552.0) <====speedo KM/h
Titre: Re : Aide compteur et pickup
Posté par: S!m le 30 Novembre 2008, 19:53:17
Salut,

le script de r@f n,est pas si compliqué, avec un peu d'effort, on comprend que cette ligne:
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));
sert à savoir la distance parcourue pas le joueur depuis 1 seconde (dans ce cas),

ensuite on fait les bon calculs afin de convertir ce nombre (une distance divisé par un temps = une vitesse) en km/h ou mph..
le nom du véhicule, c'est un peu facultatif mais bon, c'est juste le VehiclesName[VModel-400], VehiclesName étant l'array qui est placé en haut du script...

puis l'altitude, c'est toit qui voit, tu supprime ou tu el remplace tout simplement par la valeur de l'essence de ton script d'essence

en espérant que tu comprenne quelque chose à ça...

++Sim++

Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 30 Novembre 2008, 20:02:10
Mais que je comprenne bien la vitesse c'est les nouvelles coordonnées X,Y,Z - les anciennes

EDIT:Tu pourrait m'expliquer un peu plus en details le codes ça serait gentil . :-[
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 02 Décembre 2008, 15:59:00
Up !
S'il vous plaît vous pouvez m'aider .Je suis désolé
Titre: Re : Aide compteur et pickup
Posté par: S!m le 02 Décembre 2008, 23:09:25
Salut,

pour la vitesse, le script ne fait que prendre la position précédente du joueur (SavePlayerPos[playerid][LastPos....];) et sa nouvelle position (GetPlayerPos(playerid,x,y,z);)
puis il calcule la distance entre les deux positions, (en usant de la même technique que pour la norme d'un vecteur dans les réel^3, semblable au théorème de pythagore avec les triangle rectanlges, mais avec trois données...)

par la suite il multiplie cette donnée par une certaine valeur (d'ailleurs je comprend pas pourquoi faire deux calculs, alors qu'on pourrait convertir directement, et les distances sont-elles en mètres ou en pieds??)
bref par la distance parcourue en une seconde, on extrapole pour une heure et on met en kilomètres ou en milles...

++Sim++
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 03 Décembre 2008, 12:51:45
Ok merci je comprend un peu mieux , mais c'est quoi floatpower , floatabs, floatsub ?
Des variables qui conntiennent la coordonnées x,y,z ?
Titre: Re : Aide compteur et pickup
Posté par: S!m le 03 Décembre 2008, 15:14:55
Salut,

floatpower: la variable au carré, tu pourrais juste la multiplier par elle même également...
floatabs: la valeur absolue de la variable (si la variable est négative, elle devient positive, sinon elle ne change pas)
floatsub: soustraction de deux float et plus....

edit:
tant qu'à y être...
floatsqroot: la racine carré du float en question


++Sim++
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 03 Décembre 2008, 15:34:38
Donc

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));


Sa voudrais dire qu'on la racine au carrée de ça

(floatpower(floatabs(floatsub(x,SavePlayerPos[i][LastX])),2)+floatpower(floatabs(floatsub(y,SavePlayerPos[i][LastY])),2)+floatpower(floatabs(floatsub(z,SavePlayerPos[i][LastZ])),2));
Et la dedans on fait a chaque fois dans ce bout de code on fait pour chaque coodonnées la variable au carré de la valeur absolue c'est a dire x y ou z puis on soustrait .?
Titre: Re : Aide compteur et pickup
Posté par: S!m le 03 Décembre 2008, 15:46:09
Salut,

en réalité, la soustraction sert à savoir la variation dans l'un des sens (par exemple en x),

ensuite, comme dans la formule de pythagore, A²+B² = C², que l'on peut facilement modifier pour avoir C = racinecarrée(A²+B²) et qui est toujours valide en 3 dimensions.. c = racinecarrée(A²+B²+C²)

donc, floatsqroot(A²+B²+C²) qui devient floatsqroot(floatpower(A)+floatpower(B)+floatpower(C))
maintenant, A, B,C correspondant à la variation en X, Y et Z, sachant que la variation (positive où négative, c'est sans importance puisque que ce nombre sera au carré) on peut en arrivé à la ligne suivante:

floatsqroot(floatpower(floatsub(x,SavePlayerPos[i][LastX]))+floatpower(floatsub(y,SavePlayerPos[i][LastY]))+floatpower(floatsub(z,SavePlayerPos[i][LastZ])))ou encore:
floatsqroot(floatpower(x-SavePlayerPos[i][LastX])+floatpower(y-SavePlayerPos[i][LastY])+floatpower(z-SavePlayerPos[i][LastZ]))
++Sim++
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 03 Décembre 2008, 15:56:31
Ok bon je vais prendre le deuxieme modele plus facile .
Et ensuite on le divise ?
Titre: Re : Aide compteur et pickup
Posté par: S!m le 03 Décembre 2008, 16:07:35
Salut,

ensuite, on convertis, mais l'ennui, c'est que je ne sais pas si les mesures des positions sont données en mètres (ce qui voudrais dire que la carte fait environ 5000m de large...) ou en pied, je vais regarder ce qui est le plus vraisemblable avec mon fast-move et je revien, mais comme là je suis en cours....ca va attendre à ce soir, donc demain matin pour toi.

si les mesures sont en mètres, il faut divisé par 1000 pour convertir en kilomètres, puis vu que la distance est parcourue en une seconde, il faut multiplié par 3600, qui est le nombre de secondes contunes adns une heure... mais comme le speedo de r@f ne correspond pas du tout à cela... je ne sais pas trop...

EDIT: je vien de regarder le script de r@f multiplie par 5000 (pourquoi???) puis, pour en km/h, il divise par 1000, en gros, je crois qu'il ne s'agit que d'une imprécision

bref, il te faudrait multiplier par 3600 puis divisé par 1000, pour en km/h, ce que tu peut simplifer en une simple multiplication par 3,6

++Sim++
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 03 Décembre 2008, 16:43:07
Merci a toi Sim je crois que j'ai a peu près tout compris avec ta deuxieme solution de code enfaite distance racine au carré de ((ancien X - new x)+(ancien y - new y) + (ancien z + new z))²
Titre: Re : Aide compteur et pickup
Posté par: S!m le 03 Décembre 2008, 17:17:23
salut,

heureux de t'avoir aidé :D :D
en plus ça ma fait passer le temps durant mon cours d'informatique, je travail même sur un diapo d'aide sur le lancement d'un serveur sa-mp....

++Sim++
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 03 Décembre 2008, 17:27:31
Quoi ce que j'ai ecrit est juste .
Titre: Re : Aide compteur et pickup
Posté par: Syg le 04 Décembre 2008, 11:55:16
Non Vincent, tu as fait un erreur, il y a des carrés et des soustractions partout :
distance = racine au carré de ((ancien X - new x)²+(ancien y - new y)² + (ancien z - new z)²)

Pour ce qui est de Sims, l'unité utilisé par SAMP semble être le mètre (en tout cas c'est l'unité que j'utilise pour le compteur de vitesse du Lalu's Stunt qui est dérivé de celui de R@F). Et j'ai fait la même correction que celle dont tu parles, j'ai multiplié par 3600 et non pas par 5000.
Sinon, très bon cours de math sur la norme d'un vecteur dans un espace à 3 dimensions (il semble que j'ai enfin trouvé quelqu'un pour me remplacer).
NB : La carte fait 6000 m de large et 6000 m de long (coordonnée de -3000 à 3000) mais on peut aller plus loin en mer

++
Syg
Titre: Re : Aide compteur et pickup
Posté par: S!m le 04 Décembre 2008, 14:21:07
Salut,

j'avais pas vu les carrés manquants...( ??? )

Pour ce qui est de Sims, l'unité utilisé par SAMP semble être le mètre (en tout cas c'est l'unité que j'utilise pour le compteur de vitesse du Lalu's Stunt qui est dérivé de celui de R@F). Et j'ai fait la même correction que celle dont tu parles, j'ai multiplié par 3600 et non pas par 5000.
Sinon, très bon cours de math sur la norme d'un vecteur dans un espace à 3 dimensions (il semble que j'ai enfin trouvé quelqu'un pour me remplacer).
NB : La carte fait 6000 m de large et 6000 m de long (coordonnée de -3000 à 3000) mais on peut aller plus loin en mer

Merci de l'info :D et je ne suis pas à la hauteur pour te remplacer, pour moi tu sera toujours le "king" de sa-mp sur gtaonline,
c'est d'ailleur pour cette raison que j'ai un peu "copié" ta façon de signer

++Sim++
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 05 Décembre 2008, 19:46:03
Ok ben j'ai tout compris , mais dans le code il y a un "i" vous pouvez me dire c'est quoi et après j'arrete de vous embetez .^^
Titre: Re : Aide compteur et pickup
Posté par: S!m le 05 Décembre 2008, 22:00:58
Salut,

Ok ben j'ai tout compris , mais dans le code il y a un "i" vous pouvez me dire c'est quoi et après j'arrete de vous embetez .^^
c'est que dans la version que j'utilise, au lieu d'un SetTimerEx, je ne lance qu'un seul timer pour tous les joueurs
donc, le i est la variable de la boucle

++Sim++
Titre: Re : Aide compteur et pickup
Posté par: vincentdu90 le 06 Décembre 2008, 08:46:37
Et le SavePlayerPos ? Il sert a enregistrer la pos du joueur ? Ou c'est la variable qui contient l'ancienne valeur x ?
Titre: Re : Aide compteur et pickup
Posté par: S!m le 06 Décembre 2008, 14:59:50
Salut,

je te conseille de regarder correctement le script de r@f, tu y verra, en haut, une énumération comme suit:

enum SavePlayerPosEnum {
Float:LastX,
Float:LastY,
Float:LastZ
}

suivit de très près par :

new SavePlayerPos[maxp][SavePlayerPosEnum];c'est dans cette variable que l'on stock la position précédente du joueur.


moi je te conseillerais d'ajouter des variables avec le timer pour pouvoir l'arrêter par la suite...
comme ceci:

new UpdateSpeedTimer;

public OnGameModeInit()
{
    UpdateSpeedTimer = SetTimer("UpdateSpeed",1000,1);
    return 1;
}

Public OnGameModeExit()
{
    KillTimer(UpdateSpeedTimer);
    return 1;
}


P.S. pour mon message, précédant, je tien a m'excuser mais la version sur le forum utilise également une loop, désolé r@f :-\

++Sim++