amx_gagip |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
|
amx_gagip |
Zoroark
|
19.4.2013, 13:25
Сообщение
|
|
|
Подскажите где можно скачать или дайте исходник для amx_gagip[rus+menu]
|
|
|
|
XyLiGaN
|
19.4.2013, 14:00
Сообщение
|
|
|
|
|
|
|
taulalan
|
19.4.2013, 14:16
Сообщение
|
![]() |
держи
amx_gag.sma ( 18,16 килобайт )
Кол-во скачиваний: 12amx_gag Код #include < amxmodx > #include < amxmisc > #include < engine > #define DEFAULT_TIME 600.0 // In Seconds enum ( <<= 1 ) { GAG_CHAT = 1, GAG_TEAMSAY, GAG_VOICE }; enum _:GagData { GAG_AUTHID[ 35 ], GAG_TIME, GAG_START, GAG_FLAGS }; new g_szAuthid[ 33 ][ 35 ]; // STEAM_0:X:XXXXXXXX new g_iThinker, g_iGagged; new bool:g_bColoredMenus, Trie:g_tArrayPos, Array:g_aGagData, Array:g_aGagTimes, g_iTotalGagTimes; new g_iMenuOption[ 33 ], g_iMenuPosition[ 33 ], g_iMenuPlayers[ 33 ][ 32 ], g_iMenuFlags[ 33 ]; public plugin_init( ) { register_plugin( "AMXX Gag", "1.3", "xPaw & Exolent" ); register_clcmd( "say", "CmdSay" ); register_clcmd( "say_team", "CmdTeamSay" ); register_concmd( "amx_gag", "CmdGagPlayer", ADMIN_KICK, "<nick or #userid> <time> <a|b|c>" ); register_concmd( "amx_ungag", "CmdUnGagPlayer", ADMIN_KICK, "<nick or #userid>" ); register_concmd( "amx_gagmenu", "CmdGagMenu", ADMIN_KICK, "- displays gag menu" ); register_srvcmd( "amx_gag_times", "CmdSetBanTimes" ); register_menu( "Gag Menu", 1023, "ActionGagMenu" ); register_menu( "Gag Flags", 1023, "ActionGagFlags" ); register_message( get_user_msgid( "SayText" ), "MessageSayText" ); g_tArrayPos = TrieCreate( ); g_aGagData = ArrayCreate( GagData ); g_aGagTimes = ArrayCreate( ); g_bColoredMenus = bool:colored_menus( ); // this is used for ungag in the menu ArrayPushCell( g_aGagTimes, 0 ); // Gag times for the gag menu (amx_gagmenu) // Default values: 60 300 600 1800 3600 7200 86400 // Load up standart times ArrayPushCell( g_aGagTimes, 60 ); ArrayPushCell( g_aGagTimes, 300 ); ArrayPushCell( g_aGagTimes, 600 ); ArrayPushCell( g_aGagTimes, 1800 ); ArrayPushCell( g_aGagTimes, 3600 ); ArrayPushCell( g_aGagTimes, 7200 ); ArrayPushCell( g_aGagTimes, 86400 ); g_iTotalGagTimes = ArraySize( g_aGagTimes ); // Set up entity-thinker new const szClassname[ ] = "gag_thinker"; g_iThinker = create_entity( "info_target" ); entity_set_string( g_iThinker, EV_SZ_classname, szClassname ); register_think( szClassname, "FwdThink" ); } public CmdSetBanTimes( ) { new iArgs = read_argc( ); if( iArgs <= 1 ) { server_print( "Usage: amx_gag_times <time1> [time2] [time3] ..." ); return PLUGIN_HANDLED; } ArrayClear( g_aGagTimes ); // this is used for ungag in the menu ArrayPushCell( g_aGagTimes, 0 ); new szBuffer[ 32 ], iTime; for( new i = 1; i < iArgs; i++ ) { read_argv( i, szBuffer, 31 ); if( !is_str_num( szBuffer ) ) { server_print( "Число должно быть целым!!" ); continue; } iTime = str_to_num( szBuffer ); if( iTime <= 0 ) { server_print( "Число должно быть больше нуля!" ); continue; } if( iTime > 86400 ) { server_print( "Максимальное число - 86400!" ); continue; } ArrayPushCell( g_aGagTimes, iTime ); } g_iTotalGagTimes = ArraySize( g_aGagTimes ); return PLUGIN_HANDLED; } public plugin_end( ) { TrieDestroy( g_tArrayPos ); ArrayDestroy( g_aGagData ); ArrayDestroy( g_aGagTimes ); } public client_putinserver( id ) { if( CheckGagFlag( id, GAG_VOICE ) ) set_speak( id, SPEAK_MUTED ); // default flags to "abc" g_iMenuFlags[ id ] = GAG_CHAT | GAG_TEAMSAY | GAG_VOICE; } public client_authorized( id ) get_user_authid( id, g_szAuthid[ id ], 34 ); public client_disconnect( id ) { if( TrieKeyExists( g_tArrayPos, g_szAuthid[ id ] ) ) { new szName[ 32 ]; get_user_name( id, szName, 31 ); new iPlayers[ 32 ], iNum, iPlayer; get_players( iPlayers, iNum, "ch" ); for( new i; i < iNum; i++ ) { iPlayer = iPlayers[ i ]; if( get_user_flags( iPlayer ) & ADMIN_KICK ) client_print( iPlayer, print_chat, "Заблокированый игрок ^"%s<%s>^" отключился!", szName, g_szAuthid[ id ] ); } } g_szAuthid[ id ][ 0 ] = '^0'; } public client_infochanged( id ) { if( !CheckGagFlag( id, ( GAG_CHAT | GAG_TEAMSAY ) ) ) return; static const name[ ] = "name"; static szNewName[ 32 ], szOldName[ 32 ]; get_user_info( id, name, szNewName, 31 ); get_user_name( id, szOldName, 31 ); if( !equal( szNewName, szOldName ) ) { client_print( id, print_chat, "Заблокированые игроки не могут менять ник!" ); set_user_info( id, name, szOldName ); } } public MessageSayText( ) { static const Cstrike_Name_Change[ ] = "#Cstrike_Name_Change"; new szMessage[ sizeof( Cstrike_Name_Change ) + 1 ]; get_msg_arg_string( 2, szMessage, sizeof( szMessage ) - 1 ); if( equal( szMessage, Cstrike_Name_Change ) ) { new szName[ 32 ], id; for( new i = 3; i <= 4; i++ ) { get_msg_arg_string( i, szName, 31 ); id = get_user_index( szName ); if( is_user_connected( id ) ) { if( CheckGagFlag( id, ( GAG_CHAT | GAG_TEAMSAY ) ) ) return PLUGIN_HANDLED; break; } } } return PLUGIN_CONTINUE; } public FwdThink( const iEntity ) { if( !g_iGagged ) return; new Float:fGametime; fGametime = get_gametime( ); new data[ GagData ], id, szName[ 32 ]; for( new i = 0; i < g_iGagged; i++ ) { ArrayGetArray( g_aGagData, i, data ); if( ( Float:data[ GAG_START ] + Float:data[ GAG_TIME ] - 0.5 ) <= fGametime ) { id = find_player( "c", data[ GAG_AUTHID ] ); if( is_user_connected( id ) ) { get_user_name( id, szName, 31 ); client_print( 0, print_chat, "Игрок ^"%s^" разблокирован.", szName ); } DeleteGag( i ); i--; } } if( !g_iGagged ) return; new Float:flNextTime = 999999.9; for( new i = 0; i < g_iGagged; i++ ) { ArrayGetArray( g_aGagData, i, data ); flNextTime = floatmin( flNextTime, Float:data[ GAG_START ] + Float:data[ GAG_TIME ] ); } entity_set_float( iEntity, EV_FL_nextthink, flNextTime ); } public CmdSay( const id ) return CheckSay( id, 0 ); public CmdTeamSay( const id ) return CheckSay( id, 1 ); CheckSay( const id, const bTeam ) { new iArrayPos; if( TrieGetCell( g_tArrayPos, g_szAuthid[ id ], iArrayPos ) ) { new data[ GagData ]; ArrayGetArray( g_aGagData, iArrayPos, data ); new const iFlags[ ] = { GAG_CHAT, GAG_TEAMSAY }; if( data[ GAG_FLAGS ] & iFlags[ bTeam ] ) { new szInfo[ 32 ], iLen, iTime = floatround( ( Float:data[ GAG_START ] + Float:data[ GAG_TIME ] ) - get_gametime( ) ), iMinutes = iTime / 60, iSeconds = iTime % 60; if( iMinutes > 0 ) iLen = formatex( szInfo, 31, "%i Минут", iMinutes, iMinutes == 1 ? "" : "s" ); if( iSeconds > 0 ) formatex( szInfo[ iLen ], 31 - iLen, "%s%i Секунд", iLen ? " and " : "", iSeconds, iSeconds == 1 ? "" : "s" ); client_print( id, print_chat, "Осталось %s !", szInfo ); client_print( id, print_center, "** Тебя заблокировали в %s чате! **", bTeam ? " team" : "" ); return PLUGIN_HANDLED; } } return PLUGIN_CONTINUE; } public CmdGagPlayer( const id, const iLevel, const iCid ) { if( !cmd_access( id, iLevel, iCid, 2 ) ) { console_print( id, "Флаги: a - Чат | b - Командный чат | c - Голос" ); return PLUGIN_HANDLED; } new szArg[ 32 ]; read_argv( 1, szArg, 31 ); new iPlayer = cmd_target( id, szArg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS ); if( !iPlayer ) return PLUGIN_HANDLED; new szName[ 20 ]; get_user_name( iPlayer, szName, 19 ); if( TrieKeyExists( g_tArrayPos, g_szAuthid[ iPlayer ] ) ) { console_print( id, "Игрок ^"%s^" уже заблокирован!", szName ); return PLUGIN_HANDLED; } new szFlags[ 4 ], Float:flGagTime; read_argv( 2, szArg, 31 ); if( !szArg[ 0 ] ) { // No time entered flGagTime = DEFAULT_TIME; formatex( szFlags, 3, "abc" ); } else { if( is_str_num( szArg ) ) { // Seconds entered flGagTime = floatstr( szArg ); if( flGagTime > 86400.0 ) flGagTime = 86400.0; } else { console_print( id, "Время должно быть в секундах!" ); return PLUGIN_HANDLED; } read_argv( 3, szArg, 31 ); if( !szArg[ 0 ] ) // No flag entered formatex( szFlags, 3, "abc" ); else formatex( szFlags, 3, szArg ); } new iFlags = read_flags( szFlags ); new data[ GagData ]; data[ GAG_START ] = _:get_gametime( ); data[ GAG_TIME ] = _:flGagTime; data[ GAG_FLAGS ] = iFlags; copy( data[ GAG_AUTHID ], 34, g_szAuthid[ iPlayer ] ); TrieSetCell( g_tArrayPos, g_szAuthid[ iPlayer ], g_iGagged ); ArrayPushArray( g_aGagData, data ); new szFrom[ 64 ]; if( iFlags & GAG_CHAT ) formatex( szFrom, 63, "" ); if( iFlags & GAG_TEAMSAY ) { if( !szFrom[ 0 ] ) formatex( szFrom, 63, "" ); else format( szFrom, 63, "%s ", szFrom ); } if( iFlags & GAG_VOICE ) { set_speak( iPlayer, SPEAK_MUTED ); if( !szFrom[ 0 ] ) formatex( szFrom, 63, "" ); else format( szFrom, 63, "%s ", szFrom ); } g_iGagged++; new Float:flGametime = get_gametime( ), Float:flNextThink; flNextThink = entity_get_float( g_iThinker, EV_FL_nextthink ); if( !flNextThink || flNextThink > ( flGametime + flGagTime ) ) entity_set_float( g_iThinker, EV_FL_nextthink, flGametime + flGagTime ); new szInfo[ 32 ], szAdmin[ 20 ], iTime = floatround( flGagTime ), iMinutes = iTime / 60, iSeconds = iTime % 60; get_user_name( id, szAdmin, 19 ); if( !iMinutes ) formatex( szInfo, 31, "%i секунд%s", iSeconds, iSeconds == 1 ? "" : "s" ); else formatex( szInfo, 31, "%i минут%s", iMinutes, iMinutes == 1 ? "" : "s" ); show_activity( id, szAdmin, "Заблокировал %s говорить на %s ", szName, szInfo, szFrom ); console_print( id, "Вы заблокировали ^"%s^" (%s) !", szName, szFrom ); log_amx( "Gag: ^"%s<%s>^" заблокировал ^"%s<%s>^" на %i минут. ", szAdmin, g_szAuthid[ id ], szName, g_szAuthid[ iPlayer ], floatround( flGagTime / 60 ), szFrom ); return PLUGIN_HANDLED; } public CmdUnGagPlayer( const id, const iLevel, const iCid ) { if( !cmd_access( id, iLevel, iCid, 2 ) ) return PLUGIN_HANDLED; new szArg[ 32 ]; read_argv( 1, szArg, 31 ); if( equali( szArg, "@all" ) ) { if( !g_iGagged ) { console_print( id, "Нету заблокированых игроков!" ); return PLUGIN_HANDLED; } while( g_iGagged ) DeleteGag( 0 ); // Excellent by Exolent if( entity_get_float( g_iThinker, EV_FL_nextthink ) > 0.0 ) entity_set_float( g_iThinker, EV_FL_nextthink, 0.0 ); console_print( id, "Вы разблокировали всех игроков!" ); new szAdmin[ 32 ]; get_user_name( id, szAdmin, 31 ); show_activity( id, szAdmin, "Разблокировал всех игроков." ); log_amx( "UnGag: ^"%s<%s>^" разблокировал всех игроков.", szAdmin, g_szAuthid[ id ] ); return PLUGIN_HANDLED; } new iPlayer = cmd_target( id, szArg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS ); if( !iPlayer ) return PLUGIN_HANDLED; new szName[ 32 ]; get_user_name( iPlayer, szName, 31 ); new iArrayPos; if( !TrieGetCell( g_tArrayPos, g_szAuthid[ iPlayer ], iArrayPos ) ) { console_print( id, "Игрок ^"%s^" не заблокирован!", szName ); return PLUGIN_HANDLED; } DeleteGag( iArrayPos ); new szAdmin[ 32 ]; get_user_name( id, szAdmin, 31 ); show_activity( id, szAdmin, "Разблокировал %s.", szName ); console_print( id, "Вы разблокировали ^"%s^" !", szName ); log_amx( "UnGag: ^"%s<%s>^" разблокировал ^"%s<%s>^"", szAdmin, g_szAuthid[ id ], szName, g_szAuthid[ iPlayer ] ); return PLUGIN_HANDLED; } public CmdGagMenu( const id, const iLevel, const iCid ) { if( !cmd_access( id, iLevel, iCid, 1 ) ) return PLUGIN_HANDLED; g_iMenuOption[ id ] = 0; arrayset( g_iMenuPlayers[ id ], 0, 32 ); DisplayGagMenu( id, g_iMenuPosition[ id ] = 0 ); return PLUGIN_HANDLED; } #define PERPAGE 6 public ActionGagMenu( const id, const iKey ) { switch( iKey ) { case 6: DisplayGagFlags( id ); case 7: { ++g_iMenuOption[ id ]; g_iMenuOption[ id ] %= g_iTotalGagTimes; DisplayGagMenu( id, g_iMenuPosition[ id ] ); } case 8: DisplayGagMenu( id, ++g_iMenuPosition[ id ] ); case 9: DisplayGagMenu( id, --g_iMenuPosition[ id ] ); default: { new iPlayer = g_iMenuPlayers[ id ][ g_iMenuPosition[ id ] * PERPAGE + iKey ]; if( !g_iMenuOption[ id ] ) client_cmd( id, "amx_ungag #%i", get_user_userid( iPlayer ) ); else { new szFlags[ 4 ]; get_flags( g_iMenuFlags[ id ], szFlags, 3 ); client_cmd( id, "amx_gag #%i %i %s", get_user_userid( iPlayer ), ArrayGetCell( g_aGagTimes, g_iMenuOption[ id ] ), szFlags ); } DisplayGagMenu( id, g_iMenuPosition[ id ] ); } } } // I just copied this from AMXX Ban menu, so don't blame me :D DisplayGagMenu( const id, iPosition ) { if( iPosition < 0 ) { arrayset( g_iMenuPlayers[ id ], 0, 32 ); return; } new iPlayers[ 32 ], iNum, iCount, szMenu[ 512 ], iPlayer, iFlags, szName[ 32 ]; get_players( iPlayers, iNum, "ch" ); // Ignore bots and hltv new iStart = iPosition * PERPAGE; if( iStart >= iNum ) iStart = iPosition = g_iMenuPosition[ id ] = 0; new iEnd = iStart + PERPAGE, iKeys = MENU_KEY_0 | MENU_KEY_8; new iLen = formatex( szMenu, 511, g_bColoredMenus ? "\rМеню блокировок\R%i/%i^n^n" : "Меню блокировок %i/%i^n^n", iPosition + 1, ( ( iNum + PERPAGE - 1 ) / PERPAGE ) ); new bool:bUngag = bool:!g_iMenuOption[ id ]; if( iEnd > iNum ) iEnd = iNum; for( new i = iStart; i < iEnd; ++i ) { iPlayer = iPlayers[ i ]; iFlags = get_user_flags( iPlayer ); get_user_name( iPlayer, szName, 31 ); if( iPlayer == id || ( iFlags & ADMIN_IMMUNITY ) || bUngag != TrieKeyExists( g_tArrayPos, g_szAuthid[ iPlayer ] ) ) { ++iCount; if( g_bColoredMenus ) iLen += formatex( szMenu[ iLen ], 511 - iLen, "\d%i. %s^n", iCount, szName ); else iLen += formatex( szMenu[ iLen ], 511 - iLen, "#. %s^n", szName ); } else { iKeys |= ( 1 << iCount ); ++iCount; iLen += formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "\r%i.\w %s\y%s\r%s^n" : "%i. %s%s%s^n", iCount, szName, TrieKeyExists( g_tArrayPos, g_szAuthid[ iPlayer ] ) ? " Заблокирован" : "", ( ~iFlags & ADMIN_USER ? " *" : "" ) ); } } g_iMenuPlayers[ id ] = iPlayers; new szFlags[ 4 ]; get_flags( g_iMenuFlags[ id ], szFlags, 3 ); iLen += formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? ( bUngag ? "^n\d7. Флаги: %s" : "^n\r7.\y Флаги:\w %s" ) : ( bUngag ? "^n#. Флаги: %s" : "^n7. Флаги: %s" ), szFlags ); if( !bUngag ) { iKeys |= MENU_KEY_7; new iSeconds = ArrayGetCell( g_aGagTimes, g_iMenuOption[ id ] ); new iTime = iSeconds / 60; iLen += formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r8.\y Время:\w %i %s^n" : "^n8. Заблокировать на %i %s^n", ( iSeconds > 60 ? iTime : iSeconds ), ( iSeconds > 60 ? "минут" : "секунд" ) ); } else iLen += copy( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r8.\w Разблокировать^n" : "^n8. Разблокировать^n" ); if( iEnd != iNum ) { formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r9.\w Больше...^n\r0.\w %s" : "^n9. Больше...^n0. %s", iPosition ? "Назад" : "Выход" ); iKeys |= MENU_KEY_9; } else formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r0.\w %s" : "^n0. %s", iPosition ? "Back" : "Exit" ); show_menu( id, iKeys, szMenu, -1, "Gag Menu" ); } public ActionGagFlags( const id, const iKey ) { switch( iKey ) { case 9: DisplayGagMenu( id, g_iMenuPosition[ id ] ); default: { g_iMenuFlags[ id ] ^= ( 1 << iKey ); DisplayGagFlags( id ); } } } DisplayGagFlags( const id ) { new szMenu[ 512 ]; new iLen = copy( szMenu, 511, g_bColoredMenus ? "\rФлаги^n^n" : "Gag Flags^n^n" ); if( g_bColoredMenus ) { iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r1.\w Чат: %s^n", ( g_iMenuFlags[ id ] & GAG_CHAT ) ? "\yДа" : "\rНет" ); iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r2.\w Командный. Чат: %s^n", ( g_iMenuFlags[ id ] & GAG_TEAMSAY ) ? "\yДА" : "\rНет" ); iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r3.\w Голос: %s^n", ( g_iMenuFlags[ id ] & GAG_VOICE ) ? "\yДа" : "\rНет" ); } else { iLen += formatex( szMenu[ iLen ], 511 - iLen, "1. Чат: %s^n", ( g_iMenuFlags[ id ] & GAG_CHAT ) ? "ДА" : "Нет" ); iLen += formatex( szMenu[ iLen ], 511 - iLen, "2. Командный чат: %s^n", ( g_iMenuFlags[ id ] & GAG_TEAMSAY ) ? "Да" : "Нет" ); iLen += formatex( szMenu[ iLen ], 511 - iLen, "3. Голос: %s^n", ( g_iMenuFlags[ id ] & GAG_VOICE ) ? "Да" : "Нет" ); } copy( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r0. \wВернуться в меню" : "^n0. Back to Gag Menu" ); show_menu( id, ( MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_0 ), szMenu, -1, "Gag Flags" ); } CheckGagFlag( const id, const iFlag ) { new iArrayPos; if( TrieGetCell( g_tArrayPos, g_szAuthid[ id ], iArrayPos ) ) { new data[ GagData ]; ArrayGetArray( g_aGagData, iArrayPos, data ); return ( data[ GAG_FLAGS ] & iFlag ); } return 0; } DeleteGag( const iArrayPos ) { new data[ GagData ]; ArrayGetArray( g_aGagData, iArrayPos, data ); if( data[ GAG_FLAGS ] & GAG_VOICE ) { new iPlayer = find_player( "c", data[ GAG_AUTHID ] ); if( is_user_connected( iPlayer ) ) set_speak( iPlayer, SPEAK_NORMAL ); } TrieDeleteKey( g_tArrayPos, data[ GAG_AUTHID ] ); ArrayDeleteItem( g_aGagData, iArrayPos ); g_iGagged--; for( new i = iArrayPos; i < g_iGagged; i++ ) { ArrayGetArray( g_aGagData, i, data ); TrieSetCell( g_tArrayPos, data[ GAG_AUTHID ], i ); } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par } */
Отредактировал: taulalan, - 19.4.2013, 14:17
![]() Парк AREON – Подключение ИП и самозанятых по всей России
|
|
|
|
Zoroark
|
19.4.2013, 14:53
Сообщение
|
|
|
держи
amx_gag.sma ( 18,16 килобайт )
Кол-во скачиваний: 12amx_gag Код #include < amxmodx > #include < amxmisc > #include < engine > #define DEFAULT_TIME 600.0 // In Seconds enum ( <<= 1 ) { GAG_CHAT = 1, GAG_TEAMSAY, GAG_VOICE }; enum _:GagData { GAG_AUTHID[ 35 ], GAG_TIME, GAG_START, GAG_FLAGS }; new g_szAuthid[ 33 ][ 35 ]; // STEAM_0:X:XXXXXXXX new g_iThinker, g_iGagged; new bool:g_bColoredMenus, Trie:g_tArrayPos, Array:g_aGagData, Array:g_aGagTimes, g_iTotalGagTimes; new g_iMenuOption[ 33 ], g_iMenuPosition[ 33 ], g_iMenuPlayers[ 33 ][ 32 ], g_iMenuFlags[ 33 ]; public plugin_init( ) { register_plugin( "AMXX Gag", "1.3", "xPaw & Exolent" ); register_clcmd( "say", "CmdSay" ); register_clcmd( "say_team", "CmdTeamSay" ); register_concmd( "amx_gag", "CmdGagPlayer", ADMIN_KICK, "<nick or #userid> <time> <a|b|c>" ); register_concmd( "amx_ungag", "CmdUnGagPlayer", ADMIN_KICK, "<nick or #userid>" ); register_concmd( "amx_gagmenu", "CmdGagMenu", ADMIN_KICK, "- displays gag menu" ); register_srvcmd( "amx_gag_times", "CmdSetBanTimes" ); register_menu( "Gag Menu", 1023, "ActionGagMenu" ); register_menu( "Gag Flags", 1023, "ActionGagFlags" ); register_message( get_user_msgid( "SayText" ), "MessageSayText" ); g_tArrayPos = TrieCreate( ); g_aGagData = ArrayCreate( GagData ); g_aGagTimes = ArrayCreate( ); g_bColoredMenus = bool:colored_menus( ); // this is used for ungag in the menu ArrayPushCell( g_aGagTimes, 0 ); // Gag times for the gag menu (amx_gagmenu) // Default values: 60 300 600 1800 3600 7200 86400 // Load up standart times ArrayPushCell( g_aGagTimes, 60 ); ArrayPushCell( g_aGagTimes, 300 ); ArrayPushCell( g_aGagTimes, 600 ); ArrayPushCell( g_aGagTimes, 1800 ); ArrayPushCell( g_aGagTimes, 3600 ); ArrayPushCell( g_aGagTimes, 7200 ); ArrayPushCell( g_aGagTimes, 86400 ); g_iTotalGagTimes = ArraySize( g_aGagTimes ); // Set up entity-thinker new const szClassname[ ] = "gag_thinker"; g_iThinker = create_entity( "info_target" ); entity_set_string( g_iThinker, EV_SZ_classname, szClassname ); register_think( szClassname, "FwdThink" ); } public CmdSetBanTimes( ) { new iArgs = read_argc( ); if( iArgs <= 1 ) { server_print( "Usage: amx_gag_times <time1> [time2] [time3] ..." ); return PLUGIN_HANDLED; } ArrayClear( g_aGagTimes ); // this is used for ungag in the menu ArrayPushCell( g_aGagTimes, 0 ); new szBuffer[ 32 ], iTime; for( new i = 1; i < iArgs; i++ ) { read_argv( i, szBuffer, 31 ); if( !is_str_num( szBuffer ) ) { server_print( "Число должно быть целым!!" ); continue; } iTime = str_to_num( szBuffer ); if( iTime <= 0 ) { server_print( "Число должно быть больше нуля!" ); continue; } if( iTime > 86400 ) { server_print( "Максимальное число - 86400!" ); continue; } ArrayPushCell( g_aGagTimes, iTime ); } g_iTotalGagTimes = ArraySize( g_aGagTimes ); return PLUGIN_HANDLED; } public plugin_end( ) { TrieDestroy( g_tArrayPos ); ArrayDestroy( g_aGagData ); ArrayDestroy( g_aGagTimes ); } public client_putinserver( id ) { if( CheckGagFlag( id, GAG_VOICE ) ) set_speak( id, SPEAK_MUTED ); // default flags to "abc" g_iMenuFlags[ id ] = GAG_CHAT | GAG_TEAMSAY | GAG_VOICE; } public client_authorized( id ) get_user_authid( id, g_szAuthid[ id ], 34 ); public client_disconnect( id ) { if( TrieKeyExists( g_tArrayPos, g_szAuthid[ id ] ) ) { new szName[ 32 ]; get_user_name( id, szName, 31 ); new iPlayers[ 32 ], iNum, iPlayer; get_players( iPlayers, iNum, "ch" ); for( new i; i < iNum; i++ ) { iPlayer = iPlayers[ i ]; if( get_user_flags( iPlayer ) & ADMIN_KICK ) client_print( iPlayer, print_chat, "Заблокированый игрок ^"%s<%s>^" отключился!", szName, g_szAuthid[ id ] ); } } g_szAuthid[ id ][ 0 ] = '^0'; } public client_infochanged( id ) { if( !CheckGagFlag( id, ( GAG_CHAT | GAG_TEAMSAY ) ) ) return; static const name[ ] = "name"; static szNewName[ 32 ], szOldName[ 32 ]; get_user_info( id, name, szNewName, 31 ); get_user_name( id, szOldName, 31 ); if( !equal( szNewName, szOldName ) ) { client_print( id, print_chat, "Заблокированые игроки не могут менять ник!" ); set_user_info( id, name, szOldName ); } } public MessageSayText( ) { static const Cstrike_Name_Change[ ] = "#Cstrike_Name_Change"; new szMessage[ sizeof( Cstrike_Name_Change ) + 1 ]; get_msg_arg_string( 2, szMessage, sizeof( szMessage ) - 1 ); if( equal( szMessage, Cstrike_Name_Change ) ) { new szName[ 32 ], id; for( new i = 3; i <= 4; i++ ) { get_msg_arg_string( i, szName, 31 ); id = get_user_index( szName ); if( is_user_connected( id ) ) { if( CheckGagFlag( id, ( GAG_CHAT | GAG_TEAMSAY ) ) ) return PLUGIN_HANDLED; break; } } } return PLUGIN_CONTINUE; } public FwdThink( const iEntity ) { if( !g_iGagged ) return; new Float:fGametime; fGametime = get_gametime( ); new data[ GagData ], id, szName[ 32 ]; for( new i = 0; i < g_iGagged; i++ ) { ArrayGetArray( g_aGagData, i, data ); if( ( Float:data[ GAG_START ] + Float:data[ GAG_TIME ] - 0.5 ) <= fGametime ) { id = find_player( "c", data[ GAG_AUTHID ] ); if( is_user_connected( id ) ) { get_user_name( id, szName, 31 ); client_print( 0, print_chat, "Игрок ^"%s^" разблокирован.", szName ); } DeleteGag( i ); i--; } } if( !g_iGagged ) return; new Float:flNextTime = 999999.9; for( new i = 0; i < g_iGagged; i++ ) { ArrayGetArray( g_aGagData, i, data ); flNextTime = floatmin( flNextTime, Float:data[ GAG_START ] + Float:data[ GAG_TIME ] ); } entity_set_float( iEntity, EV_FL_nextthink, flNextTime ); } public CmdSay( const id ) return CheckSay( id, 0 ); public CmdTeamSay( const id ) return CheckSay( id, 1 ); CheckSay( const id, const bTeam ) { new iArrayPos; if( TrieGetCell( g_tArrayPos, g_szAuthid[ id ], iArrayPos ) ) { new data[ GagData ]; ArrayGetArray( g_aGagData, iArrayPos, data ); new const iFlags[ ] = { GAG_CHAT, GAG_TEAMSAY }; if( data[ GAG_FLAGS ] & iFlags[ bTeam ] ) { new szInfo[ 32 ], iLen, iTime = floatround( ( Float:data[ GAG_START ] + Float:data[ GAG_TIME ] ) - get_gametime( ) ), iMinutes = iTime / 60, iSeconds = iTime % 60; if( iMinutes > 0 ) iLen = formatex( szInfo, 31, "%i Минут", iMinutes, iMinutes == 1 ? "" : "s" ); if( iSeconds > 0 ) formatex( szInfo[ iLen ], 31 - iLen, "%s%i Секунд", iLen ? " and " : "", iSeconds, iSeconds == 1 ? "" : "s" ); client_print( id, print_chat, "Осталось %s !", szInfo ); client_print( id, print_center, "** Тебя заблокировали в %s чате! **", bTeam ? " team" : "" ); return PLUGIN_HANDLED; } } return PLUGIN_CONTINUE; } public CmdGagPlayer( const id, const iLevel, const iCid ) { if( !cmd_access( id, iLevel, iCid, 2 ) ) { console_print( id, "Флаги: a - Чат | b - Командный чат | c - Голос" ); return PLUGIN_HANDLED; } new szArg[ 32 ]; read_argv( 1, szArg, 31 ); new iPlayer = cmd_target( id, szArg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS ); if( !iPlayer ) return PLUGIN_HANDLED; new szName[ 20 ]; get_user_name( iPlayer, szName, 19 ); if( TrieKeyExists( g_tArrayPos, g_szAuthid[ iPlayer ] ) ) { console_print( id, "Игрок ^"%s^" уже заблокирован!", szName ); return PLUGIN_HANDLED; } new szFlags[ 4 ], Float:flGagTime; read_argv( 2, szArg, 31 ); if( !szArg[ 0 ] ) { // No time entered flGagTime = DEFAULT_TIME; formatex( szFlags, 3, "abc" ); } else { if( is_str_num( szArg ) ) { // Seconds entered flGagTime = floatstr( szArg ); if( flGagTime > 86400.0 ) flGagTime = 86400.0; } else { console_print( id, "Время должно быть в секундах!" ); return PLUGIN_HANDLED; } read_argv( 3, szArg, 31 ); if( !szArg[ 0 ] ) // No flag entered formatex( szFlags, 3, "abc" ); else formatex( szFlags, 3, szArg ); } new iFlags = read_flags( szFlags ); new data[ GagData ]; data[ GAG_START ] = _:get_gametime( ); data[ GAG_TIME ] = _:flGagTime; data[ GAG_FLAGS ] = iFlags; copy( data[ GAG_AUTHID ], 34, g_szAuthid[ iPlayer ] ); TrieSetCell( g_tArrayPos, g_szAuthid[ iPlayer ], g_iGagged ); ArrayPushArray( g_aGagData, data ); new szFrom[ 64 ]; if( iFlags & GAG_CHAT ) formatex( szFrom, 63, "" ); if( iFlags & GAG_TEAMSAY ) { if( !szFrom[ 0 ] ) formatex( szFrom, 63, "" ); else format( szFrom, 63, "%s ", szFrom ); } if( iFlags & GAG_VOICE ) { set_speak( iPlayer, SPEAK_MUTED ); if( !szFrom[ 0 ] ) formatex( szFrom, 63, "" ); else format( szFrom, 63, "%s ", szFrom ); } g_iGagged++; new Float:flGametime = get_gametime( ), Float:flNextThink; flNextThink = entity_get_float( g_iThinker, EV_FL_nextthink ); if( !flNextThink || flNextThink > ( flGametime + flGagTime ) ) entity_set_float( g_iThinker, EV_FL_nextthink, flGametime + flGagTime ); new szInfo[ 32 ], szAdmin[ 20 ], iTime = floatround( flGagTime ), iMinutes = iTime / 60, iSeconds = iTime % 60; get_user_name( id, szAdmin, 19 ); if( !iMinutes ) formatex( szInfo, 31, "%i секунд%s", iSeconds, iSeconds == 1 ? "" : "s" ); else formatex( szInfo, 31, "%i минут%s", iMinutes, iMinutes == 1 ? "" : "s" ); show_activity( id, szAdmin, "Заблокировал %s говорить на %s ", szName, szInfo, szFrom ); console_print( id, "Вы заблокировали ^"%s^" (%s) !", szName, szFrom ); log_amx( "Gag: ^"%s<%s>^" заблокировал ^"%s<%s>^" на %i минут. ", szAdmin, g_szAuthid[ id ], szName, g_szAuthid[ iPlayer ], floatround( flGagTime / 60 ), szFrom ); return PLUGIN_HANDLED; } public CmdUnGagPlayer( const id, const iLevel, const iCid ) { if( !cmd_access( id, iLevel, iCid, 2 ) ) return PLUGIN_HANDLED; new szArg[ 32 ]; read_argv( 1, szArg, 31 ); if( equali( szArg, "@all" ) ) { if( !g_iGagged ) { console_print( id, "Нету заблокированых игроков!" ); return PLUGIN_HANDLED; } while( g_iGagged ) DeleteGag( 0 ); // Excellent by Exolent if( entity_get_float( g_iThinker, EV_FL_nextthink ) > 0.0 ) entity_set_float( g_iThinker, EV_FL_nextthink, 0.0 ); console_print( id, "Вы разблокировали всех игроков!" ); new szAdmin[ 32 ]; get_user_name( id, szAdmin, 31 ); show_activity( id, szAdmin, "Разблокировал всех игроков." ); log_amx( "UnGag: ^"%s<%s>^" разблокировал всех игроков.", szAdmin, g_szAuthid[ id ] ); return PLUGIN_HANDLED; } new iPlayer = cmd_target( id, szArg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS ); if( !iPlayer ) return PLUGIN_HANDLED; new szName[ 32 ]; get_user_name( iPlayer, szName, 31 ); new iArrayPos; if( !TrieGetCell( g_tArrayPos, g_szAuthid[ iPlayer ], iArrayPos ) ) { console_print( id, "Игрок ^"%s^" не заблокирован!", szName ); return PLUGIN_HANDLED; } DeleteGag( iArrayPos ); new szAdmin[ 32 ]; get_user_name( id, szAdmin, 31 ); show_activity( id, szAdmin, "Разблокировал %s.", szName ); console_print( id, "Вы разблокировали ^"%s^" !", szName ); log_amx( "UnGag: ^"%s<%s>^" разблокировал ^"%s<%s>^"", szAdmin, g_szAuthid[ id ], szName, g_szAuthid[ iPlayer ] ); return PLUGIN_HANDLED; } public CmdGagMenu( const id, const iLevel, const iCid ) { if( !cmd_access( id, iLevel, iCid, 1 ) ) return PLUGIN_HANDLED; g_iMenuOption[ id ] = 0; arrayset( g_iMenuPlayers[ id ], 0, 32 ); DisplayGagMenu( id, g_iMenuPosition[ id ] = 0 ); return PLUGIN_HANDLED; } #define PERPAGE 6 public ActionGagMenu( const id, const iKey ) { switch( iKey ) { case 6: DisplayGagFlags( id ); case 7: { ++g_iMenuOption[ id ]; g_iMenuOption[ id ] %= g_iTotalGagTimes; DisplayGagMenu( id, g_iMenuPosition[ id ] ); } case 8: DisplayGagMenu( id, ++g_iMenuPosition[ id ] ); case 9: DisplayGagMenu( id, --g_iMenuPosition[ id ] ); default: { new iPlayer = g_iMenuPlayers[ id ][ g_iMenuPosition[ id ] * PERPAGE + iKey ]; if( !g_iMenuOption[ id ] ) client_cmd( id, "amx_ungag #%i", get_user_userid( iPlayer ) ); else { new szFlags[ 4 ]; get_flags( g_iMenuFlags[ id ], szFlags, 3 ); client_cmd( id, "amx_gag #%i %i %s", get_user_userid( iPlayer ), ArrayGetCell( g_aGagTimes, g_iMenuOption[ id ] ), szFlags ); } DisplayGagMenu( id, g_iMenuPosition[ id ] ); } } } // I just copied this from AMXX Ban menu, so don't blame me :D DisplayGagMenu( const id, iPosition ) { if( iPosition < 0 ) { arrayset( g_iMenuPlayers[ id ], 0, 32 ); return; } new iPlayers[ 32 ], iNum, iCount, szMenu[ 512 ], iPlayer, iFlags, szName[ 32 ]; get_players( iPlayers, iNum, "ch" ); // Ignore bots and hltv new iStart = iPosition * PERPAGE; if( iStart >= iNum ) iStart = iPosition = g_iMenuPosition[ id ] = 0; new iEnd = iStart + PERPAGE, iKeys = MENU_KEY_0 | MENU_KEY_8; new iLen = formatex( szMenu, 511, g_bColoredMenus ? "\rМеню блокировок\R%i/%i^n^n" : "Меню блокировок %i/%i^n^n", iPosition + 1, ( ( iNum + PERPAGE - 1 ) / PERPAGE ) ); new bool:bUngag = bool:!g_iMenuOption[ id ]; if( iEnd > iNum ) iEnd = iNum; for( new i = iStart; i < iEnd; ++i ) { iPlayer = iPlayers[ i ]; iFlags = get_user_flags( iPlayer ); get_user_name( iPlayer, szName, 31 ); if( iPlayer == id || ( iFlags & ADMIN_IMMUNITY ) || bUngag != TrieKeyExists( g_tArrayPos, g_szAuthid[ iPlayer ] ) ) { ++iCount; if( g_bColoredMenus ) iLen += formatex( szMenu[ iLen ], 511 - iLen, "\d%i. %s^n", iCount, szName ); else iLen += formatex( szMenu[ iLen ], 511 - iLen, "#. %s^n", szName ); } else { iKeys |= ( 1 << iCount ); ++iCount; iLen += formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "\r%i.\w %s\y%s\r%s^n" : "%i. %s%s%s^n", iCount, szName, TrieKeyExists( g_tArrayPos, g_szAuthid[ iPlayer ] ) ? " Заблокирован" : "", ( ~iFlags & ADMIN_USER ? " *" : "" ) ); } } g_iMenuPlayers[ id ] = iPlayers; new szFlags[ 4 ]; get_flags( g_iMenuFlags[ id ], szFlags, 3 ); iLen += formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? ( bUngag ? "^n\d7. Флаги: %s" : "^n\r7.\y Флаги:\w %s" ) : ( bUngag ? "^n#. Флаги: %s" : "^n7. Флаги: %s" ), szFlags ); if( !bUngag ) { iKeys |= MENU_KEY_7; new iSeconds = ArrayGetCell( g_aGagTimes, g_iMenuOption[ id ] ); new iTime = iSeconds / 60; iLen += formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r8.\y Время:\w %i %s^n" : "^n8. Заблокировать на %i %s^n", ( iSeconds > 60 ? iTime : iSeconds ), ( iSeconds > 60 ? "минут" : "секунд" ) ); } else iLen += copy( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r8.\w Разблокировать^n" : "^n8. Разблокировать^n" ); if( iEnd != iNum ) { formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r9.\w Больше...^n\r0.\w %s" : "^n9. Больше...^n0. %s", iPosition ? "Назад" : "Выход" ); iKeys |= MENU_KEY_9; } else formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r0.\w %s" : "^n0. %s", iPosition ? "Back" : "Exit" ); show_menu( id, iKeys, szMenu, -1, "Gag Menu" ); } public ActionGagFlags( const id, const iKey ) { switch( iKey ) { case 9: DisplayGagMenu( id, g_iMenuPosition[ id ] ); default: { g_iMenuFlags[ id ] ^= ( 1 << iKey ); DisplayGagFlags( id ); } } } DisplayGagFlags( const id ) { new szMenu[ 512 ]; new iLen = copy( szMenu, 511, g_bColoredMenus ? "\rФлаги^n^n" : "Gag Flags^n^n" ); if( g_bColoredMenus ) { iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r1.\w Чат: %s^n", ( g_iMenuFlags[ id ] & GAG_CHAT ) ? "\yДа" : "\rНет" ); iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r2.\w Командный. Чат: %s^n", ( g_iMenuFlags[ id ] & GAG_TEAMSAY ) ? "\yДА" : "\rНет" ); iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r3.\w Голос: %s^n", ( g_iMenuFlags[ id ] & GAG_VOICE ) ? "\yДа" : "\rНет" ); } else { iLen += formatex( szMenu[ iLen ], 511 - iLen, "1. Чат: %s^n", ( g_iMenuFlags[ id ] & GAG_CHAT ) ? "ДА" : "Нет" ); iLen += formatex( szMenu[ iLen ], 511 - iLen, "2. Командный чат: %s^n", ( g_iMenuFlags[ id ] & GAG_TEAMSAY ) ? "Да" : "Нет" ); iLen += formatex( szMenu[ iLen ], 511 - iLen, "3. Голос: %s^n", ( g_iMenuFlags[ id ] & GAG_VOICE ) ? "Да" : "Нет" ); } copy( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r0. \wВернуться в меню" : "^n0. Back to Gag Menu" ); show_menu( id, ( MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_0 ), szMenu, -1, "Gag Flags" ); } CheckGagFlag( const id, const iFlag ) { new iArrayPos; if( TrieGetCell( g_tArrayPos, g_szAuthid[ id ], iArrayPos ) ) { new data[ GagData ]; ArrayGetArray( g_aGagData, iArrayPos, data ); return ( data[ GAG_FLAGS ] & iFlag ); } return 0; } DeleteGag( const iArrayPos ) { new data[ GagData ]; ArrayGetArray( g_aGagData, iArrayPos, data ); if( data[ GAG_FLAGS ] & GAG_VOICE ) { new iPlayer = find_player( "c", data[ GAG_AUTHID ] ); if( is_user_connected( iPlayer ) ) set_speak( iPlayer, SPEAK_NORMAL ); } TrieDeleteKey( g_tArrayPos, data[ GAG_AUTHID ] ); ArrayDeleteItem( g_aGagData, iArrayPos ); g_iGagged--; for( new i = iArrayPos; i < g_iGagged; i++ ) { ArrayGetArray( g_aGagData, i, data ); TrieSetCell( g_tArrayPos, data[ GAG_AUTHID ], i ); } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par } */ Это amx_gagip rus + menu? |
|
|
|
Zoroark
|
20.4.2013, 20:30
Сообщение
|
|
|
Это amx_gagip rus + menu?
|
|
|
|
XyLiGaN
|
20.4.2013, 20:33
Сообщение
|
|
|
|
|
|
|
Zoroark
|
20.4.2013, 20:40
Сообщение
|
|
|
Я скачал простой amx_gag rus + menu дал бан на 60 мин игрок перезашел и дальше говорил в микрофон + писал
|
|
|
|
![]() ![]() |