Русское сообщество по скриптингу

amx_gag только микрофон  [Решено]

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

amx_gag только микрофон

Сообщение jjey1 » 04 апр 2017, 12:31

Здравствуйте уважаемые скриптеры.
Помогите пожалуйста найти то что отвечает за заглушку чата я все не могу понять!
Нужно чтоб плагин глушил только голос - без чата!

Я так подозреваю что тут выдается gag id единица (g_user_gagged[ id ] = 1)
и стоит проверка Если у данного steamid стоит 1 тогда пишет в чат хуук(отлов) то что (вам запрещенно писать в чат, извинитесь!

от части я устройство это понимаю... но как вырезать конкретно чат что то не придумать)
Большое спасибо если ответ будет более расширенный! хотелось бы и опыта набраться в этой части!


Код: Выделить всё
//
// модификаиця от serfreeman1337
//   * быстрая смена времени гага
//   * использование нативных функций AMXX 1.8.3
//   + запоминание последней страницы меню
// <noindex><a rel="nofollow" href="http://c-s.net.ua/url?u=http%3A%2F%2Fgf.hldm.org%2F" target="_blank">http://gf.hldm.org/</a></noindex>
// 21.07.2014
//

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#if AMXX_VERSION_NUM < 183
#include <colorchat>

#define print_team_default DontChange
#define print_team_grey Grey
#define print_team_red Red
#define print_team_blue Blue
#endif

#define PLUGIN      "Admin Gag"
#define VERSION      "1.0sf1"
#define AUTHOR      "AndrewZ"

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

#define TID         88897

const MAX_SAVED 64

new g_user_menu_pageMAX_PLAYERS ],
g_user_menu_playersMAX_PLAYERS ][ MAX_PLAYERS ],
g_user_timeMAX_PLAYERS ]

new 
g_user_gaggedMAX_PLAYERS ]

new 
g_times[] = { 5102030 }

new 
db_steamid[MAX_SAVED][32
new 
db_gag[MAX_SAVED
new 
db_slot_i

new g_SorryWait[33]

public 
plugin_init()
{
    
register_pluginPLUGINVERSIONAUTHOR )

    
register_forwardFM_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" )
}

public 
client_putinserverid )
{
    
g_SorryWait[id] = 0
    load_gag
(id)
}

public 
client_disconnectid 
{
    
save_gag(id)
    
_remove_user_gagid )
}

_remove_user_gagid ){
    
g_user_timeid ] = 0
    g_user_gagged
id ] = 0

    
if( task_existsTID id ) )
    
remove_taskTID id )
}

public 
fwd_voice_setclientlisteningreceiversenderlisten 
{
    if( 
receiver != sender )
    {
        if( 
g_user_gaggedsender ] )
        {
            
engfuncEngFunc_SetClientListeningreceiversender)
            return 
FMRES_SUPERCEDE
        
}
    }

    return 
FMRES_IGNORED
}

public 
hook_sayid ) {
    if( 
g_user_gaggedid ] ) {
        new 
said]
        
read_argssaid)

        if( 
containsaid"/sorry" ) != -&& (!g_SorryWait[id] || get_systime() - g_SorryWait[id] > 30))
        {
            for( new 
1<= MAX_PLAYERS++ )
            {
                if( 
is_user_connected) && get_user_flags) & ( GAG_ACCESS GAG_ACCESS_IMMUNITY ) )
                {
                    new 
name32 ]; get_user_nameidname31 )
                    
client_print_coloriprint_team_blue"^3[GAG]^1 ^4%s^1 извиняется и просит снять с него молчанку."name )
                }
            }

            
g_SorryWait[id] = get_systime()
            
client_print_coloridprint_team_blue"^3[GAG]^1 Вы попросили прощение у администраторов." )
            return 
PLUGIN_HANDLED
        
} else 
        {
            
client_print_coloridprint_team_red"^3[GAG]^1 Вам запрещено писать в чат, можете попросить прощение командой /sorry." )
            return 
PLUGIN_HANDLED
        
}
    }
    return 
PLUGIN_CONTINUE
}

public 
show_gag_main_menuidpage ){
    if( ! ( 
get_user_flagsid ) & ( GAG_ACCESS GAG_ACCESS_IMMUNITY ) ) )
    return 
PLUGIN_HANDLED

    
if( page )
    return 
PLUGIN_HANDLED

    
new players32 ], num
    get_players
playersnum"h" )

    new 
minpage 7num )
    new 
start - ( )
    new 
end minstart 7num )
    
page start 7

    g_user_menu_page
id ] = page
    g_user_menu_players
id ] = players

    
new menu512 ]
    new 
len formatexmenu511"\yЗаткнуть игрока\R%d/%d^n^n"page 1, ( ( num ) / ) + )
    new 
keys MENU_KEY_0 MENU_KEY_8

    
new item

    
for( startend++ )
    {
        new 
name32 ]
        new 
g_id players]

        
get_user_nameg_idname31 )

        if( 
id == g_id )
        
len += formatexmenulen ], 511 len"\d%d. \y%s^n", ++ itemname )

        else
        {
            if( ( 
get_user_flagsg_id ) & GAG_IMMUNITY ) && ! ( get_user_flagsid ) & GAG_ACCESS_IMMUNITY ) )
            
len += formatexmenulen ], 511 len"\d%d. %s \r*^n", ++ itemname )

            else
            {
                
keys |= ( << item )

                if( 
g_user_gaggedg_id ] )
                
len += formatexmenulen ], 511 len"\w%d. \w%s \r[ЗАТКНУТ]^n", ++ itemname )
                else
                
len += formatexmenulen ], 511 len"\w%d. \w%s^n", ++ itemname )
            }
        }
    }

       
// dont over index arrays? net, ne sliwal
       
len += formatexmenulen ], 511 len"^n\w8. Время: \y%d минут^n"
       
g_times
       
g_user_timeid ]
       ]
       )

       if( 
end num )
       {   
           
keys |= MENU_KEY_9
           formatex
menulen ], 511 len"^n\w9. Далее^n0. %s"page "Назад" "Выход" )
      } else  
formatexmenulen ], 511 len"^n\w0. %s"page "Назад" "Выход" )
       
show_menuidkeysmenu, -1"gag_players_menu" )
    return 
PLUGIN_HANDLED
}

public 
handler_gag_players_menuidkey )
{
    switch( 
key )
    {
        case 
0..6:
        {
            new 
g_id g_user_menu_playersid ][ g_user_menu_pageid ] * key ]

            if( 
is_user_connectedg_id ) )
            {
                new 
user_flags get_user_flagsg_id );
                new 
admin_flags get_user_flagsid );
                if( !( 
user_flags GAG_IMMUNITY ) || ( admin_flags GAG_ACCESS_IMMUNITY ) )
                {
                    new 
name32 ]; get_user_nameidname31 )
                    new 
g_name32 ]; get_user_nameg_idg_name31 )

                    if( !
g_user_gaggedg_id ] )
                    {
                        new 
time g_times[
                        
g_user_timeid ]
                        ]

                        
g_user_gaggedg_id ] = 1
                        client_print_color
0print_team_red"^3[GAG]^1 ^4%s^1 заткнул ^4%s^1 на ^3%d^1 минут. Попросить прощение: /sorry."nameg_nametime )
                        
set_taskfloattime ) * 60.0"task_ungag"g_id TID )
                    }
                    else
                    {
                        
_remove_user_gagg_id )
                        
client_print_color0print_team_blue"^3[GAG]^1 ^4%s^1 снял молчанку с ^4%s^1."nameg_name )
                    }
                }

                else 
client_print_coloridprint_team_blue"^3[GAG] ^1Этот игрок имеет иммунитет." )
            }

            else 
client_print_coloridprint_team_blue"^3[GAG] ^1Этот игрок отключился от сервера." )

            
show_gag_main_menuid,  g_user_menu_pageid ] )
        }

        case 
7: {
            
g_user_time[id] ++

            if(
g_user_time[id] >= sizeof g_times)
            
g_user_time[id] = 0

            show_gag_main_menu
(id,g_user_menu_page[id])
        }
        case 
8show_gag_main_menuid, ++ g_user_menu_pageid ] )
        case 
9show_gag_main_menuid, -- g_user_menu_pageid ] )
    }
}

public 
task_ungagtask_id )
{
    new 
id task_id TID

    _remove_user_gag
id )

    new 
name32 ]; get_user_nameidname31 )
    
client_print_color0print_team_blue"^3[GAG] ^1C игрока ^4%s^1 снята молчанка."name )
}

save_gag(id){
    new 
g_steamid[32]
    
get_user_authid(idg_steamidcharsmax(g_steamid))
    if (
db_steamid[id][0] && !equal(g_steamiddb_steamid[id]))
    {
        if (
db_slot_i >= sizeof db_steamid)
        
db_slot_i get_maxplayers()+1

        copy
(db_steamid[db_slot_i], charsmax(db_steamid[]), db_steamid[id])
        
db_gag[db_slot_i] = db_gag[id]
        
db_slot_i++
    }

    
copy(db_steamid[id], charsmax(db_steamid[]), g_steamid)
    
db_gag[id] = g_user_gagged[id]
}

load_gag(id){
    new 
g_steamid[32]
    
get_user_authid(idg_steamidcharsmax(g_steamid))

    static 
i
    
for (0sizeof db_steamidi++)
    {
        if (
equal(g_steamiddb_steamid[i]))
        {
            
g_user_gagged[id] = db_gag[i]
            return;
        }
    }

 
 
skype: tatoxa80
Аватара пользователя
jjey1
 
Сообщения: 199
Зарегистрирован: 08 мар 2016, 18:32
Забанен
Благодарил (а): 39 раз.
Поблагодарили: 9 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: amx_gag только микрофон

Сообщение KOTOKU » 04 апр 2017, 14:22

А удалить не пробовал, не?
Или тебе надо оставить команду /sorry
Код: Выделить всё

    register_clcmd
( "say", "hook_say" )
    register_clcmd( "say_team", "hook_say" )
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: amx_gag только микрофон  [Решено]

Сообщение jjey1 » 04 апр 2017, 16:46

РЕШЕНИЕ:

Код: Выделить всё
//
// модификаиця от serfreeman1337
//   * быстрая смена времени гага
//   * использование нативных функций AMXX 1.8.3
//   + запоминание последней страницы меню
// <noindex><a rel="nofollow" href="http://c-s.net.ua/url?u=http%3A%2F%2Fgf.hldm.org%2F" target="_blank">http://gf.hldm.org/</a></noindex>
// 21.07.2014
//

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#if AMXX_VERSION_NUM < 183
#include <colorchat>

#define print_team_default DontChange
#define print_team_grey Grey
#define print_team_red Red
#define print_team_blue Blue
#endif

#define PLUGIN      "Admin Gag"
#define VERSION      "1.0sf1"
#define AUTHOR      "AndrewZ"

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

#define TID         88897

const MAX_SAVED = 64

new g_user_menu_page
[ MAX_PLAYERS + 1 ],
g_user_menu_players[ MAX_PLAYERS + 1 ][ MAX_PLAYERS ],
g_user_time[ MAX_PLAYERS + 1 ]

new g_user_gagged[ MAX_PLAYERS + 1 ]

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

new db_steamid[MAX_SAVED][32] 
new db_gag
[MAX_SAVED] 
new db_slot_i

new g_SorryWait
[33]

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_menu( "gag_players_menu", 1023, "handler_gag_players_menu" )
}

public client_putinserver( id )
{
    g_SorryWait[id] = 0
    load_gag
(id)
}

public client_disconnect( id ) 
{
    save_gag(id)
    _remove_user_gag( id )
}

_remove_user_gag( id ){
    g_user_time[ id ] = 0
    g_user_gagged
[ id ] = 0

    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 show_gag_main_menu( id, page ){
    if( ! ( get_user_flags( id ) & ( GAG_ACCESS | GAG_ACCESS_IMMUNITY ) ) )
    return PLUGIN_HANDLED

    if
( page < 0 )
    return PLUGIN_HANDLED

    new players
[ 32 ], num
    get_players
( players, num, "h" )

    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 ) && ! ( get_user_flags( id ) & GAG_ACCESS_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 )
            }
        }
    }

       // dont over index arrays? net, ne sliwal
       len += formatex( menu[ len ], 511 - len, "^n\w8. Время: \y%d минут^n", 
       g_times
[ 
       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 ) )
            {
                new user_flags = get_user_flags( g_id );
                new admin_flags = get_user_flags( id );
                if( !( user_flags & GAG_IMMUNITY ) || ( admin_flags & GAG_ACCESS_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_times[
                        g_user_time[ id ]
                        ]

                        g_user_gagged[ g_id ] = 1
                        client_print_color
( 0, print_team_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, print_team_blue, "^3[GAG]^1 ^4%s^1 снял молчанку с ^4%s^1.", name, g_name )
                    }
                }

                else client_print_color( id, print_team_blue, "^3[GAG] ^1Этот игрок имеет иммунитет." )
            }

            else client_print_color( id, print_team_blue, "^3[GAG] ^1Этот игрок отключился от сервера." )

            show_gag_main_menu( id,  g_user_menu_page[ id ] )
        }

        case 7: {
            g_user_time[id] ++

            if(g_user_time[id] >= sizeof g_times)
            g_user_time[id] = 0

            show_gag_main_menu
(id,g_user_menu_page[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, print_team_blue, "^3[GAG] ^1C игрока ^4%s^1 снята молчанка.", name )
}

save_gag(id){
    new g_steamid[32]
    get_user_authid(id, g_steamid, charsmax(g_steamid))
    if (db_steamid[id][0] && !equal(g_steamid, db_steamid[id]))
    {
        if (db_slot_i >= sizeof db_steamid)
        db_slot_i = get_maxplayers()+1

        copy
(db_steamid[db_slot_i], charsmax(db_steamid[]), db_steamid[id])
        db_gag[db_slot_i] = db_gag[id]
        db_slot_i++
    }

    copy(db_steamid[id], charsmax(db_steamid[]), g_steamid)
    db_gag[id] = g_user_gagged[id]
}

load_gag(id){
    new g_steamid[32]
    get_user_authid(id, g_steamid, charsmax(g_steamid))

    static i
    for 
(= 0; i < sizeof db_steamid; i++)
    {
        if (equal(g_steamid, db_steamid[i]))
        {
            g_user_gagged[id] = db_gag[i]
            return;
        }
    }
}
 
 
Последний раз редактировалось jjey1 04 апр 2017, 16:58, всего редактировалось 1 раз.
skype: tatoxa80
Аватара пользователя
jjey1
 
Сообщения: 199
Зарегистрирован: 08 мар 2016, 18:32
Забанен
Благодарил (а): 39 раз.
Поблагодарили: 9 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: amx_gag только микрофон

Сообщение KOTOKU » 04 апр 2017, 16:50

Ты что-то путаешь, эти две команды и блочат чат через return 1;
Код: Выделить всё

    register_clcmd
"say""hook_say" )
    
register_clcmd"say_team""hook_say" )
 
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: amx_gag только микрофон

Сообщение jjey1 » 04 апр 2017, 16:58

Извиняюсь) друг кран! Я сам лично не проверял... он сказал не работает! а я захожу к нему на фтп а там старая версия... ну пришлось по матерится на него!! что заменять надо нормально!!
Значит всё таки я все правильно сделал) у меня все работает!

Спасибо КОТОКИ за помощь! без тебя бы я не понял что друг кран!
skype: tatoxa80
Аватара пользователя
jjey1
 
Сообщения: 199
Зарегистрирован: 08 мар 2016, 18:32
Забанен
Благодарил (а): 39 раз.
Поблагодарили: 9 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: amx_gag только микрофон

Сообщение KOTOKU » 04 апр 2017, 20:04

Пожалуйста, Петрович, ты главное на водку и траву меньше налегай, а то скоро у тебя во френдзоне пополнение будет, новый друг - толканыч
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.


Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

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