Помогите разобраться с GeoIP
#1

Добрый день/ночь/утро, не давно мне понадобился плагин которые определяет местоположение IP-шника игрока, я такой плагин нашел, поставил, вроде всё компилируется, но, проблема в том что я не понимаю как им пользоваться, уроков/мануалов нету, как русскоязычных так и англоязычных...
Поэтому помогите разобраться как использовать функций данного плагина.Все ссылки будут ниже.

Тема: https://sampforum.blast.hk/showthread.php?tid=296171
GitHub: https://github.com/Whitetigerswt/SAMP-geoip
Reply
#2

Можешь использовать это:

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;
}
Reply
#3

PHP Code:
cmd:myip(playerid)
{
    new 
ip[16], country[32], isp[32], city[32], string[144];
    
GetPlayerIp(playeridip16);
    
GetIPCountry(ipcountrysizeof country);
    
GetIPISP(ipispsizeof isp);
    
GetIPCity(ipcitysizeof city);
    
format(stringsizeof string"Страна: %s, город: %s, провайдер: %s"countrycityisp);
    
SendClientMessage(playerid, -1string);
    return 
1;

ты чего
Reply
#4

Пишет:
PHP Code:
 СтранаUnknownгородUnknownпровайдерUnknown 
Reply
#5

А ты бд геоипа в scriptfiles поместил? (вопрос глупый, конечно, но всё же)
Reply
#6

Quote:
Originally Posted by Johhnyllll
View Post
я такой плагин нашел
Ну во-первых это не плагин, там только инклуд и базы данных.

Quote:
Originally Posted by Johhnyllll
View Post
я не понимаю как им пользоваться
Это фигово для тебя. Чтобы это понять почитай как пользоваться функциями в языке Pawn, это не сложно. Также почитай на википедии, что такое плагин, инклуд, база данных, хотя бы азы.

Quote:
Originally Posted by Johhnyllll
View Post
уроков/мануалов нету, как русскоязычных так и англоязычных...
Да ладно? В этой же теме (1-ый пост самого создателя) небольшое описание есть (переведи на русский язык, с помощью переводчика) + в инклуде есть ф-ии, которыми надо пользоваться.

Quote:
Originally Posted by Johhnyllll
View Post
Страна: Unknown, город: Unknown, провайдер: Unknown
Ты проверяешь на локалке? Какой ип-адрес у тебя когда ты юзаешь эту команду? Если ип 127.0.0.1, то это локалка, Unknown - всегда на ней будет.

Чтобы удостовериться в том, что всё работает, то проверь вот так:
PHP Code:
public OnGameModeInit()
{
    
// Здесь абсолютно любой ип-адрес можно написать
    
new ip[] = "176.117.75.71";
    new 
country[64 1];
    
GetIpCountry(ipcountrysizeof country);    
    new 
city[64 1];
    
GetIpCity(ipcitysizeof city);
    new 
isp[256 1];
    
GetIpISP(ipispsizeof 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
View Post
Можешь использовать это:
Никому не советую, вдруг навернётся сайт, и вообще это по скорости не очень будет.
Quote:
Originally Posted by Stuntff
View Post
"В конец мода кинь да и всё..."
Хороший совет, без комментариев)
Reply
#7

Quote:
Originally Posted by Diman777
View Post
Ну во-первых это не плагин, там только инклуд и базы данных.


Это фигово для тебя. Чтобы это понять почитай как пользоваться функциями в языке Pawn, это не сложно. Также почитай на википедии, что такое плагин, инклуд, база данных, хотя бы азы.


Да ладно? В этой же теме (1-ый пост самого создателя) небольшое описание есть (переведи на русский язык, с помощью переводчика) + в инклуде есть ф-ии, которыми надо пользоваться.


Ты проверяешь на локалке? Какой ип-адрес у тебя когда ты юзаешь эту команду? Если ип 127.0.0.1, то это локалка, Unknown - всегда на ней будет.

Чтобы удостовериться в том, что всё работает, то проверь вот так:
PHP Code:
public OnGameModeInit()
{
    
// Здесь абсолютно любой ип-адрес можно написать
    
new ip[] = "176.117.75.71";
    new 
country[64 1];
    
GetIpCountry(ipcountrysizeof country);    
    new 
city[64 1];
    
GetIpCity(ipcitysizeof city);
    new 
isp[256 1];
    
GetIpISP(ipispsizeof 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 при входе? Что забавного в фразе "В конец мода"?
Reply
#8

Quote:
Originally Posted by Stuntff
View Post
Этот сайт работает с 2010 года и без сбоев. Что мешает добавить функцию отключить/включить GeoIP при входе?
у сайта пинг > 200, да и вообще, надеяться на какие-то левые сайты -- не круто
Reply
#9

Quote:
Originally Posted by Diman777
View Post
Ну во-первых это не плагин, там только инклуд и базы данных.


Это фигово для тебя. Чтобы это понять почитай как пользоваться функциями в языке Pawn, это не сложно. Также почитай на википедии, что такое плагин, инклуд, база данных, хотя бы азы.


Да ладно? В этой же теме (1-ый пост самого создателя) небольшое описание есть (переведи на русский язык, с помощью переводчика) + в инклуде есть ф-ии, которыми надо пользоваться.


Ты проверяешь на локалке? Какой ип-адрес у тебя когда ты юзаешь эту команду? Если ип 127.0.0.1, то это локалка, Unknown - всегда на ней будет.

Чтобы удостовериться в том, что всё работает, то проверь вот так:
PHP Code:
public OnGameModeInit()
{
    
// Здесь абсолютно любой ип-адрес можно написать
    
new ip[] = "176.117.75.71";
    new 
country[64 1];
    
GetIpCountry(ipcountrysizeof country);    
    new 
city[64 1];
    
GetIpCity(ipcitysizeof city);
    new 
isp[256 1];
    
GetIpISP(ipispsizeof 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)...Недо думал
Reply
#10

Разобрался с системой, теперь нужно сделать функцию которая определяет страну по IP, у инклуда по стандарту это:
PHP Code:
stock GetPlayerCountry(playeridstring[], const len sizeof(string)) {
    new 
ip[24];
    
GetPlayerIp(playeridipsizeof(ip));
    
GetIPCountry(ipstringlen);
    return 
true;
}
//В моем случае это p_last_ip 
Что-бы узнать в какой стране был зареган акк, я сделал так:
PHP Code:
stock GetPlayerRegCountry(playeridstring[], const len sizeof(string)) {
    new 
ip[] = "178.168.98.70";
    
GetIPCountry(ipstringlen);
    return 
true;

Но дело в том что я дал переменной ip константу 178.168.98.70,но для меня это не вариант, ибо не буду же я ставить IP игроков в ручную, для рег. IP у меня есть переменная p_reg_ip в которую и записывается IP игрока когда он зарегистрировался,я подумал над этим и появились несколько вариантов, которые оказались неработоспособны.Если сделать к примеру так:
PHP Code:
stock GetPlayerRegCountry(playeridstring[], const len sizeof(string)) {
    new 
ip[] = P[playerid][p_reg_ip];
    
GetIPCountry(ipstringlen);
    return 
true;

Выдает ошибку или же так:
PHP Code:
...
new 
ip P[playerid][p_reg_ip];
... 
Нужен хотя-бы совет как это всё сделать работоспособным...

//UPDATED
Работает:
PHP Code:
stock GetPlayerRegCountry(playeridstring[], const len sizeof(string)) {
    
GetIPCountry(P[playerid][p_reg_ip], stringlen);
    return 
true;

Reply
#11

Quote:
Originally Posted by Stuntff
View Post
Этот сайт работает с 2010 года и без сбоев. Что мешает добавить функцию отключить/включить GeoIP при входе? Что забавного в фразе "В конец мода"?
1. Не знаю, но в любом случае серёзно использоть так геоип - не норм.

2. А то, что это попахивает нубосоветом - начинающий скриптер так и будет делать, кидать код в конец мода. Лучше куда-то вынести, чем пихать в конец.

Quote:
Originally Posted by Johhnyllll
View Post
new ip[] = P[playerid][p_reg_ip];
В павн так нельзя делать.

Quote:
Originally Posted by Johhnyllll
View Post
new ip = P[playerid][p_reg_ip];
Ип-адрес записывается не в виде числа (integer), а в строке (string), ведь в ип-адресе есть символы точки \'.\', => это превращается в строковой \'тип данных\'.

Т.е. как минимум надо было так делать:
PHP Code:
new ip[15+1]; 
Quote:
Originally Posted by Johhnyllll
View Post
stock GetPlayerRegCountry(playerid, string[], const len = sizeof(string)) {

GetIPCountry(P[playerid][p_reg_ip], string, len);

return true;

}
const нафиг не нужен, return true тоже по сути, да и stock тоже будет лишним, ведь если будешь всегда использовать, то его можно опустить.
Reply
#12

Quote:
Originally Posted by Diman777
View Post
1. Не знаю, но в любом случае серёзно использоть так геоип - не норм.

2. А то, что это попахивает нубосоветом - начинающий скриптер так и будет делать, кидать код в конец мода. Лучше куда-то вынести, чем пихать в конец.



В павн так нельзя делать.



Ип-адрес записывается не в виде числа (integer), а в строке (string), ведь в ип-адресе есть символы точки \'.\', => это превращается в строковой \'тип данных\'.

Т.е. как минимум надо было так делать:
PHP Code:
new ip[15+1]; 
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) по сути тоже не нужны.
Reply
#13

Quote:
Originally Posted by Johhnyllll
View Post
PHP Code:
stock GetPlayerRegCountry(playerid)
{
    new 
dest[128];
    
GetIPCountry(P[playerid][p_reg_ip], dest);
    return 
dest;

string[], const len = sizeof(string) по сути тоже не нужны.
В том примере как раз-таки они нужны, а в этом нет всё верно.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)