Страный там инклуд.
Залей свой на RGHOST если не сложно :)PHP код:
/* SA-MP Functions
*
* (c) Copyright 2005-2012, SA-MP Team
*
*/
Вид для печати
Попробувал сунул проверку на бан в колэбек 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 умножаем для конвертации секунд в миллисекунды, с которыми работает функция