#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#define m_iVGUI 510
#define m_fGameHUDInitialized 349
#define TEAM_REFRESH_DELAY 10.0
// Old Style Menus
stock const FIRST_JOIN_MSG [] = "#Team_Select" ;
stock const FIRST_JOIN_MSG_SPEC [] = "#Team_Select_Spect" ;
stock const INGAME_JOIN_MSG [] = "#IG_Team_Select" ;
stock const INGAME_JOIN_MSG_SPEC [] = "#IG_Team_Select_Spect" ;
const iMaxLen = sizeof ( INGAME_JOIN_MSG_SPEC );
// New VGUI Menus
stock const VGUI_JOIN_TEAM_NUM = 2 ;
#define TASK_KILLBALL_TIMER 51120
new gp_AutoJoin
new inround
new CTCount
new TCount
new g_MaxClients
new bool:user[32]
public plugin_init ()
{
register_plugin ( "JoinTeamMenu" , "1.1" , "D3luxe" );
register_message ( get_user_msgid ( "ShowMenu" ), "message_ShowMenu" );
register_message ( get_user_msgid ( "VGUIMenu" ), "message_VGUIMenu" );
RegisterHam(Ham_Spawn, "player", "Spwan_player", 1)
register_clcmd("chooseteam" , "show_team_menu")
register_clcmd ( "say", "handleSay" );
register_logevent("round_start", 2, "0=World triggered", "1=Round_Start")
register_clcmd ( "jointeam" , "jointeam" )
register_clcmd ( "joinclass" , "jointeam" )
gp_AutoJoin = register_cvar ( "jb_autojoin" , "0" )
g_MaxClients = get_maxplayers()
}
public Spwan_player(id)
{
user[id] = false
}
public round_start()
{
new iPlayers[32];
new iNum;
new id;
get_players( iPlayers, iNum );
for( new i = 0; i < iNum; i++ )
{
id = iPlayers;
user[id] = false
}
inround = 0
if(TCount > 0 && CTCount > 0)
set_task(1.0, "CnT", TASK_KILLBALL_TIMER, _, _, "b")
}
public CnT() {
inround++
if(inround == 30)
{
remove_task(TASK_KILLBALL_TIMER)
}
}
public handleSay(id)
{
if(get_user_flags(id) & ADMIN_SLAY)
{
new args[64]
read_args(args, charsmax(args))
remove_quotes(args)
new arg1[16]
new arg2[32]
strbreak(args, arg1, charsmax(arg1), arg2, charsmax(arg2))
if (equal(arg1,"/cst", 7))
ctteam(id, arg2)
if (equal(arg1,"/st", 7))
tteam(id, arg2)
if (equal(arg1,"/sspec", 7))
specteam(id, arg2)
if (equal(arg1,"/srevive", 7))
revive(id, arg2)
}
}
public tteam(id, arg[])
{
new to[32], count[10], admin[32], player[32]
strbreak(arg, to, 31, count, 9)
if (!to[0])
{
return
}
new reciever = cmd_target(id, to, (CMDTARGET_ALLOW_SELF))
if (!reciever)
{
return
}
if (cs_get_user_team(reciever) == CS_TEAM_T)
{
return
}
if(cs_get_user_team(reciever) == CS_TEAM_CT)
{
CTCount--
TCount++
get_user_name(id, admin, 31)
get_user_name(reciever, player, 31)
cs_set_user_team(reciever, 1)
user_kill(reciever)
if(is_user_alive(reciever))
{
user_kill(reciever)
}
}
if(cs_get_user_team(reciever) == CS_TEAM_SPECTATOR)
{
TCount++
get_user_name(id, admin, 31)
get_user_name(reciever, player, 31)
cs_set_user_team(reciever, 1)
user_kill(reciever)
}
}
public ctteam(id, arg[])
{
new to[32], count[10], admin[32], player[32]
strbreak(arg, to, 31, count, 9)
if (!to[0])
{
return
}
new reciever = cmd_target(id, to, (CMDTARGET_ALLOW_SELF))
if (!reciever)
{
return
}
if (cs_get_user_team(reciever) == CS_TEAM_CT)
{
return
}
if(cs_get_user_team(reciever) == CS_TEAM_T)
{
TCount--
CTCount++
get_user_name(id, admin, 31)
get_user_name(reciever, player, 31)
cs_set_user_team(reciever, 2)
user_kill(reciever)
if(is_user_alive(reciever))
{
user_kill(reciever)
}
}
if(cs_get_user_team(reciever) == CS_TEAM_SPECTATOR)
{
CTCount++
get_user_name(id, admin, 31)
get_user_name(reciever, player, 31)
cs_set_user_team(reciever, 2)
user_kill(reciever)
}
}
public specteam(id, arg[])
{
new to[32], count[10], admin[32], player[32]
strbreak(arg, to, 31, count, 9)
if (!to[0])
{
return
}
new reciever = cmd_target(id, to, (CMDTARGET_ALLOW_SELF))
if (!reciever)
{
return
}
if (cs_get_user_team(reciever) == CS_TEAM_SPECTATOR)
{
return
}
if(cs_get_user_team(reciever) == CS_TEAM_T)
{
TCount--
get_user_name(id, admin, 31)
get_user_name(reciever, player, 31)
cs_set_user_team(reciever, 3)
user_kill(reciever)
if(is_user_alive(reciever))
{
user_kill(reciever)
}
}
if(cs_get_user_team(reciever) == CS_TEAM_CT)
{
CTCount--
get_user_name(id, admin, 31)
get_user_name(reciever, player, 31)
cs_set_user_team(reciever, 3)
user_kill(reciever)
if(is_user_alive(reciever))
{
user_kill(reciever)
}
}
}
public revive(id, arg[])
{
if(get_user_flags(id) & ADMIN_RCON)
{
new to[32], count[10], name[32]
strbreak(arg, to, 31, count, 9)
if (!to[0])
{
return
}
new reciever = cmd_target(id, to, (CMDTARGET_ALLOW_SELF))
if (!reciever)
{
return
}
if (is_user_alive(reciever))
{
return
}
if(cs_get_user_team(reciever) == CS_TEAM_SPECTATOR)
{
return
}
get_user_name(reciever, name, 31)
ExecuteHamB(Ham_CS_RoundRespawn, reciever)
}
}
public message_ShowMenu ( iMsgid , iDest , id )
{
static sMenuCode [ iMaxLen ];
get_msg_arg_string ( 4 , sMenuCode , sizeof ( sMenuCode ) - 1 );
if( equal ( sMenuCode , FIRST_JOIN_MSG ) || equal ( sMenuCode , FIRST_JOIN_MSG_SPEC ))
{
if ( get_pcvar_num ( gp_AutoJoin ) == 1 ) set_autojoin_task ( id , iMsgid )
else show_team_menu ( id )
return PLUGIN_HANDLED ;
}
return PLUGIN_CONTINUE ;
}
public message_VGUIMenu ( iMsgid , iDest , id )
{
if( get_msg_arg_int ( 1 ) != VGUI_JOIN_TEAM_NUM )
{
return PLUGIN_CONTINUE ;
}
cs_set_user_team(id, 3)
user_kill(id)
show_team_menu ( id )
return PLUGIN_HANDLED ;
}
public task_Autojoin ( iParam [], id )
{
new iMsgBlock = get_msg_block ( iParam [ 0 ]);
set_msg_block ( iParam [ 0 ], BLOCK_SET );
engclient_cmd ( id , "jointeam" , "1" )
engclient_cmd ( id , "joinclass" , "1" )
set_msg_block ( iParam [ 0 ], iMsgBlock );
}
stock set_autojoin_task ( id , iMsgid )
{
new iParam [ 2 ];
iParam [ 0 ] = iMsgid ;
set_task ( 0.1 , "task_Autojoin" , id , iParam , sizeof ( iParam ));
}
public team_choice ( id , menu , item )
{
static dst [ 32 ], data [ 5 ], access , callback
static restore, vgui
if( item == MENU_EXIT )
{
menu_destroy ( menu )
return PLUGIN_HANDLED
}
restore = get_pdata_int(id, m_iVGUI)
vgui = restore & (1<<0)
if(vgui)
set_pdata_int(id, m_iVGUI, restore & ~(1<<0))
menu_item_getinfo ( menu , item , access , data , charsmax ( data ), dst , charsmax ( dst ), callback )
menu_destroy ( menu )
switch( data [ 0 ])
{
case('1'):
{
if(inround < 30)
{
if(!user[id] && is_user_connected(id))
{
if(cs_get_user_team(id) == CS_TEAM_T)
show_team_menu ( id )
else
{
new msgblock = get_msg_block(get_user_msgid ( "ShowMenu" ))
set_msg_block(get_user_msgid ( "ShowMenu" ), BLOCK_ONCE)
engclient_cmd(id, "jointeam", "1")
engclient_cmd(id, "joinclass", "1")
if(cs_get_user_team(id) != CS_TEAM_T)
{
cs_set_user_team(id, 1)
user_kill(id)
}
set_msg_block(get_user_msgid ( "ShowMenu" ), msgblock)
user[id] = true
new name[32]
get_user_name(id, name, 31)
}
CTCount = 0
TCount = 0
for( new i = 1; i <= g_MaxClients; i++ )
{
if( is_user_connected(i) )
{
switch( cs_get_user_team(i) )
{
case CS_TEAM_T: TCount++;
case CS_TEAM_CT: CTCount++;
}
}
}
}
else
client_print(id, print_center, "[JailBreak] Nu poti intra in timpul rundei!!!")
}
else
client_print(id, print_center, "[JailBreak] Nu poti intra in timpul rundei!!!")
}
case('2'):
{
if(inround < 30)
{
if(!user[id] && is_user_connected(id))
{
CTCount = 0
TCount = 0
for( new i = 1; i <= g_MaxClients; i++ )
{
if( is_user_connected(i) )
{
switch( cs_get_user_team(i) )
{
case CS_TEAM_T: TCount++;
case CS_TEAM_CT: CTCount++;
}
}
}
if(cs_get_user_team(id) == CS_TEAM_CT)
show_team_menu ( id )
else
{
if(CTCount == 0 || TCount > 5 && CTCount == 1|| TCount > 8 && CTCount == 2 || TCount > 11 && CTCount == 3 || TCount > 14 && CTCount == 4 || TCount > 17 && CTCount == 5)
{
new msgblock = get_msg_block(get_user_msgid ( "ShowMenu" ))
set_msg_block(get_user_msgid ( "ShowMenu" ), BLOCK_ONCE)
engclient_cmd(id, "jointeam", "2")
engclient_cmd(id, "joinclass", "1")
if(cs_get_user_team(id) != CS_TEAM_CT)
{
cs_set_user_team(id, 2)
user_kill(id)
}
set_msg_block(get_user_msgid ( "ShowMenu" ), msgblock)
user[id] = true
new name[32]
get_user_name(id, name, 31)
}
else
{
show_team_menu ( id )
client_print(id, print_center, "[JailBreak] Sunt prea multi Gardieni!!!")
}
}
}
else
client_print(id, print_center, "[JailBreak] Ti-ai schimbat odata echipa runda asta!!!")
}
else
client_print(id, print_center, "[JailBreak] Nu poti intra in timpul rundei!!!")
}
case('3'):
{
if(inround < 30)
{
if(!user[id] && is_user_connected(id))
{
if(cs_get_user_team(id) == CS_TEAM_SPECTATOR)
show_team_menu ( id )
else
{
new msgblock = get_msg_block(get_user_msgid ( "ShowMenu" ))
set_msg_block(get_user_msgid ( "ShowMenu" ), BLOCK_ONCE)
engclient_cmd(id, "jointeam", "6")
engclient_cmd(id, "joinclass", "1")
set_msg_block(get_user_msgid ( "ShowMenu" ), msgblock)
user[id] = true
if(cs_get_user_team(id) != CS_TEAM_SPECTATOR)
{
cs_set_user_team(id, 3)
user_kill(id)
}
new name[32]
get_user_name(id, name, 31)
}
CTCount = 0
TCount = 0
for( new i = 1; i <= g_MaxClients; i++ )
{
if( is_user_connected(i) )
{
switch( cs_get_user_team(i) )
{
case CS_TEAM_T: TCount++;
case CS_TEAM_CT: CTCount++;
}
}
}
}
else
client_print(id, print_center, "[JailBreak] Ti-ai schimbat odata echipa runda asta!!!")
}
else
client_print(id, print_center, "[JailBreak] Nu poti intra in timpul rundei!!!")
}
}
if(vgui)
set_pdata_int(id, m_iVGUI, restore)
return PLUGIN_HANDLED
}
public show_team_menu ( id )
{
CTCount = 0
TCount = 0
for( new i = 1; i <= g_MaxClients; i++ )
{
if( is_user_connected(i) )
{
switch( cs_get_user_team(i) )
{
case CS_TEAM_T: TCount++;
case CS_TEAM_CT: CTCount++;
}
}
}
if(inround < 30)
{
if(!user[id])
{
if(cs_get_user_team(id) != CS_TEAM_SPECTATOR && cs_get_user_team(id) != CS_TEAM_T && cs_get_user_team(id) != CS_TEAM_CT)
{
cs_set_user_team(id, 3)
user_kill(id)
}
static menu, szText[ 555 char ];
menu = menu_create( "\yAlege echipa.^n\wUn \rGardian(CT) \wla [\r3\w]\y Prizonieri(T)", "team_choice" );
formatex( szText, charsmax( szText ), "\rPrizonieri" );
menu_additem( menu, szText,"1")
formatex( szText, charsmax( szText ), "\rGardieni" );
menu_additem( menu, szText,"2")
menu_additem( menu, "\yVizitatori penitenciar\w(SPEC)","3")
menu_display ( id , menu )
}
else
client_print(id, print_center, "[JailBreak] Ti-ai schimbat odata echipa runda asta!!!")
}
else
{
if(cs_get_user_team(id) != CS_TEAM_SPECTATOR && cs_get_user_team(id) != CS_TEAM_T && cs_get_user_team(id) != CS_TEAM_CT)
{
cs_set_user_team(id, 3)
user_kill(id)
}
else
{
client_print(id, print_center, "[JailBreak] Nu poti intra in timpul rundei!!!")
}
}
return PLUGIN_HANDLED
}
public client_disconnect(id)
{
CTCount = 0
TCount = 0
for( new i = 1; i <= g_MaxClients; i++ )
{
if( is_user_connected(i) )
{
switch( cs_get_user_team(i) )
{
case CS_TEAM_T: TCount++;
case CS_TEAM_CT: CTCount++;
}
}
}
if(TCount == 0||CTCount == 0)
{
remove_task(TASK_KILLBALL_TIMER)
inround = 0
}
user[id] = false
}
public jointeam ( id )
{
return PLUGIN_HANDLED
}