GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Bl4st3r67 le 20 Octobre 2010, 12:31:51
-
Bonjour, j'aimerais savoir comment faire pour faire avancer en ligne droite ? (J'ai déja essayé de faire GetObjectPos(ObjectId,Pos[1][ObjectID],etc) puis MoveObject(ObjectId,Pos[1][ObjectID]+5,ect) Mais ça me fais juste avancer sur les Axes Y et X.. Pas en ligne droite (En face de l'objet).
Je sais qu'il faut faire un truc avec FloatCos et FloatSin je crois mais je vois pas comment sa marche..
Et sinon si il y avait un moyen de le faire a partir de l'angle de l'objet ?..
En gros j'aimerais faire avancer une épave de voiture quand je suis dessus en appuyant sur "O" par exemple.
Donc si vous pouviez m'aider :) Merci.
+-
-
Salut :D
Il y a cette fonction, qui pourrais te servir, tu prend sois la position de l'objet, X et Y, et l'angle A de l'objet. Ou bien celle du joueur ça dépend ou tu veux faire ^_^
GetXYFront(x, y, a, distance);
Pour le Z utilise sois MapAndreas soit tu essaie de trouver la formule pour la calculer avec le Z en plus :D
A+, Sam.
:cheers
-
Ouais, tu lui donne juste un nom de fonction.
Tien voila la fonction que je t'ai codé, je ne sais pas si elle est fonctionnel
GetXYFrontOfAngle( &x, &y, angle, distance )
{
x += distance * floatsin( -angle, degrees );
y += distance * floatcos( -angle, degrees );
}
-
Merci mais je ne vois pas où je dois mettre GetXYFrontOfAngle et comment faire pour que ça fonctionne avec le MoveObject :/ ^^'.
Si vous pourriez m'expliquer :-[ Merci ^^.
++
-
Ben la fonction tu la place ou tu veux dans le script ^^
puis ensuite tu prend la position du joueur par exemple
new Float:X, Float:Y, Float:Z, Float:A;
GetPlayerPos(playerid,X, Y, Z);
GetPlayerFacingAngle(playerid, a);
GetXYFrontOfAngle( X, Y, A, 20.0 ); // 20.0 pour aller chercher à une certaine distance et pas si la vitesse est faible, se retrouver avec un objet qui s'arrete et redemarre ^^ Mais ça a la limite tu le règle comme tu veux ;)
MoveObject(objectid, X, Y, Z, vitesse); // met ce que tu veux ;) ( j'ai un doute sur les paramétres j'fais de têtes ^^
Sam.
:cheers
-
new Float:x = 0.0, Float:y = 0.0, Float:z = 0.0;
new Float:ax = 0.0, Float:ay = 0.0, Float:az = 0.0;
GetObjectPos( objectid, x, y, z );
GetObjectRot( objectid, ax, ay, az );
GetXYFrontOfAngle( x, y, az, 20 );
MoveObject( objectid, x, y, z, 10 );
-
Bien vu, Sasuke :D
Par contre pour la vitesse de mouvement à 10 c'est énorme x'P
-
Ouais, c'était juste un exemple ^^
Sinon il pourrai y avoir un problème avec l'angle, tu aurai juste à ajuster la variable az en ajoutant ou retirant 90 degrés ( ou plus )
-
La vitesse passée en paramètre à MoveObject doit être donnée en unitée de distance/seconde. Sous SAMP, l'unité de distance peut être confondue avec le mètre.
Ce qui nous donne 10 m/s soit une vitesse de 10*3600/1000 = 36 km/h. Je ne dirais donc pas que c'est énorme.
++
Syg
-
J'avais oublié que c'étais une voiture :bangin
:lmao
-
Merci :) Mais j'ai deux erreurs xD :
C:\Users\NevadaKee\Desktop\Serveur\gamemodes\TEST.pwn(146) : error 017: undefined symbol "GetXYFrontOfAngle"
C:\Users\NevadaKee\Desktop\Serveur\gamemodes\TEST.pwn(168) : error 017: undefined symbol "GetXYFrontOfAngle"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
2 Errors.
Voilà le code.. ^^ :
if (strcmp("/Avancer", cmdtext, true, 10) == 0)
{
if(IsPlayerConnected(playerid))
{
if(InfosJoueur[playerid][Test1]==1) // Test
{
GetObjectPos( Test, x, y, z );
GetObjectRot( Test, ax, ay, az );
GetObjectPos( TestBis, x, y, z );
GetObjectRot( TestBis, ax, ay, az );
GetXYFrontOfAngle( x, y, az, 20 );
MoveObject(Test,x+100000,y,z,6);
MoveObject(TestBis,x+100000,y,z,6);
}
else if(InfosJoueur[playerid][Test1]==0)
{
SendClientMessage(playerid, COLOR_RED, "Tu ne peux pas tester."); // Faites pas gaffe a ce que j'ai écrit xD
}
}
return 1;
}
Merci de m'aider si vous pouvez :P ^^.
++
-
béh tu n'as pas inclut mon code, met ça tout en dessous de ton script
GetXYFrontOfAngle( &x, &y, angle, distance )
{
x += distance * floatsin( -angle, degrees );
y += distance * floatcos( -angle, degrees );
}
-
Ha ok ^^, merci =). Sinon mon code était juste ?
Merci, Bonne soirée =)
++
-
x+100000 ?? Oo ?
-
Il n'a rien du comprendre à mon code et à ce qu'il faut faire :p
-
Enfaite au debut j'avais betement fait un truc qui ressemblait a ça:
en haut du script j'avais mis un truc dans lgenre : new Float:Pos[MAX_OBJECTS][4];
Et pour la commande j'avais fait GetObjectPos(test,Pos[test][0],Pos[test][1],Pos[test][2]);
MoveObject(test,Pos[test][0]+1000000,Pos[test][1],Pos[test][2]);
J'avais mis 1000000 car je voulais que l'objet bouge jusqu'à qu'on fasse /stop. Et en effet je n'ais pas trop compris comment fonctionne ton code Sasuke ^^'.
++