Доброго времени суток, уважаемые пользователи lightcode.ru! После того, как мой сервер атаковали коннектами в один слот (без вызова OnPlayerDisconnect), я решил написать простенькую защиту и поделиться ею с Вами.
Принцип работы:
Подключается игрок, мы запоминаем в переменную slotUsed, что слот использован. Игрок отключается - слот свободен. Если игрок подключается в уже занятый слот => наказываем его
PHP код:
new slotUsed[ MAX_PLAYERS char ];
new playersIP[ MAX_PLAYERS ][ 64 ];
public OnPlayerConnect( playerid ) {
new __IP[ 64 ];
GetPlayerIp( playerid, __IP, 64 );
if ( slotUsed{ playerid } && !strcmp( playersIP[ playerid ], __IP, true ) ) {
return Ban( playerid ); // Наказали игрока
}
GetPlayerIp( playerid, playersIP[ playerid ], 64 );
slotUsed{ playerid } = 1;
return true;
}
public OnPlayerDisconnect( playerid, reason ) {
slotUsed{ playerid } = 0;
return true;
}
Вот и всё!
Спасибо OKStyle за замечания по коду