• 03 Mai 2025, 05:59:33


Auteur Sujet: Problème Yrace  (Lu 3386 fois)

0 Membres et 1 Invité sur ce sujet

/cartman

  • Invité
Re : Problème Yrace
« Réponse #15 le: 29 Juillet 2009, 14:41:09 »
heu je te dirais sa se soir :D la je n'est pas le temps  :bangin

++

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Re : Problème Yrace
« Réponse #16 le: 29 Juillet 2009, 15:50:29 »
Salut,

j'ai pu voir quelques erreurs...

par exemple:
Angle = asin (SinAngle);//la bonne fonction n'est pas arcsin, quand on est à l'angle qui est normalement 90°, sur sa-mp l'angle est en fais 0° (tout est décaler de 90° dans le sens anti-horaire

if (RaceCheckpoints[target][0] > NormeAB)//ce test n'est pas le bon, tu dois plutôt tester si le delta-X est positif ou negatif...
{
     Angle = 180.0 - Angle;
}
else
{
     Angle = Angle - 90.0;
}

alors voilà, corrige légèrement ton code et tu aura le bon angle

++Sim++





Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Problème Yrace
« Réponse #17 le: 29 Juillet 2009, 16:41:53 »
Mais ta plus grosse erreur vient du faite que ton vecteur AB (entre le premier et le deuxième CP) est en fait le vecteur AA !!! (donc avec une norme égale à 0).

                              new target;
                                new next;


NormeAB = floatsqroot ((RaceCheckpoints[next][0]-RaceCheckpoints[target][0])*(RaceCheckpoints[next][0]-RaceCheckpoints[target][0]) + (RaceCheckpoints[next][1]-RaceCheckpoints[target][1])*(RaceCheckpoints[next][1]-RaceCheckpoints[target][1]));

SinAngle = (RaceCheckpoints[next][1]-RaceCheckpoints[target][1])/NormeAB;
Dans le code ci-dessus, target et next ne sont pas initialisés, ils valent donc 0 tous les deux.

Dans ton cas, il n'est pas nécessaire de passer par des variables car tu vas toujours faire test calcul pour les CP0 et CP1.
Mais la modification la plus facile est la suivante :

                              new target = 0; // CP de départ (0)
                                new next = 1; // Premier CP (1)

++
Syg
Courtesy of GtaManiac

Hors ligne v331

  • TRS™ let's race !!
  • *
  • Tueur en série
  • fondateur Team Racing Stunt ++stargate++
  • Messages: 103
    • Voir le profil
    • site de la team racing stunt
Re : Problème Yrace
« Réponse #18 le: 29 Juillet 2009, 16:46:30 »
 ;D ;D oula est ce qu' on pourrait me faire un bilan (un final de script) parce que la  j'ai un peu de mal.

        merci a tous

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Problème Yrace
« Réponse #19 le: 29 Juillet 2009, 16:49:48 »
Tu n'as qu'a changer ces deux lignes :
                              new target;
                                new next;


par

                              new target = 0;
                                new next = 1;

++
Syg
Courtesy of GtaManiac

Hors ligne v331

  • TRS™ let's race !!
  • *
  • Tueur en série
  • fondateur Team Racing Stunt ++stargate++
  • Messages: 103
    • Voir le profil
    • site de la team racing stunt
Re : Problème Yrace
« Réponse #20 le: 29 Juillet 2009, 16:56:24 »
ok donc :
                                                                new target = 0;
                                new next = 1;
new Float:NormeAB;
                                new Float:SinAngle;
                                new Float:Angle;


NormeAB = floatsqroot ((RaceCheckpoints[next][0]-RaceCheckpoints[target][0])*(RaceCheckpoints[next][0]-RaceCheckpoints[target][0]) + (RaceCheckpoints[next][1]-RaceCheckpoints[target][1])*(RaceCheckpoints[next][1]-RaceCheckpoints[target][1]));

SinAngle = (RaceCheckpoints[next][1]-RaceCheckpoints[target][1])/NormeAB;

Angle = asin (SinAngle); // je change ca par quoi ?


if (RaceCheckpoints[target][0] > NormeAB) //  et ca ?
{
     Angle = 180.0 - Angle;
}
else
{
     Angle = Angle - 90.0;
}

Et la le script est bon ?  ???
« Modifié: 29 Juillet 2009, 17:03:20 par v331 »

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Problème Yrace
« Réponse #21 le: 29 Juillet 2009, 17:21:45 »
Voici ton code corrigé et simplifié (avec des variables intermédiaire pour plus de clarté) :
new Float:nx, Float:tx, Float:ny, Float:ty ;
new Float:NormeAB;
new Float:Angle;

tx = RaceCheckpoints[0][0]; // X CP de départ (target)
ty = RaceCheckpoints[0][1]; // Y CP de départ (target)
nx = RaceCheckpoints[1][0]; // X Premier CP (next)
ny = RaceCheckpoints[1][1]; // Y Premier CP (next)

/* Calcul de la norme du vecteur entre le CP de départ et le premier CP */
NormeAB = floatsqroot ((nx-tx)*(nx-tx) + (ny-ty)*(ny-ty));

/* Angle formé par ce vecteur avec l'axe des Y */
Angle = asin ((ny-ty)/NormeAB);

/* Correction de l'angle dans le cas d'un angle inversé */
if (tx > nx)
{
Angle =  180.0 - Angle;
}

/* Calcul de l'angle avec l'axe des X */
Angle = Angle - 90.0;

La variable Angle est directement utilisable dans SetVehicleZAngle ou SetPlayerFacingAngle

Les corrections que j'ai faîtes sont inspirées de ce que j'utilise sur Lalu's Stunt.

++
Syg
Courtesy of GtaManiac

Hors ligne v331

  • TRS™ let's race !!
  • *
  • Tueur en série
  • fondateur Team Racing Stunt ++stargate++
  • Messages: 103
    • Voir le profil
    • site de la team racing stunt
Re : Problème Yrace
« Réponse #22 le: 29 Juillet 2009, 17:43:10 »
j'ai essyr ton script il marche pas on est figer puis rien :

dcmd_join(playerid,params[])
{
    new Float:nx, Float:tx, Float:ny, Float:ty ;
    new Float:NormeAB;
    new Float:Angle;

    tx = RaceCheckpoints[0][0]; // X CP de départ (target)
    ty = RaceCheckpoints[0][1]; // Y CP de départ (target)
    nx = RaceCheckpoints[1][0]; // X Premier CP (next)
    ny = RaceCheckpoints[1][1]; // Y Premier CP (next)

/* Calcul de la norme du vecteur entre le CP de départ et le premier CP */
    NormeAB = floatsqroot ((nx-tx)*(nx-tx) + (ny-ty)*(ny-ty));

/* Angle formé par ce vecteur avec l'axe des Y */
    SetVehicleZAngle (Angle = asin ((ny-ty)/NormeAB));

/* Correction de l'angle dans le cas d'un angle inversé */
    if (tx > nx)
    {
    Angle =  180.0 - Angle;
    }

/* Calcul de l'angle avec l'axe des X */
    Angle = Angle - 90.0;
    TogglePlayerControllable(playerid, 0);
if(RaceBuilders[playerid] != 0)
{
    SendClientMessage(playerid, COLOR_YELLOW, "You are currently building a race, can't join. Use /clearrace to exit build mode.");
    return 1;
}
help please
« Modifié: 29 Juillet 2009, 19:30:47 par v331 »

Hors ligne FuSion

  • Pawn coder
  • *
  • Grand Banditisme
  • for(new i = 0; i < INFINI; i++)
  • Messages: 888
    • Voir le profil
Re : Problème Yrace
« Réponse #23 le: 29 Juillet 2009, 19:22:00 »
Re,

S'il y'a une possibilité de poster le dcmd_join complet sa serait vraiment superbe.

Entant que tester du script de v331, j'ai remarqué que sa nous sort : Vous avez rejoins la course, et on reste freezer sur place sans téléportation ni autre.

++
FS'

/cartman

  • Invité
Re : Re : Problème Yrace
« Réponse #24 le: 29 Juillet 2009, 20:05:56 »
il te manque peut etre   /* Calcul de l'angle avec l'axe des X */   ^^






 

Hors ligne FuSion

  • Pawn coder
  • *
  • Grand Banditisme
  • for(new i = 0; i < INFINI; i++)
  • Messages: 888
    • Voir le profil
Re : Problème Yrace
« Réponse #25 le: 29 Juillet 2009, 20:17:03 »
/* Calcul de l'angle avec l'axe des X */
    Angle = Angle - 90.0;

C'est sa non ?

++
FS'

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Problème Yrace
« Réponse #26 le: 29 Juillet 2009, 21:36:44 »
Salut,

le code posté par Syg devrait être utilisé dans une fonction à part qui retournerais comme valeur l'Angle

++Sim++
« Modifié: 30 Juillet 2009, 01:50:39 par Sim »





Hors ligne v331

  • TRS™ let's race !!
  • *
  • Tueur en série
  • fondateur Team Racing Stunt ++stargate++
  • Messages: 103
    • Voir le profil
    • site de la team racing stunt
Re : Problème Yrace
« Réponse #27 le: 30 Juillet 2009, 13:36:58 »
c'est a dire ?
 ???
Je suis un peu perdu . . .  ;D ;D ;D ;D

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Problème Yrace
« Réponse #28 le: 30 Juillet 2009, 14:13:14 »
Su Lalu's, Stunt, comme vous avez pu vous en rendre compte, la commande /join permet simplement de positionner le joueur correctement sur la ligne de départ. Ensuite, l'organisateur de la course (M+, modo ou admin) va lancer la course au moyen de la commande adéquate après avoir demandé aux joueurs si ils sont prêts.

Ma réponse ne concernait que le calcul de l'angle (et comme le dit très justement Sim, ce calcul pourrait être fait dons une fonction à part qui ne fait que ça).
Pour le positionnement du joueur, il manque un téléport vers le CP de départ.
Ensuite, il te faudra écrire la commande qui permet de lancer la course (compte à rebours, messages, defreeze des joueurs, ...).

++
Syg
Courtesy of GtaManiac

Hors ligne v331

  • TRS™ let's race !!
  • *
  • Tueur en série
  • fondateur Team Racing Stunt ++stargate++
  • Messages: 103
    • Voir le profil
    • site de la team racing stunt
Re : Problème Yrace
« Réponse #29 le: 30 Juillet 2009, 15:05:12 »
la commande existe il n'y a que l'admin qui peu taper /ready et la course se lance "tout le mone est pret la course va commancer" les joueurs sont defreez , . . .

       Le probleme n'est pas la c'est  quand les joueur font /join de 1: il faut que qu'il soit dans le bon angle (ca c'est presque regler)
                                                                                       de 2: il faut que les voiture soient l'une a coter de l'autre et pour cela j'ai pensé a ca:

    #define DECALAGE_X 2
    #define DECALAGE_Y 2
    #define DECALAGE_Z 2
     new participants;
            ca au de debut

    Participants++;
    SetPlayerPos(playerid,RaceCheckpoints[0][0]+participants*DECALAGE_X,RaceCheckpoints[0][1]+participants*DECALAGE_Y,RaceCheckpoints[0][2]+participants*DECALAGE_Z);

    et  ca dans la commande /join