View Single Post
PorcusorulMagic
Member
Join Date: Dec 2018
Location: Romania
Old 03-26-2019 , 09:34   Re: [CSGO] Local Bans
Reply With Quote #3

Quote:
Originally Posted by Cruze View Post
Try this:

util.sp
PHP Code:
void UTIL_OfflineBan(int iAdminint iID, const char[] szReason

    
DebugMessage("%N (%i) UTIL_OfflineBan -> %i (%s)"iAdminiAdminiIDszReason
    
DataPack hPack CreateDataPack(); 
    
hPack.WriteCell(UID(iAdmin)); 
    
hPack.WriteCell(iID); 
    
hPack.WriteString(szReason); 

    
char szQuery[256]; 
    
FormatEx(szQuerysizeof(szQuery), "SELECT `name`, `auth`, `ip` FROM `table_offline` WHERE `id` = %i;"iID); 
    
g_hDatabase.Query(SQL_Callback_OfflineBanSelectInfoszQueryhPack); 


public 
void SQL_Callback_OfflineBanSelectInfo(Database hDatabaseDBResultSet results, const char[] sErrorany hDataPack

    if(
sError[0]) 
    { 
        
LogError("SQL_Callback_OfflineBanSelectInfo: %s"sError); 
        return; 
    } 
     
    
ResetPack(hDataPack); 
    
int iClient CID(ReadPackCell(hDataPack)); 
    if(
iClient && results.FetchRow()) 
    { 
        
char szQuery[256], szReason[128], szName[MAX_NAME_LENGTH], szAuth[32], szIp[16]; 
        
FormatEx(szQuerysizeof(szQuery), "DELETE FROM `table_offline` WHERE `id` = '%i';"ReadPackCell(hDataPack)); 
        
g_hDatabase.Query(SQL_Callback_CheckErrorszQuery); 

        
ReadPackString(hDataPackszReasonsizeof(szReason)); 

        
results.FetchString(0szNamesizeof(szName)); 
        
results.FetchString(1szAuthsizeof(szAuth)); 
        
results.FetchString(2szIpsizeof(szIp)); 
         
        
DebugMessage("SQL_Callback_OfflineBanSelectInfo -> '%s', '%s', '%s'"szNameszAuthszIp
        
UTIL_CreateBan(iClient_szAuthszNameszIpg_iBanTime[iClient], szReason); 
    } 

    
CloseHandle(hDataPack); 


void UTIL_CreateBan(int iAdmin 0int iTarget 0, const char[] szSourceAuth "", const char[] szSourceName "", const char[] szSourceIp ""int iLength, const char[] szSourceReasonint iType 0

    
DebugMessage("%N (%i) UTIL_CreateBan -> %i (%s), (%s)"iAdminiAdminiTargetszSourceAuthszSourceName

    
char szName[MAX_NAME_LENGTH*2+1], szIp[16], szQuery[512], szAuth[32], szAdminName[MAX_NAME_LENGTH*2+1], szAdminAuth[32]; 
    
int iAdminUserID strlen(szSourceReason)*2+1
    
char[] szReason = new char[iAdminUserID]; 
    
g_hDatabase.Escape(szSourceReasonszReasoniAdminUserID); 

    
int iTargetUserID
    if(
iAdmin
    { 
        
iAdminUserID UID(iAdmin); 
        
GetClientName(iAdminszQueryMAX_NAME_LENGTH); 
        
g_hDatabase.Escape(szQueryszAdminNamesizeof(szAdminName)); 
        
GetClientAuthId(iAdminAuthId_EngineszAdminAuthsizeof(szAdminAuth)); 
    } 
    else 
    { 
        
iAdminUserID 0
        
strcopy(szAdminNamesizeof(szAdminName), "CONSOLE"); 
        
strcopy(szAdminAuthsizeof(szAdminAuth), "STEAM_ID_SERVER"); 
    } 

    if(
iTarget
    { 
        
iTargetUserID UID(iTarget); 
        
GetClientAuthId(iTargetAuthId_EngineszAuthsizeof(szAuth)); 
        
GetClientName(iTargetszQueryMAX_NAME_LENGTH); 
        
g_hDatabase.Escape(szQueryszNamesizeof(szName)); 
        
GetClientIP(iTargetszIpsizeof(szIp)); 
    } 
    else 
    { 
        
iTargetUserID 0
        if(
szSourceAuth[0]) 
        { 
            
strcopy(szAuthsizeof(szAuth), szSourceAuth); 
        } 
        else 
        { 
            
strcopy(szAuthsizeof(szAuth), "unknown"); 
        } 
        
g_hDatabase.Escape(szSourceNameszNamesizeof(szName)); 
        if(
szSourceIp[0]) 
        { 
            
strcopy(szIpsizeof(szIp), szSourceIp); 
        } 
        else 
        { 
            
strcopy(szIpsizeof(szIp), "unknown"); 
        } 
    } 
     
    
Handle hDataPack CreateDataPack(); 
    
WritePackCell(hDataPackiAdminUserID); 
    
WritePackCell(hDataPackiTargetUserID); 

    
FormatEx(szQuerysizeof(szQuery), "INSERT INTO `table_bans` (`auth`, `ip`, `name`, `ban_time`, `length`, `reason`, `admin_auth`, `admin_name`, `ban_type`) VALUES ( '%s', '%s', '%s', %i, %i, '%s', '%s', '%s', '%i');"szAuthszIpszNameGetTime(), iLengthszReasonszAdminAuthszAdminNameiType); 
    
DebugMessage("szQuery: '%s'"szQuery
    
g_hDatabase.Query(SQL_Callback_InsertBanszQueryhDataPack); 


public 
void SQL_Callback_InsertBan(Database hDatabaseDBResultSet results, const char[] sErrorany hDataPack

    if(
sError[0]) 
    { 
        
LogError("SQL_Callback_InsertBan: %s"sError); 
        
CloseHandle(hDataPack); 
        return; 
    } 
     
    
ResetPack(hDataPack); 
     
    
int iClient CID(ReadPackCell(hDataPack)); 
    if(
iClient
    { 
        
PrintToChat(iClient"Ban successfully added!"); 
    } 
    
iClient CID(ReadPackCell(hDataPack)); 
    if(
iClient
    { 
        
UTIL_SearchBan(iClient); 
    } 
    
CloseHandle(hDataPack); 


void UTIL_SearchBan(int iClient

    
char szQuery[256], szAuth[32], szIp[16]; 
    
GetClientAuthId(iClientAuthId_EngineszAuthsizeof(szAuth)); 
    
GetClientIP(iClientszIpsizeof(szIp)); 
    if(
g_bCheckBanMode
    { 
        
FormatEx(szQuerysizeof(szQuery), "SELECT `id`, `ban_time`, `length`, `reason`, `admin_name`, `admin_auth` FROM `table_bans` WHERE `remove_type` = '0' AND (`auth` = '%s' OR `ip` = '%s');"szAuthszIp); 
    } 
    else 
    { 
        
FormatEx(szQuerysizeof(szQuery), "SELECT `id`, `ban_time`, `length`, `reason`, `admin_name`, `admin_auth` FROM `table_bans` WHERE `remove_type` = '0' AND ((`auth` = '%s' AND `ban_type` = 0) OR (`ip` = '%s' AND `ban_type` = 1));"szAuthszIp); 
    } 
    
DebugMessage("szQuery: '%s'"szQuery
    
g_hDatabase.Query(SQL_Callback_SearchClientBanszQueryUID(iClient)); 


public 
void SQL_Callback_SearchClientBan(Database hDatabaseDBResultSet results, const char[] sErrorany iUserID

    if(
sError[0]) 
    { 
        
LogError("SQL_Callback_SearchClientBan: %s"sError); 
        return; 
    } 
     
    
int iClient GetClientOfUserId(iUserID); 
    if(
iClient
    { 
        if(
results.FetchRow()) 
        { 
            
DebugMessage("FetchRow"
     
            
int iBanTime results.FetchInt(1); 
            
int iLength results.FetchInt(2); 
            
int iTime GetTime(); 
            if(
iLength && iTime iBanTime+iLength
            { 
                
DebugMessage("UTIL_UnBan"
                
UTIL_UnBan(results.FetchInt(0)); 
                return; 
            } 
             
            
char szAuth[32], szBanReason[256], szAdminName[MAX_NAME_LENGTH], szAdminAuth[32], szBanTime[64], szDuration[64], szExp[64]; 
            
GetClientAuthId(iClientAuthId_EngineszAuthsizeof(szAuth)); 
            
FormatTime(szBanTimesizeof(szBanTime), g_szTimeFormatiBanTime);     
            if(!
GetDuration(iLengthszDurationsizeof(szDuration))) 
            { 
                
FormatEx(szDurationsizeof(szDuration), "%i min."iLength/60); 
            } 
             
            if(
iLength
            { 
                
UTIL_GetTimeFromStamp(szExpsizeof(szExp), ((iBanTime+iLength)-iTime), iClient); 
                
Format(szExpsizeof(szExp), "Expires %s"szExp); 
            } 
            else 
            { 
                
strcopy(szExpsizeof(szExp), "Never"); 
            } 

            
results.FetchString(3szBanReasonsizeof(szBanReason)); 
            
results.FetchString(4szAdminNamesizeof(szAdminName)); 
            
results.FetchString(5szAdminAuthsizeof(szAdminAuth)); 
         
            
PrintToConsole(iClient"####################################################################"); 
            
PrintToConsole(iClient"####################################################################"); 
            
PrintToConsole(iClient"####################################################################"); 
             
            
PrintToConsole(iClient"###\t \t You are banned on this server."); 
            
PrintToConsole(iClient"###\t \t Your SteamID: %s"szAuth); 
            
PrintToConsole(iClient"###\t \t Who banned you: %s (%s)"szAdminNameszAdminAuth); 
            
PrintToConsole(iClient"###\t \t Reason: %s"szBanReason); 
            
PrintToConsole(iClient"###\t \t Ban time: %s"szBanTime); 
            
PrintToConsole(iClient"###\t \t Duration: %s"szDuration); 
            
PrintToConsole(iClient"###\t \t Expires: %s"szExp); 
            
PrintToConsole(iClient"###\t \t %s"g_szBanInfo); 

            
PrintToConsole(iClient"####################################################################"); 
            
PrintToConsole(iClient"####################################################################"); 
            
PrintToConsole(iClient"####################################################################"); 
             
            
char szBuffer[256]; 
            
strcopy(szBuffersizeof(szBuffer), g_szBanInfoPanel); 
            
ReplaceString(szBuffersizeof(szBuffer), "\\n""\n"); 
            
ReplaceString(szBuffersizeof(szBuffer), "{AUTH}"szAuth); 
            
ReplaceString(szBuffersizeof(szBuffer), "{ADMIN_NAME}"szAdminName); 
            
ReplaceString(szBuffersizeof(szBuffer), "{ADMIN_AUTH}"szAdminAuth); 
            
ReplaceString(szBuffersizeof(szBuffer), "{REASON}"szBanReason); 
            
ReplaceString(szBuffersizeof(szBuffer), "{BAN_TIME}"szBanTime); 
            
ReplaceString(szBuffersizeof(szBuffer), "{DURATION}"szDuration); 
            
ReplaceString(szBuffersizeof(szBuffer), "{EXPIRES}"szExp); 
            
ReplaceString(szBuffersizeof(szBuffer), "{BAN_INFO}"g_szBanInfo); 
             
            
DebugMessage("Banned"
            
DataPack hPack
            
CreateDataTimer(KICK_DELAYTimer_KickDelayhPack); 
            
hPack.WriteCell(UID(iClient)); 
            
hPack.WriteString(szBuffer); 
        } 
    } 


bool GetDuration(int iDurationchar[] szBufferint iMaxLen

    
g_hKeyValues.Rewind(); 
    
char szKey[64]; 
    
FormatEx(szKeysizeof(szKey), "ban_times/%i"iDuration/60); 
    
g_hKeyValues.GetString(szKeyszBufferiMaxLen); 
    return (
szBuffer[0]); 


public 
Action Timer_KickDelay(Handle hTimerHandle hDataPack

    
ResetPack(hDataPack); 
    
int iClient CID(ReadPackCell(hDataPack)); 
    
DebugMessage("Timer_KickDelay: %i"iClient
    if(
iClient
    { 
        
char szMessage[512]; 
        
ReadPackString(hDataPackszMessagesizeof(szMessage)); 
        
KickClient(iClientszMessage); 
    } 

    return 
Plugin_Stop


void UTIL_UnBan(int iBanIDint iType 1

    
char szQuery[256]; 
    
FormatEx(szQuerysizeof(szQuery), "UPDATE `table_bans` SET `remove_type` = %i WHERE `id` = '%i';"iTypeiBanID); 
    
g_hDatabase.Query(SQL_Callback_CheckErrorszQuery); 


void UTIL_RemoveBan(int iBanID

    
char szQuery[256]; 
    
FormatEx(szQuerysizeof(szQuery), "DELETE FROM `table_bans` WHERE `id` = '%i';"iBanID); 
    
g_hDatabase.Query(SQL_Callback_CheckErrorszQuery); 


void UTIL_GetTimeFromStamp(char[] szBufferint iMaxLenint iTimeStamp

    if (
iTimeStamp 31536000
    { 
        
int years iTimeStamp 31536000
        
int days iTimeStamp 86400 365
        if (
days 0
        { 
            
FormatEx(szBufferiMaxLen"%d y. %d d."yearsdays); 
        } 
        else 
        { 
            
FormatEx(szBufferiMaxLen"%d y."years); 
        } 
        return; 
    } 
    if (
iTimeStamp 86400
    { 
        
int days iTimeStamp 86400 365
        
int hours = (iTimeStamp 3600) % 24
        if (
hours 0
        { 
            
FormatEx(szBufferiMaxLen"%d d. %d h."dayshours); 
        } 
        else 
        { 
            
FormatEx(szBufferiMaxLen"%d d."days); 
        } 
        return; 
    } 
    else 
    { 
        
int Hours = (iTimeStamp 3600); 
        
int Mins = (iTimeStamp 60) % 60
        
int Secs iTimeStamp 60
         
        if (
Hours 0
        { 
            
FormatEx(szBufferiMaxLen"%02d:%02d:%02d"HoursMinsSecs); 
        } 
        else 
        { 
            
FormatEx(szBufferiMaxLen"%02d:%02d"MinsSecs); 
        } 
    } 

cmds.sp
PHP Code:
public Action Command_Ban(int iClientint iArgs

    if (
iArgs 2
    { 
        
ReplyToCommand(iClient"[SM] Usage: sm_ban <#userid|name> <minutes|0> [reason]"); 
        return 
Plugin_Handled
    } 

    
char szArg[64]; 
    
GetCmdArg(1szArgsizeof(szArg)); 
     
    
int iTarget FindTarget(iClientszArgtrue); 
    if (
iTarget == -1
    { 
        
ReplyToCommand(iClient"[SM] Игрок не найден!"); 
        return 
Plugin_Handled
    } 

    
GetCmdArg(2szArgsizeof(szArg)); 

    
char szReason[128]; 
    if (
iArgs == 3
    { 
        
GetCmdArg(3szReasonsizeof(szReason)); 
    } 

    
UTIL_CreateBan(iClientiTarget___,  S2I(szArg)*60szReason); 

    return 
Plugin_Handled


public 
Action Command_AddBan(int iClientint iArgs

    if (
iArgs 2
    { 
        
ReplyToCommand(iClient"[SM] Usage: sm_addban <steamid> <time> [reason] [name]"); 
        return 
Plugin_Handled
    } 
     
    
char szAuth[32]; 
    
GetCmdArg(1szAuthsizeof(szAuth)); 

    if (!(!
strncmp(szAuth"STEAM_"6) && szAuth[7] == ':') && strncmp(szAuth"[U:"3)) 
    { 
        
ReplyToCommand(iClient"[SM] %t""Invalid SteamID specified"); 
        return 
Plugin_Handled
    } 

    
char szTime[16]; 
    
GetCmdArg(2szTimesizeof(szTime)); 

    
char szReason[128], szName[MAX_NAME_LENGTH]; 
    if (
iArgs == 3
    { 
        
GetCmdArg(3szReasonsizeof(szReason)); 
    } 
    if (
iArgs == 4
    { 
        
GetCmdArg(4szNamesizeof(szName)); 
    } 

    
UTIL_CreateBan(iClient_szAuthszName_S2I(szTime)*60szReason); 

    return 
Plugin_Handled


public 
Action Command_BanIp(int iClientint iArgs

    if (
iArgs 2
    { 
        
ReplyToCommand(iClient"[SM] Usage: sm_banip <ip|#userid|name> <time> [reason]"); 
        return 
Plugin_Handled
    } 

    
char szArg[64]; 
    
GetCmdArg(1szArgsizeof(szArg)); 
     
    
int iTarget FindTarget(iClientszArgtrue); 
    if (
iTarget == -1
    { 
        
ReplyToCommand(iClient"[SM] Player not found!"); 
        return 
Plugin_Handled
    } 

    
GetCmdArg(2szArgsizeof(szArg)); 

    
char szReason[128]; 
    if (
iArgs == 3
    { 
        
GetCmdArg(3szReasonsizeof(szReason)); 
    } 

    
UTIL_CreateBan(iClientiTarget___,  S2I(szArg)*60szReason1); 

    return 
Plugin_Handled


public 
Action Command_Unban(int iClientint iArgs

    if (
iArgs 1
    { 
        
ReplyToCommand(iClient"[SM] Usage: sm_unban <steamid|ip>"); 
        return 
Plugin_Handled
    } 

    
char szQuery[256], szAuth[32], szPart[128]; 
    
GetCmdArg(1szAuthsizeof(szAuth)); 

    if(
g_bUnBanMode && !(GetUserFlagBits(iClient) & ADMFLAG_ROOT)) 
    { 
        
char szAdminAuth[32]; 
        
GetClientAuthId(iClientAuthId_EngineszAdminAuthsizeof(szAdminAuth)); 
        
FormatEx(szPartsizeof(szPart), " AND (`admin_auth` = '%s');"szAdminAuth); 
    } 
    else 
    { 
        
szPart[0] = 0
    } 

    
FormatEx(szQuerysizeof(szQuery), "UPDATE `table_bans` SET `remove_type` = 1 WHERE `remove_type` = '0' AND (`auth` = '%s' OR `ip` = '%s')%s;"szAuthszAuthszPart); 
    
g_hDatabase.Query(SQL_Callback_UnBanszQueryiClient UID(iClient):0); 

    return 
Plugin_Handled


public 
void SQL_Callback_UnBan(Database hDatabaseDBResultSet results, const char[] sErrorany iClient

    if(
sError[0]) 
    { 
        
LogError("SQL_Callback_UnBan: %s"sError); 
        return; 
    } 
     
    if(
iClient
    { 
        
iClient GetClientOfUserId(iClient); 
        if(!
iClient
        { 
            return; 
        } 
    } 
     
    if(
results.AffectedRows
    { 
        
ReplyToCommand(iClient"[SM] The player is broken!"); 
    } 
    else 
    { 
        
ReplyToCommand(iClient"[SM] Ban not found!"); 
    } 

Now i got other error
PHP Code:
//// LocalBans.sp
//
// LocalBans/util.sp(182) : error 092: number of arguments does not match definition
// LocalBans/banlist.sp(164) : error 092: number of arguments does not match definition 
banlist.sp
PHP Code:
public void AdminMenu_BanList(Handle hTopMenuTopMenuAction actionTopMenuObject topobj_idint iClientchar[] szBufferint iMaxLength)
{
    if (
action == TopMenuAction_DisplayOption)
    {
        
FormatEx(szBufferiMaxLength"BanList");
    }
    else if (
action == TopMenuAction_SelectOption)
    {
        
g_iClientOffset[iClient] = 0;
        
DisplayBanListMenu(iClient);
    }
}

void DisplayBanListMenu(int iClient)
{
    
char szQuery[256];
    if(
g_bShowBansMode)
    {
        
FormatEx(szQuerysizeof(szQuery), "SELECT `id`, `name`, `remove_type` FROM `table_bans` LIMIT %i, %i;"g_iClientOffset[iClient], g_iClientOffset[iClient]+g_iShowBansCount);
    }
    else
    {
        
FormatEx(szQuerysizeof(szQuery), "SELECT `id`, `name` FROM `table_bans` WHERE `remove_type` = '0' LIMIT %i, %i;"g_iClientOffset[iClient], g_iClientOffset[iClient]+g_iShowBansCount);
    }
    
    
g_hDatabase.Query(SQL_Callback_SelectBanListszQueryUID(iClient));
}

public 
void SQL_Callback_SelectBanList(Database hDatabaseDBResultSet results, const char[] sErrorany iUserID)
{
    if(
sError[0])
    {
        
LogError("SQL_Callback_SelectBanList: %s"sError);
        return;
    }
    
    
int iClient GetClientOfUserId(iUserID);
    if(
iClient)
    {
        
Menu hMenu CreateMenu(MenuHandler_BanList);

        
hMenu.SetTitle("Ban list:\n ");
        
hMenu.ExitBackButton true;

        if(
results.RowCount)
        {
            
hMenu.AddItem("search""Search\n ");

            
char szName[MAX_NAME_LENGTH*2], szID[16];
            
int i 0;
            while(
results.FetchRow())
            {
                
results.FetchString(0szIDsizeof(szID));
                
results.FetchString(1szNamesizeof(szName));
                
hMenu.AddItem(szIDszName);
                if(
g_bShowBansMode)
                {
                    switch(
results.FetchInt(2))
                    {
                        case 
1:    StrCat(szNamesizeof(szName), " (Has expired)");
                        case 
2:    StrCat(szNamesizeof(szName), " (Banned)");
                    }
                }
                ++
i;
            }
            
            if(
== g_iShowBansCount)
            {
                
hMenu.AddItem("more""Show more bans");
            }
        }
        else
        {
            
hMenu.AddItem("""No ban available"ITEMDRAW_DISABLED);
        }

        
hMenu.Display(iClientMENU_TIME_FOREVER);
    }
}

public 
int MenuHandler_BanList(Menu hMenuMenuAction actionint iClientint Item)
{
    switch(
action)
    {
    case 
MenuAction_End:
        {
            
delete hMenu;
        }
    case 
MenuAction_Cancel:
        {
            if (
Item == MenuCancel_ExitBack && g_hTopMenu)
            {
                
g_hTopMenu.Display(iClientTopMenuPosition_LastCategory);
            }
        }
    case 
MenuAction_Select:
        {
            
char szID[16];
            
hMenu.GetItem(ItemszIDsizeof(szID));
            if(
strcmp(szID"more") == 0)
            {
                
g_iClientOffset[iClient] += g_iShowBansCount;
                
DisplayBanListMenu(iClient);
                return 
0;
            }
            if(
strcmp(szID"search") == 0)
            {
                
g_bWaitChat[iClient] = true;
                
g_bSearch[iClient] = true;
                
g_bOffBan[iClient] = false;
                
DisplayWaitChatMenu(iClient);
                return 
0;
            }

            
DisplayBanInfoMenu(iClientS2I(szID));
        }
    }
    
    return 
0;
}

void DisplayBanInfoMenu(int iClientint iID)
{
    
char szQuery[256];
    
FormatEx(szQuerysizeof(szQuery), "SELECT `id`, `name`, `admin_name`, `admin_auth`, `ban_time`, `length`, `reason`, `remove_type` FROM `table_bans` WHERE `id` = '%i';"iID);

    
g_hDatabase.Query(SQL_Callback_SelectBanInfoszQueryUID(iClient));
}

public 
void SQL_Callback_SelectBanInfo(Database hDatabaseDBResultSet results, const char[] sErrorany iUserID)
{
    if(
sError[0])
    {
        
LogError("SQL_Callback_SelectBanInfo: %s"sError);
        return;
    }
    
    
int iClient GetClientOfUserId(iUserID);
    if(
iClient && results.FetchRow())
    {
        
Menu hMenu CreateMenu(MenuHandler_BanInfo);
        
hMenu.ExitBackButton true;
        
        
int iID results.FetchInt(0);
        
int iBanTime results.FetchInt(4);
        
int iLength results.FetchInt(5);
        
int iTime GetTime();
        
        
char szID[16], szAuth[32], szName[MAX_NAME_LENGTH], szBanReason[256], szAdminName[MAX_NAME_LENGTH], szAdminAuth[32], szAdminAuth2[32], szBanTime[64], szDuration[64], szExp[64];
        
results.FetchString(1szNamesizeof(szName));
        
results.FetchString(2szAdminNamesizeof(szAdminName));
        
results.FetchString(3szAdminAuthsizeof(szAdminAuth));
        
results.FetchString(6szBanReasonsizeof(szBanReason));
        
GetClientAuthId(iClientAuthId_EngineszAdminAuth2sizeof(szAdminAuth2));
        
FormatTime(szBanTimesizeof(szBanTime), g_szTimeFormatiBanTime);    
        if(!
GetDuration(iLengthszDurationsizeof(szDuration)))
        {
            
FormatEx(szDurationsizeof(szDuration), "%i min."iLength/60);
        }
        
        if(
iLength)
        {
            
UTIL_GetTimeFromStamp(szExpsizeof(szExp), ((iBanTime+iLength)-iTime), iClient);
            
Format(szExpsizeof(szExp), "Expires %s"szExp);
        }
        else
        {
            
strcopy(szExpsizeof(szExp), "Никогда");
        }

        if(
g_bShowBansMode)
        {
            
char szBuffer[64];
            
            switch(
results.FetchInt(7))
            {
                case 
0:    FormatEx(szBuffersizeof(szBuffer), "Active\nExpires: %s"szExp);
                case 
1:    strcopy(szBuffersizeof(szBuffer), "Has expired");
                case 
2:    strcopy(szBuffersizeof(szBuffer), "Banned");
            }

            
hMenu.SetTitle("SteamID: %s\n\
                        Name: %s\n\
                        Admin who banned you: %s\n\
                        Reason: %s\n\
                        Ban issued: %s\n\
                        Duration: %s\n\
                        Other: %s"
,
                        
szAuth,
                        
szName,
                        
szAdminName,
                        
szBanReason,
                        
szBanTime,
                        
szDuration,
                        
szBuffer);
        }
        else
        {
            
hMenu.SetTitle("SteamID: %s\n\
                        Name: %s\n\
                        Admin who banned you: %s\n\
                        Reason: %s\n\
                        Ban issued: %s\n\
                        Duration: %s\n\
                        Expires: %s"
,
                        
szAuth,
                        
szName,
                        
szAdminName,
                        
szBanReason,
                        
szBanTime,
                        
szDuration,
                        
szExp);
        }
/*
        bool bRemoveBanAccess = CheckCommandAccess(iClient, "sm_remove_ban", ADMFLAG_UNBAN);
        bool bUnBanAccess = CheckCommandAccess(iClient, "sm_unban", ADMFLAG_UNBAN);
        */
        
bool bIsRoot = (GetUserFlagBits(iClient) & ADMFLAG_ROOT != 0);
        
bool bItsHimBan = (strcmp(szAdminAuth2szAdminAuth) == 0);
        
        
/*if((g_bUnBanMode && (bItsHimBan || bUnBanAccess)) || (!g_bUnBanMode && bUnBanAccess))
        {
            FormatEx(szID, sizeof(szID), "u%i", iID);
            hMenu.AddItem(szID, "To unban");
        }
        
        if((g_bRemoveBanMode && (bItsHimBan || bRemoveBanAccess)) || (!g_bRemoveBanMode && bRemoveBanAccess))
        {
            FormatEx(szID, sizeof(szID), "r%i", iID);
            hMenu.AddItem(szID, "Delete");
        }*/
        
        
if(bIsRoot || (g_bUnBanMode && bItsHimBan))
        {
            
FormatEx(szIDsizeof(szID), "u%i"iID);
            
hMenu.AddItem(szID"To unban");
        }
        
        if(
bIsRoot || (g_bRemoveBanMode && bItsHimBan))
        {
            
FormatEx(szIDsizeof(szID), "r%i"iID);
            
hMenu.AddItem(szID"Delete");
        }
        
        
hMenu.AddItem(""""ITEMDRAW_NOTEXT);
        
hMenu.AddItem(""""ITEMDRAW_NOTEXT);
        
hMenu.AddItem(""""ITEMDRAW_NOTEXT);
        
hMenu.AddItem(""""ITEMDRAW_NOTEXT);

        
hMenu.Display(iClientMENU_TIME_FOREVER);
    }
}

public 
int MenuHandler_BanInfo(Menu hMenuMenuAction actionint iClientint Item)
{
    switch(
action)
    {
    case 
MenuAction_End:
        {
            
delete hMenu;
        }
    case 
MenuAction_Cancel:
        {
            if (
Item == MenuCancel_ExitBack)
            {
                
DisplayBanListMenu(iClient);
            }
        }
    case 
MenuAction_Select:
        {
            
char szID[16];
            
hMenu.GetItem(ItemszIDsizeof(szID));

            
int iID S2I(szID[1]);
            if(
szID[0] == 'u')
            {
                
UTIL_UnBan(iID2);
                
DisplayBanInfoMenu(iClientiID);
                
PrintToChat(iClient"Player banned!");
                return 
0;
            }

            if(
szID[0] == 'r')
            {
                
UTIL_RemoveBan(iID);
                
DisplayBanListMenu(iClient);
                
PrintToChat(iClient"Ban removed!");
                return 
0;
            }
        }
    }
    
    return 
0;

__________________
Steam - https://steamcommunity.com/id/porcusorulmagic
Discord - PorcusorulMagic#4908
PorcusorulMagic is offline