Многие наверное видели [Include]GeoIP by Splav - http://pawno.su/showthread.php?60377
Но в нём сервер отправляет запрос на сайт ip-whois.net/ip_geo.php напрямую.
В итоге сервер принимает код всей страницы и в ней уже находит необходимую информацию.
Я решил сделать свой вариант. В моём варианте сервер не будет принимать кучу ненужной информации. После запроса придет сразу готовая информация.
Код:
PHP код:
#include <a_samp>
#include <a_http>
stock GetPlayerGeoInfo(playerid, IP[], GeoFormat[])
{
new string[200]; //Если не хватит - увеличить
format(string, sizeof(string), "IP=%s&format=%s", IP, GeoFormat);
HTTP(playerid,HTTP_POST,"cruelgame.ru/GeoInfo.php", string,"ResponseGeoInfo");
}
forward ResponseGeoInfo(playerid, response_code, data[]);
public ResponseGeoInfo(playerid, response_code, data[])
{
//data - результат
}
Как использовать:
Функция GetPlayerGeoInfo(playerid, IP[], GeoFormat[])
Аргументы:
playerid - ид игрока
IP[] - ип для проверки
GeoFormat[] - формат запроса
Параметры для формата:
%country% - страна.
%region% - регион.
%city% - город.
Т.е. другими словами, например %country% будет заменен на страну, даже если в формате это встретится более раза.
Теперь покажу на примере...
Использование системы зависит от того, что именно Вы хотите.
PHP код:
#include <a_samp>
#include <a_http>
public OnPlayerConnect(playerid)
{
new plrIP[16];
GetPlayerIp(playerid, plrIP, sizeof(plrIP));
GetPlayerGeoInfo(playerid, plrIP, "Город: %city%, Страна: %country%, Регион: %region%.И еще раз город: %city%");
}
stock GetPlayerGeoInfo(playerid, IP[], GeoFormat[])
{
new string[200];
format(string, sizeof(string), "IP=%s&format=%s", IP, GeoFormat);
HTTP(playerid,HTTP_POST,"cruelgame.ru/GeoInfo.php", string,"ResponseGeoInfo");
}
forward ResponseGeoInfo(playerid, response_code, data[]);
public ResponseGeoInfo(playerid, response_code, data[])
{
SendClientMessage(playerid, -1, data);
}
Надеюсь, объяснил понятно