AMX Gag Not save gag

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
lantimilan
Извън линия
Foreigner
Foreigner
Мнения: 424
Регистриран на: 29 Ное 2017, 22:49
Се отблагодари: 31 пъти
Получена благодарност: 3 пъти

AMX Gag Not save gag

Мнение от lantimilan » 25 Юни 2020, 09:06

Hello im using one plugin for gag but when somebody write in retry console gag romve and this form player can remove gag, its any form to save ? :

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <cromchat>

#define ACCESS             ADMIN_KICK
#define WORDS            64
#define SWEAR_GAGMINUTES    1
#define SHOW

new const tag[] = "";
new const g_FileName[] = "redndalofjalet.ini";

new 
bool:g_Gaged[ 33 ], g_GagTime[ 33 ],
bool:g_SwearGag[ 33 ], bool:g_CmdGag[ 33 ],
bool:g_NameChanged[33];

new g_reason[ 32 ], g_admin[ 32 ], g_name[ 33 ][ 32 ];

new g_WordsFile[ 128 ];
new g_Words[ WORDS ][ 32 ], g_Count, g_Len;

new point, g_msgsaytext;
new toggle_tag

public plugin_init() 
{
    register_plugin("Auto GaG", "3.0", "extreamcs")
    
    register_concmd( "amx_gag", "gag_cmd", ACCESS,"- <emri> <minutat> <arsyeja> - Per te bere gag" );
    register_concmd( "amx_ungag", "ungag_cmd", ACCESS, "- <emri> - Per me fshi gag" );
    register_clcmd( "say", "check" );
    register_clcmd( "say_team", "check" );
    
    toggle_tag = register_cvar( "gag_tag", "0" );
    point = get_cvar_pointer( "amx_show_activity" );
    g_msgsaytext = get_user_msgid( "SayText" );
    
}

public plugin_cfg()
{
    static dir[ 64 ];
    get_localinfo( "amxx_configsdir", dir, 63 );
    formatex( g_WordsFile , 127 , "%s/%s" , dir, g_FileName );
    
    if( !file_exists( g_WordsFile ) )
        write_file( g_WordsFile, "[Fjalet e Ndaluara]", -1 );
        
    new Len;
    
    while( g_Count < WORDS && read_file( g_WordsFile, g_Count ,g_Words[ g_Count ][ 1 ], 30, Len ) )
    {
        g_Words[ g_Count ][ 0 ] = Len;
        g_Count++;
    }
}

public gag_cmd( id, level, cid )
{
    if( !cmd_access( id, level, cid, 4 ) )
        return PLUGIN_HANDLED;      
        
    new arg[ 32 ], arg2[ 6 ], reason[ 32 ];
    new name[ 32 ], namet[ 32 ];
    new minutes;
    
      read_argv(1, arg, 31)

      new player = cmd_target(id, arg, 9)

      if (!player) 
          return PLUGIN_HANDLED
    
    read_argv( 1, arg, sizeof arg - 1 );
    read_argv( 2, arg2, sizeof arg2 - 1 );
    read_argv( 3, reason, sizeof reason - 1 );
        
    get_user_name( id, name, 31 );
    
    copy( g_admin, 31, name );
    copy( g_reason, 31, reason );
    remove_quotes( reason );
    
    minutes = str_to_num( arg2 );
    
    new target = cmd_target( id, arg, 10 );
    if( !target)
        return PLUGIN_HANDLED;
    
    if( g_Gaged[ target ] )
    {
        console_print( id, "Lojtari tani ka GAG!" );
        return PLUGIN_HANDLED;
    }
    
    get_user_name( target, namet, 31 );
    copy( g_name[ target ], 31, namet );
    
    g_CmdGag[ target ] = true;
    g_Gaged[target] = true;
    g_GagTime[ target ] = minutes;
    
    CC_SendMessage(0, "&x01[&x04R3D D3V!L GaG&x01] &x04%s: &x01beri gag lojtarin &x04%s &x01per &x04[%d] &x01minuta. Arseyja: &x04%s",get_pcvar_num( point ) == 2 ? name : "", namet, minutes, reason );
    
    if( get_pcvar_num( toggle_tag ) == 1 )
    {
        new Buffer[ 64 ];
        formatex( Buffer, sizeof Buffer - 1, "%s %s", tag, namet );
        
        g_NameChanged[ target ] = true;
        client_cmd( target, "name ^"%s^"",Buffer );
    }
    
    set_task( 60.0, "count", target + 123, _, _, "b" );
    
    return PLUGIN_HANDLED;
}

public ungag_cmd( id,level, cid )
{
    if( !cmd_access( id, level, cid, 2 ) )
        return PLUGIN_HANDLED;
        
    new arg[ 32 ], reason[ 32 ], name[ 32 ];
    read_argv( 1, arg, sizeof arg - 1 );
    read_argv( 2, reason, sizeof reason - 1 );
    get_user_name( id, name, sizeof name - 1 );
    remove_quotes( reason );
    
    new target = cmd_target( id, arg, 11 );
    if( !target )
        return PLUGIN_HANDLED;
    new namet[ 32 ];
    get_user_name( target, namet, sizeof namet - 1 );
    
    if( !g_Gaged[ target ] )
    {
        console_print( id, "Lojtari %s nuk ka gag.", namet );
        return PLUGIN_HANDLED;
    }
    
    g_Gaged[ target ] = false;
    g_SwearGag[ target ] = false;
    
    if( g_NameChanged[ target ] )
        client_cmd( target, "name ^"%s^"", g_name[ target ] );
        
    g_NameChanged[ target ] = false;
    
    remove_task( target + 123 );
    
    CC_SendMessage(0, "&x01[&x04R3D D3V!L GaG&x01] &x04%s: &x01beri ungag lojtarin &x04%s",get_pcvar_num( point ) == 2 ? name : "", namet );
    
    return PLUGIN_HANDLED;
}
    
public count( task )
{
    new index = task - 123;
    if( !is_user_connected( index ) )
        return 0;
        
    g_GagTime[index] -= 1;
    
    if( g_GagTime[ index ] <= 0 )
    {
        remove_task( index + 123 );
        
        print( index, "[R3D D3V!L] GAG juaj u largua me sukse ju lutem kujdes fjalorin!" );
        g_Gaged[ index ] = false;
    
        if( g_NameChanged[ index ] )
            client_cmd( index, "name ^"%s^"", g_name[ index ] );
        
        return 0;
    }
    
    return 1;
}

public check( id )
{
    new said[ 192 ];
    read_args( said, sizeof said - 1 );
    
    if( !strlen( said ) )
        return PLUGIN_CONTINUE;
        
    if( g_Gaged[ id ] )
    {
        if( g_CmdGag[ id ] )
        {
            CC_SendMessage(id, "&x01[&x04R3D D3V!L GAG&x01] Keni marre GaG: &x04%s. &x01Kane mbetur &x04%d &x01minuta" ,g_admin, g_GagTime[ id ], g_GagTime[ id ] == 1 ? "" : "s" );
            CC_SendMessage(id, "&x01[&x04R3D D3V!L GAG&x01] Arsyeja : &x04%s", g_reason );
            
            return PLUGIN_HANDLED;
        
        } else if( g_SwearGag[ id ] ) {
                  CC_SendMessage(id, "&x01[&x04R3D D3V!L GAG&x01] Morret Gag per arsye &x04Ofendim&x01/&x04Reklamim.")
            CC_SendMessage(id, "&x01[&x04R3D D3V!L GAG&x01] Kane mbetur edhe &x04%d &x01minut",  g_GagTime[ id ], g_GagTime[ id ] == 1 ? "" : "s" );
            return PLUGIN_HANDLED;
        }
    } else {
        
        new bool:g_Sweared, i, pos;
        
        for( i = 0; i < g_Count; ++i )
        {
            if( ( pos = containi( said, g_Words[ i ][ 1 ] ) ) != -1 )
            {
                g_Len = g_Words[ i ][ 0 ];
                
                while( g_Len-- )
                    said[ pos++ ] = '*';
                    
                g_Sweared = true;
                continue;
            }
        }
        
        if( g_Sweared )
        {
            new cmd[ 32 ], name[ 32 ];
            
            get_user_name( id, name, sizeof name - 1 );
            read_argv( 0, cmd, sizeof cmd - 1 );
            copy( g_name[ id ], 31, name );
            
            engclient_cmd( id, cmd, said );
            g_Gaged[ id ] = true;
            g_CmdGag[ id ] = false;
            
            if( get_pcvar_num( toggle_tag ) == 1 )
            {
                new Buffer[ 64 ];
                formatex( Buffer, sizeof Buffer - 1, "%s %s", tag, name );
        
                g_NameChanged[ id ] = true;
                client_cmd( id, "name ^"%s^"", Buffer) ;
            }
            
            g_SwearGag[ id ] = true;
            g_GagTime[ id ] = SWEAR_GAGMINUTES;
            
            print( id, "Ju nuk mund te perdorni kete fjale." );
        
            set_task( 60.0, "count",id+123,_,_,"b");
            
            return PLUGIN_HANDLED;
        }
    }
    
    return PLUGIN_CONTINUE;
}

public client_disconnect(id) 
{ 
    if(g_Gaged[id]) 
    {
     new Nick[32],Authid[35],usrip[32]
     get_user_name(id,Nick,31)
     get_user_ip(id,usrip,31);
     get_user_authid(id,Authid,34) 
     print(0, "^1[^4R3D D3V!L GaG^1] ^1Lojtari me gag^4 %s ^1[IP:^4 %s^x01] u largua nga serveri.",Nick,usrip)        
        
     g_Gaged[ id ] = false;
         g_SwearGag[ id ] = false;    
         remove_task( id );
        
    }
}

print( id, const message[ ], { Float, Sql, Result, _ }:... )
{
    new Buffer[ 128 ], Buffer2[ 128 ];
    
    formatex( Buffer2, sizeof Buffer2 - 1, "%s", message );
    vformat( Buffer, sizeof Buffer - 1, Buffer2, 3 );
    
    if( id )
    {
        message_begin( MSG_ONE, g_msgsaytext, _,id );
        write_byte( id );
        write_string( Buffer) ;
        message_end();
    
    } else {
        new players[ 32 ], index, num, i;
        get_players( players, num, "ch" );
        
        for( i = 0; i < num; i++ )
        {
            index = players[ i ];
            if( !is_user_connected( index ) ) continue;
            
            message_begin( MSG_ONE, g_msgsaytext, _, index );
            write_byte( index );
            write_string( Buffer );
            message_end();
        }
    }
}]/code]

Аватар
Infamous2018
Извън линия
Foreigner
Foreigner
Мнения: 522
Регистриран на: 08 Апр 2018, 16:56
Се отблагодари: 14 пъти
Получена благодарност: 21 пъти

AMX Gag Not save gag

Мнение от Infamous2018 » 25 Юни 2020, 20:53

U should use this here

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <regex>
#include <nvault>
#include <WPMGPrintChatColor>

#define LOG_GAGS

#define IP_PATTERN "([0-9]+.*[1-9][0-9]+.*[0-9]+.*[0-9])"
#define VERSION "1.1"

enum _:GagState
{
    GAG_NOT,
    GAG_YES,
    GAG_EXPIRED
};

enum _:GagTimeData
{
    DISPLAY[64],
    MINUTES
};

new const g_GagTimes[][GagTimeData] =
{
    { "1 minute", 1 },
    { "5 minutes", 5 },
    { "10 minutes", 10 },
    { "15 minutes", 15 },
    { "20 minutes", 20 },
    { "30 minutes", 30 },
    { "1 hour", 60 },
    { "2 hours", 120 },
    { "6 hours", 360 },
    { "1 day", 1440 },
    { "1 week", 10080 },
    { "Permanent", 0 }
}

new const g_szVaultName[] = "gagsystem";
new const g_szChatPrefix[] = "[GagSystem]";
new const g_szGagSound[] = "buttons/blip1.wav";
new const g_szLineStyle[] = "======================================================";
#if defined LOG_GAGS
new const g_szLogFile[] = "addons/amxmodx/logs/gag_system.log";
#endif

new g_iNVaultHandle, Regex:g_iRegexIPPattern, g_iUnused, g_iHudChannel, g_iThinkingEnt;
new g_iGagTimeIndex[33], g_iUserTarget[33], bool:g_blIsUserMuted[33];
new gp_blHudEnabled, gp_blEnableGagExpireMsg;
new g_GagForward, g_UngagForward;

public plugin_init()
{
    register_plugin("Gag System", VERSION, "TheRedShoko @ AMXX-BG.info");
    register_cvar("gagsystem_shoko", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED);

    register_clcmd("say", "CommandSayExecuted");
    register_clcmd("say_team", "CommandSayExecuted");

    g_GagForward = CreateMultiForward("user_gagged", ET_IGNORE, FP_CELL);
    g_UngagForward = CreateMultiForward("user_ungagged", ET_IGNORE, FP_CELL);

    gp_blHudEnabled = register_cvar("gagsystem_showhud", "1");
    gp_blEnableGagExpireMsg = register_cvar("gagsystem_printexpired", "1");

    #if AMXX_VERSION_NUM >= 183
    hook_cvar_change(gp_blEnableGagExpireMsg, "GagExpireCvarChanged");
    #endif

    register_forward(FM_Voice_SetClientListening, "PlayerVoiceSpeak", 0);
    register_forward(FM_ClientUserInfoChanged, "FwClientInfoChanged", 0);
    register_forward(FM_Think, "FwEntityThink", 1);

    register_concmd("amx_gag", "CommandGag", ADMIN_SLAY, "<name | #id | ip> <time> <reason>");
    register_concmd("amx_ungag", "CommandUngag", ADMIN_SLAY, "<name | #id | ip>");
    register_concmd("amx_gagmenu", "CommandGagMenu", ADMIN_SLAY);
    register_concmd("amx_TYPE_GAGREASON", "CommandGagReason", ADMIN_SLAY);
    register_concmd("amx_cleangags", "CommandCleanDB", ADMIN_RCON);

    #if AMXX_VERSION_NUM < 183
    g_iRegexIPPattern = regex_compile(IP_PATTERN, g_iUnused, "", 0);
    #else
    g_iRegexIPPattern = regex_compile_ex(IP_PATTERN);
    #endif

    g_iNVaultHandle = nvault_open(g_szVaultName);

    if (g_iNVaultHandle == INVALID_HANDLE)
    {
        set_fail_state("Failed to open NVault DB!");
    }

    g_iHudChannel = CreateHudSyncObj();
    g_iThinkingEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
    set_pev(g_iThinkingEnt, pev_nextthink, get_gametime() + 0.1);
}

public plugin_precache()
{
    precache_sound(g_szGagSound);
}

public plugin_end()
{
    nvault_close(g_iNVaultHandle);
    regex_free(g_iRegexIPPattern);
}

public plugin_natives()
{
	register_native("is_user_gagged", "native_is_gagged");

	register_native("gag_user", "native_gag_user");
	register_native("gag_user_byid", "native_gag_id");

	register_native("ungag_user", "native_ungag_user");
	register_native("ungag_user_byid", "native_ungag_id");
}

public native_is_gagged()
{
	new id = get_param(1);
	new bool:shouldPrint = bool:get_param(2);

	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "Invalid player ID %d", id);
		return false;
	}

	return IsUserGagged(id, shouldPrint) == GAG_YES;
}

public native_gag_user()
{
	new szIP[16], szName[32], iDuration, szReason[64], szAdmin[32];

	get_string(1, szName, charsmax(szName));
	get_string(2, szIP, charsmax(szIP));
	iDuration = get_param(3);
	get_string(4, szReason, charsmax(szReason));
	get_string(5, szAdmin, charsmax(szAdmin));

	if (!regex_match_c(szIP, g_iRegexIPPattern, g_iUnused))
	{
		log_error(AMX_ERR_NATIVE, "%s is not a valid IP Address!", szIP);
		return;
	}

	if (iDuration < 0) 
	{
		log_error(AMX_ERR_NATIVE, "Time cannot be negative!");
		return;
	}

	GagUser(szName, szIP, iDuration, szReason, szAdmin);
}

public native_gag_id()
{
	new id;

	id = get_param(1);

	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "Invalid player ID %d", id);
		return;
	}

	new szName[32], szIP[16], szReason[64], iDuration, szAdmin[32];
	iDuration = get_param(2);

	if (iDuration < 0) 
	{
		log_error(AMX_ERR_NATIVE, "Time cannot be negative!");
		return;
	}

	get_string(3, szReason, charsmax(szReason));
	get_string(4, szAdmin, charsmax(szAdmin));

	get_user_name(id, szName, charsmax(szName));
	get_user_ip(id, szIP, charsmax(szIP), 1);

	GagUser(szName, szIP, iDuration, szReason, szAdmin);
}

public native_ungag_user()
{
	new szIP[16], szName[32], szAdmin[32];

	get_string(1, szName, charsmax(szName));
	get_string(2, szIP, charsmax(szIP));
	get_string(3, szAdmin, charsmax(szAdmin));

	if (!regex_match_c(szIP, g_iRegexIPPattern, g_iUnused))
	{
		log_error(AMX_ERR_NATIVE, "%s is not a valid IP Address!", szIP);
		return;
	}

	UngagUser(szName, szIP, szAdmin);
}

public native_ungag_id()
{
	new id;

	id = get_param(1);

	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "Invalid player ID %d", id);
		return;
	}

	new szAdmin[32], szName[32], szIP[16];

	get_string(2, szAdmin, charsmax(szAdmin));

	get_user_name(id, szName, charsmax(szName));
	get_user_ip(id, szIP, charsmax(szIP), 1);

	UngagUser(szName, szIP, szAdmin);
}

public client_putinserver(id)
{
    g_blIsUserMuted[id] = IsUserGagged(id, false) == GAG_YES;
}

#if AMXX_VERSION_NUM >= 183
public GagExpireCvarChanged(pcvar, szOldValue[], szNewValue[])
{
    if (str_to_num(szNewValue) == 1)
    {
        set_pev(g_iThinkingEnt, pev_nextthink, get_gametime() + 1.0);
    }
}
#endif

public PlayerVoiceSpeak(receiver, id)
{
    if (receiver == id || !is_user_connected(id))
    {
        return FMRES_IGNORED;
    }

    if (g_blIsUserMuted[id])
    {
        engfunc(EngFunc_SetClientListening, receiver, id, false);
        return FMRES_SUPERCEDE;
    }

    return FMRES_IGNORED;
}

public FwClientInfoChanged(id)
{
    if (!is_user_connected(id))
    {
        return FMRES_IGNORED;
    }

    new szOldName[32], szNewName[32];
    get_user_name(id, szOldName, charsmax(szOldName));
    get_user_info(id, "name", szNewName, charsmax(szNewName));

    if (!equal(szOldName, szNewName) && szOldName[0] != EOS && IsUserGagged(id, false) == GAG_YES)
    {
        set_user_info(id, "name", szOldName);
        return FMRES_HANDLED;
    }

    return FMRES_IGNORED;
}

public FwEntityThink(iEnt)
{
    if (iEnt != g_iThinkingEnt || !get_pcvar_num(gp_blEnableGagExpireMsg))
    {
        return;
    }

    static iPlayers[32], iPlayersNum, id;
    get_players(iPlayers, iPlayersNum);

    for (new i = 0; i < iPlayersNum; i++)
    {
        id = iPlayers[i];

        if (IsUserGagged(id, false) == GAG_EXPIRED)
        {
            static szName[32];
            get_user_name(id, szName, charsmax(szName));

            PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g%s!y Player!t %s!y is no longer gagged!", g_szChatPrefix, szName);

            if (get_pcvar_num(gp_blHudEnabled))
            {
                set_hudmessage(255, 0, 0, 0.05, 0.30);
                ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s gag has expired^n%s", g_szLineStyle, szName, g_szLineStyle);
            }
        }
    }

    set_pev(iEnt, pev_nextthink, get_gametime() + 10.0);
}

public CommandSayExecuted(id)
{
    if (IsUserGagged(id) == GAG_YES)
    {
        return PLUGIN_HANDLED;
    }

    return PLUGIN_CONTINUE;
}

public CommandGag(id, iLevel, iCmdId)
{
    if (!cmd_access(id, iLevel, iCmdId, 4))
    {
        return PLUGIN_HANDLED;
    }

    new szTarget[33], szTargetIP[16], szTime[8], szReason[64];
    read_argv(1, szTarget, charsmax(szTarget));

    if (!regex_match_c(szTarget, g_iRegexIPPattern, g_iUnused))
    {
        new iTarget = cmd_target(id, szTarget);

        if (!iTarget)
        {
            return PLUGIN_HANDLED;
        }

        get_user_name(iTarget, szTarget, charsmax(szTarget));
        get_user_ip(iTarget, szTargetIP, charsmax(szTargetIP), 1);
        g_blIsUserMuted[iTarget] = true;
    }
    else
    {
        copy(szTargetIP, charsmax(szTargetIP), szTarget);
    }

    read_argv(2, szTime, charsmax(szTime));
    read_argv(3, szReason, charsmax(szReason));
    new iTime = str_to_num(szTime);

    new szAdmin[32];
    get_user_name(id, szAdmin, charsmax(szAdmin));

    console_print(id, "%s", GagUser(szTarget, szTargetIP, iTime, szReason, szAdmin));

    return PLUGIN_HANDLED;
}

public CommandUngag(id, iLevel, iCmdId)
{
    if (!cmd_access(id, iLevel, iCmdId, 2))
    {
        return PLUGIN_HANDLED;
    }

    new szTarget[32], szTargetIP[16];
    read_argv(1, szTarget, charsmax(szTarget));

    if (!regex_match_c(szTarget, g_iRegexIPPattern, g_iUnused))
    {
        new iTarget = cmd_target(id, szTarget, CMDTARGET_ALLOW_SELF);

        if (!iTarget)
        {
            return PLUGIN_HANDLED;
        }

        get_user_name(iTarget, szTarget, charsmax(szTarget));
        get_user_ip(iTarget, szTargetIP, charsmax(szTargetIP), 1);
    }
    else
    {
        copy(szTargetIP, charsmax(szTargetIP), szTarget);
    }

    new szAdminName[32];
    get_user_name(id, szAdminName, charsmax(szAdminName));

    console_print(id, "%s", UngagUser(szTarget, szTargetIP, szAdminName));

    return PLUGIN_HANDLED;
}

public CommandGagMenu(id, iLevel, iCmdId)
{
    if (!cmd_access(id, iLevel, iCmdId, 1))
    {
        return PLUGIN_HANDLED;
    }

    g_iGagTimeIndex[id] = 0;
    g_iUserTarget[id] = 0;
    ShowGagMenu(id);

    return PLUGIN_HANDLED;
}

ShowGagMenu(id, page = 0)
{
    new iMenu = menu_create("\rGag Menu", "GagMenuHandler");

    new iPlayers[32], iPlayersNum;
    get_players(iPlayers, iPlayersNum);

    new szItem[64], szName[32], szIndex[8];
    new iPlayer;

    for (new i = 0; i < iPlayersNum; i++)
    {
        iPlayer = iPlayers[i];

        if (i % 6 == 0)
        {
            formatex(szItem, charsmax(szItem), "\yGag length \r[\w%s\r]^n", g_GagTimes[g_iGagTimeIndex[id]][DISPLAY]);
            menu_additem(iMenu, szItem, "time");
        }

        get_user_name(iPlayer, szName, charsmax(szName));
        num_to_str(iPlayer, szIndex, charsmax(szIndex));

        if (IsUserGagged(iPlayer, false))
        {
            formatex(szItem, charsmax(szItem), "\y%s \r[\wGagged\r]", szName);
        }
        else if (get_user_flags(iPlayer) & ADMIN_IMMUNITY)
        {
            formatex(szItem, charsmax(szItem), "\d%s \r[\wHas immunity\r]", szName);
        }
        else
        {
            copy(szItem, charsmax(szItem), szName);
        }

        menu_additem(iMenu, szItem, szIndex);
    }

    menu_display(id, iMenu, page);
}

public GagMenuHandler(id, iMenu, Item)
{
    if (Item == MENU_EXIT)
    {
        menu_destroy(iMenu);
        return;
    }

    new szInfo[8], iTemp;
    menu_item_getinfo(iMenu, Item, iTemp, szInfo, charsmax(szInfo), _, _, iTemp);

    if (equal(szInfo, "time"))
    {
        ++g_iGagTimeIndex[id];
        g_iGagTimeIndex[id] %= sizeof g_GagTimes;
        menu_destroy(iMenu);
        ShowGagMenu(id, Item / 7);
        return;
    }

    new iTarget = str_to_num(szInfo);

    if (IsUserGagged(iTarget, false) == GAG_YES)
    {
        new szName[32], szIP[16], szAdminName[32];
        get_user_name(id, szAdminName, charsmax(szAdminName));
        get_user_name(iTarget, szName, charsmax(szName));
        get_user_ip(iTarget, szIP, charsmax(szIP), 1);

        UngagUser(szName, szIP, szAdminName);

        menu_destroy(iMenu);
        return;
    }

    if (get_user_flags(iTarget) & ADMIN_IMMUNITY)
    {
        menu_destroy(iMenu);
        return;
    }

    g_iUserTarget[id] = iTarget;
    client_cmd(id, "messagemode amx_TYPE_GAGREASON");

    menu_destroy(iMenu);
}

public CommandGagReason(id, iLevel, iCmdId)
{
    if (!cmd_access(id, iLevel, iCmdId, 2) || !is_user_connected(g_iUserTarget[id]))
    {
        return PLUGIN_HANDLED;
    }

    new szReason[64], szName[32], szIP[16], szAdminName[32];
    read_argv(1, szReason, charsmax(szReason));

    get_user_name(id, szAdminName, charsmax(szAdminName));

    get_user_name(g_iUserTarget[id], szName, charsmax(szName));
    get_user_ip(g_iUserTarget[id], szIP, charsmax(szIP), 1);

    GagUser(szName, szIP, g_GagTimes[g_iGagTimeIndex[id]][MINUTES], szReason, szAdminName);
    g_blIsUserMuted[g_iUserTarget[id]] = true;

    ShowGagMenu(id);

    return PLUGIN_HANDLED;
}

public CommandCleanDB(id, iLevel, iCmdId)
{
    if (!cmd_access(id, iLevel, iCmdId, 1))
    {
        return PLUGIN_HANDLED;
    }

    nvault_prune(g_iNVaultHandle, 0, get_systime());

    console_print(id, "Database has been cleaned.");

    return PLUGIN_HANDLED;
}

UngagUser(szName[], szIP[], szAdmin[])
{
    new szResult[64], szTemp[3];

    if (!nvault_get(g_iNVaultHandle, szIP, szTemp, charsmax(szTemp)))
    {
        formatex(szResult, charsmax(szResult), "User with IP %s not found.", szIP);
        return szResult;
    }

    nvault_remove(g_iNVaultHandle, szIP);

    if (!equal(szName, szIP))
    {
        new iTarget = cmd_target(0, szName, 0);

        g_blIsUserMuted[iTarget] = false;

        PrintChatColor(iTarget, PRINT_COLOR_PLAYERTEAM, "!g%s!y You have been ungagged by admin!t %s!y!", g_szChatPrefix, szAdmin);

        PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g%s!y Player!t %s!y has been ungagged by!g %s!y.", g_szChatPrefix, szName, szAdmin);

        if (get_pcvar_num(gp_blHudEnabled))
        {
            set_hudmessage(255, 0, 0, 0.05, 0.30);
            ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s has been ungagged by %s^n%s", g_szLineStyle, szName, szAdmin, g_szLineStyle);
        }
    }

    new id = find_player("d", szIP);
    if (id != 0)
    {
    	ExecuteForward(g_UngagForward, g_iUnused, id);
    }

    #if defined LOG_GAGS
    log_to_file(g_szLogFile, "[UNGAG] ADMIN: %s | TARGET_NAME: %s [IP: %s]", szAdmin, szName, szIP);
    #endif
    copy(szResult, charsmax(szResult), "Player has been ungagged");
    return szResult;
}

GagUser(szName[], szIP[], iDuration, szReason[], szAdminName[])
{
    new iExpireTime = iDuration != 0 ? get_systime() + (iDuration * 60) : 0;

    new szResult[64];

    if (nvault_get(g_iNVaultHandle, szIP, szResult, charsmax(szResult)))
    {
        copy(szResult, charsmax(szResult), "Player is already gagged.");
        return szResult;
    }

    new szValue[512];
    formatex(szValue, charsmax(szValue), "^"%s^"#^"%s^"#%d#^"%s^"", szName, szReason, iExpireTime, szAdminName);

    set_hudmessage(0, 255, 0, 0.05, 0.30);

    if (iExpireTime == 0)
    {
        PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g%s!y Player!t %s!y has been gagged by!g %s!y. Reason: !t%s!y. Gag expires!t never!y.", g_szChatPrefix, szName, szAdminName, szReason);

        if (get_pcvar_num(gp_blHudEnabled))
        {
            ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s has been gagged by %s^nExpires never^nReason: %s^n%s", g_szLineStyle, szName, szAdminName, szReason, g_szLineStyle);
        }
    }
    else
    {
        PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g%s!y Player!t %s!y has been gagged by!g %s!y. Reason: !t%s!y. Gag expires!t %s", g_szChatPrefix, szName, szAdminName, szReason, GetTimeAsString(iDuration * 60));

        if (get_pcvar_num(gp_blHudEnabled))
        {
            ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s has been gagged by %s^nExpires in %s^nReason: %s^n%s", g_szLineStyle, szName, szAdminName, GetTimeAsString(iDuration * 60), szReason, g_szLineStyle);
        }
    }

    emit_sound(0, CHAN_AUTO, g_szGagSound, 1.0, ATTN_NORM, SND_SPAWNING, PITCH_NORM);

    #if defined LOG_GAGS
    log_to_file(g_szLogFile, "ADMIN: %s | PLAYER: %s [IP: %s] | REASON: %s | TIME: %s", szAdminName, szName, szIP, szReason, GetTimeAsString(iDuration * 60));
    #endif

    new id = find_player("d", szIP);

    if (id != 0)
    {
    	ExecuteForward(g_GagForward, g_iUnused, id);
    }

    nvault_set(g_iNVaultHandle, szIP, szValue);

    copy(szResult, charsmax(szResult), "Player successfully gagged.");
    return szResult;
}

IsUserGagged(id, bool:print = true)
{
    new szIP[16], szVaultData[512];
    get_user_ip(id, szIP, charsmax(szIP), 1);

    if (!nvault_get(g_iNVaultHandle, szIP, szVaultData, charsmax(szVaultData)))
    {
        g_blIsUserMuted[id] = false;
        return GAG_NOT;
    }

    new szGaggedName[32], szReason[64], szExpireDate[32], szAdminName[32];
    replace_all(szVaultData, charsmax(szVaultData), "#", " ");
    parse(szVaultData, szGaggedName, charsmax(szGaggedName), szReason, charsmax(szReason), szExpireDate, charsmax(szExpireDate), szAdminName, charsmax(szAdminName));

    new iExpireTime = str_to_num(szExpireDate);

    if (get_systime() < iExpireTime || iExpireTime == 0)
    {
        if (print)
        {
            if (iExpireTime == 0)
            {
                PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g%s!y You are gagged! Your gag expires!t never!y.", g_szChatPrefix);
            }
            else
            {
                PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g%s!y You are gagged! Your gag expires in!t %s", g_szChatPrefix, GetTimeAsString(iExpireTime - get_systime()));
            }

            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g%s!y Gagged by!g %s!y. Gagged nickname:!t %s!y. Gag reason:!t %s!y.", g_szChatPrefix, szAdminName, szGaggedName, szReason);
        }

        g_blIsUserMuted[id] = true;

        return GAG_YES;
    }

    g_blIsUserMuted[id] = false;
    ExecuteForward(g_UngagForward, g_iUnused, id);

    nvault_remove(g_iNVaultHandle, szIP);

    return GAG_EXPIRED;
}

GetTimeAsString(seconds)
{
    new iYears = seconds / 31536000;
    seconds %= 31536000;

    new iMonths = seconds / 2592000;
    seconds %= 2592000;

    new iWeeks = seconds / 604800;
    seconds %= 604800;

    new iDays = seconds / 86400;
    seconds %= 86400;

    new iHours = seconds / 3600;
    seconds %= 3600;

    new iMinutes = seconds / 60;
    seconds %= 60;

    new szResult[256];

    if (iYears)
    {
        format(szResult, charsmax(szResult), "%s%d Year%s ", szResult, iYears, iYears == 1 ? "" : "s");
    }

    if (iMonths)
    {
        format(szResult, charsmax(szResult), "%s%d Month%s ", szResult, iMonths, iMonths == 1 ? "" : "s");
    }

    if (iWeeks)
    {
        format(szResult, charsmax(szResult), "%s%d Week%s ", szResult, iWeeks, iWeeks == 1 ? "" : "s");
    }

    if (iDays)
    {
        format(szResult, charsmax(szResult), "%s%d Day%s ", szResult, iDays, iDays == 1 ? "" : "s");
    }

    if (iHours)
    {
        format(szResult, charsmax(szResult), "%s%d Hour%s ", szResult, iHours, iHours == 1 ? "" : "s");
    }

    if (iMinutes)
    {
        format(szResult, charsmax(szResult), "%s%d Minute%s ", szResult, iMinutes, iMinutes == 1 ? "" : "s");
    }

    if (seconds)
    {
        format(szResult, charsmax(szResult), "%s%d Second%s", szResult, seconds, seconds == 1 ? "" : "s");
    }

    return szResult;
}
WPMGPrintChatColor.inc
WPMGPrintChatColor.inc
(8.17 KiB) Свалено 116 пъти
WPMGPrintChatColor.inc
WPMGPrintChatColor.inc
(8.17 KiB) Свалено 116 пъти

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 10 госта