Raised This Month: $51 Target: $400
 12% 

Solved Random admin for CT and T


Post New Thread Reply   
 
Thread Tools Display Modes
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 01-19-2017 , 17:26   Re: Random admin for CT and T
Reply With Quote #21

How about a HUD to display current team admins?

I can add that option to prevent temp admins if a higher-level admin is on the server/team. This is kinda like my Admin Hierarchy plugin.
__________________
Bugsy is offline
4ever16
Veteran Member
Join Date: Apr 2015
Old 01-20-2017 , 09:40   Re: Random admin for CT and T
Reply With Quote #22

No to hud message.
Cause i have alot of those already and it would only make so other hud messages stops working.
Someone made a plugin which prints admins every x seconds here https://forums.alliedmods.net/showthread.php?t=292978

Yes to this. Maybe cvar cause someone would like both options. I think.
Quote:
I can add that option to prevent temp admins if a higher-level admin is on the server/team.

Last edited by 4ever16; 01-20-2017 at 09:41.
4ever16 is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 01-20-2017 , 21:13   Re: Random admin for CT and T
Reply With Quote #23

Have not thoroughly tested.

Cvars:
  • ta_tempadmin_flags = Admin flags that all temporary admins get.
  • ta_senior_team_flags = When an admin who has these flags joins a team, the temporary admin on that team loses their admin power. When this senior team-level admin disconnects or changes team, a new random temporary admin is selected for that team.
  • ta_senior_server_flags = When an admin who has these flags connects to the server, all temp admins (both teams) immediately lose their admin power. When all senior server-level admins have disconnected, a new random temporary is selected on both teams.
To run in test mode, un-comment the #define TESTING line. This enables logging of all activity, bot support, and enables some server_print()'s that I was using for debugging purposes. Please test and let me know if there are any issues.
PHP Code:

#include <amxmodx>
#include <cstrike>

new const Version[] = "0.3";

#define TESTING

#if defined TESTING
new const szGetPlayersFlags_Team[] = "eh"
new const szGetPlayersFlags_NoTeam[] = "h"
#else
new const szGetPlayersFlags_Team[] = "ceh"
new const szGetPlayersFlags_NoTeam[] = "ch"
#endif

#define MAX_PLAYERS 32

enum CVars
{
    
Cvar_TempAdmin_Flags,
    
Cvar_Senior_Team_Flags,
    
Cvar_Senior_Server_Flags
}

enum SeniorAdmins
{
    
Team_Level_T 1,
    
Team_Level_CT,
    
Server_Level
}

enum Teams
{
    
Team_T 1,
    
Team_CT,
    
Team_Both
}

new 
g_tAdminsTeams ];
new 
g_tSeniorAdminsSeniorAdmins ];
new 
g_iCurTeamMAX_PLAYERS ] = { 'U' , ... };
new 
g_pCvarCVars ];

public 
plugin_init()
{
    
register_plugin"Temp Admins" Version "bugsy" );    
    
    
register_event"TeamInfo" "TeamInfo" "a" );
    
    
g_pCvarCvar_TempAdmin_Flags ] = register_cvar"ta_tempadmin_flags" "bcdefiju" );
    
g_pCvarCvar_Senior_Team_Flags ] = register_cvar"ta_senior_team_flags" "" );
    
g_pCvarCvar_Senior_Server_Flags ] = register_cvar"ta_senior_server_flags" "a" );
    
    
#if defined TESTING
    
set_task1.0 "ShowAdmins" , .flags="b" );
    
#endif
}

#if defined TESTING
public ShowAdmins()
{
    new 
iPlayers32 ] , iNum szHUD256 ] , iPos szName32 ];
    
    new const 
szTeamsTeams ][] = 
    {
        
"",
        
"T",
        
"CT",
        
""
    
};
    
    
get_playersiPlayers iNum );
    
    
iPos copyszHUD charsmaxszHUD ) , "Temporary Admins:^n^n" );
    
    for ( new 
Teams:tTeam Team_T tTeam <= Team_CT tTeam++ )
    {
        for ( new 
iNum i++ )
        {
            if ( 
g_tAdminstTeam ] & ( << ( iPlayers] ) ) )
            {
                
get_user_nameiPlayers] , szName charsmaxszName ) );
                
iPos += formatexszHUDiPos ] , charsmaxszHUD ) - iPos "%s - %s^n" szTeamstTeam ] , szName );
            }
        }
    }
    
    
set_hudmessage(255255255, -1.00.2001.01.0)
    
show_hudmessage0szHUD)
}
#endif

public client_authorizedid )
{
    new 
szFlags27 ] , iFlags iPlayerFlags szName32 ];
    
    
get_pcvar_stringg_pCvarCvar_Senior_Server_Flags ] , szFlags charsmaxszFlags ) );
        
    
iFlags read_flagsszFlags );
    
iPlayerFlags get_user_flagsid );
    
    if ( 
iFlags && ( ( iPlayerFlags iFlags ) == iFlags ) )
    {
        
g_tSeniorAdminsServer_Level ] |= ( << ( id 31 ) );
        
        
get_user_nameid szName charsmaxszName ) );
        
client_printprint_chat "[RANDOM ADMIN] Server-level senior admin %s has connected!" szName );
        
#if defined TESTING 
        
server_print"[RANDOM ADMIN] Server-level senior admin %s has connected!" szName );
        
log_to_file"TemporaryAdmins.log" "Senior server-level admin %s has connected." szName );
        
#endif
        
        
RemoveTempAdminTeam_Both );
    }
}

public 
client_disconnectid )
{    
    new 
szName32 ] , bool:bWasSeniorLevel;
    
    
//Check if disconnecting player is a senior-level admin.
    
for ( new SeniorAdmins:saLevel Team_Level_T saLevel <= Server_Level saLevel++ )
    {
        
//Player is a senior level admin
        
if ( g_tSeniorAdminssaLevel ] & ( << ( id 31 ) ) )
        {
            
//Set bit to false in senior admin bit-field for this level admin (team/server)
            
g_tSeniorAdminssaLevel ] &= ~( << ( id 31 ) );
            
bWasSeniorLevel true;
            
            
get_user_nameid szName charsmaxszName ) );
            
client_printprint_chat "[RANDOM ADMIN] %s senior admin %s has disconnected!" saLevel == Server_Level "Server-level" "Team-level" szName );
            
            
#if defined TESTING 
            
server_print"[RANDOM ADMIN] %s senior admin %s has disconnected!" saLevel == Server_Level "Server-level" "Team-level" szName );
            
log_to_file"TemporaryAdmins.log" "%s senior admin %s has disconnected!" saLevel == Server_Level "Server-level" "Team-level" szName );
            
#endif
            
            //If there are no longer server-seniors online.
            
if ( !g_tSeniorAdminsServer_Level ] )
            {
                
//Check T and CT team so see if there are team-level seniors.
                
for ( new Teams:tTeam Team_T tTeam <= Team_CT tTeam++ )
                {
                    
//If no team level senior on current team and no temp admin on current team, create a temp admin.
                    //server_print( "if ( g_tSeniorAdmins[ SeniorAdmins:tTeam ]==0 [%d] , g_tAdmins[ tTeam ]==0 [%d] ", g_tSeniorAdmins[ SeniorAdmins:tTeam ] , g_tAdmins[ tTeam ] )
                    
if ( !g_tSeniorAdminsSeniorAdmins:tTeam ] && !g_tAdminstTeam ] )
                    {
                        
SetRandomAdminid tTeam );
                    }
                }
            }
            break;
        }
    }
    
    if ( 
bWasSeniorLevel == false )
    {
        for ( new 
Teams:tTeam Team_T tTeam <= Team_CT tTeam++ )
        {
            if ( 
g_tAdminstTeam ] & ( << ( id 31 ) ) )
            {
                
g_tAdminstTeam ] &= ~( << ( id 31 ) );
                
SetRandomAdminid tTeam );
                break;
            }
        }
    }
}

public 
TeamInfo()
{
    new 
id szTeam] , szFlags27 ] , iFlags iPlayerFlags bool:bIsTeamLevelSenior;
    
    
id read_data);
    
read_dataszTeam charsmaxszTeam ) );
    
    
//Check if this is the first time a player is joining a team OR a team change occurred.
    
if ( g_iCurTeamid ] != szTeam] )
    {
        
//Set chosen team as players current team.
        
g_iCurTeamid ] = szTeam];
        
        
//If there are any server-level seniors, we will not be setting any new temp admins so we can stop execution here.
        
if ( g_tSeniorAdminsServer_Level ] )
            return;
        
        
//Check if player who just joined team is a team-level senior.
        
get_pcvar_stringg_pCvarCvar_Senior_Team_Flags ] , szFlags charsmaxszFlags ) );
        
iFlags read_flagsszFlags );
        
iPlayerFlags get_user_flagsid );
        
bIsTeamLevelSenior = ( iFlags && ( ( iFlags iPlayerFlags ) == iFlags ) );
        
        if ( 
szTeam] == 'C' || szTeam] == 'T' )
        {
            
HandleTeamJoinbIsTeamLevelSenior id szTeam] == 'C' Team_CT Team_T )
        }
        else if ( 
szTeam] == 'S' )
        {
            if ( 
bIsTeamLevelSenior )
            {
                for ( new 
SeniorAdmins:saTeam Team_Level_T saTeam <= Team_Level_CT saTeam++ )
                {
                    if ( 
g_tSeniorAdminssaTeam ] & ( << ( id 31 ) ) )
                    {
                        
g_tSeniorAdminssaTeam ] &= ~( << ( id 31 ) );
                        
                        
SetRandomAdminid Teams:saTeam );
                        
                        
#if defined TESTING 
                        
new szName32 ];
                        
get_user_nameid szName charsmaxszName ) );
                        
server_print"[RANDOM ADMIN] Team-level senior admin %s has joined spectator (was %s)" szName saTeam == Team_Level_T "T" "CT" );
                        
log_to_file"TemporaryAdmins.log" "Team-level senior admin %s has joined spectator (was %s)" szName saTeam == Team_Level_T "T" "CT" );
                        
#endif
                        
break;
                    }
                }
            }
            else
            {
                
            }
        }
    }
}

HandleTeamJoinbool:bIsTeamLevelSenior id Teams:tTeam )
{
    
//Joining player is team-level senior and there is a temp currently on the same team, remove temp admin.
    
if ( bIsTeamLevelSenior 
    {
        new 
Teams:tPrevTeam = ( tTeam == Team_T ) ? Team_CT Team_T;
        
        
//If this is a team-change, remove senior-admin from previous team and assign temp admin to player.
        
if ( g_tSeniorAdminsSeniorAdmins:tPrevTeam ] & ( << ( id 31 ) ) )
        {
            
g_tSeniorAdminsSeniorAdmins:tPrevTeam ] &= ~( << ( id 31 ) );
            
SetRandomAdminid tPrevTeam );
            
            
#if defined TESTING
            
new szName32 ];
            
get_user_nameid szName charsmaxszName ) );
            
server_print"[RANDOM ADMIN] Team-level senior admin %s has changes teams [Old=%s]" szName tPrevTeam == Team_T "T" "CT" );
            
log_to_file"TemporaryAdmins.log" "Team-level senior admin %s has changes teams [Old=%s]" szName tPrevTeam == Team_T "T" "CT" );
            
#endif
        
}
        
        
//Add senior-admin to new team.
        
g_tSeniorAdminsSeniorAdmins:tTeam ] |= ( << ( id 31 ) );
        
        
#if defined TESTING
        
new szName32 ];
        
get_user_nameid szName charsmaxszName ) );
        
server_print"[RANDOM ADMIN] Team-level senior admin %s has joined team %s" szName tTeam == Team_T "T" "CT" );
        
log_to_file"TemporaryAdmins.log" "Team-level senior admin %s has joined team %s" szName tTeam == Team_T "T" "CT" );
        
#endif
        
        
if ( g_tAdminstTeam ] )
        {
            
RemoveTempAdmintTeam );
        }
    }
    else if ( !
g_tAdminstTeam ] )
    {
        
SetAdminid tTeam );
    }
}

SetRandomAdminiIgnorePlayer Teams:tTeam )
{
    new 
iPlayers32 ] , iNum iPlayer bool:bAdminFound;
    
    
get_playersiPlayers iNum szGetPlayersFlags_Team tTeam == Team_T "TERRORIST" "CT" );

    if ( 
iNum )
    {
        while ( !
bAdminFound )
        {
            
iPlayer iPlayersrandomiNum ) ];
            
            if ( ( 
iPlayer != iIgnorePlayer ) && !( g_tSeniorAdminsSeniorAdmins:tTeam ] & ( << ( iPlayer 31 ) ) ) )
            {
                
SetAdminiPlayer tTeam );
                
bAdminFound true;
                break;
            }
        }
    }
}

SetAdminid Teams:tTeam )
{
    new 
szFlags27 ] , szName32 ];
    
    
get_user_nameid szName charsmaxszName ) );
    
    
get_pcvar_stringg_pCvarCvar_TempAdmin_Flags ] , szFlags charsmaxszFlags ) );
    
remove_user_flagsid , -);
    
set_user_flagsid read_flagsszFlags ) );
    
    
g_tAdminstTeam ] |= ( << ( id 31 ) );
    
    
client_printprint_chat "[RANDOM ADMIN] Player %s just got Temporary Admin!" szName );
    
#if defined TESTING 
    
server_print"[RANDOM ADMIN] Player %s just got Temporary Admin on team %s" szName tTeam == Team_T "T" "CT" );
    
log_to_file"TemporaryAdmins.log" "Player %s just got Temporary Admin on team %s" szName tTeam == Team_T "T" "CT" );
    
#endif
}

RemoveTempAdminTeams:tTeam=Team_Both )
{
    new 
iPlayers32 ] , iNum iPlayer szName32 ];

    
//"c" - do not include bots
    //"e" - match with team
    //"h" - do not include HLTV proxies

    
if ( Team_T <= tTeam <= Team_CT )
        
get_playersiPlayers iNum szGetPlayersFlags_Team tTeam == Team_T "TERRORIST" "CT" );
    else
        
get_playersiPlayers iNum szGetPlayersFlags_NoTeam  );
        
    if ( 
iNum )
    {
        for ( new 
iNum i++ )
        {
            
iPlayer iPlayers];
            
            if ( ( ( 
tTeam == Team_Both ) && ( ( g_tAdminsTeam_T ] & ( << ( iPlayer 31 ) ) ) || ( g_tAdminsTeam_CT ] & ( << ( iPlayer 31 ) ) ) ) ) ||
                ( 
g_tAdminstTeam ] & ( << ( iPlayer 31 ) ) ) )
            {
                
remove_user_flagsiPlayer );
                
set_user_flagsiPlayer ADMIN_USER );
                
                
get_user_nameiPlayer szName charsmaxszName ) );
                
                
client_printprint_chat "[RANDOM ADMIN] Player %s just lost Temporary Admin due to senior admin connecting." szName );
                
#if defined TESTING 
                
server_print"[RANDOM ADMIN] Player %s just lost Temporary Admin (senior admin connected)!" szName );
                
log_to_file"TemporaryAdmins.log" "Player %s just lost Temporary Admin due to senior admin connecting." szName );
                
#endif
                
                
if ( tTeam == Team_Both )
                {
                    
g_tAdminsTeams:cs_get_user_teamiPlayer ) ] &= ~( << ( iPlayer 31 ) );
                }
                else
                {
                    
g_tAdminstTeam ] &= ~( << ( iPlayer 31 ) );
                    break;
                }
            }
        }
    }

__________________

Last edited by Bugsy; 01-22-2017 at 20:56.
Bugsy is offline
4ever16
Veteran Member
Join Date: Apr 2015
Old 01-22-2017 , 02:09   Re: Random admin for CT and T
Reply With Quote #24

Cool will test and come with some information about the functionality.
Thanks for the cvars!
4ever16 is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 01-22-2017 , 13:54   Re: Random admin for CT and T
Reply With Quote #25

I just realized this will not properly handle when a senior team level admin changes team or any player switches to spectator. I will work on this.

Code should now handle team changes. 'Testing' mode will now display a HUD with the temp admin on each team.
__________________

Last edited by Bugsy; 01-22-2017 at 20:57.
Bugsy is offline
Reply



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 06:11.


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