13.07.2010, 08:06
Крохотный FS по просьбам участников форума. FS не дает игроку быстро реконектится после выхода. Если пауза между выходом и входом одного и того же игрока меньше 5 сек, то войти он не сможет. Если у игрока был просто тайм аут соединения, то его этот запрет не коснется.
Скрипт оптимизирован, юзает динамическую память и надежную систему запрета доступа.
Учтены пожелания.
НОВЫЙ ОПТИМИЗИРОВАННЫЙ КОД
код старой версии - http://pawn.pastebin.com/46EN4w2U
Скрипт оптимизирован, юзает динамическую память и надежную систему запрета доступа.
Учтены пожелания.
НОВЫЙ ОПТИМИЗИРОВАННЫЙ КОД
PHP Code:
/*
Этот FS не дает реконектится игроку быстрее чем через 5 сек.
после выхода. Для проверки используется IP игрока.
Скрипт оптимизирован, юзает динамическую память и
надежную систему запрета доступа.
MX_Master, 14.07.2010 2:46:25
*/
#include <a_samp>
const player_machine = 1, // ид виртуальной машины для хранения IP игроков, которые онлайн
rec_delay_sec = 5; // сек. после дисконекта, после котороых снова можно конектится
public OnFilterScriptExit()
{
// при выгрузке скрипта, освободим, используюемую им, память
for ( new s = GetMaxPlayers() - 1; s >= 0; --s )
if ( existproperty( player_machine, _, s ) ) deleteproperty( player_machine, _, s );
}
public OnPlayerConnect ( playerid )
{
new cur_str_ip[16];
GetPlayerIp( playerid, cur_str_ip, 16 );
setproperty( player_machine, _, playerid, cur_str_ip );
return 1;
}
public OnPlayerDisconnect ( playerid, reason )
{
if ( reason == 0 ) return 1; // если был тайм аут соединения у игрока
new saved_str_ip[16];
getproperty( player_machine, _, playerid, saved_str_ip );
deleteproperty( player_machine, _, playerid );
strunpack( saved_str_ip, saved_str_ip );
new rcon_cmd[32];
format( rcon_cmd, 32, "banip %s", saved_str_ip );
SendRconCommand(rcon_cmd);
SetTimerEx( "unban_ip", rec_delay_sec * 1000, 0, "s", saved_str_ip );
return 1;
}
forward unban_ip ( ip[] );
public unban_ip ( ip[] )
{
new rcon_cmd[32];
format( rcon_cmd, 32, "unbanip %s", ip );
SendRconCommand(rcon_cmd);
}