GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Disa25 le 29 Octobre 2009, 11:46:18

Titre: Radars Automatiques
Posté par: Disa25 le 29 Octobre 2009, 11:46:18
Bonjour,sur mon serveur RP je voudrais incorporer un systeme de radars automatiques.J'ai cherché dans votre forum,il a beaucoup de sujet qui en parle mais je ne comprend pas trop.J'aurais besoin d'aide ou par exemple d'un exmple de radars pour miex comprendre s'il vous plait.Merci.
Titre: Re : Radars Automatiques
Posté par: scott1 le 31 Octobre 2009, 18:14:04
J'en cherche un comme toi ^^
Titre: Re : Radars Automatiques
Posté par: Ssk le 31 Octobre 2009, 19:27:41
Go >>>> forum samp
Titre: Re : Radars Automatiques
Posté par: scott1 le 31 Octobre 2009, 20:05:35
J'ai pas trouver, si quelqu'un trouve qu'il me fasse signe.
Titre: Re : Re : Radars Automatiques
Posté par: Mr_C30 le 31 Octobre 2009, 20:36:01
Go >>>> forum samp
ou le périphe de ta ville   :dry    >:(     :dejadehors


non sinon tu peut t'aider d'un compteur ou cherche sur le forum samp ;)

++
Titre: Re : Radars Automatiques
Posté par: scott1 le 02 Novembre 2009, 17:26:04
M'aider d'un compteur?
Titre: Re : Radars Automatiques
Posté par: S!m le 03 Novembre 2009, 01:48:57
Salut,

simple remarque, vous pouvez désormais utiliser GetPlayerVelocity...

pour avoir la vitesse en km/h:

Float:GetPlayerSpeed(playerid)
{
    new Float:X, Float:Y, Float:Z;
    new vehid;
    if((vehid = GetVehicleID(playerid)))
    {
        GetVehicleVelocity(vehid, X, Y, Z);
    }
    else
    {
        GetPlayerVelocity(playerid, X, Y, Z);
    }
    return (floatsqroot(X * X + Y * Y + Z * Z) * 180);
}

voilà qui devrait simplifier la création d'un radar...

++Sim++
Titre: Re : Radars Automatiques
Posté par: MrFredo le 03 Novembre 2009, 11:07:34
Tanks pour la fonction sa m'evitera de la refaire

ps: je prepare une include pour un systeme de radar automatique (sur base du code que j'avait fait pour mon ancien serveur)
Titre: Re : Re : Radars Automatiques
Posté par: scott1 le 03 Novembre 2009, 12:55:04
Salut,

simple remarque, vous pouvez désormais utiliser GetPlayerVelocity...

pour avoir la vitesse en km/h:

Float:GetPlayerSpeed(playerid)
{
    new Float:X, Float:Y, Float:Z;
    new vehid;
    if((vehid = GetVehicleID(playerid)))
    {
        GetVehicleVelocity(vehid, X, Y, Z);
    }
    else
    {
        GetPlayerVelocity(playerid, X, Y, Z);
    }
    return (floatsqroot(X * X + Y * Y + Z * Z) * 180);
}

voilà qui devrait simplifier la création d'un radar...

++Sim++

Peux tu un peux m'expliquer a quoi correspond chaque terme? J'abuse un peux de toi :s
Titre: Re : Radars Automatiques
Posté par: Ssk le 03 Novembre 2009, 13:57:28
Float:GetPlayerSpeed(playerid) // ici on declare une fonction comme si on fesais new mais pour une fonction
{
    new Float:X, Float:Y, Float:Z; // ici on declare les variable qui vont contenir des position pour calculer la vitesse ( ce n est oas vraiment des position moi meme je ne sais pas pourquoi on a besoin de 3 variable)
    new vehid; // ici on declare une variable qui va contenir l id du vehicule
    if((vehid = GetVehicleID(playerid))) // ici on regarde si le gars est dans une vehicule et s l est dedans on prend l id du vehicule qu on stocke dans la variable vehid
    {
        GetVehicleVelocity(vehid, X, Y, Z); // la on prend la vitesse
    }
    else // la si le joueur est a pied
    {
        GetPlayerVelocity(playerid, X, Y, Z); // on prend ca vitesse a pied
    }
    return (floatsqroot(X * X + Y * Y + Z * Z) * 180); // ici on retourne la valeur de la vitesse comme si on calculer la distance mais on multiplie par 180 pour avoir le tout en KM/h
}
Titre: Re : Radars Automatiques
Posté par: rafffel le 03 Novembre 2009, 14:09:02
c'est moi ou dans le script il ne passera jamais dans else?

j'aurai plutot mis sa moi :

Float:GetPlayerSpeed(playerid) // ici on declare une fonction comme si on fesais new mais pour une fonction
{
    new Float:X, Float:Y, Float:Z; // ici on declare les variable qui vont contenir des position pour calculer la vitesse ( ce n est oas vraiment des position moi meme je ne sais pas pourquoi on a besoin de 3 variable)
    new vehid; // ici on declare une variable qui va contenir l id du vehicule
    if(IsPlayerInAnyVehicle(playerid)) // ici on regarde si le gars est dans une vehicule
    {
        vehid =  GetPlayerVehicleID(playerid) // on recupere l'id du vehicule
        GetVehicleVelocity(vehid, X, Y, Z); // la on prend la vitesse
    }
    else // la si le joueur est a pied
    {
        GetPlayerVelocity(playerid, X, Y, Z); // on prend ca vitesse a pied
    }
    return (floatsqroot(X * X + Y * Y + Z * Z) * 180); // ici on retourne la valeur de la vitesse comme si on calculer la distance mais on multiplie par 180 pour avoir le tout en KM/h
}

de plus la fonction GetVehicleID(playerid) n'existe pas c'est GetPlayerVehicleID

Titre: Re : Radars Automatiques
Posté par: Syg le 03 Novembre 2009, 15:03:11
Ta solution est meilleure rafffel car elle est plus claire.
Mais celle de Sim fonctionne quand même.
GetPlayerVehicleID renvoie 0 si le joueur n'est pas dans un véhicule donc le test va fonctionner.
Ceci fonctionne car il n'y a pas de véhicule avec l'ID 0, le premier véhicule créé à l'ID 1.

Je conseille fortement d'éviter ce genre de raccourci qui peut être source d'erreur.
Je préconise donc la fonction de rafffel.

++
Syg
Titre: Re : Radars Automatiques
Posté par: rafffel le 03 Novembre 2009, 15:21:06
A bon .

Si on met if(0) il ne passera jamais dans le if ?
Je pensais que c'etait a travers un true ou false qu'il jugeait si la condition etait bonne ou non .

et comme justement  GetPlayerVehicleID renvoie 0  ce n'est pas false .

en plus c'est le retour de l'assignation de la variable qui est juger non?

donc si on met 0 dans vehid l'operation d'assignation retournera true .

Faudrat que je fasse des test.

J'avance ça sans vraiment être sur .

Edit : j'ai dit que des conneries XD if(0) ne passe pas .

on peut juger sur une assignation si c'est egal a 0 c'est comme si on avait false.
Titre: Re : Radars Automatiques
Posté par: Syg le 03 Novembre 2009, 15:45:00
Un test est vrai si la valeur testée est différente de 0.

Donc on passera dans un if si ce qui est à l'intérieur des parenthèses (=le résultat de l'évaluation du test) est différent de 0.

1) Dans le cas d'un test sur une variable seule, c'est simple, si la valeur de la variable est différente de 0 on "entre" dans le if.
if (IsLogged[playerid])
{
   printf ("Joueur logué");
}

2) Dans le cas où l'on teste l'appel d'un fonction, c'est la valeur de retour de la fonction qui est évalué. Si la fonction retourne 0, on n'entre pas dans le test.
if (IsPlayerAdmin (playerid))
{
   printf ("Joueur admin");
}

3) Dans le cas d'une comparaison, la valeur évaluée est celle du résultat de la comparaison qui peut être soit vrai (=1), soit faux (=0)
if (a==3)
{
   printf ("a vaut 3");
}

4) Dans le cas où l'on teste une affectation, c'est la valeur de la variable la plus à gauche qui est évaluée. On retombe dans le cas 1)
if (Vid=GetPlayerVehicleID (playerid))
{
   printf ("Le joueur est dans un véhicule");
}
Il est même possible de faire plusieurs affectations en une seule ligne :
if (a=b=c=GetPlayerVehicleID (playerid))
{
   printf ("a, b et c ont la valeur du vehicleID");
}
else
{
   printf ("a, b et c valent tous 0");
}
Dans le cas ci-dessus, c'est normalement la valeur de a qui est utilisée mais comme toutes les variables ont forcément la même valeur, ça n'a aucune importance.


Dans le cas d'un test multiple il suffit de savoir que le signe && correspond à un multiplication et le signe || à une addition.

Par exemple :
<Expression1> && <Expression2>
Le résultat évalué est valeur de (Expression1) multipliée par valeur de (Expression2)
Donc si l'une des deux vaut 0, le résultat vaudra 0.

<Expression1> || <Expression2>
Le résultat évalué est valeur de (Expression1) plus valeur de (Expression2)
Donc le résultat vaudra 0, 1 ou 2 selon les cas.

Dans les deux exemples ci-dessus, <Expression1> et <Expression2> peuvent être n'importe quel des 4 cas cités plus haut.

++
Syg
Titre: Re : Radars Automatiques
Posté par: rafffel le 03 Novembre 2009, 15:57:49
merci syg on en apprend tout les jours même si pour le coup j'ai un peut honte XD un simple if de base et je dis n'importe quoi ^^.
Titre: Re : Radars Automatiques
Posté par: Ssk le 03 Novembre 2009, 19:13:22
j' aurais une question syg


True est egal a quoi ? en chiffre
de meme pour false ( j en deduit que c 'est egal a 0)
Titre: Re : Radars Automatiques
Posté par: MrFredo le 03 Novembre 2009, 19:17:25
true vaut 1 si j'me trompe pas


ps: bonne nouvelle j'ai presque fini mon include me reste a faire un ti GM pour tester si tout fonctionne correctement ;)
Titre: Re : Radars Automatiques
Posté par: Ssk le 03 Novembre 2009, 19:18:16
Béh d apres mes connaissance true vaut (> 0) ou (<0 pas sur)
Titre: Re : Radars Automatiques
Posté par: ghm94 le 03 Novembre 2009, 19:30:14
true c'est >0 et false 0.
Pour tester fait sa (en C) :
int v = 0;
if(v)
{
    printf("Vrai\n");
}
else
{
    printf("Faux\n");
}

Et test avec plusieurs valeur tu verra ;)
Enfin tu doit connaitre je pense :)
Titre: Re : Radars Automatiques
Posté par: MrFredo le 03 Novembre 2009, 20:05:41
Je profite de se post pour signaler que j'ai presque fini mon include pour un systeme de radar, demain j'commence les test si vous vous debrouillez bien en pawn et que vous voulez m'aider pour les test envoyer moi un MP ;)
Titre: Re : Re : Radars Automatiques
Posté par: Ssk le 03 Novembre 2009, 20:57:42
true c'est >0 et false 0.
Pour tester fait sa (en C) :
int v = 0;
if(v)
{
    printf("Vrai\n");
}
else
{
    printf("Faux\n");
}

Et test avec plusieurs valeur tu verra ;)
Enfin tu doit connaitre je pense :)


Ouais je connaissais mais je me demande si true le boolean a une valeur a lui une valeur propre
Titre: Re : Radars Automatiques
Posté par: ghm94 le 03 Novembre 2009, 21:13:55
Ah ben moi ce que j'ai appris c'est qu'il a juste une valeur différente de 0
Titre: Re : Radars Automatiques
Posté par: Syg le 03 Novembre 2009, 23:47:45
True (vrai) est une constante et a, comme le dit sasuke, pour valeur 1. Pour s'en convaincre, il suffit de rajouter la ligne suivante dans un script pawn : printf ("true=%d", true); qui produira l'affichage true=1
False (faux) quand à lui, a pour valeur 0 (on peut faire la même chose que pour true).

La négation de l'un des deux (vrai ou faux) donne l'autre (!false=!0=true=1 et !true=!1=!2=!3=...=false=0).
On peut très facilement tester tout ceci avec des printfs dans le main d'un gamemode.

En C ou en PAWN, un test est TOUJOURS une comparaison d'une expression avec 0. Si l'expression vaut 0, le corps du test n'est pas effectué.
L'instruction if n'utilise pas true et false pour savoir si le code sera exécuté ou non, elle n'utilise que 0.
De ce fait, par abus de language, on considère que ce qui n'est pas égal à 0 (faux) est vrai (donc égal à 1).
Et quand je parle d'expression, je parle de la valeur finale de ce qui est contenu entre les parenthèses qui suivent le if.
Ex :
if (IsplayerAdmin(playerid) && Vid=GetPlayerVehicleID(playerid) && (score[playerid]==50 || score[playerid]==60))
{
   printf ("L'expression à une valeur différente de 0");
}

Ce qui est en gras est l'expression qui sera évaluée au moment du test puis comparée à 0. Dans cet exemple, l'expression vaudra 0 ou 1 à cause de la présence des opérateurs &&.

Mais dans l'exemple suivant, l'expression peut prendre n'importe quelle valeur entre 0 et 10000 :
if (Alea=random(10001))
{
    printf ("Le nombre choisi est %d", Alea);
}
else
{
   printf ("Le nombre choisi est 0");
}


Mais comme je le disais précédemment, je déconseille fortement de mettre des affectations dans un test.
Un des risques d'une telle utilisation vient du fait que l'expression peut ne pas être évalué dans sa totalité.
Dans le test suivant, la variable Alea ne sera renseignée que si b vaut 7. Si b ne vaut pas 7, l'instruction Alea=random(10001) ne sera pas exécutée.
if (b==7 && Alea=random(10001))

Exemple concret :
new a=10005, b=2;
if (b==2 && (a=random(10001)))
printf ("b=%d, a=%d", b, a);
else
printf ("b=%d, a=%d", b, a);

a=10005;
if (b==3 && (a=random(10001)))
printf ("b=%d, a=%d", b, a);
else
printf ("b=%d, a=%d", b, a);
Ce bout de code produit l'affichage suivant :
b=2, a=1655
b=2, a=10005

NB : Ce qui est en gras peux varier car c'est un nombre aléatoire.

La valeur 10005 ne pouvant pas être obtenue avec random(10001) c'est que, dans le deuxième test, l'instruction a=random(10001) n'a pas été exécutée.

++
Syg

Titre: Re : Radars Automatiques
Posté par: Ssk le 04 Novembre 2009, 00:35:51
Merci syg pour ces precision =)
Titre: Re : Radars Automatiques
Posté par: MrFredo le 05 Novembre 2009, 15:26:47
Salut,

Juste pour prevenir que j'ai casiment terminé mon include de radar , j'ai encore un dernier test a faire pour sortir un premiere version public j'aurait besoin de voir si lorsqu'il ya plusieurs joueur le systeme marche tjr aussi bien

Pour sa j'ai ouvert un serveur (0.3a) : 94.23.208.227:7770

Je vous invite a vous y connecter et utiliser les voiture que j'ai spawn pour passé devant les radar et voir si tout fonctionne bien.

Le mot de passe est: gtaonline


Titre: Re : Radars Automatiques
Posté par: cristab le 05 Novembre 2009, 15:44:31
GG Mr Fredo fonctionnelle a souhaite avec l'effet de flash de surcroit ^^

Titre: Re : Radars Automatiques
Posté par: MrFredo le 05 Novembre 2009, 15:57:07
:D

Normalement se soir j'met l'include en telechargement :)
Titre: Re : Radars Automatiques
Posté par: Ssk le 05 Novembre 2009, 16:28:13
Tester et approuver ^^
Titre: Re : Radars Automatiques
Posté par: Diablo62 le 05 Novembre 2009, 16:31:48
De même :)
Titre: Re : Radars Automatiques
Posté par: scott1 le 05 Novembre 2009, 18:08:08
Une seul chose a dire, GENIAL, bravo, et l'effet du flash Hmmm je me suis régalé xD
Titre: Re : Radars Automatiques
Posté par: S!m le 06 Novembre 2009, 00:28:07
Salut,

en voyant le screen, peut-être une petite correction:

Flasher à %d. Vitesse maximum autoriser: %d.

>>

Flashé à %d. Vitesse maximale autorisée: %d.

mais c'est pas dans l'include ça je croit...

++Sim++
Titre: Re : Re : Radars Automatiques
Posté par: Diablo62 le 06 Novembre 2009, 00:43:14
Salut,

en voyant le screen, peut-être une petite correction:

Flasher à %d. Vitesse maximum autoriser: %d.

>>

Flashé à %d. Vitesse maximale autorisée: %d.

mais c'est pas dans l'include ça je croit...

++Sim++

Les fautes ne sont pas un gros problème. Il suffit juste de modifier un peu l'orthographe soit même (la moindre des choses quand on sait que le système fonctionne ;) )
Titre: Re : Radars Automatiques
Posté par: MrFredo le 06 Novembre 2009, 12:53:08
De toute facon le message c'est juste dans le FS de demo (qui sert uniquement a montrer comment utiliser les fonction de creation de radar)

Desolé je n'ai pas pu poster l'inc hier soir j'la posterai normalement se soir si j'suis la