GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Infu le 02 Mai 2013, 14:21:47
-
Bonjour, chaque jours j'apprends des choses en pawn grâce à Gzsume. J'ai fait moi-même un moyen de faire apparaître un véhicule à l'aide du /v <id> col1 col 2.
Le problème étant que je souhaiterai qu'il apparaisse devant moi peut importe vers où je regarde.
Voici ma commande (pour montrer qu'il y a du travail derrière).
CMD:v(playerid, params[])
{
new vId, c1, c2, Float:posX, Float:posY, Float:posZ;
if(sscanf(params, "ii", vId, c1, c2))
{
SendClientMessage(playerid, COLOR_YELLOW, "Usage: /v <id> <col1> <col2>");
}
if(vId == 609)
{
GetPlayerPos(playerid, posX, posY, posZ);
CreateVehicle(vId, posX, posY+10.0, posZ, 0.0, c1, c2, 0);
}
else if(vId > 605 || vId < 400)
{
SendClientMessage(playerid, COLOR_RED, "L'id du véhicule doit être compris entre 400 et 605. Excepté 609 (Boxville)");
}
else
{
GetPlayerPos(playerid, posX, posY, posZ);
CreateVehicle(vId, posX, posY+10.0, posZ, 0.0, c1, c2, 0);
}
return 1;
}
J'ai volontairement fait quelques fautes, pour ne pas qu'on me prenne la commande sans rien y comprendre. Merci de votre aide. ++
EDIT: Je viens de trouver un post de Sasuke répondant à la même question. Je vois et ce que je peux faire et je dirais si j'ai résolu ou pas. ++
EDIT²: Finalement son post m'a très bien aidé. Le voici: cliquez (http://www.gtaonline.fr/forums/index.php?topic=15236.msg261276#msg261276)
-
Salut,
je te propose cette petite fonction qui utilise Thalès en gros pour déterminer le pts en face du joueur selon l'angle et la distance.
stock GetXYFront(&Float:x, &Float:y, Float:a, Float:distance)
{
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
}
GetXYBehind(&Float:x, &Float:y, Float:a, Float:distance)
{
x -= (distance * floatsin(-a, degrees));
y -= (distance * floatcos(-a, degrees));
}
donc l’utilisation je précise pour ceux qui connaisse pas trop :
new Float:X, Float:Y, Float:A;
GetPlayerFacingAngle(playerid, A);
GetPlayerPos(playerid, X, Y, Z);
GetXYFront(X, Y, A, 10.0); // on entre X et Y, la fonction store les données dans les mêmes variable
A+, Sam
:medieval_sword2:
-
Je veux pas faire mon matheux mais c'est pas du thalles, c'est de la trigo :P
-
Exacte, mais ca fait tellement loin les cours de mécanique ou tu utilisés la trigo.. et Thalès avec des forces :O c'tout comme quoi (a) :p
-
Pourquoi utilisé le sinus pour les abscisses et le cosinus pour les ordonnées ? C'est pas l'inverse ? :grin:
-
Salut,
On peut aussi utiliser la position de la camera et celle du joueur, ce qui permet, en déplaçant la caméra, de faire apparaître le véhicule n'importe ou autour de soi!
Exemple:
Coordonnées camera: 12, 32, 20
Coordonnées joueur: 10, 26, 22
donc coordonnée véhicule: 8, 20, 24
Je sais pas si je me suis fait comprendre, mais c'est bien pratique parfois :)
-
Je vois pas du tout comment m'y prendre, comme tu montres...
Mais là j'ai mon petit système de spawn, et il me plait bien :)
-
Salut,
Pourquoi utilisé le sinus pour les abscisses et le cosinus pour les ordonnées ? C'est pas l'inverse ? :grin:
simplement car les angles sont décalés de 90° sur GTA:SA, l'angle 0 pointe au nord, sur l'axe des ordonnées.
Pour l'utiliser dans ton cas, tu vas faire comme chneubeul a dit, lors de l'appel de la fonction, les valeurs de X et Y sont modifiées et il te suffit de les mettre dans ton CreateVehicle ou autre fonction.
Bonne chance
++Sim++
-
Ah ok je comprends mieux :smile:
Et, une dernière chose, je vais être embêtant mais pourquoi on prend l'opposé de l'angle face au joueur ?
Car pour le cosinus ça ne gène pas mais le sinus d'un angle et son opposé c'est pas la même chose.
-
Salut,
ça vient du fait que l'angle est décalé.
Si par exemple, je prend un angle de 90° (face à l'ouest). Je dois soustraire 1 en X pour trouver la position qui est devant le joueur. Eh bien sin(90) = 1, pas -1.
Ce serait plus "correct" de faire -floatsin.... selon moi. (inverser l'angle c'est pas toujours clair sur les conséquences...)
++Sim++
-
Mais bien sûr !
Tous est plus clair maintenant. Faut pas faire gaffe je suis un moteur deux temps je comprends pas tous du premier coup :laugh:.
Mille merci S!m !