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
-
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,
-
GG mais ..
Tu dit "bonjour tout le monde" avec la fonction SendClientMessage(); toi ? Met un ToAll :P
NV. 8)
-
LoL
non c'est un Exemple je me suis planter c'est tout :)
Je modifie.
Cordialement,
-
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++
-
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,
-
GG pour ton tuto ;)
++
nikko
-
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++
-
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 :)
-
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++