[HATA] Modulde Yükledim Çalışmıyor ..!
  Başlıkta Belirtiğim Gibi Nicomedianın Şu Yapmış Olduğu [YENİLENDİ] Admin Menu Plugini [ By NiCoMeDiA ] Menü Çalışmıyor Yardım Kurulumu Şöyle Yaptım Olmadı ;
 
 menu_1.4.amxx  Dosyasını addons/amxmodx/plugins/  Dosyasının İçine Attım.
menu_1.4.sma Dosyasını addons/amxmodx/scripting  Dosyasının İçine Attım.
addons/amxmodx/config/plugins.ini Dosyasını Açıp En Alta menu_1.4.amxx Yazdım.
 
 Ama Olmadı Oyunda /menu Yazıyorum Olmuyor. Fakat Serverimin Konsolunda Şu Yazıyor ;
 
L 03/30/2012 - 19:38:45: [AMXX] Plugin ''menu_1.4.amxx'' failed to load:  Plugin uses an unknown function (name ''TrieDeleteKey'') - check your  modules.ini
 
 Modul Gerekliymiş Siz Verebilirmisiniz ..! :(
 
     Cevap: [HATA] Modulde Yükledim Çalışmıyor ..!
    Cevap: [HATA] Modulde Yükledim Çalışmıyor ..!
  #include <amxmisc>
#include <engine>
 
#define PLUGIN "Menu Plugini"
#define VERSION "1.4"
#define AUTHOR "NiCoMeDiA"
#define SITE "www.CsPlague.com"
 
#define DEFAULT_TIME 600.0 // In Seconds
 
enum ( <<= 1 ) {
    GAG_CHAT = 1,
    GAG_TEAMSAY,
    GAG_VOICE
};
 
enum _:GagData {
    GAG_AUTHID[ 20 ],
    GAG_TIME,
    GAG_START,
    GAG_FLAGS
};
 
new g_szAuthid[ 33 ][ 20 ];
new g_iThinker, g_iGagged;
new bool:g_bColoredMenus, Trie:g_tArrayPos, Array:g_aGagData, Array:g_aGagTimes;
new g_iMenuOption[ 33 ], g_iMenuPosition[ 33 ], g_iMenuPlayers[ 33 ][ 32 ];
 
new g_menuPosition[33]
new g_menuSelect[33][64]
new g_menuUnBanType[33]
new g_menuUnBanLine[33][2]
new g_menuUnBanText[33][8][32]
new g_bannedCfgFile[2][] = {"banned.cfg","listip.cfg"}
new g_coloredMenus
 
new menucvar
 
public plugin_init()
{
    menucvar = register_cvar("menu_aktif","1")
 
    register_clcmd("amx_unbanmenu","cmdUnBanMenu", ADMIN_BAN, "- displays unban menu")
 
    register_menucmd(register_menuid("UnBan STEAMID or IP?"),(1<<0|1<<1|1<<9),"actionUnBanMenuType")
    register_menucmd(register_menuid("UnBan  Menu"),1023,"actionUnBanMenu")
 
    g_coloredMenus = colored_menus()
 
    register_clcmd("say /menu","adminmenu");
    register_clcmd("say !menu","adminmenu");
    register_clcmd("say .menu","adminmenu");
    register_clcmd("say menu","adminmenu");
 
    set_task(300.0,"nicomediaa",0,"",0,"b",0)
 
    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_menucmd( register_menuid( "Gag Menu" ), 1023, "ActionGagMenu" );
    register_message( get_user_msgid( "SayText" ), "MessageSayText" );
 
    g_tArrayPos = TrieCreate( );
    g_aGagData  = ArrayCreate( GagData );
    g_aGagTimes = ArrayCreate( );
    g_bColoredMenus = bool:colored_menus( );
 
    // 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 );
 
    // 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 adminmenu(id)
{        
    if(get_pcvar_num(menucvar) == 1)
    {
    new menu = menu_create("\rwww.CSPLAGUE.com^n\w[ ~ Admin Menu ~ ]", "adminmenudevam")
 
    menu_additem(menu, "\w=> \yBan Menu \w<= \r( \dOyundan Atma \r)", "1",ADMIN_BAN)
    menu_additem(menu, "\w=> \yKick Menu \w<= \r( \dOyundan Atma \r)", "2",ADMIN_BAN)
    menu_additem(menu, "\w=> \yUnban Menu \w<= \r( \dOyundan Atilanlarin Cezalarini Kaldirma \r)", "3",ADMIN_BAN)
    menu_additem(menu, "\w=> \ySlap Menu \w<= \r( \dTokatlama / Oldurme Menusu \r)", "4",ADMIN_BAN)
    menu_additem(menu, "\w=> \yTeam Menu \w<= \r( \dTakim Degistirme Menusu \r)", "5",ADMIN_BAN)
    menu_additem(menu, "\w=> \yGag Menu \w<= \r( \dSusturma Menusu \r)", "6",ADMIN_BAN)
    menu_additem(menu, "\w=> \yRestart Game \w<= \r( \dOyunu Yeniden Baslat \r)", "7",ADMIN_BAN)
 
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");  
       menu_setprop(menu, MPROP_BACKNAME, "Geri");
        menu_setprop(menu, MPROP_EXITNAME, "Menuyu Kapat");
        menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
 
    new admin_name[32]                
    get_user_name(id , admin_name , 31 )
 
    chat_color(0,"!t[ %s ] !y%s !g/menu !yYazarak Ozel !tAdmin Menusune !yGirdi.",SITE,admin_name)
 
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
    menu_display(id, menu, 0);
    }
}
 
public adminmenudevam(id, menu, item)
{
    if( item == MENU_EXIT )
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
 
    new data[6], iName[64];
    new access, callback;
    menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
 
    new key = str_to_num(data);
 
    switch(key)
    {
        case 1: { 
            console_cmd(id,"amx_banmenu");
        }
 
        case 2: { 
            console_cmd(id,"amx_kickmenu");
        }
 
        case 3: { 
            console_cmd(id,"amx_unbanmenu");
        }
 
        case 4: { 
            console_cmd(id,"amx_slapmenu");
        }
 
        case 5: { 
            console_cmd(id,"amx_teammenu");
        }
 
        case 6: { 
            console_cmd(id,"amx_gagmenu");
 
        }
 
        case 7: { 
            console_cmd(id,"amx_cvar sv_restart 3");
        }
 
    }
 
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}
 
public nicomediaa()
{
    chat_color(0,"!y[ !t%s !y] !gCounter Strike Plugin Paylasim Platformu !t%s",SITE,SITE)
}
 
//===============================UNBANMENU==========  ======================//
 
public actionUnBanMenu(id,key) {
 
    switch(key) {
    case 8: {
        displayUnBanMenu(id, ++g_menuPosition[id])
    }
    case 9: {
        g_menuUnBanLine[id][0] = g_menuUnBanLine[id][0] - (8 + g_menuUnBanLine[id][1])
        if(g_menuUnBanLine[id][0] < 0) g_menuUnBanLine[id][0] = 0
        displayUnBanMenu(id, --g_menuPosition[id])
    }
    default: {
 
        new name[32], authid[32], ipaddress[24]
        get_user_authid(id, authid, 31)
        get_user_name(id, name, 31)
        get_user_ip(id, ipaddress, 23, 1)
 
        log_amx("UnBan: ^"%s<%d><%s><%s>^" unban ^"%s^"", name,get_user_userid(id),authid,ipaddress,g_menuUn  BanText[id][key])
 
        switch (get_cvar_num("amx_show_activity"))
        {
 
            case 2: client_print(0, print_chat, "ADMIN %s: unban %s", name, g_menuUnBanText[id][key])
            case 1: client_print(0, print_chat, "ADMIN: unban %s", g_menuUnBanText[id][key])
        }
 
        if(g_menuUnBanType[id] == 1) {
        server_cmd("removeip ^"%s^"; writeip", g_menuUnBanText[id][key])
        server_exec()
        console_print(id, "IP ^"%s^" removed from ban list", g_menuUnBanText[id][key])
        }
 
        else {
 
        server_cmd("removeid %s; writeid",  g_menuUnBanText[id][key])
        console_print(id, "Authid ^"%s^" removed from ban list",  g_menuUnBanText[id][key])
        }
 
        g_menuUnBanLine[id][0] = g_menuUnBanLine[id][1] = 0
        displayUnBanMenu(id, g_menuPosition[id] = 0)
        }
    }
    return PLUGIN_HANDLED
}
 
checkSTEAMID(steamid[]) {
 
    new len = strlen(steamid)
    if(len > 10 && equali(steamid, "STEAM_", 6) && steamid[7] == ':' && steamid[9] == ':' && str_to_num(steamid[10])) {
        return 1
    }
    return 0
}
 
checkIP(ip[]) {
 
    new len = strlen(ip)
    new dots = 0, i = 0
    while(isdigit(ip[i]) || ip[i]=='.')
        if(ip[i++] == '.')
            ++dots
    if(i == len && dots == 3) {
        return 1
    }
    return 0
}
 
displayUnBanMenu(id,pos) {
    if(pos < 0)
    return
 
    new menuBody[512]
    new b = 0
 
    new len = format(menuBody, 511, g_coloredMenus ? "\yBan Kaldir\R%d^n\w^n" : "UnBan Menu %d^n^n", id, "UNBAN_MENU", pos + 1)
 
    new keys = (1<<9)
    new textlen, line
    new type = g_menuUnBanType[id]
    new temp[32], banTime[32], disable
 
    if(file_exists(g_bannedCfgFile[type])) {
        line = g_menuUnBanLine[id][0]
        while((line = read_file(g_bannedCfgFile[type], line, g_menuSelect[id], 63, textlen))) {
            temp[0] = '^0'
            banTime[0] = '^0'
            g_menuUnBanText[id][b][0] = '^0'
            disable = 0
            if(textlen < 9)
                disable = 1
            else if(parse(g_menuSelect[id], temp, 31, banTime, 31, g_menuUnBanText[id][b], 31) != 3)
                disable = 1
            else if((type == 1 && !checkIP(g_menuUnBanText[id][b])) || (type == 0 && !checkSTEAMID(g_menuUnBanText[id][b])))
                disable = 1
            if(disable == 0) {
                keys |= (1<<b)
                if(g_coloredMenus)
                len += format(menuBody[len], 511-len, "%d. %s\R\r%s^n\w", b, g_menuUnBanText[id][b++], banTime)
                else
                len += format(menuBody[len], 511-len, "%d. %s   ( %s )^n", b, g_menuUnBanText[id][b++], banTime)
            }
            else {
                if(g_coloredMenus)
                    len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, g_menuUnBanText[id][b++])
                else
                    len += format(menuBody[len], 511-len, "#. %s^n", b, g_menuUnBanText[id][b++])
            }
            if(b == 8) break
        }
 
        if(b == 8 && read_file(g_bannedCfgFile[type], line, g_menuSelect[id], 63, textlen) > 0) {
        format(menuBody[len], 511-len, "^n9. More...^n0. %s",id, pos ? "Back" : "Exit",id)
        keys |= (1<<8)
        }
        else
        format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit",id)
 
        g_menuUnBanLine[id][1] = line - g_menuUnBanLine[id][0]
        g_menuUnBanLine[id][0] = line
        show_menu(id, keys, menuBody, -1, "UnBan  Menu")
    }
 
    return
}
 
public actionUnBanMenuType(id,key) {
 
    switch(key) {
        case 9: return PLUGIN_HANDLED
        default: {
            g_menuUnBanType[id] = key // 0 = STEAMID, 1 = IP
            g_menuUnBanLine[id][0] = g_menuUnBanLine[id][1] = 0
            displayUnBanMenu(id, g_menuPosition[id] = 0)
        }
    }
    return PLUGIN_HANDLED
}
 
displayUnBanMenuType(id) {
 
    new menuBody[512]
 
    new len = format(menuBody, 511, g_coloredMenus ?  "\rBanned \yKaldirma Turu?^n\w^n" :"UnBan STEAMID or IP?^n^n",id)
 
    new keys = (1<<0)|(1<<1)|(1<<9)
 
    len += format(menuBody[len], 511-len, "1. \rSinirsiz \yBanlari Kaldir^n",id)
    len += format(menuBody[len], 511-len, "\w2. \rNormal \yBanlari Kaldir^n",id)
    format(menuBody[len], 511-len, "^n\w0. \rExit",id)
 
    show_menu(id, keys, menuBody, -1, "UnBan STEAMID or IP?")
}
 
public cmdUnBanMenu(id,level,cid) {
 
    if(!cmd_access(id,level,cid,1))
    return PLUGIN_HANDLED
 
    g_menuUnBanType[id] = -1
    displayUnBanMenuType(id)
    return PLUGIN_HANDLED
}
 
stock chat_color(const id, const input[], any:...) {
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
 
    replace_all(msg, 190, "!g", "^4")
    replace_all(msg, 190, "!y", "^1")
    replace_all(msg, 190, "!t", "^3")
    replace_all(msg, 190, "!team2", "^0")
 
    if (id) players[0] = id; else get_players(players, count, "ch")
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players[i]))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}
 
//======================================GAGMENU=====  ================================//
 
public CmdSetBanTimes( ) {
    new iArgs = read_argc( );
 
    if( iArgs <= 1 ) {
        server_print( "Usage: amx_gag_times <time1> [time2] [time3] ..." );
 
        return;
    }
 
    ArrayClear( g_aGagTimes );
 
    new szBuffer[ 32 ], iTime;
    for( new i = 1; i < iArgs; i++ ) {
        read_argv( i, szBuffer, 31 );
 
        iTime = str_to_num( szBuffer );
 
        if( iTime > 86400 ) {
            server_print( "[AMXX GAG] Time more then 86400 is not allowed!" );
 
            continue;
        }
 
        ArrayPushCell( g_aGagTimes, iTime );
    }
}
 
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 );
 
public client_authorized( id )
    get_user_authid( id, g_szAuthid[ id ], 19 );
 
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, "[AMXX] Gagged player ^"%s<%s>^" has disconnected!", 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, "[AMXX] Gagged players cannot change their names!" );
 
        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, "[AMXX] Player ^"%s^" is no longer gagged.", 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 minute%s", iMinutes, iMinutes == 1 ? "" : "s" );
            if( iSeconds > 0 )
                formatex( szInfo[ iLen ], 31 - iLen, "%s%i second%s", iLen ? " and " : "", iSeconds, iSeconds == 1 ? "" : "s" );
 
            client_print( id, print_chat, "[AMXX] %s left before your ungag!", szInfo );
            client_print( id, print_center, "** You are gagged from%s chat! **", 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, "Flags: a - Chat | b - Team Chat | c - Voice communications" );
 
        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, "User ^"%s^" is already gagged!", 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, "The value must be in seconds!" );
 
            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 ], 19, 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, "say" );
 
    if( iFlags & GAG_TEAMSAY ) {
        if( !szFrom[ 0 ] )
            formatex( szFrom, 63, "say_team" );
        else
            format( szFrom, 63, "%s / say_team", szFrom );
    }
 
    if( iFlags & GAG_VOICE ) {
        set_speak( iPlayer, SPEAK_MUTED );
 
        if( !szFrom[ 0 ] )
            formatex( szFrom, 63, "voicecomm" );
        else
            format( szFrom, 63, "%s / voicecomm", 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 second%s", iSeconds, iSeconds == 1 ? "" : "s" );
    else
        formatex( szInfo, 31, "%i minute%s", iMinutes, iMinutes == 1 ? "" : "s" );
 
    show_activity( id, szAdmin, "Has gagged %s from speaking for %s! (%s)", szName, szInfo, szFrom );
 
    console_print( id, "You have gagged ^"%s^" (%s) !", szName, szFrom );
 
    log_amx( "Gag: ^"%s<%s>^" has gagged ^"%s<%s>^" for %i minutes. (%s)", 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, "No gagged players!" );
 
            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, "You have ungagged all players!" );
 
        new szAdmin[ 32 ];
        get_user_name( id, szAdmin, 31 );
 
        show_activity( id, szAdmin, "Has ungagged all players." );
 
        log_amx( "UnGag: ^"%s<%s>^" has ungagged all players.", 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, "User ^"%s^" is not gagged!", szName );
 
        return PLUGIN_HANDLED;
    }
 
    DeleteGag( iArrayPos );
 
    new szAdmin[ 32 ];
    get_user_name( id, szAdmin, 31 );
 
    show_activity( id, szAdmin, "Has ungagged %s.", szName );
 
    console_print( id, "You have ungagged ^"%s^" !", szName );
 
    log_amx( "UnGag: ^"%s<%s>^" has ungagged ^"%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;
}
 
public ActionGagMenu( const id, const iKey ) {
    switch( iKey ) {
        case 7: {
            ++g_iMenuOption[ id ];
            g_iMenuOption[ id ] %= ArraySize( g_aGagTimes );
 
            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 ] * 7 + iKey ];
 
            if( TrieKeyExists( g_tArrayPos, g_szAuthid[ iPlayer ] ) )
                client_cmd( id, "amx_ungag #%i", get_user_userid( iPlayer ) );
            else
                client_cmd( id, "amx_gag #%i %i", get_user_userid( iPlayer ), ArrayGetCell( g_aGagTimes, g_iMenuOption[ id ] ) );
 
            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 * 7;
 
    if( iStart >= iNum )
        iStart = iPosition = g_iMenuPosition[ id ] = 0;
 
    new iEnd = iStart + 7, iKeys = MENU_KEY_0 | MENU_KEY_8;
    new iLen = formatex( szMenu, 511, g_bColoredMenus ? "\rGag Menu\R%i/%i\w^n^n" : "Gag Menu %i %i^n^n", iPosition + 1, ( iNum / 7 + ( ( iNum % 7 ) ? 1 : 0 ) ) );
 
    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 ) {
            ++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 ] ) ? " GAGGED" : "", ( ~iFlags & ADMIN_USER ? " *" : "" ) );
        }
    }
 
    g_iMenuPlayers[ id ] = iPlayers;
 
    new iSeconds = ArrayGetCell( g_aGagTimes, g_iMenuOption[ id ] );
    new iTime    = iSeconds / 60;
 
    iLen += formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r8.\w Gag for\y %i\w %s^n" : "^n8. Gag for %i %s^n", ( iSeconds > 60 ? iTime : iSeconds ), ( iSeconds > 60 ? "minutes" : "seconds" ) );
 
    if( iEnd != iNum ) {
        formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r9.\w More...^n\r0.\w %s" : "^n9. More...^n0. %s", iPosition ? "Back" : "Exit" );
        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" );
}
 
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 );
    }
}
     Cevap: [HATA] Modulde Yükledim Çalışmıyor ..!
  [I][B]Bu :
#include <amxmisc>
#include <engine>
 
#define PLUGIN "Menu Plugini"
#define VERSION "1.4"
#define AUTHOR "NiCoMeDiA"
#define SITE "www.CsPlague.com"
 
#define DEFAULT_TIME 600.0 // In Seconds
 
enum ( <<= 1 ) {
	GAG_CHAT = 1,
	GAG_TEAMSAY,
	GAG_VOICE
};
 
enum _:GagData {
	GAG_AUTHID[ 20 ],
	GAG_TIME,
	GAG_START,
	GAG_FLAGS
};
 
new g_szAuthid[ 33 ][ 20 ];
new g_iThinker, g_iGagged;
new bool:g_bColoredMenus, Trie:g_tArrayPos, Array:g_aGagData, Array:g_aGagTimes;
new g_iMenuOption[ 33 ], g_iMenuPosition[ 33 ], g_iMenuPlayers[ 33 ][ 32 ];
 
new g_menuPosition[33]
new g_menuSelect[33][64]
new g_menuUnBanType[33]
new g_menuUnBanLine[33][2]
new g_menuUnBanText[33][8][32]
new g_bannedCfgFile[2][] = {"banned.cfg","listip.cfg"}
new g_coloredMenus
 
new menucvar
 
public plugin_init()
{
	menucvar = register_cvar("menu_aktif","1")
 
	register_clcmd("amx_unbanmenu","cmdUnBanMenu", ADMIN_BAN, "- displays unban menu")
 
	register_menucmd(register_menuid("UnBan STEAMID or IP?"),(1<<0|1<<1|1<<9),"actionUnBanMenuType")
	register_menucmd(register_menuid("UnBan  Menu"),1023,"actionUnBanMenu")
 
	g_coloredMenus = colored_menus()
 
	register_clcmd("say /menu","adminmenu");
	register_clcmd("say !menu","adminmenu");
	register_clcmd("say .menu","adminmenu");
	register_clcmd("say menu","adminmenu");
 
	set_task(300.0,"nicomediaa",0,"",0,"b",0)
 
	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_menucmd( register_menuid( "Gag Menu" ), 1023, "ActionGagMenu" );
	register_message( get_user_msgid( "SayText" ), "MessageSayText" );
 
	g_tArrayPos = TrieCreate( );
	g_aGagData  = ArrayCreate( GagData );
	g_aGagTimes = ArrayCreate( );
	g_bColoredMenus = bool:colored_menus( );
 
	// 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 );
 
	// 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 adminmenu(id)
{		
	if(get_pcvar_num(menucvar) == 1)
	{
	new menu = menu_create("\rwww.CSPLAGUE.com^n\w[ ~ Admin Menu ~ ]", "adminmenudevam")
 
	menu_additem(menu, "\w=> \yBan Menu \w<= \r( \dOyundan Atma \r)", "1",ADMIN_BAN)
	menu_additem(menu, "\w=> \yKick Menu \w<= \r( \dOyundan Atma \r)", "2",ADMIN_BAN)
	menu_additem(menu, "\w=> \yUnban Menu \w<= \r( \dOyundan Atilanlarin Cezalarini Kaldirma \r)", "3",ADMIN_BAN)
	menu_additem(menu, "\w=> \ySlap Menu \w<= \r( \dTokatlama / Oldurme Menusu \r)", "4",ADMIN_BAN)
	menu_additem(menu, "\w=> \yTeam Menu \w<= \r( \dTakim Degistirme Menusu \r)", "5",ADMIN_BAN)
	menu_additem(menu, "\w=> \yGag Menu \w<= \r( \dSusturma Menusu \r)", "6",ADMIN_BAN)
	menu_additem(menu, "\w=> \yRestart Game \w<= \r( \dOyunu Yeniden Baslat \r)", "7",ADMIN_BAN)
 
	menu_setprop(menu, MPROP_NEXTNAME, "Ileri");  
   	menu_setprop(menu, MPROP_BACKNAME, "Geri");
    	menu_setprop(menu, MPROP_EXITNAME, "Menuyu Kapat");
    	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
 
	new admin_name[32]				
	get_user_name(id , admin_name , 31 )
 
	chat_color(0,"!t[ %s ] !y%s !g/menu !yYazarak Ozel !tAdmin Menusune !yGirdi.",SITE,admin_name)
 
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, menu, 0);
	}
}
 
public adminmenudevam(id, menu, item)
{
	if( item == MENU_EXIT )
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
 
	new data[6], iName[64];
	new access, callback;
	menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
 
	new key = str_to_num(data);
 
	switch(key)
	{
		case 1: { 
			console_cmd(id,"amx_banmenu");
		}
 
		case 2: { 
			console_cmd(id,"amx_kickmenu");
		}
 
		case 3: { 
			console_cmd(id,"amx_unbanmenu");
		}
 
		case 4: { 
			console_cmd(id,"amx_slapmenu");
		}
 
		case 5: { 
			console_cmd(id,"amx_teammenu");
		}
 
		case 6: { 
			console_cmd(id,"amx_gagmenu");
 
		}
 
		case 7: { 
			console_cmd(id,"amx_cvar sv_restart 3");
		}
 
	}
 
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
 
public nicomediaa()
{
	chat_color(0,"!y[ !t%s !y] !gCounter Strike Plugin Paylasim Platformu !t%s",SITE,SITE)
}
 
//===============================UNBANMENU==========  ======================//
 
public actionUnBanMenu(id,key) {
 
	switch(key) {
	case 8: {
		displayUnBanMenu(id, ++g_menuPosition[id])
	}
	case 9: {
		g_menuUnBanLine[id][0] = g_menuUnBanLine[id][0] - (8 + g_menuUnBanLine[id][1])
		if(g_menuUnBanLine[id][0] < 0) g_menuUnBanLine[id][0] = 0
		displayUnBanMenu(id, --g_menuPosition[id])
	}
	default: {
 
		new name[32], authid[32], ipaddress[24]
		get_user_authid(id, authid, 31)
		get_user_name(id, name, 31)
		get_user_ip(id, ipaddress, 23, 1)
 
		log_amx("UnBan: ^"%s<%d><%s><%s>^" unban ^"%s^"", name,get_user_userid(id),authid,ipaddress,g_menuUn  BanText[id][key])
 
		switch (get_cvar_num("amx_show_activity"))
		{
 
			case 2: client_print(0, print_chat, "ADMIN %s: unban %s", name, g_menuUnBanText[id][key])
			case 1: client_print(0, print_chat, "ADMIN: unban %s", g_menuUnBanText[id][key])
		}
 
		if(g_menuUnBanType[id] == 1) {
		server_cmd("removeip ^"%s^"; writeip", g_menuUnBanText[id][key])
		server_exec()
		console_print(id, "IP ^"%s^" removed from ban list", g_menuUnBanText[id][key])
		}
 
		else {
 
		server_cmd("removeid %s; writeid",  g_menuUnBanText[id][key])
		console_print(id, "Authid ^"%s^" removed from ban list",  g_menuUnBanText[id][key])
		}
 
		g_menuUnBanLine[id][0] = g_menuUnBanLine[id][1] = 0
		displayUnBanMenu(id, g_menuPosition[id] = 0)
		}
	}
	return PLUGIN_HANDLED
}
 
checkSTEAMID(steamid[]) {
 
	new len = strlen(steamid)
	if(len > 10 && equali(steamid, "STEAM_", 6) && steamid[7] == ':' && steamid[9] == ':' && str_to_num(steamid[10])) {
		return 1
	}
	return 0
}
 
checkIP(ip[]) {
 
	new len = strlen(ip)
	new dots = 0, i = 0
	while(isdigit(ip[i]) || ip[i]=='.')
		if(ip[i++] == '.')
			++dots
	if(i == len && dots == 3) {
		return 1
	}
	return 0
}
 
displayUnBanMenu(id,pos) {
	if(pos < 0)
	return
 
	new menuBody[512]
	new b = 0
 
	new len = format(menuBody, 511, g_coloredMenus ? "\yBan Kaldir\R%d^n\w^n" : "UnBan Menu %d^n^n", id, "UNBAN_MENU", pos + 1)
 
	new keys = (1<<9)
	new textlen, line
	new type = g_menuUnBanType[id]
	new temp[32], banTime[32], disable
 
	if(file_exists(g_bannedCfgFile[type])) {
		line = g_menuUnBanLine[id][0]
		while((line = read_file(g_bannedCfgFile[type], line, g_menuSelect[id], 63, textlen))) {
			temp[0] = '^0'
			banTime[0] = '^0'
			g_menuUnBanText[id][b][0] = '^0'
			disable = 0
			if(textlen < 9)
				disable = 1
			else if(parse(g_menuSelect[id], temp, 31, banTime, 31, g_menuUnBanText[id][b], 31) != 3)
				disable = 1
			else if((type == 1 && !checkIP(g_menuUnBanText[id][b])) || (type == 0 && !checkSTEAMID(g_menuUnBanText[id])))
				disable = 1
			if(disable == 0) {
				keys |= (1<<b)
				if(g_coloredMenus)
				len += format(menuBody[len], 511-len, "%d. %s\R\r%s^n\w", b, g_menuUnBanText[id][b++], banTime)
				else
				len += format(menuBody[len], 511-len, "%d. %s   ( %s )^n", b, g_menuUnBanText[id][b++], banTime)
			}
			else {
				if(g_coloredMenus)
					len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, g_menuUnBanText[id][b++])
				else
					len += format(menuBody[len], 511-len, "#. %s^n", b, g_menuUnBanText[id][b++])
			}
			if(b == 8) break
		}
 
		if(b == 8 && read_file(g_bannedCfgFile[type], line, g_menuSelect[id], 63, textlen) > 0) {
		format(menuBody[len], 511-len, "^n9. More...^n0. %s",id, pos ? "Back" : "Exit",id)
		keys |= (1<<8)
		}
		else
		format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit",id)
 
		g_menuUnBanLine[id][1] = line - g_menuUnBanLine[id][0]
		g_menuUnBanLine[id][0] = line
		show_menu(id, keys, menuBody, -1, "UnBan  Menu")
	}
 
	return
}
 
public actionUnBanMenuType(id,key) {
 
	switch(key) {
		case 9: return PLUGIN_HANDLED
		default: {
			g_menuUnBanType[id] = key // 0 = STEAMID, 1 = IP
			g_menuUnBanLine[id][0] = g_menuUnBanLine[id][1] = 0
			displayUnBanMenu(id, g_menuPosition[id] = 0)
		}
	}
	return PLUGIN_HANDLED
}
 
displayUnBanMenuType(id) {
 
	new menuBody[512]
 
	new len = format(menuBody, 511, g_coloredMenus ?  "\rBanned \yKaldirma Turu?^n\w^n" :"UnBan STEAMID or IP?^n^n",id)
 
	new keys = (1<<0)|(1<<1)|(1<<9)
 
	len += format(menuBody[len], 511-len, "1. \rSinirsiz \yBanlari Kaldir^n",id)
	len += format(menuBody[len], 511-len, "\w2. \rNormal \yBanlari Kaldir^n",id)
	format(menuBody[len], 511-len, "^n\w0. \rExit",id)
 
	show_menu(id, keys, menuBody, -1, "UnBan STEAMID or IP?")
}
 
public cmdUnBanMenu(id,level,cid) {
 
	if(!cmd_access(id,level,cid,1))
	return PLUGIN_HANDLED
 
	g_menuUnBanType[id] = -1
	displayUnBanMenuType(id)
	return PLUGIN_HANDLED
}
 
stock chat_color(const id, const input[], any:...) {
	new count = 1, players[32]
	static msg[191]
	vformat(msg, 190, input, 3)
 
	replace_all(msg, 190, "!g", "^4")
	replace_all(msg, 190, "!y", "^1")
	replace_all(msg, 190, "!t", "^3")
	replace_all(msg, 190, "!team2", "^0")
 
	if (id) players[0] = id; else get_players(players, count, "ch")
	{
		for (new i = 0; i < count; i++)
		{
			if (is_user_connected(players[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
				write_byte(players);
				write_string(msg);
				message_end();
			}
		}
	}
}
 
//======================================GAGMENU=====  ================================//
 
public CmdSetBanTimes( ) {
	new iArgs = read_argc( );
 
	if( iArgs <= 1 ) {
		server_print( "Usage: amx_gag_times <time1> [time2] [time3] ..." );
 
		return;
	}
 
	ArrayClear( g_aGagTimes );
 
	new szBuffer[ 32 ], iTime;
	for( new i = 1; i < iArgs; i++ ) {
		read_argv( i, szBuffer, 31 );
 
		iTime = str_to_num( szBuffer );
 
		if( iTime > 86400 ) {
			server_print( "[AMXX GAG] Time more then 86400 is not allowed!" );
 
			continue;
		}
 
		ArrayPushCell( g_aGagTimes, iTime );
	}
}
 
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 );
 
public client_authorized( id )
	get_user_authid( id, g_szAuthid[ id ], 19 );
 
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, "[AMXX] Gagged player ^"%s<%s>^" has disconnected!", 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, "[AMXX] Gagged players cannot change their names!" );
 
		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, "[AMXX] Player ^"%s^" is no longer gagged.", 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 minute%s", iMinutes, iMinutes == 1 ? "" : "s" );
			if( iSeconds > 0 )
				formatex( szInfo[ iLen ], 31 - iLen, "%s%i second%s", iLen ? " and " : "", iSeconds, iSeconds == 1 ? "" : "s" );
 
			client_print( id, print_chat, "[AMXX] %s left before your ungag!", szInfo );
			client_print( id, print_center, "** You are gagged from%s chat! **", 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, "Flags: a - Chat | b - Team Chat | c - Voice communications" );
 
		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, "User ^"%s^" is already gagged!", 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, "The value must be in seconds!" );
 
			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 ], 19, 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, "say" );
 
	if( iFlags & GAG_TEAMSAY ) {
		if( !szFrom[ 0 ] )
			formatex( szFrom, 63, "say_team" );
		else
			format( szFrom, 63, "%s / say_team", szFrom );
	}
 
	if( iFlags & GAG_VOICE ) {
		set_speak( iPlayer, SPEAK_MUTED );
 
		if( !szFrom[ 0 ] )
			formatex( szFrom, 63, "voicecomm" );
		else
			format( szFrom, 63, "%s / voicecomm", 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 second%s", iSeconds, iSeconds == 1 ? "" : "s" );
	else
		formatex( szInfo, 31, "%i minute%s", iMinutes, iMinutes == 1 ? "" : "s" );
 
	show_activity( id, szAdmin, "Has gagged %s from speaking for %s! (%s)", szName, szInfo, szFrom );
 
	console_print( id, "You have gagged ^"%s^" (%s) !", szName, szFrom );
 
	log_amx( "Gag: ^"%s<%s>^" has gagged ^"%s<%s>^" for %i minutes. (%s)", 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, "No gagged players!" );
 
			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, "You have ungagged all players!" );
 
		new szAdmin[ 32 ];
		get_user_name( id, szAdmin, 31 );
 
		show_activity( id, szAdmin, "Has ungagged all players." );
 
		log_amx( "UnGag: ^"%s<%s>^" has ungagged all players.", 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, "User ^"%s^" is not gagged!", szName );
 
		return PLUGIN_HANDLED;
	}
 
	DeleteGag( iArrayPos );
 
	new szAdmin[ 32 ];
	get_user_name( id, szAdmin, 31 );
 
	show_activity( id, szAdmin, "Has ungagged %s.", szName );
 
	console_print( id, "You have ungagged ^"%s^" !", szName );
 
	log_amx( "UnGag: ^"%s<%s>^" has ungagged ^"%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;
}
 
public ActionGagMenu( const id, const iKey ) {
	switch( iKey ) {
		case 7: {
			++g_iMenuOption[ id ];
			g_iMenuOption[ id ] %= ArraySize( g_aGagTimes );
 
			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 ] * 7 + iKey ];
 
			if( TrieKeyExists( g_tArrayPos, g_szAuthid[ iPlayer ] ) )
				client_cmd( id, "amx_ungag #%i", get_user_userid( iPlayer ) );
			else
				client_cmd( id, "amx_gag #%i %i", get_user_userid( iPlayer ), ArrayGetCell( g_aGagTimes, g_iMenuOption[ id ] ) );
 
			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 * 7;
 
	if( iStart >= iNum )
		iStart = iPosition = g_iMenuPosition[ id ] = 0;
 
	new iEnd = iStart + 7, iKeys = MENU_KEY_0 | MENU_KEY_8;
	new iLen = formatex( szMenu, 511, g_bColoredMenus ? "\rGag Menu\R%i/%i\w^n^n" : "Gag Menu %i %i^n^n", iPosition + 1, ( iNum / 7 + ( ( iNum % 7 ) ? 1 : 0 ) ) );
 
	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 ) {
			++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 ] ) ? " GAGGED" : "", ( ~iFlags & ADMIN_USER ? " *" : "" ) );
		}
	}
 
	g_iMenuPlayers[ id ] = iPlayers;
 
	new iSeconds = ArrayGetCell( g_aGagTimes, g_iMenuOption[ id ] );
	new iTime    = iSeconds / 60;
 
	iLen += formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r8.\w Gag for\y %i\w %s^n" : "^n8. Gag for %i %s^n", ( iSeconds > 60 ? iTime : iSeconds ), ( iSeconds > 60 ? "minutes" : "seconds" ) );
 
	if( iEnd != iNum ) {
		formatex( szMenu[ iLen ], 511 - iLen, g_bColoredMenus ? "^n\r9.\w More...^n\r0.\w %s" : "^n9. More...^n0. %s", iPosition ? "Back" : "Exit" );
		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" );
}
 
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 );
	}
}
 
 
KONU ÇÖZÜMLENMİŞTİR !