GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: inbox le 30 Décembre 2008, 14:58:16

Titre: [Tuto] PlayerToPoint
Posté par: inbox le 30 Décembre 2008, 14:58:16
Bonjour,

Voici un petit Tuto pour la fonction PlayerToPoint

Un exemple précis "Je Veux dire Bonjour tout le monde" avec la fonction PlayerToPoint
Si le joueur n'est pas a l'endroit précis il ne peut pas lancer le message

Voici un Exemple
            if(strcmp(cmdtext, "/message", true) == 0)
            {
            if(PlayerToPoint(playerid,10.0,2055.0913,1922.8147,12.1718))
            {
            SendClientMessageToAll(0xFFFF00AA,"Bonjour tout le monde !");
            }else{
            SendClientMessage(playerid,COLOR_WHITE,"vous êtes trop loin (Suivez le point Rouge)");
            SetPlayerCheckpoint(playerid, 2055.0913,1922.8147,12.1718, 3.0);
            }
            return 1;
            }

Le forward a mettre en haut de votre GM
forward PlayerToPoint (playerid, Float:radi, Float:x, Float:y, Float:z);

La fonction vous pouvez le mettre en bas de votre GM si vous le souhaitez.
public PlayerToPoint(playerid, Float:radi, Float:x, Float:y, Float:z)
{
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
tempposx = (oldposx -x);
tempposy = (oldposy -y);
tempposz = (oldposz -z);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
return 0;
}

Voila j'espère que le Tuto vous plaira :)

Cordialement,
Titre: Re : [Tuto] PlayerToPoint
Posté par: NatiVe™ le 30 Décembre 2008, 15:18:52
GG mais ..

Tu dit "bonjour tout le monde" avec la fonction SendClientMessage(); toi ? Met un ToAll :P

NV. 8)

Titre: Re : [Tuto] PlayerToPoint
Posté par: inbox le 30 Décembre 2008, 15:23:45
LoL
non c'est un Exemple je me suis planter c'est tout :)

Je modifie.

Cordialement,
Titre: Re : [Tuto] PlayerToPoint
Posté par: S!m le 30 Décembre 2008, 15:51:36
Salut,

Superbe tuto, par contre j'ai cru remarqué une petite chose qui m'agace...ta fonction pourrait être légèrement optimisée..
et n'a aucunement besoin d'être public (rappel: les public ne sont nécessaire que pour une fonction utilisée dans un timer ou un CallRemoteFunction)

premièrement on remplace le public par un stock (puisqu'il s'agit de l'ajout d'une fonction utile, on ne s'en servira peut-être pas mais il est pratique de l'avoir en "réserve" on pourrait même la mettre dans un include)

ensuite, tu crée énormément de nouvelle variables inutiles, ne jamais oublié que chaque variable peut être réutilisée,

ta fonction cherche pour un cube, on aura plutôt tendance à vouloir une sphere (qui sera un vrai playerToPoint, ceci serait plutôt un IsPlayerInCube)

rien de plus à dire, bon tuto, mais un code propre serait tout de même préférable...

ne pas oublié que la fonction floatpower utilise un algorithme complexe et pour un exposant petit tel que deux, il est plus avantageux d'utiliser la multiplication il en est de même pour la fonction floatsqroot

stock PlayerToPoint(playerid, Float:radi, Float:x, Float:y, Float:z)
{
new Float:posx, Float:posy, Float:posz;
GetPlayerPos(playerid, posx, posy, posz);
x -= posx;
y -= posy;
z -= posz;
if (x*x + y*y + z*z <= radi*radi)
{
return 1;
}
return 0;
}

alors voilà la fonction résultante de ces modification, et merci Y_Less pour toutes ces connaissances très utiles ^^

++Sim++
Titre: Re : [Tuto] PlayerToPoint
Posté par: inbox le 30 Décembre 2008, 16:35:00
Salut,

La fonction public n'est pas de moi mais de Y_less du forum Samp
j'ai rien changer dedans c'est a vous de le faire comme bon vous semble :)

Chacun code comme il veut.

Cordialement,
Titre: Re : [Tuto] PlayerToPoint
Posté par: Nikko™ le 30 Décembre 2008, 16:43:59
GG pour ton tuto ;)

++
nikko
Titre: Re : [Tuto] PlayerToPoint
Posté par: S!m le 30 Décembre 2008, 18:48:11
salut,

c possible, le public aurait un avantage, de pouvoir s'en servir dans un autre script, mais c'est bien plus simple et rapide de la mettre à chaque script

la mienne vien de son énorme tutoriel sur l'optimisation de code:http://forum.sa-mp.com/index.php?topic=79810.0 (http://forum.sa-mp.com/index.php?topic=79810.0)

++Sim++
Titre: Re : [Tuto] PlayerToPoint
Posté par: MrFredo le 30 Décembre 2008, 19:29:13
A propos du tuto de Y_Less je pense qu'il serait bien que quelqu'un le traduise et le mete sur ce site sa pourait aidé beaucoup de gens je pense perso j'suis pas assé bon en anglais pour le faire mais si quelqu'un est bon en anglais et a la motivation de le faire sa serait bien :)
Titre: Re : Re : [Tuto] PlayerToPoint
Posté par: S!m le 30 Décembre 2008, 23:23:07
A propos du tuto de Y_Less je pense qu'il serait bien que quelqu'un le traduise et le mete sur ce site sa pourait aidé beaucoup de gens je pense perso j'suis pas assé bon en anglais pour le faire mais si quelqu'un est bon en anglais et a la motivation de le faire sa serait bien :)

c'est certains,
J'ai fait certaines notions de bases (pas d'optimisation) en m'aidant sur les trucs que je connais moins de son tuto sur les keywords...

++Sim++