• 28 Mars 2024, 11:04:36


Auteur Sujet: [TUTO] Fonction IsPlayerInArea  (Lu 13996 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne UrbanGhetto

  • *
  • Grand Banditisme
  • I PWN You !
  • Messages: 948
    • Voir le profil
    • http://h2oteam.roxorgamers.com/
[TUTO] Fonction IsPlayerInArea
« le: 14 Décembre 2007, 22:04:57 »
Bonjour, J'ai créer derniérement une petite fonction qui sert à définir une zone.

Fonction :

A mettre en haut de votre GM.

stock IsPlayerInArea(playerid,Float:max_x,Float:min_x,Float:max_y,Float:min_y)
{
new Float:X;
new Float:Y;
new Float:Z;
GetPlayerPos(playerid, X, Y, Z); // On récupére la position du joueur
if(X <= max_x && X >= min_x && Y <= max_y && Y >= min_y) { // Si le joueur est dans les cordonnées à définir
return 1;
}
return 0;
}

Comment ça marche ? :

Il y a 5 paramètres dans cette fonction

IsPlayerInArea(playerid,Float:max_x,Float:min_x,Float:max_y,Float:min_y)
Les paramètres :

  • Playerid = Récupérer l'ID du joueur.
  • max_x = Coordonnée du maximum X de la zone.
  • min_x = Coordonnée du minimum X de la zone.
  • max_y = Coordonnée du maximum Y de la zone.
  • min_y =  Coordonnée du minimum Y de la zone.

Exemple d'utilisation :

Içi, Le joueur est dans une zone, Il tape une commande et une action se produit.

if (strcmp("/vie", cmdtext, true) == 0){
if (IsPlayerInArea(playerid,397.0478, -81.74512, 2172.085, 1658.258)) { // max_x, min_x max_y, min_y
SetPlayerHealth(playerid,100); // Vie à 100%
SendClientMessage(playerid,0xFFFF00AA,"Vous êtes dans la Zone 69, Votre vie à été régénérée.");
}
return 1;
}

Pour avoir des cordonnées max_x, min_x max_y, min_y utilisez Ultimate Visual Mapper

Enjoy  :king

˙·٠•● Je dis, mieux vaut toucher à un clavier qu'a de la drogue | Le meilleur topic du forum | Ce que j'ai fait a fait de moi ce que je suis ●•٠·˙

Hors ligne R@f

  • *
  • GTAOnline Addict
  • Messages: 4655
    • Voir le profil
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #1 le: 14 Décembre 2007, 22:42:20 »
joli, utile pour les débutant ;)

je déplace dans tuto

++
R@f

Hors ligne MrFredo

  • *
  • Grand Banditisme
  • Scripteur PHP/PAWN
  • Messages: 953
    • Voir le profil
    • GTA-Hosting
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #2 le: 14 Décembre 2007, 23:18:46 »
Moi dans le mode godfather j'ai vu autre chose pour des zone  si le joueur est dans un certain "cube" autour d'un point qu'on defini ba il peux faire quelque chose

je vous montre

en haut de votre script

forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
ensuite on fait le public

public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    if(IsPlayerConnected(playerid))
{
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;
}


apres on peux utiliser sa n'importe ou

if(PlayerToPoint(1.0,playerid,X,Y,Z))
1.0 = la taille du "cube" dans laquel le joueur peux realiser l'action normalement on peux mettre la taille qu'on veux

puis playerid tout le monde connait

ensuite ya la position X,Y,Z du centre du "cube"

C'est pa moi qui l'et fait c'est juste dans le mode godfather et je vous en fait profiter

Voila sa poura p-e aider perso je m'en sert que pour des petite zone

du genre pour entré dans un batiment ou quoi

Voila si sa vous aide temps mieux




Hors ligne UrbanGhetto

  • *
  • Grand Banditisme
  • I PWN You !
  • Messages: 948
    • Voir le profil
    • http://h2oteam.roxorgamers.com/
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #3 le: 15 Décembre 2007, 17:12:31 »
Ben mon astuce est beaucoup moins court...  ???

˙·٠•● Je dis, mieux vaut toucher à un clavier qu'a de la drogue | Le meilleur topic du forum | Ce que j'ai fait a fait de moi ce que je suis ●•٠·˙

Hors ligne ApocKalipsS

  • *
  • Gangster
  • **** | Une experience GTA IV hors du commun !
  • Messages: 1141
    • Voir le profil
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #4 le: 15 Décembre 2007, 18:12:48 »
Cool, maintenant si tu pourrais édit et faire les WorldsBounds je sais plus quoi ...  :D

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #5 le: 15 Décembre 2007, 23:13:22 »
Mister-fred, soit le mode godfather est complétement buggé, soit tu as mal copié la fonction.
Ce qui m'ettone c'est quand tu dis que tu t'en sers, vu que cette fonction ne marche pas ....

Si on prend les lignes ci dessous :
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
tempposx = (oldposx -x);


A votre avis, sachant que x = 1429.123, combien vaut tempposx ?
Alors ?
Pas de réponse ?
Pourtant c'est facile, tempposx = -1429.123 !!
Et oui, oldpos n'est pas initialisé donc il vaut 0.0.
Il aurait fallu qu'il soit initialisé avec la position précédente (à la seconde précédente par exemple) du joueur.

Et contrairement à ce qu'on pourrait croire (a cause du paramèter radi = rayon), il ne s'agit pas d'un cercle (enfin d'une sphère puisqu'on est en 3D) mais d'un cube.

Donc je vous conseille d'utiliser la fonction de Urban qui a au moins le mérite de fonctionner.

++
Syg
Courtesy of GtaManiac

Hors ligne MrFredo

  • *
  • Grand Banditisme
  • Scripteur PHP/PAWN
  • Messages: 953
    • Voir le profil
    • GTA-Hosting
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #6 le: 15 Décembre 2007, 23:41:05 »
je vais verifier si je l'ai bien recopier car elle fonctionne bien je verifier et je vous dit quoi


Edit :

il me semble que je l'ai bien copier je ne comprend pas pourquoi elle ne marche pas car elle est utiliser pour beaucoup de chose sur le mode

:s

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #7 le: 16 Décembre 2007, 02:03:12 »
Houla, fatigue, fatigue (faut bien que je trouve une excuse).
C'est bon, je viens de re-regarder ta fonction, elle marche, c'est OK.
J'avais zappé le fait que la fonction GetPlayerPos porte sur les variables que je croyais non initialisées.
Autant pour moi.

Par contre, elle contrôle que le joueur est dans un cube (un carré par projection sur le sol) et non pas une sphère (un cercle par projection sur le sol).
Pour moi la fonction d'Urbanghetto est mieux car elle permet de contrôler des rectangles et non pas des carrées (on peut donc contrôler une rue, un toit d'immeuble, ...).
Il est d'ailleurs très facile de modifier la fonction d'Urban pour ajouter le contrôler de la hauteur (coordonnée Z).

Donc je m'excuse encore mister-fred, je n'ai tourné ma langue dans ma bouche que 6 fois avant de répondre à ton premier post.
T'es trop gentil de ne pas m'avoir envoyer boulé :-[.

++
Syg
Courtesy of GtaManiac

Hors ligne MrFredo

  • *
  • Grand Banditisme
  • Scripteur PHP/PAWN
  • Messages: 953
    • Voir le profil
    • GTA-Hosting
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #8 le: 16 Décembre 2007, 02:38:06 »
Lol c'est pas grave sa arrive a tout le monde

Tu ma quand meme fait vachement douté lol

Oui la fonction de urban est tres util aussi  je m'en sert beaucoup

C'elle que j'ai donné me sert principalement pour entré dans un batiment

ou definir des petite zone

:)


Hors ligne R@f

  • *
  • GTAOnline Addict
  • Messages: 4655
    • Voir le profil
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #9 le: 16 Décembre 2007, 04:02:11 »
moi je trouve le code a urban utile pour un GameMode genre counter strike, un /buy dans la zone de spawn uniquement ^^

[HS] 4h du mat de toujour debout ^^

++
R@f

Hors ligne MrFredo

  • *
  • Grand Banditisme
  • Scripteur PHP/PAWN
  • Messages: 953
    • Voir le profil
    • GTA-Hosting
Re : Re : [TUTO] Fonction IsPlayerInArea
« Réponse #10 le: 16 Décembre 2007, 04:18:19 »
moi je trouve le code a urban utile pour un GameMode genre counter strike, un /buy dans la zone de spawn uniquement ^^

[HS] 4h du mat de toujour debout ^^

++
R@f

HS moi aussi toujour debout lol je dort la journee XD

Hors ligne MultiGamers

  • *
  • Grand Banditisme
  • Serveur à bas prix ! ;)
  • Messages: 857
    • Voir le profil
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #11 le: 16 Décembre 2007, 13:19:06 »
PTDR ! Comme certains animal....  :D Ouais pas mal Urban! Très pratique pour des modes du genre counterstrike (Comme Aless a dit..)

Continue comme sa !  :)

@ +  ;)

Hors ligne R@f

  • *
  • GTAOnline Addict
  • Messages: 4655
    • Voir le profil
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #12 le: 16 Décembre 2007, 13:28:09 »
aless ? xD c'est R@f ! même que aless est a côté de moi la ^^

++
R@f

Hors ligne MultiGamers

  • *
  • Grand Banditisme
  • Serveur à bas prix ! ;)
  • Messages: 857
    • Voir le profil
Re : [TUTO] Fonction IsPlayerInArea
« Réponse #13 le: 16 Décembre 2007, 13:29:54 »
XD Le Modo fait du Hors Sujet !  :D

EDIT: Je pensais que tu appelais alless pour qu'il vienne qaund s'est moi qui ces tromper PTDR !!!
« Modifié: 18 Décembre 2007, 18:32:45 par ordixp »

Hors ligne MultiGamers

  • *
  • Grand Banditisme
  • Serveur à bas prix ! ;)
  • Messages: 857
    • Voir le profil
Re : Re : [TUTO] Fonction IsPlayerInArea
« Réponse #14 le: 19 Décembre 2007, 18:32:22 »
Moi dans le mode godfather j'ai vu autre chose pour des zone  si le joueur est dans un certain "cube" autour d'un point qu'on defini ba il peux faire quelque chose

je vous montre

en haut de votre script

forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
ensuite on fait le public

public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    if(IsPlayerConnected(playerid))
{
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;
}


apres on peux utiliser sa n'importe ou

if(PlayerToPoint(1.0,playerid,X,Y,Z))
1.0 = la taille du "cube" dans laquel le joueur peux realiser l'action normalement on peux mettre la taille qu'on veux

puis playerid tout le monde connait

ensuite ya la position X,Y,Z du centre du "cube"

C'est pa moi qui l'et fait c'est juste dans le mode godfather et je vous en fait profiter

Voila sa poura p-e aider perso je m'en sert que pour des petite zone

du genre pour entré dans un batiment ou quoi

Voila si sa vous aide temps mieux


Oui ! J'avait un bug avec des checkpoints ! Je croit avec des zones cela va marcher...  :D Il faut que sa face un cube autour du joueur !

Je teste sa en Fin de semaine. JOYEUX NOEL !!!!  :cheers

Merci et A +  ;)