Sign in to follow this  
Followers 0
Guest

Geolocation

2 posts in this topic

Описание:

Данный код получает информацию о IP-адресе игрока и хранит её на протяжении игровой сессии.



Плюсы реализации:

  • Судя по всему - единственный рабочий вариант, на данный момент.
  • Не нужно использовать include / plugins

И так приступим, вставляем у себя в #define

#define GEO_IP_INFO_DETECT_URL          "ip-api.com/csv/"
#define GEO_IP_INFO_DETECT_URL_FIELDS   "?fields=131793"
 
#define GEO_MAX_IP_LENGTH               16
#define GEO_MAX_COUNTRY_NAME_LENGTH     32
#define GEO_MAX_CITY_NAME_LENGTH        32
#define GEO_MAX_LAT_LON_LENGTH          12
#define GEO_MAX_PROVIDER_NAME_LENGTH    32
#define GEO_MAX_PROXY_LENGTH            6
 
enum e_PLAYER_GEO_INFORMATION
{
    player_ip[GEO_MAX_IP_LENGTH + 1],
    player_country[GEO_MAX_COUNTRY_NAME_LENGTH + 1],
    player_city[GEO_MAX_CITY_NAME_LENGTH + 1],
    player_lat[GEO_MAX_LAT_LON_LENGTH + 1],
    player_lon[GEO_MAX_LAT_LON_LENGTH + 1],
    player_provider[GEO_MAX_PROVIDER_NAME_LENGTH + 1],
    player_proxy[GEO_MAX_PROXY_LENGTH + 1]
};
new
    player_geoInfo[MAX_PLAYERS][e_PLAYER_GEO_INFORMATION];
 
#define GetPlayerCountry(%0)        player_geoInfo[%0][player_country]
#define GetPlayerCity(%0)           player_geoInfo[%0][player_city]
#define GetPlayerLatitude(%0)       player_geoInfo[%0][player_lat]
#define GetPlayerLongtitude(%0)     player_geoInfo[%0][player_lon]
#define GetPlayerProvider(%0)       player_geoInfo[%0][player_provider]
#define GetPlayerProxyStatus(%0)    player_geoInfo[%0][player_proxy]

Теперь в public OnPlayerConnect(playerid)

	GetPlayerIp(playerid, player_geoInfo[playerid][player_ip], GEO_MAX_IP_LENGTH);
 
    new
        request[31 - 2 + GEO_MAX_IP_LENGTH];
 
    strcat(request, GEO_IP_INFO_DETECT_URL);
    strcat(request, player_geoInfo[playerid][player_ip]);
    strcat(request, GEO_IP_INFO_DETECT_URL_FIELDS);
 
    HTTP(playerid, HTTP_GET, request, "", "p_geo_OnInformationRequested");

В конец мода

forward p_geo_OnInformationRequested(playerid, response_code, data[]);
public p_geo_OnInformationRequested(playerid, response_code, data[])
{
    if(response_code == 200)
    {
        sscanf(data, "p<,>s[32]s[32]s[12]s[12]s[32]s[6]",
            player_geoInfo[playerid][player_country],
            player_geoInfo[playerid][player_city],
            player_geoInfo[playerid][player_lat],
            player_geoInfo[playerid][player_lon],
            player_geoInfo[playerid][player_provider],
            player_geoInfo[playerid][player_proxy]);
    }
    else
    {
        strmid(player_geoInfo[playerid][player_country], "Неизвестно", 0, GEO_MAX_COUNTRY_NAME_LENGTH);
        strmid(player_geoInfo[playerid][player_city], "Неизвестно", 0, GEO_MAX_CITY_NAME_LENGTH);
        strmid(player_geoInfo[playerid][player_lat], "Неизвестно", 0, GEO_MAX_LAT_LON_LENGTH);
        strmid(player_geoInfo[playerid][player_lon], "Неизвестно", 0, GEO_MAX_LAT_LON_LENGTH);
        strmid(player_geoInfo[playerid][player_provider], "Неизвестно", 0, GEO_MAX_PROVIDER_NAME_LENGTH);
        strmid(player_geoInfo[playerid][player_proxy], "Неизвестно", 0, GEO_MAX_PROXY_LENGTH);
    }
    return 1;
}

Доступные макросы для использования:

GetPlayerCountry(playerid) - получить название страны, в которой сейчас находится игрок (тип значения - string).
GetPlayerCity(playerid) - получить название города, в котором сейчас находится игрок (тип значения - string).
GetPlayerLatitude(playerid) - получить координаты широты игрока (тип значения - string).
GetPlayerLongtitude(playerid) - получить координаты долготы игрока (тип значения - string).
GetPlayerProvider(playerid) - получить название провайдера игрока (тип значения - string).
GetPlayerProxyStatus(playerid) - получить информацию, использует ли игрок прокси [true/false] (тип значения - string). 

Share this post


Link to post
Share on other sites

Хорошое решение. На форуме также имеется похожее рабочее решение. Оставлю ссылку может кому-нибудь пригодится. 

Ссылка

Edited by Weishaypt

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Feris
      By Feris
      Приветствую всех, Вы ищете SA-MP серверы Freeroam ? Вот, пожалуйста!

      Языковые серверы: Английский/Чешский/Словацкий

      Посетите наши SA-MP серверы :

      Сервер 1 0.3.7 Клиентский сервер:
      Для подключения: play.superparba.eu:7777

      Сервер 2 0.3DL Клиентский сервер собственные острова и новые сюжетные миссии:
      Для подключения: Dl.superparba.eu:7777

      Сайт сервера: SuperParba.eu

      Discord: https://discord.com/invite/VRrtbsCJgb

      Почему вы должны играть на наших игровых серверах?

      SuperParba построен на создании сообщества и его характера, в котором вы можете управлять своим собственным
      бизнесом, покупать недвижимость, компании, быть членом банды - участвовать в гонках, бороться за территорию, захватывать склады в уникальной игре GANG.
      захватывать склады в уникальной системе GANG. Множество различных мероприятий от команды администрации, таких как
      Fallout, Sky (street) races, Color Dash, Runners VS Riders, Shooters VS Riders, Random events, Hit & Run,
      Тюнинг события, Дерби, Смертельные события, DM ... будут проходить каждый день и дополняться МЕГА
      событиями, которые проходят в течение нескольких недель! Мы работаем с 2008 года, сервер прошел
      через сотни полноценных обновлений из предложений по улучшению сервера от игрового
      сообщества! PARTY СЕРВЕР с игровым режимом RZE 10.1 режим попадает прямо под кожу, такова
      SuperParba!

      - Профессиональная команда администраторов, которая следит за порядком, создает веселье и помогает игрокам с любой проблемой.
      Если вы не знаете, как справиться с чем-то, используйте /ask, чтобы отправить свой вопрос напрямую к
      Администраторам, и вы получите ответ в кратчайшие сроки.

      - Для новичков был добавлен краткий учебник. Для навигации к месту запуска используйте команду
      /tutorial. Завершив учебник с 0 часов игры, новичок получит 7 дней
      премиум классик бесплатно.

      - Игроки нашли много веселья, эмоций, поворотов, друзей, новостей и воспоминаний за эти 12
      лет. Есть даже несколько реальных отношений, с которыми они познакомились в SuperParba. Это будет
      безумие, когда они расскажут об этом своим детям. Игроки рады вернуться на наш сервер, так что приходите и присоединяйтесь к нашей
      семье!

      Спасибо, что читаете.
    • panda1999
      By panda1999
      Ищу команду для открытие Торговой площадки Котороя готова вложиться на разработку писать в лс на сайте или вк https://vk.com/panda131999
      Скрин шот главной страницы


    • Zerno303
      By Zerno303


      Просмотр файла Продажа мода Race RP.
      -------------------------------------------------------------------------------------------------------------------
      ВАЖНО!
      Перед покупкой лучше спросите лишний раз, чем потом кидать претензии в мою сторону!
      -------------------------------------------------------------------------------------------------------------------
      Доброго времени суток! Этот мод подойдёт по основу и даже под открытие.
      9 уровней админки.
      Лидерки: Мэрия, ГУВД, УГИБДД, ФСБ, Больница, Автошкола, Южная ОПГ, Арзамасская ОПГ, Армия, Лыткаринская ОПГ, Батыревская ОПГ,, RECORD FM и Спецназ.
      Работы: Городской склад, Шахта, Лесопилка и Автомеханик.
      crmp 0.3e
      Нет сборки. 
      Мод-пак есть. Если понадобится пишите в лс.
      Добавил Zerno303 Добавлено 16.10.2021 Категория Моды Автор Zerno303  
    • Zerno303
      By Zerno303
      -------------------------------------------------------------------------------------------------------------------
      ВАЖНО!
      Перед покупкой лучше спросите лишний раз, чем потом кидать претензии в мою сторону!
      -------------------------------------------------------------------------------------------------------------------
      Доброго времени суток! Этот мод подойдёт по основу и даже под открытие.
      9 уровней админки.
      Лидерки: Мэрия, ГУВД, УГИБДД, ФСБ, Больница, Автошкола, Южная ОПГ, Арзамасская ОПГ, Армия, Лыткаринская ОПГ, Батыревская ОПГ,, RECORD FM и Спецназ.
      Работы: Городской склад, Шахта, Лесопилка и Автомеханик.
      crmp 0.3e
      Нет сборки. 
      Мод-пак есть. Если понадобится пишите в лс.