Raised This Month: $32 Target: $400
 8% 

[REQ] I need to modifie my plugin


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
martvonk
Junior Member
Join Date: Jul 2012
Old 04-18-2014 , 06:57   [REQ] I need to modifie my plugin
Reply With Quote #1

Hello i need to delete gag and unban from the menu



Code:
#include <amxmisc>
#include <engine>

#define PLUGIN "[Lf] Menu Plugin"
#define VERSION "2.0"
#define AUTHOR "MARTVONK LEON"
#define SITE ""

#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",        "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("\rLAND OF FIGHT^n\w[Lf][ ~ ADMIN MENU ~ ]", "adminmenudevam")
    
    menu_additem(menu, "\w \yBan Menu\w \r( \d Banned List \r)", "1",ADMIN_BAN)
    menu_additem(menu, "\w \yKick Menu\w \r( \dKick List \r)", "2",ADMIN_BAN)
    menu_additem(menu, "\w \yUnban Menu\w \r( \d Unbaned List \r)", "3",ADMIN_BAN)
    menu_additem(menu, "\w \ySlap Menu\w \r( \d To Slay / Slap Menu \r)", "4",ADMIN_BAN)
    menu_additem(menu, "\w \yTeam Menu\w \r( \d Changing a player team \r)", "5",ADMIN_BAN)
    menu_additem(menu, "\w \yGag Menu\w \r( \dGag a player \r)", "6",ADMIN_BAN)
    menu_additem(menu, "\w \yRestart Game\w \r( \dRestart the Game \r)", "7",ADMIN_BAN)

    menu_setprop(menu, MPROP_NEXTNAME, "Next");  
       menu_setprop(menu, MPROP_BACKNAME, "Back");
        menu_setprop(menu, MPROP_EXITNAME, "Exit Menu");
        menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);

    new admin_name[32]                
    get_user_name(id , admin_name , 31 )
            
    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;
}

//===============================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_menuUnBanText[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 );
    }
}


/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1055\\ f0\\ fs16 \n\\ par }
*/
martvonk is offline
Flick3rR
Veteran Member
Join Date: Feb 2014
Location: Bulgaria, Stara Zagora
Old 04-18-2014 , 07:50   Re: [REQ] I need to modifie my plugin
Reply With Quote #2

Yes, but noone wil help you untill you post the true author of the plugin.. It's just hillarious to reuest someone to remove something from YOUR plugin (but it's obviously not yours). So, this is wrong and you have to post the true author...
__________________
Flick3rR is offline
Send a message via Skype™ to Flick3rR
martvonk
Junior Member
Join Date: Jul 2012
Old 04-18-2014 , 07:54   Re: [REQ] I need to modifie my plugin
Reply With Quote #3

Quote:
Originally Posted by Flick3rR View Post
Yes, but noone wil help you untill you post the true author of the plugin.. It's just hillarious to reuest someone to remove something from YOUR plugin (but it's obviously not yours). So, this is wrong and you have to post the true author...
OK thank you

ORigine plugin
Code:

#include <amxmisc>
#include <engine>

#define PLUGIN "Menu Plugini"
#define VERSION "1.4"
#define AUTHOR "NiCoMeDiA"
#define SITE "***********"

#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_menuUnBanText[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 );
    }
}


/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1055\\ f0\\ fs16 \n\\ par }
*/
martvonk is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 04-18-2014 , 11:32   Re: [REQ] I need to modifie my plugin
Reply With Quote #4

The forum rules require that you use a descriptive topic title when you create threads. Please update the titles of your threads. If you fail to do so, you risk your topic being deleted.
__________________
fysiks is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 11:17.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode