[ Новые сообщения · Участники · Правила форума · Поиск · RSS ] |
|
|
Модератор форума: Gank |
Форум - Сообщество любителей игры GTA:MP » SA-MP Scripting » Скрипты [Filterscripts] » [FS] Временный бан по нику |
[FS] Временный бан по нику |
Дата: 16.02.2011, Среда, 03:03:30 | Сообщение # $NUMBER
Автор:MX_Master [c][FS] Временный бан по нику Предупреждение: Описание: - Если кол-во часов не указывать, то бан будет на 12 часов. Как использовать:
Quote /* [FS] Временный бан по нику 06/04/2010, MX_Master Предупреждение: Описание: - Если кол-во часов не указывать, то бан будет на 12 часов. Как использовать: #include <a_samp> #define tempBanFile "temp_bans.txt" #define defaultTempBanHours 12 // часов #define tempBansCleaningInterval 47 // минут #define fwritebin(%0,%1) for ( new sp, size = strlen(%1); sp < size; sp++ ) fputchar( %0, %1[sp], false ) stock tempBansCleaningTimer; stock tempBanPlayer ( playerid, adminid, hours = defaultTempBanHours, reason[] = defaultTempBanReason ) new unbanTime = gettime() + hours*3600, banStr[160], plName[24], admName[24]; GetPlayerName( playerid, plName, 24 ); format( banStr, 160, "%s:%d:%s\r\n", plName, unbanTime, reason ); format( banStr, 160, " * Ты забанен на %d час(ов). Причина: %s", hours, reason ); Kick(playerid); stock isPlayerTempBanned ( playerid, & unbanTime, reason[] ) new plName[24], plNameLen; for ( new banStr[160]; fread( banFile, banStr ) > 0; ) if ( reason[0] == 0 ) format( reason, 128, "%s", defaultTempBanReason ); fclose(banFile); fclose(banFile); forward tempBansCleaning(); new File: banFile = fopen( tempBanFile, io_read ), File: tmpFile = ftemp(); if ( !banFile || !tmpFile ) for ( new buffer[160]; fread( banFile, buffer ) > 0; ) fwritebin( tmpFile, buffer ); fclose(banFile); banFile = fopen( tempBanFile, io_write ); new curTime = gettime(), banStr[160], cleanedCount; while ( fread( tmpFile, banStr ) > 0 ) fclose(banFile); printf( " * Temp bans file `" tempBanFile "` cleaning: %d expired bans removed", cleanedCount ); stock sparam for ( new cur, pre, i = -1; ; cur++ ) // пробежимся по каждому символу в строке source goto sparam_end; if ( source[cur] == delimiter ) // если текущий символ в source - это символ для разделения строки pre = cur + 1; sparam_end: stock iparam ( const source[], delimiter = ' ', substrIndex = 0 ) for ( ; ; cur++ ) // пробежимся по каждому символу в строке source goto iparam_end; if ( source[cur] == delimiter ) // если текущий символ в source - это символ для разделения строки pre = cur + 1; iparam_end: public OnFilterScriptInit() { tempBansCleaningTimer = SetTimer( "tempBansCleaning", tempBansCleaningInterval*60000, 1 ); } public OnPlayerConnect ( playerid ) curTime = gettime(); if ( isPlayerTempBanned( playerid, unbanTime, reason ) && (unbanTime - curTime) > 0 ) unbanMinutes -= unbanHours*60; format( banMessage, 160, " * Твой ник забанен по причине: %s", reason ); format( banMessage, 80, " * До разбана осталось %d час., %d мин., %d сек.", unbanHours, unbanMinutes, unbanSeconds ); Kick(playerid); return 1; public OnPlayerCommandText ( playerid, cmdtext[] ) if ( IsPlayerAdmin(playerid) && strcmp( cmdtext, "/tempban", true, 8 ) == 0 ) new id = iparam( cmdtext, ' ', 1 ); if ( ( id == 0 && cmdtext[9] != '0' ) || !IsPlayerConnected(id) ) new hours = iparam( cmdtext, ' ', 2 ), reason[128]; if ( hours <= 0 ) hours = defaultTempBanHours; if ( tempBanPlayer( id, playerid, hours, reason ) ) SendClientMessage( playerid, 0xFF0000AA, reportStr ); return 1; return 0; |
| |||
| |||