Перейти к содержанию
Авторизация  
Max_Eitzen

Получение подсети игрока

Рекомендуемые сообщения

Max_Eitzen

17a44299fc7c.png


Доброго времени суток.


Написал простейшую функцию получения подсети игрока.


Решил поделиться с Вами.


Сам использую для дополнительной защиты аккаунтов.


Код:



stock GetSubNet(playerid)
{
new network[16];
GetPlayerIp(playerid, network, sizeof(network));
strdel(network, strfind(network, ".", true, 5), 16);
return network;
}

Функция возвращает string значение.


Пример использования:


В массив с данными игрока:



SubNetwork[16],

При регистрации:



format(pData[playerid][SubNetwork], 16, GetSubNet(playerid));

После того, как игрок залогинился:



if(strcmp(pData[playerid][SubNetwork], GetSubNet(playerid))) ShowPlayerDialog(playerid, 1488, DIALOG_STYLE_INPUT, "Введите код доступа", "Вы подключились со стороннего IP-адреса.\nДля получения доступа к аккаунту Вы должны ввести код в поле ниже:", "Далее", "Отмена");

Ко всем диалогам:



if(dialogid == 1488)
{
if(!response) return Kick(playerid);//Кикаем игрока при отказе ввода
//Здесь уже сами обрабатываете введенный код, как Вам нужно
return true;
}

Публикация на других ресурсах запрещена.

  • Like 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Web

Сомневаюсь в авторстве функции, уж больно знакомая. Как будто видел ее в работах на конкурс по скриптингу. Есть более крутой вариант от Кортеза.

 

Функция:

stock GetPlayerSubnet(playerid, buffer[], size=sizeof(buffer))
{// by Daniel_Cortez 
    GetPlayerIp(playerid, buffer, size);
    for(new i=0,dots=0; ; ++i)
        switch(buffer[i])
        {
            case '\0':
                break;
            case '.':
                if(++dots == 2)
                {
                    buffer[i] = '\0';
                    break;
                }
        }
}  

Как использовать:

new ip[16], subnet[8];
GetPlayerIp(playerid, ip, sizeof(ip));
GetPlayerSubnet(playerid, subnet, sizeof(subnet));
new string[40];
format(string, sizeof(string), "Ваш IP: %s, подсеть: %s", ip, subnet);
SendClientMessage(playerid, -1, string);  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
vsergeenko

Выложили бы ещё вариант со ссылками (на две переменных).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
FanHamMеr

Ещё в 2012 были такие решения, вот вариант от Games'a:

; 
    GetPlayerIp(playerid, cIP, sizeof(cIP)); 
    for(new i, bool:point; i != strlen(cIP); i++) 
    { 
        if(cIP[i] != 0x2E) continue; 
        if(!point) point = true; 
        else 
        { 
            strmid(cIP, cIP, 0, i); 
            break; 
        } 
    } 
    return cIP; 
}
Там поинтересней система будет, создавая доступ к другому подсетям. Изменено пользователем FanHamMеr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.