Code:
#include < amxmodx >
#include < hamsandwich >
#include < fun >
#include < cstrike >
#pragma semicolon 1
#if AMXX_VERSION_NUM >= 183
#define ColorChat client_print_color
#define RED print_team_red
#define BLUE print_team_blue
#define GREY print_team_grey
#define DEFAULT print_team_default
#else
#include < colorchat >
#endif
#define PLUGIN "Class Menu"
#define VERSION "0.0.1"
#define AUTHOR "Blizzard_87"
#define cm(%0) ( sizeof(%0) - 1 )
#define Set(%1) ( BitHud |= ( 1 << ( %1 & 31 ) ) )
#define Clear(%1) ( BitHud &= ~( 1 << ( %1 & 31 ) ) )
#define Check(%1) ( BitHud & ( 1 << ( %1 & 31 ) ) )
new BitHud;
// Enum Structure
enum _:mData
{
m_szClassName[ 32 ],
m_szClassDesc[ 64 ],
m_szPrimary[ 32 ],
m_iPriBpAmmo,
m_szSecondary[ 32 ],
m_iSecBpAmmo,
m_szGrenade[ 32 ]
};
// Constants
new g_mPlayerData[ ][ mData ] =
{
{ "None", "None", "None", 0, "None", 0, "None" },
{ "Leone", "[Shotgun][Deagle][HE Grenade]", "weapon_xm1014", 200, "weapon_deagle", 200, "weapon_hegrenade" },
{ "Commando", "[Dak Dak][Usp][FlashBang]", "weapon_sg550", 200, "weapon_usp", 200, "weapon_flashbang" },
{ "Mp5 Navy", "[Mp5][Glock][Smoke Grenade]", "weapon_mp5navy", 200, "weapon_glock18", 200, "weapon_smokegrenade" },
{ "Rambo", "[Ak47][Five-Seven][HE Grenade]", "weapon_ak47", 200, "weapon_fiveseven", 200, "weapon_hegrenade" },
{ "Schmidt", "[Scout][Deagle][Flash Bang]", "weapon_scout",200, "weapon_deagle", 200, "weapon_flashbang" },
{ "Krieg", "[Krieg 552][Usp][Smoke Grenade]", "weapon_sg552", 200, "weapon_usp", 200, "weapon_smokegrenade" },
{ "IDF Defender", "[Galil][Glock][He Grenade]", "weapon_galil", 200, "weapon_glock18", 200, "weapon_hegrenade" },
{ "Rifle", "[Sniper][Five-Seven][Flash Bang]", "weapon_awp", 200, "weapon_fiveseven", 200, "weapon_flashbang" },
{ "Maverick", "[M4a1][Deagle][Smoke Grenade]", "weapon_m4a1", 200, "weapon_deagle", 200, "weapon_smokegrenade" },
{ "Clarion", "[Famas][Usp][He Grenade]", "weapon_famas", 200, "weapon_usp", 200, "weapon_hegrenade" },
{ "Bullpup", "[Aug][Glock][Flash Bang]", "weapon_aug", 200, "weapon_glock18", 200, "weapon_flashbang" }
};
// Integers
new g_iPlayerClass[ 33 ], g_iTeamMode;
// Cvars
new g_pTeamMode;
public plugin_init( )
{
register_plugin( PLUGIN, VERSION, AUTHOR );
// Register Ham
RegisterHam( Ham_Spawn, "player", "CBasePlayer_Spawn_P", .Post = 1 );
RegisterHam( Ham_Killed, "player", "CBasePlayer_Killed_P", .Post = 1 );
// Register Events
register_event( "HLTV", "Event_HLTV_New_Round", "a", "1=0", "2=0" );
// Register Client Commands
register_clcmd( "say /class", "ClCmd_CheckMode" );
register_clcmd( "say /hud", "ClCmd_ClassHud" );
// Register Cvars
g_pTeamMode = register_cvar( "cm_team_mode", "0" ); // 0 - Plugin Off | 1 - Terrorist Only | 2 - CT Only | 3 - Both Teams
g_iTeamMode = get_pcvar_num( g_pTeamMode );
// Set Perm Hud Task
set_task( 1.0, "Func_ClassHud", 100, "", 0, "b" );
}
// Public Functions //
public client_putinserver( index )
{
g_iPlayerClass[ index ] = 0;
Set( index );
}
public Event_HLTV_New_Round( )
{
g_iTeamMode = get_pcvar_num( g_pTeamMode );
}
public CBasePlayer_Spawn_P( index )
{
if( is_user_alive( index ) ) ClCmd_CheckMode( index );
}
public CBasePlayer_Killed_P( index )
{
g_iPlayerClass[ index ] = 0;
}
public ClCmd_ClassHud( index )
{
if( Check( index ) )
Clear( index );
else
Set( index );
return PLUGIN_HANDLED;
}
public ClCmd_CheckMode( index )
{
if( is_user_alive( index ) )
{
switch( g_iTeamMode )
{
case 0: return PLUGIN_HANDLED;
case 1:
{
if( get_user_team( index ) == 1 )
ClCmd_ClassMenu( index );
}
case 2:
{
if( get_user_team( index ) == 2 )
ClCmd_ClassMenu( index );
}
case 3:
{
ClCmd_ClassMenu( index );
}
}
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
public ClCmd_ClassMenu( index )
{
new szString[ 64 ];
new menu = menu_create( "\rClass Menu:^n\yMade By Blizzard_87.", "ClassMenu_Handler" );
for( new i = 1; i < sizeof( g_mPlayerData ); i++ )
{
formatex( szString, cm( szString ), "%s \y%s", g_mPlayerData[ i ][ m_szClassName ], g_mPlayerData[ i ][ m_szClassDesc ] );
menu_additem( menu, szString );
}
menu_display( index, menu );
return PLUGIN_HANDLED;
}
public ClassMenu_Handler( index, menu, item )
{
if( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}
g_iPlayerClass[ index ] = item + 1;
Func_SetWeapons( index, g_iPlayerClass[ index ] );
menu_destroy( menu );
return PLUGIN_HANDLED;
}
public Func_ClassHud( )
{
new iPlayers[ 32 ], iNum, i, Player;
switch( g_iTeamMode )
{
case 0: return;
case 1: get_players( iPlayers, iNum, "ce", "TERRORIST" );
case 2: get_players( iPlayers, iNum, "ce", "CT" );
case 3: get_players( iPlayers, iNum, "c" );
}
for( i = 0; i < iNum; i++ )
{
Player = iPlayers[ i ];
if( Check( Player ) )
{
set_hudmessage( 255, 255, 0, -1.0, 0.05, 0, 0.0, 1.1, 0.0, 0.0, -1 );
show_hudmessage( Player, "Class: %s^nWeapons: %s",
g_mPlayerData[ g_iPlayerClass[ Player ] ][ m_szClassName ],
g_mPlayerData[ g_iPlayerClass[ Player ] ][ m_szClassDesc ]);
}
}
}
// Private Functions //
Func_SetWeapons( index, iClass )
{
if( is_user_alive( index ) )
{
strip_user_weapons( index );
give_item( index, "weapon_knife" );
give_item( index, g_mPlayerData[ iClass ][ m_szPrimary ] );
cs_set_user_bpammo( index, get_weaponid( g_mPlayerData[ iClass ][ m_szPrimary ] ), g_mPlayerData[ iClass ][ m_iPriBpAmmo ] );
give_item( index, g_mPlayerData[ iClass ][ m_szSecondary] );
cs_set_user_bpammo( index, get_weaponid( g_mPlayerData[ iClass ][ m_szSecondary ] ), g_mPlayerData[ iClass ][ m_iSecBpAmmo ] );
give_item( index, g_mPlayerData[ iClass ][ m_szGrenade] );
client_print_color( index, print_team_red, "^4[ Class ]^1 You Have Chosen The Class ^3%s ^4%s",
g_mPlayerData[ g_iPlayerClass[ index ] ][ m_szClassName ],
g_mPlayerData[ g_iPlayerClass[ index ] ][ m_szClassDesc] );
}
}