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
-
Bonsoir, j'aimerais savoir si on peut créer des courses avec SetPlayerRaceCheckpoint et comment en créer :laugh
Voilà :lock
-
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.
++
-
Mec, franchement, j'ai absolument rien compris, tu peux me donner des exemples, ça pourrait m'aider. :happy
Merci d'avance.
-
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.
++
-
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 ???
-
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à.
++
-
Merci mec !
-
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 ??
-
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
++
-
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 ?
-
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
++
-
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
-
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).
++
-
cool ! sa marche ! merci de mavoir aidé ! :happy :D
-
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+
-
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 :)
-
je croi que je sai peut-etre je te dit quoi sur msn
:happy :happy
+++++
Nip
-
Comment on fais deja pour que le dernier check s'affiche svp ?
-
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
-
Merci bien mais faut mettre le dernier check dans quel callback ? :wall
-
Au même endroit que les autres avec un test pour savoir si c'est le dernier checkpoint ou pas.
++
Syg
-
Merci :ninja
-
Et comment on fais pour des rancs.
Genre, Bravo tu as fini la course 1er, Bravo tu as fini la course 2eme, ect...
-
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
-
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
-
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 ?
-
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