Сделал бан по IP через MySQL вот как кикает при коннекте - http://rghost.ru/55911158.view
А вот как кикает функций Ban(player); - http://rghost.ru/55911216.view можно как то сделать что бы кикало сразу после Connect to Бла бла. бла.
Вид для печати
Сделал бан по IP через MySQL вот как кикает при коннекте - http://rghost.ru/55911158.view
А вот как кикает функций Ban(player); - http://rghost.ru/55911216.view можно как то сделать что бы кикало сразу после Connect to Бла бла. бла.
Используя функцию BlockIpAddress. В таблицу записываем IP и время бана в секундах (согласно параметрам функции). После при старте мода выгружаем данные из БД и загружаем их в память сервера при помощи этой самой функции (BlockIpAddress). Далее сервер сам будет проверять при входе IP игрока среди забаненных и не пускать на сервер ещё до срабатывания колбэка OnPlayerConnect. Ну и бан переделать под запрос + BlockIpAddress + кик с сервера.
Опять весь бан переписовать -__-, ещё варианты есть?
Он добавлен в SA-MP 0.3z R2-2. Обновите серверную часть
Не тем редактором открываете значит. Или не ту версию качаете. Но в стандартных инклюдах r2-2 forward есть.
Уверены, что колбэк верно написали? Параметры все учли?
http://rghost.ru/55993459/image.png
Попробувал сунул проверку на бан в колэбек OnIncomingConnection даже не вызываеться от туда.
Не предоставляю как записать через BlockIpAddress как его в базу записать через INSERT INTO подскажите пожалуйста
Обновил инклуд, вот как вставлял:
PHP код:
public OnIncomingConnection(playerid, ip_address[], port)
{
mysql_format(MYSQL_ARG, asd, 90, "SELECT * FROM `BanIP` WHERE `IP` = '%s' LIMIT 1", ip_address);
mysql_function_query(MYSQL_ARG, asd, true, "CheckPlayerBanIP", "i", playerid);
return 1;
}
Ну теперь прологируйте запрос с помощью printf. Сначала сам запрос, а потом паблик, вызываемый запросом. И посмотрите что не работает
- - - Добавлено - - -
Ну теперь прологируйте запрос с помощью printf. Сначала сам запрос, а потом паблик, вызываемый запросом. И посмотрите что не работает.
Скорее всего просто многопоточность всему виной. Запрос уходит в отдельном потоке и выполнение OnPlayerConnect продолжается.
Ну посмотрите на параметры, блин. И почитайте о том, как работает функция. Вы же скриптер! Вы самостоятельно должны продумывать такие простые системы, раз уже работали с MySQL. Нужно лишь заняться тем, чем вы должны заняться - изучить принципы работы BlockIpAddress.
Данные о забаненных хранятся в памяти сервера до момента его полного отключения (по такому принципу BlockIpAddress работает). Значит при включении надо вновь заливать их. При старте сервера в main создаём запрос, который выгрузит ВСЕ данные из таблицы. После в паблике, вызванном запросом, проверяем время: если время бана прошло (gettime в помощь) - удаляем строку, иначе грузим данные из строки и вставляем в BlockIpAddress. Всё. Вот и вся система.
Только данные в таблице о разбаненных будут обновляться исключительно в момент запуска мода. Но оно не страшно для нас, ибо игрок всё равно сможет зайти на сервер если время в BlockIpAddress кончилось.
Возможно, что-то ещё забыл упомянуть. Но это сразу станет ясно, когда начнёте писать код
Так чего трудного то? В базу данных записываем IP и текущую дату + то число секунд, которое должно пройти до того, как игрока разбанит (банальная математика).
Теперь при старте сервера делаем запрос и выгружаем каждую строку из таблицы, сразу же вставляя данные в функцию BlockIpAddress. Что-то типа
Всё. Вот и вся система.PHP код:
//Получаем данные IP и даты
//Если текущая дата больше или равна той, что указана в дате разбана - разблокируем аккаунт (удаляем строку из таблицы) и приступаем к обработке нового.
//Иначе...
BlockIpAddress(ip, (gettime() - time_ban)*1000);//time_ban - переменная, хранящая время разбана. А на 1000 умножаем для конвертации секунд в миллисекунды, с которыми работает функция
Даю подсказку. И чего в Unix Сложного?
PHP код:
data[16];
format(data, 16, "%s",date("%dd.%mm.%yyyy",gettime()));
printf("DATA BANA: %s", data);
PHP код:
new unbandate;
unbandate = gettime() + 15*86400;// берем текущую дату через gettime + 15(дней) умножаем на 86400(Это в секундах - сутки). Тоесть до разбана аккаунта 15 дней.
printf("AKKAUNT BYDET RAZBANEN: %d");//
Охх, я вам уже всё сказал. По-другому НИКАК не сделать то, что хотите вы. Вам так важно, чтоб имя сервера не писало что-ли? Именно чтоб имя? Если да, то влепите в OnPlayerConnect
и пощадите уже наши грешные душиPHP код:
for(new i; i < 30; i++) SendClientMessage(playerid, -1, " ");