• 05 Juin 2026, 12:21:38


Auteur Sujet: Système de GPS  (Lu 1606 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Système de GPS
« le: 07 Décembre 2012, 01:15:49 »
Bonsoir,

Je voulais simplement savoir comment récupérer le nom du lieux où ont se trouve.

Je sait qu'il n'existe pas une fonction toute faite, mais je veut bien que l'ont m'explique..

J'ai regardé sur quelques script et j'ai vu ça :

enum MainZone{
Zone_Name[28], Float:Zone_Area[6] };

static const SanAndreasZones[][MainZone] = {
{"The Big Ear",                 {-410.00,1403.30,-3.00,-137.90,1681.20,200.00}},
{"Aldea Malvada",               {-1372.10,2498.50,0.00,-1277.50,2615.30,200.00}},
}

Maintenant il me faudrait, savoir si le joueur est près de cette zone ? si oui comment le faire  :happy:


Merci d'avance.

Hors ligne Malak

  • *
  • Tueur
  • Messages: 68
    • Voir le profil
Re : Système de GPS
« Réponse #1 le: 07 Décembre 2012, 09:42:55 »
Bonjour,

Code: (pawn) [Sélectionner]
#define MAX_AREA 100 //le nombre maximum de lieu
new PlayerInArea[MAX_PLAYERS][MAX_AREA]; // savoir si le joueur est dans une area anti flood
enum MainZone{
Zone_Name[28], Float:Zone_Area[6] };

static const SanAndreasZones[][MainZone] = {
{"The Big Ear",                 {-410.00,1403.30,-3.00,-137.90,1681.20,200.00}},
{"Aldea Malvada",               {-1372.10,2498.50,0.00,-1277.50,2615.30,200.00}},
}

Ce code de te permet d'identifier les area ou se situe les zones des lieux.
Maintenant tu as juste à intégrer dans un public ou une callback une conditions pour vérifier si le joueur est dans une zone ou pas.

Par exemple dans OnPlayerUpdate
Code: (pawn) [Sélectionner]
public OnPlayerUpdate(playerid)
{
     for(new area=1; area<MAX_AREA; area++)
     {
        if(IsPlayerInArea(playerid,SanAndreasZones[area][Zone_Area[0]],SanAndreasZones[area][Zone_Area[1]],SanAndreasZones[area][Zone_Area[2]],SanAndreasZones[area][Zone_Area[3]],SanAndreasZones[area][Zone_Area[4]],SanAndreasZones[area][Zone_Area[5]],SanAndreasZones[area][Zone_Area[6]])// Attention tu doit avoir la fonction isplayerinarea ou si tu as le streamer de Incognito tu peut utiliser isplayerindynamicarea que tu doit crée avant dans ongamemodeinit !
               if(PlayerInArea[playerid][area] == 0)
               {
                    GameTextForPlayer(playerid,SanAndreasZones[area][Zone_Name],3000);//Après tu peut personnaliser ton texte via un format
                    PlayerInArea[playerid][area] = area+1;
                    break;
               }
               else if(area != PlayerInArea[playerid][area]-1)//Juste pour te donner une idée, mais concrètement c'est un peu plus compliqué pour vider le cache de cette variable.
               {
                    PlayerInArea[playerid][area] = 0;
               }
           }   
        }
}


Ce code à était réaliser sur le forum est donc en aucun tester, c'est tout simplement pour t'orienter de la démarche à suivra aprés tu as des filterscript qui gère cela.

Bonne Chance à toi.

Malak++
« Modifié: 07 Décembre 2012, 09:58:37 par Malak »

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Re : Système de GPS
« Réponse #2 le: 07 Décembre 2012, 11:20:54 »
Merci, je vais essayer de me debrouiller ;)

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Système de GPS
« Réponse #3 le: 07 Décembre 2012, 16:35:34 »
Salut,

petit conseil : n'utilise pas ce code tel quel...

tu fais une boucle sur toutes les zones à chaque fois que le joueur est mis à jour, si t'as plusieurs joueurs avec des bons ping etc... ça va vite s'emballer, essaie de trouver une autre façon de faire.

Au pire des timers ou ajouter un test dans le OnPlayerUpdate pour limiter la fréquence du calcul.

Bonne chance

++Sim++