GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: kev375 le 01 Juillet 2007, 23:33:15

Titre: SetPlayerRaceCheckpoint
Posté par: kev375 le 01 Juillet 2007, 23:33:15
Bonsoir, j'aimerais savoir si on peut créer des courses avec SetPlayerRaceCheckpoint et comment en créer  :laugh

Voilà  :lock
Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 03 Juillet 2007, 00:43:31
Oui, on peut créer des courses avec SetPlayerRaceCheckpoint.
Tout d'abord, tu définis les coordonnées (x, y, z) de tous les checkpoints de la course, dans un tableau, c'est mieux.
Pour que la course commence, tu fais un SetPlayerRaceCheckpoint sur les premières coordonnées de ton tableau.
A chaque fois que le joueur passe un checkpoint, la callback OnPlayerEnterRaceCheckpoint est appelée. Dans cette callback, tu pointes sur l'élément suivant de ton tableau de coordonnées (sauf si le joueur vient de passer le dernier checkpoint) et tu rappelles SetPlayerRaceCheckpoint avec les nouvelles coordonnées et ainsi de suite jusqu'à la fin du tableau.

++
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 03 Juillet 2007, 14:59:31
Mec, franchement, j'ai absolument rien compris, tu peux me donner des exemples,  ça pourrait m'aider.  :happy
Merci d'avance.
Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 03 Juillet 2007, 22:23:34
Je pense que j'ai été clair, du moins si tu as les bases PAWN.
Si ce n'est pas le cas vas voir là :
http://wiki.sa-mp.com/wiki/Main_Page
Par contre, tout est en anglais.

++
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 06 Juillet 2007, 17:04:25
En gros, j'ai tout compris, mais la seule chose que j'ai à moitié compris, c'est le "tableau".
Ce ne serais pas un truc du genre :
new Float:CHECK[11][4] = { // Tableau de stockage des coordonnés des checks
{0.0,0.0,0.0,0.0}, // Laisser vide
{X,Y,Z,DIAM}, // Coordonnées Check 1
{X,Y,Z,DIAM}, // Coordonnées Check 2
{X,Y,Z,DIAM}, // Coordonnées Check 3
{X,Y,Z,DIAM}, // Coordonnées Check 4
{X,Y,Z,DIAM}, // Coordonnées Check 5
{X,Y,Z,DIAM}, // Coordonnées Check 6
{X,Y,Z,DIAM}, // Coordonnées Check 7
{X,Y,Z,DIAM}, // Coordonnées Check 8
{X,Y,Z,DIAM}, // Coordonnées Check 9
{X,Y,Z,DIAM} // Coordonnées Check 10
};


Alors? c'est sa ???
Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 06 Juillet 2007, 22:35:52
Oui, c'est ça, il ne te reste plus qu'à remplacer chaque triplet (X, Y, Z) par des coordonnées différentes qui donneront le parcours de ta course.
Pour les avoir, soit tu les récupères sur le net (si tu en trouves) soit tu prends un véhicule (lorsque tu es connecté à ton serveur) et tu parcours ta course en faisant des commandes /save aux endroits que tu juges judicieux pour placer les checkpoints.

Par contre, les valeurs DIAMS, je ne vois pas à quoi elle peuvent te servir. A priori tu n'en a pas besoin.

Autre chose (mais tu as peut-être déjà vu ça), la fonction SetPlayerRaceCheckpoint admet deux triplets (x, y, z). Le premier triplet correspond au checkpoint que tu affiches, le deuxième permet d'orienter la flèche à l'intérieur du check point.
Donc la ligne :
SetPlayerRaceCheckpoint (playerid, 0, CHECK[cp][0], CHECK[cp][1], CHECK[cp][2], CHECK[cp+1][0], CHECK[cp+1][1], CHECK[cp+1][2], 8.0);
affiche le checkpoint numero cp et fait pointer la flèche à l'intérieur du checkpoint vers le checkpoint suivant (cp+1).

Dernière chose, si le deuxième triplet est (0.0, 0.0, 0.0) alors le checkpoint affiché est celui avec le damier (fin de la course) :
SetPlayerRaceCheckpoint (playerid, 0, CHECK[Lastcp][0], CHECK[Lastcp][1], CHECK[Lastcp][2], 0.0, 0.0, 0.0, 8.0);

Voilà.
++
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 07 Juillet 2007, 09:57:15
Merci mec !
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 07 Juillet 2007, 23:34:52
Juste une petite précision, tu vois : CHECK[cp][0], CHECK[cp][1], CHECK[cp][2]  ?

ça désigne quoi ? La première ligne du tableau ??
Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 07 Juillet 2007, 23:37:56
les coordonnées du checkpoint que tu veux afficher (en l'occurence, le checkpoint numéro cp).
CHECK[cp][0] = X
CHECK[cp][1] = Y
CHECK[cp][2] = Z

++
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 07 Juillet 2007, 23:51:26
Donc si j'ai bien compris, "SetPlayerRaceCheckpoint (playerid, 0, CHECK[cp][0], CHECK[cp][1], CHECK[cp][2], CHECK[cp+1][0], CHECK[cp+1][1], CHECK[cp+1][2], 8.0);" définis les positions X,Y,Z de tout le tableau ?
Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 09 Juillet 2007, 10:14:40
Désolé, j'ai pas eu le temps de te répondre ce week-end.

Donc, résumons tout depuis le début.
Tu dois avoir un tableau avec des triplets de coordonnées :

*Editer : utilise le pastebin*

En fin de course, il faut faire un DisablePlayerRaceCheckpoint
++
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 09 Juillet 2007, 17:18:31
Super, merci, ma course marche !Mais j'ai deux petits problèmes :

1 - Pourquoi le 1er checkpoint se trouve à la campagne ?

2 - Pourquoi le dernier checkpoint ne 'apparait pas ?  :blink
Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 09 Juillet 2007, 22:28:05
Le premier checkpoint a surement les coordonnées (0.0, 0.0, 0.0) -> le centre de la carte (qui se trouve à la campagne).
Pour corriger ce problème, vires la première ligne de ton tableau de checkpoint ou bien commence commence à l'élément numéro 1 et pas 0.

Pour le dernier checkpoint, vérifies que tu n'essaies pas d'afficher un checkpoint de trop parce que si c'est le cas, tu va essayer d'afficher un checkpoint avec des coordonnées indéfinies (ça peut donc faire n'impote quoi).

++
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 10 Juillet 2007, 20:54:04
cool ! sa marche ! merci de mavoir aidé ! :happy :D
Titre: Re : SetPlayerRaceCheckpoint
Posté par: bni@ le 21 Juillet 2007, 00:57:09
slt  :)
voici le message d'error que je recoit quelqu'un pourait t'il me dire la definition svp

C:\PROGRA~1\ROCKST~1\GTASAN~1\GAMEMO~1\sftdm.pwn(155) : error 018: initialization data exceeds declared size

qrand merci :D
a+
Titre: Re : SetPlayerRaceCheckpoint
Posté par: bni@ le 21 Juillet 2007, 09:41:12
re  ;)
dsl du message j'ai trouver c'etait les checkpoints trop eloigner  ;D
par contre j'aimerai savoir ci il est possible de crer plusieurs courses dans le meme script
et si oui comment quar je ne voit vraiment pas comment faire  :(  :rules  :wall
merci a tous & a bientot  :)
Titre: Re : SetPlayerRaceCheckpoint
Posté par: Nip le 21 Juillet 2007, 15:12:22
je croi que je sai peut-etre je te dit quoi sur msn



 :happy :happy


+++++




Nip
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 22 Août 2007, 22:17:55
Comment on fais deja pour que le dernier check s'affiche svp ?
Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 22 Août 2007, 22:25:35
Pour le dernier checkpoint, tu mets 1 comme valeur dans le deuxième paramètre et 0.0 dans les trois avant derniers paramètres (coordonnées du checkpoint suivant).
Exemple :
SetPlayerRaceCheckpoint (playerid, 1, x, y, z, 0.0, 0.0, 0.0, 8.0);

++
Syg
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 29 Août 2007, 11:43:06
Merci bien mais faut mettre le dernier check dans quel callback ?  :wall
Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 29 Août 2007, 13:14:44
Au même endroit que les autres avec un test pour savoir si c'est le dernier checkpoint ou pas.

++
Syg
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 29 Août 2007, 13:46:54
Merci  :ninja
Titre: Re : SetPlayerRaceCheckpoint
Posté par: UrbanGhetto le 31 Août 2007, 14:47:20
Et comment on fais pour des rancs.

Genre, Bravo tu as fini la course 1er, Bravo tu as fini la course 2eme, ect...
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 11 Septembre 2007, 07:17:44
Désolé de revenir sur ce sujet, je n'ai pas eu vraiment le temps de tester pour le dernier checkpoint, mais hier j'ai essayer de définir le dernier check et je n'y suis pas parvenu.

http://pastebin.com/m65f09559

Dois-je utiliser RaceCheckpoint[playerid];  ???

hier j'ai fait ça pour le dernier Check :

new lastcp = RaceCheckpoint[playerid] == 21;
SetPlayerRaceCheckpoint(playerid, 1 ,CHECK[lastcp][0],CHECK[lastcp][1],CHECK[lastcp][2],0.0,0.0,0.0,8.0);


Mais ça n'a pas marché  :(  ...

Où ai-je fais une erreur ?

Voila et encore merci pour votre aide    :snip :wall















Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 11 Septembre 2007, 10:50:46
Ton problème vient de cette ligne :
new lastcp = RaceCheckpoint[playerid] == 21;
la variable lastcp va prendre la valeur 1 si RaceCheckpoint[playerid] vaut 21 et 0 sinon.
Donc quand tu l'utilises avec ton tableau de checkpoints, tu auras soit le checkpoint {0.0, 0.0, 0.0} soit {3034.581055, -2140.666504, 1.472240} mais pas le dernier.

Je te donne ma "méthode" pour gérer les checkpoints :
1 - Quand le joueur demande de faire une course (commande /race par exemple)
      -> On positionne le joueur vers le départ de la course
      -> On affiche un premier checkpoint "ligne de départ" (n° 0)
2 - Quand le joueur passe par un checkpoint
      -> Si il passe par le checkpoint 0
         -> On demarre la course (ou on demarre un compte à rebours mais moi j'ai fait simple)
         -> On affiche le checkpoint suivant (n° 1)
      -> Sinon si il passe pas un chekpoint avant l'avant dernier checkpoint
         -> On affiche le checkpoint suivant normalement
      -> Sinon si il passe par l'avant dernier checkpoint
         -> On affiche le checkpoint suivant (dernier) comme checkpoint de fin
      -> Sinon, si il pass par le dernier checkpoint
         -> Fin de la course

Voilà, en espérant que tu t'en sortes.

++
Syg
Titre: Re : SetPlayerRaceCheckpoint
Posté par: kev375 le 12 Septembre 2007, 19:56:37
Bon alors j'ai pensé a 2 solutions :

- RaceCheckpoint[playerid] = 21;
SetPlayerRaceCheckpoint(playerid, 1 ,2891.814941, -1444.550293, 10.035796,0.0,0.0,0.0,8);

ou :

-RaceCheckpoint[playerid] = 21;
}else if (RaceCheckpoint[playerid] == 21){
SetPlayerRaceCheckpoint(playerid, 1 ,2891.814941, -1444.550293, 10.035796,0.0,0.0,0.0,8);

Quelle solution est la meilleure ?

Titre: Re : SetPlayerRaceCheckpoint
Posté par: Syg le 13 Septembre 2007, 22:46:11
Je peux pas répondre, il faudrait avoir ton script en entier pour dire.
Essayes de la poster dans le pastebin : http://pastebin.gtaonline.fr/pastebin.php

++
Syg