Плагин Admin_gag  [Решено]

To improve servers/Для улучшения серверов
Аватар пользователя

Автор темы
Longipongeoos
Администраторы
Администраторы
Сообщений: 846
Зарегистрирован: 22 янв 2015, 13:26
Откуда: Москва/Moscow
Gender: Boy
Game nick: Longipongeoos
STEAM_ID: STEAM_0:1:46523040
Благодарил (а): 27 раза
Поблагодарили: 179 раза
Контактная информация:

Плагин Admin_gag  [Решено]

Сообщение Longipongeoos » 24 авг 2016, 19:13

Plugin Admin_gag

Код: Выбрать все

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <colorchat>
#define PLUGIN        "Admin Gag"
#define VERSION        "1.0"
#define AUTHOR        "fomeN"

#define GAG_IMMUNITY    ADMIN_IMMUNITY
#define GAG_ACCESS        ADMIN_KICK
#define MAX_PLAYERS    32

#define TID            88897


new g_user_menu_page[ MAX_PLAYERS + 1 ],
    g_user_menu_players[ MAX_PLAYERS + 1 ][ MAX_PLAYERS ],
    g_user_time[ MAX_PLAYERS + 1 ]
    
new bool
:g_user_gagged[ MAX_PLAYERS + 1 ]

new g_times[] = { 5, 10, 15, 30 }


public plugin_init()
{
    register_plugin( PLUGIN, VERSION, AUTHOR )
    
    register_forward
( FM_Voice_SetClientListening, "fwd_voice_setclientlistening" )

    register_clcmd( "amx_gagmenu", "show_gag_main_menu" )
    
    register_clcmd
( "say", "hook_say" )
    register_clcmd( "say_team", "hook_say" )

    register_menu( "gag_players_menu", 1023, "handler_gag_players_menu" )
    register_menu( "gag_time_menu", -1, "handler_gag_time_menu" )
}

public client_connect( id )
    _remove_user_gag( id )
    
public client_disconnect
( id ) 
    _remove_user_gag
( id )

_remove_user_gag( id )
{
    g_user_time[ id ] = g_times[ 0 ]
    g_user_gagged[ id ] = false
    
    if
( task_exists( TID + id ) )
        remove_task( TID + id )
}

public fwd_voice_setclientlistening( receiver, sender, listen ) 
{
    if( receiver != sender )
    {
        if( g_user_gagged[ sender ] )
        {
            engfunc( EngFunc_SetClientListening, receiver, sender, 0 )
            return FMRES_SUPERCEDE
        
}
    }
    
    return FMRES_IGNORED
}

public hook_say( id )
{
    if( g_user_gagged[ id ] )
    {
        new said[ 8 ]
        read_args( said, 7 )
        
        if
( contain( said, "/sorry" ) != -)
        {
            for( new i = 1; i <= MAX_PLAYERS; i ++ )
            {
                if( is_user_connected( i ) && get_user_flags( i ) & GAG_ACCESS )
                {
                    new name[ 32 ]; get_user_name( id, name, 31 )
                    client_print_color( i, BLUE, "^3[Gag]^1 ^4%s^1 извиняется и просит снять с него молчанку.", name )
                }
            }
            
            client_print_color
( id, BLUE, "^3[Gag]^1 Вы попросили прощение у администраторов." )
            return PLUGIN_HANDLED
        
}
        

        
{
            client_print_color( id, RED, "^3[Gag]^1 Вам запрещено писать в чат, можете попросить прощение командой ^3/sorry." )
            return PLUGIN_HANDLED
        
}
    }
    
    return PLUGIN_CONTINUE
}

public show_gag_main_menu( id, page )
{
    if( !( get_user_flags( id ) & GAG_ACCESS ) )
        return PLUGIN_HANDLED
        
    if
( page < 0 )
        return PLUGIN_HANDLED
        
    new players
[ 32 ], num
    get_players
( players, num, "ch" )
    
    new i 
= min( page * 7, num )
    new start = i - ( i % 7 )
    new end = min( start + 7, num )
    page = start / 7
    
    g_user_menu_page
[ id ] = page
    g_user_menu_players
[ id ] = players
    
    new menu
[ 512 ]
    new len = formatex( menu, 511, "\yЗаткнуть игрока\R%d/%d^n^n", page + 1, ( ( num - 1 ) / 7 ) + 1 )
    new keys = MENU_KEY_0 + MENU_KEY_8

    new item
    
    for
( i = start; i < end; i ++ )
    {
        new name[ 32 ]
        new g_id = players[ i ]
        
        get_user_name
( g_id, name, 31 )
        
        if
( id == g_id )
            len += formatex( menu[ len ], 511 - len, "\d%d. \y%s^n", ++ item, name )
        
        else 
        
{
            if( get_user_flags( g_id ) & GAG_IMMUNITY )
                len += formatex( menu[ len ], 511 - len, "\d%d. %s \r*^n", ++ item, name )
            
            else
            
{
                keys |= ( 1 << item )
                
                if
( g_user_gagged[ g_id ] )
                    len += formatex( menu[ len ], 511 - len, "\w%d. \w%s \r[Заткнут]^n", ++ item, name )
                else
                    len 
+= formatex( menu[ len ], 511 - len, "\w%d. \w%s^n", ++ item, name )
            }
        }
    }
    
    len 
+= formatex( menu[ len ], 511 - len, "^n\w8. Время: \y%d минут^n", g_user_time[ id ] )
    
    if
( end < num )
    {    
        keys 
|= MENU_KEY_9
        formatex
( menu[ len ], 511 - len, "^n\w9. Далее^n0. %s", page ? "Назад" : "Выход" )
    }
    
    else  formatex
( menu[ len ], 511 - len, "^n\w0. %s", page ? "Назад" : "Выход" )
    
    show_menu
( id, keys, menu, -1, "gag_players_menu" )
    
    return PLUGIN_HANDLED
} 

Код: Выбрать все

public handler_gag_players_menu( id, key )
{
    switch( key )
    {
        case 0..6:
        {
            new g_id = g_user_menu_players[ id ][ g_user_menu_page[ id ] * 7 + key ]
            
            if
( is_user_connected( g_id ) )
            {
                if( !( get_user_flags( g_id ) & GAG_IMMUNITY ) )
                {
                    new name[ 32 ]; get_user_name( id, name, 31 )
                    new g_name[ 32 ]; get_user_name( g_id, g_name, 31 )
                    
                    if
( !g_user_gagged[ g_id ] )
                    {
                        new time = g_user_time[ id ]
                        g_user_gagged[ g_id ] = true
                        client_print_color
( 0, RED, "^3[Gag]^1 ^4%s^1 заткнул ^4%s^1 на ^3%d^1 минут. Попросить прощение: /sorry.", name, g_name, time )
                        set_task( float( time ) * 60.0, "task_ungag", g_id + TID )
                    }
                    else
                    
{
                        _remove_user_gag( g_id )
                        client_print_color( 0, BLUE, "^3[Gag]^1 ^4%s^1 снял молчанку с ^4%s^1.", name, g_name )
                    }
                }
                
                else client_print_color
( id, BLUE, "^3[Gag] ^1Этот игрок имеет иммунитет." )
            }
            
            else client_print_color
( id, BLUE, "^3[Gag] ^1Этот игрок отключился от сервера." )
            
            show_gag_main_menu
( id, 0 )
        }
        
        case 7
: show_gag_time_menu( id )
        case 8: show_gag_main_menu( id, ++ g_user_menu_page[ id ] )
        case 9: show_gag_main_menu( id, -- g_user_menu_page[ id ] )
    }
}

public task_ungag( task_id )
{
    new id = task_id - TID
    
    _remove_user_gag
( id )
    
    new name
[ 32 ]; get_user_name( id, name, 31 )
    client_print_color( 0, BLUE, "^3[Gag] ^1C игрока ^4%s^1 снята молчанка.", name )
}

public show_gag_time_menu( id )
{
    new menu[ 256 ], len, keys = MENU_KEY_0
    
    len 
= formatex( menu, charsmax( menu ), "\yВыбор времени молчанки^n\w" )

    new item

    for
( new i; i < sizeof g_times; i ++ )
    {
        keys |= ( 1 << item )
        len += formatex( menu[ len ], charsmax( menu ) - len, "^n%d. %d минут", ++ item, g_times[ i ] )
    }
    
    len 
+= formatex( menu[ len ], charsmax( menu ) - len, "^n^n0. Выход" )

    show_menu( id, keys, menu, _, "gag_time_menu" )
}

public handler_gag_time_menu( id, key )
{
    switch( key )
    {
        case 0..4:
        {
            g_user_time[ id ] = g_times[ key ]
            show_gag_main_menu( id, 0 )
        }
    }
}
 

Вернуться в «Proposal/Предложения»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 1 гость