Помогите разобраться с GeoIP -
Johhnyllll - 20.12.2016
Добрый день/ночь/утро, не давно мне понадобился плагин которые определяет местоположение IP-шника игрока, я такой плагин нашел, поставил, вроде всё компилируется, но, проблема в том что я не понимаю как им пользоваться, уроков/мануалов нету, как русскоязычных так и англоязычных...
Поэтому помогите разобраться как использовать функций данного плагина.Все ссылки будут ниже.
Тема:
https://sampforum.blast.hk/showthread.php?tid=296171
GitHub:
https://github.com/Whitetigerswt/SAMP-geoip
Re: Помогите разобраться с GeoIP -
Stuntff - 20.12.2016
Можешь использовать это:
Code:
OnPlayerConnect:
new pip[16],str[124];
GetPlayerIp(playerid, pip, 16);
format(str, sizeof(str),"api.ipinfodb.com/v3/ip-country/?key=e865d96b7c0266c2b999598ec728386193141fa7dde10af5696615f5a1b3cae1&ip=%s",pip);
HTTP(playerid, HTTP_GET, str, "", "getPlayerCountry");
В конец мода:
forward getPlayerCountry(index, response_code, data[]);
public getPlayerCountry(index, response_code, data[])
{
if(response_code == 200)
{
new buffer[84],str[42],country[20];
format(buffer, sizeof(buffer), "%s", data);
strmid(str, buffer, 4, strlen(buffer));
strmid(country, str, strfind(str, ";", true) + 4, strlen(buffer));
format(pData[index][pCountry], 20, "%s", country);
}
else format(pData[index][pCountry], 5, "moon");
return 1;
}
Re: Помогите разобраться с GeoIP -
S4D - 20.12.2016
PHP Code:
cmd:myip(playerid)
{
new ip[16], country[32], isp[32], city[32], string[144];
GetPlayerIp(playerid, ip, 16);
GetIPCountry(ip, country, sizeof country);
GetIPISP(ip, isp, sizeof isp);
GetIPCity(ip, city, sizeof city);
format(string, sizeof string, "Страна: %s, город: %s, провайдер: %s", country, city, isp);
SendClientMessage(playerid, -1, string);
return 1;
}
ты чего
Re: Помогите разобраться с GeoIP -
Johhnyllll - 20.12.2016
Пишет:
PHP Code:
Страна: Unknown, город: Unknown, провайдер: Unknown
Re: Помогите разобраться с GeoIP -
Silicium - 20.12.2016
А ты бд геоипа в scriptfiles поместил? (вопрос глупый, конечно, но всё же)
Re: Помогите разобраться с GeoIP -
Diman777 - 20.12.2016
Quote:
Originally Posted by Johhnyllll
я такой плагин нашел
|
Ну во-первых это не плагин, там только инклуд и базы данных.
Quote:
Originally Posted by Johhnyllll
я не понимаю как им пользоваться
|
Это фигово для тебя. Чтобы это понять почитай как пользоваться функциями в языке Pawn, это не сложно. Также почитай на википедии, что такое плагин, инклуд, база данных, хотя бы азы.
Quote:
Originally Posted by Johhnyllll
уроков/мануалов нету, как русскоязычных так и англоязычных...
|
Да ладно? В этой же теме (1-ый пост самого создателя) небольшое описание есть (переведи на русский язык, с помощью переводчика) + в инклуде есть ф-ии, которыми надо пользоваться.
Quote:
Originally Posted by Johhnyllll
Страна: Unknown, город: Unknown, провайдер: Unknown
|
Ты проверяешь на локалке? Какой ип-адрес у тебя когда ты юзаешь эту команду? Если ип 127.0.0.1, то это локалка, Unknown - всегда на ней будет.
Чтобы удостовериться в том, что всё работает, то проверь вот так:
PHP Code:
public OnGameModeInit()
{
// Здесь абсолютно любой ип-адрес можно написать
new ip[] = "176.117.75.71";
new country[64 + 1];
GetIpCountry(ip, country, sizeof country);
new city[64 + 1];
GetIpCity(ip, city, sizeof city);
new isp[256 + 1];
GetIpISP(ip, isp, sizeof isp);
printf("ip = '%s'", ip);
printf("country = '%s'", country);
printf("city = '%s'", city);
printf("isp = '%s'", isp);
}
Если всё норм, то в консоли ты увидишь такое [лично проверил]:
ip = '82.208.101.103'
country = 'Russian Federation'
city = 'Nizhniy Novgorod'
isp = 'AS43975 OJSC Rostelecom'
Quote:
Originally Posted by Stuntff
Можешь использовать это:
|
Никому не советую, вдруг навернётся сайт, и вообще это по скорости не очень будет.
Quote:
Originally Posted by Stuntff
"В конец мода кинь да и всё..."
|
Хороший совет, без комментариев)
Re: Помогите разобраться с GeoIP -
Stuntff - 21.12.2016
Quote:
Originally Posted by Diman777
Ну во-первых это не плагин, там только инклуд и базы данных.
Это фигово для тебя. Чтобы это понять почитай как пользоваться функциями в языке Pawn, это не сложно. Также почитай на википедии, что такое плагин, инклуд, база данных, хотя бы азы.
Да ладно? В этой же теме (1-ый пост самого создателя) небольшое описание есть (переведи на русский язык, с помощью переводчика) + в инклуде есть ф-ии, которыми надо пользоваться.
Ты проверяешь на локалке? Какой ип-адрес у тебя когда ты юзаешь эту команду? Если ип 127.0.0.1, то это локалка, Unknown - всегда на ней будет.
Чтобы удостовериться в том, что всё работает, то проверь вот так:
PHP Code:
public OnGameModeInit()
{
// Здесь абсолютно любой ип-адрес можно написать
new ip[] = "176.117.75.71";
new country[64 + 1];
GetIpCountry(ip, country, sizeof country);
new city[64 + 1];
GetIpCity(ip, city, sizeof city);
new isp[256 + 1];
GetIpISP(ip, isp, sizeof isp);
printf("ip = '%s'", ip);
printf("country = '%s'", country);
printf("city = '%s'", city);
printf("isp = '%s'", isp);
}
Если всё норм, то в консоли ты увидишь такое [лично проверил]:
ip = '82.208.101.103'
country = 'Russian Federation'
city = 'Nizhniy Novgorod'
isp = 'AS43975 OJSC Rostelecom'
Никому не советую, вдруг навернётся сайт, и вообще это по скорости не очень будет.
Хороший совет, без комментариев)
|
Этот сайт работает с 2010 года и без сбоев. Что мешает добавить функцию отключить/включить GeoIP при входе? Что забавного в фразе "В конец мода"?
Re: Помогите разобраться с GeoIP -
S4D - 21.12.2016
Quote:
Originally Posted by Stuntff
Этот сайт работает с 2010 года и без сбоев. Что мешает добавить функцию отключить/включить GeoIP при входе?
|
у сайта пинг > 200, да и вообще, надеяться на какие-то левые сайты -- не круто
Re: Помогите разобраться с GeoIP -
Johhnyllll - 21.12.2016
Quote:
Originally Posted by Diman777
Ну во-первых это не плагин, там только инклуд и базы данных.
Это фигово для тебя. Чтобы это понять почитай как пользоваться функциями в языке Pawn, это не сложно. Также почитай на википедии, что такое плагин, инклуд, база данных, хотя бы азы.
Да ладно? В этой же теме (1-ый пост самого создателя) небольшое описание есть (переведи на русский язык, с помощью переводчика) + в инклуде есть ф-ии, которыми надо пользоваться.
Ты проверяешь на локалке? Какой ип-адрес у тебя когда ты юзаешь эту команду? Если ип 127.0.0.1, то это локалка, Unknown - всегда на ней будет.
Чтобы удостовериться в том, что всё работает, то проверь вот так:
PHP Code:
public OnGameModeInit()
{
// Здесь абсолютно любой ип-адрес можно написать
new ip[] = "176.117.75.71";
new country[64 + 1];
GetIpCountry(ip, country, sizeof country);
new city[64 + 1];
GetIpCity(ip, city, sizeof city);
new isp[256 + 1];
GetIpISP(ip, isp, sizeof isp);
printf("ip = '%s'", ip);
printf("country = '%s'", country);
printf("city = '%s'", city);
printf("isp = '%s'", isp);
}
Если всё норм, то в консоли ты увидишь такое [лично проверил]:
ip = '82.208.101.103'
country = 'Russian Federation'
city = 'Nizhniy Novgorod'
isp = 'AS43975 OJSC Rostelecom'
Никому не советую, вдруг навернётся сайт, и вообще это по скорости не очень будет.
Хороший совет, без комментариев)
|
Спасибо, всё работает, некоторые азы в PAWN я знаю, есть опыт в этом.
И правда, я проверял на локалке(127.0.0.0)...Недо думал
Re: Помогите разобраться с GeoIP -
Johhnyllll - 21.12.2016
Разобрался с системой, теперь нужно сделать функцию которая определяет страну по IP, у инклуда по стандарту это:
PHP Code:
stock GetPlayerCountry(playerid, string[], const len = sizeof(string)) {
new ip[24];
GetPlayerIp(playerid, ip, sizeof(ip));
GetIPCountry(ip, string, len);
return true;
}
//В моем случае это p_last_ip
Что-бы узнать в какой стране был зареган акк, я сделал так:
PHP Code:
stock GetPlayerRegCountry(playerid, string[], const len = sizeof(string)) {
new ip[] = "178.168.98.70";
GetIPCountry(ip, string, len);
return true;
}
Но дело в том что я дал переменной
ip константу
178.168.98.70,но для меня это не вариант, ибо не буду же я ставить IP игроков в ручную, для рег. IP у меня есть переменная
p_reg_ip в которую и записывается IP игрока когда он зарегистрировался,я подумал над этим и появились несколько вариантов, которые оказались неработоспособны.Если сделать к примеру так:
PHP Code:
stock GetPlayerRegCountry(playerid, string[], const len = sizeof(string)) {
new ip[] = P[playerid][p_reg_ip];
GetIPCountry(ip, string, len);
return true;
}
Выдает ошибку или же так:
PHP Code:
...
new ip = P[playerid][p_reg_ip];
...
Нужен хотя-бы совет как это всё сделать работоспособным...
//UPDATED
Работает:
PHP Code:
stock GetPlayerRegCountry(playerid, string[], const len = sizeof(string)) {
GetIPCountry(P[playerid][p_reg_ip], string, len);
return true;
}
Re: Помогите разобраться с GeoIP -
Diman777 - 21.12.2016
Quote:
Originally Posted by Stuntff
Этот сайт работает с 2010 года и без сбоев. Что мешает добавить функцию отключить/включить GeoIP при входе? Что забавного в фразе "В конец мода"?
|
1. Не знаю, но в любом случае серёзно использоть так геоип - не норм.
2. А то, что это попахивает нубосоветом - начинающий скриптер так и будет делать, кидать код в конец мода. Лучше куда-то вынести, чем пихать в конец.
Quote:
Originally Posted by Johhnyllll
new ip[] = P[playerid][p_reg_ip];
|
В павн так нельзя делать.
Quote:
Originally Posted by Johhnyllll
new ip = P[playerid][p_reg_ip];
|
Ип-адрес записывается не в виде числа (integer), а в строке (string), ведь в ип-адресе есть символы точки \'.\', => это превращается в строковой \'тип данных\'.
Т.е. как минимум надо было так делать:
Quote:
Originally Posted by Johhnyllll
stock GetPlayerRegCountry(playerid, string[], const len = sizeof(string)) {
GetIPCountry(P[playerid][p_reg_ip], string, len);
return true;
}
|
const нафиг не нужен,
return true тоже по сути, да и
stock тоже будет лишним, ведь если будешь всегда использовать, то его можно опустить.
Re: Помогите разобраться с GeoIP -
Johhnyllll - 21.12.2016
Quote:
Originally Posted by Diman777
1. Не знаю, но в любом случае серёзно использоть так геоип - не норм.
2. А то, что это попахивает нубосоветом - начинающий скриптер так и будет делать, кидать код в конец мода. Лучше куда-то вынести, чем пихать в конец.
В павн так нельзя делать.
Ип-адрес записывается не в виде числа (integer), а в строке (string), ведь в ип-адресе есть символы точки \'.\', => это превращается в строковой \'тип данных\'.
Т.е. как минимум надо было так делать:
const нафиг не нужен, return true тоже по сути, да и stock тоже будет лишним, ведь если будешь всегда использовать, то его можно опустить.
|
PHP Code:
stock GetPlayerRegCountry(playerid)
{
new dest[128];
GetIPCountry(P[playerid][p_reg_ip], dest);
return dest;
}
string[],
const len = sizeof(string) по сути тоже не нужны.
Re: Помогите разобраться с GeoIP -
Diman777 - 21.12.2016
Quote:
Originally Posted by Johhnyllll
PHP Code:
stock GetPlayerRegCountry(playerid) { new dest[128]; GetIPCountry(P[playerid][p_reg_ip], dest); return dest; }
string[], const len = sizeof(string) по сути тоже не нужны.
|
В том примере как раз-таки они нужны, а в этом нет всё верно.