/* AMX Mod X
* Custom Team Select Menu
* Code By baby
* Credits:
* VEN(Borrowed some code from his Auto Join on Connect <!-- s:D --><img src=\"{SMILIES_PATH}/icon_e_biggrin.gif\" alt=\":D\" title=\"nagyon boldog\" /><!-- s:D -->)
*
*/
#include <amxmodx>
#define PLUGIN_NAME "custom team select menu"
#define PLUGIN_VERSION "0.10"
#define PLUGIN_AUTHOR "baby"
#define TEAM_SELECT_VGUI_MENU_ID 2
new bool:g_unassigned[33]
new bool:g_changed[33]
new g_msgid[33]
new p_allow_spectators
new p_teambalance
new p_limitteams
new bool:g_allow_t
new bool:g_allow_ct
new bool:g_allow_spec
new g_num_t, g_num_ct
#define Keysmenu_1 (1<<0)|(1<<1)|(1<<4)|(1<<5)|(1<<9) // Keys: 12560
#define Keysmenu_2 (1<<0)|(1<<1)|(1<<4)|(1<<5)|(1<<9) // Keys: 12560
public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_message(get_user_msgid("ShowMenu"), "message_show_menu")
register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")
register_menucmd(register_menuid("mainmenu"), Keysmenu_1, "_menu_chooseteam")
register_logevent("hook_roundstart",2,"1=Round_Start")
p_allow_spectators = get_cvar_pointer("allow_spectators")
p_teambalance = get_cvar_pointer( "mp_autoteambalance" )
p_limitteams = get_cvar_pointer( "mp_limitteams" )
register_clcmd("chooseteam", "hook_chooseteam")
}
public plugin_precache()
{
precache_model("models/player/ara/ara.mdl")
precache_model("models/player/gerrard/gerrard.mdl")
precache_model("models/player/jennifer/jennifer.mdl")
precache_model("models/player/marineboy/marineboy.mdl")
precache_model("models/player/marinegirl/marinegirl.mdl")
precache_model("models/player/natasha/natasha.mdl")
precache_model("models/player/pirateboy/pirateboy.mdl")
precache_model("models/player/pirategirl/pirategirl.mdl")
precache_model("models/player/spetsnaz/spetsnaz.mdl")
}
public hook_roundstart()
{
for (new i = 1; i < 33; i++)
{
g_changed[i] = false
}
}
public client_connect(id)
{
g_changed[id] = false
g_unassigned[id] = true
}
public client_disconnect(id)
{
g_changed[id] = false
g_unassigned[id] = true
}
public hook_chooseteam(id)
{
menu_chooseteam(id)
return PLUGIN_HANDLED
}
stock team_join(id, team[] = "5")
{
new menu_msgid = g_msgid[id]
new msg_block = get_msg_block(menu_msgid)
set_msg_block(menu_msgid, BLOCK_SET)
engclient_cmd(id, "jointeam", team)
set_msg_block(menu_msgid, msg_block)
}
public menu_choosemodel_t(id)
{
new fejlec[64]
format(fejlec,63,"\wTDM: \rChoose a class")
menu[id]=menu_create(fejlec,"_menu_choosemodel_t")
menu_additem(menu[id], "\wPhoenix Connexion", "1", 0)
menu_additem(menu[id], "\wElite Crew", "2", 0)
menu_additem(menu[id], "\wArctic Avengers", "3", 0)
menu_additem(menu[id], "\wGuerilla Warfare", "4", 0)
menu_additem(menu[id], "\wMidwest Militia", "5", 0)
menu_additem(menu[id], "\wAsia Red Army", "6", 0)
menu_additem(menu[id], "\wJennifer", "7", 0)
menu_additem(menu[id], "\wMichaela", "8", 0)
menu_additem(menu[id], "\wRaven", "9", 0)
menu_display(id, menu[id], 0)
menu_setprop(menu[id],MPROP_EXIT,MEXIT_ALL)
}
public _menu_choosemodel_t(id, menu, item)
{
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data)
switch(key)
{
case 1:
{
cs_set_user_model(id, "terror")
}
case 2:
{
cs_set_user_model(id, "leet")
}
case 3:
{
cs_set_user_model(id, "artic")
}
case 4:
{
cs_set_user_model(id, "guerilla")
}
case 5:
{
cs_set_user_model(id, "terror")
}
case 6:
{
cs_set_user_model(id, "ara")
}
case 7:
{
cs_set_user_model(id, "jennifer")
}
case 8:
{
cs_set_user_model(id, "pirategirl")
}
case 9:
{
cs_set_user_model(id, "pirateboy")
}
}
g_changed[id] = true
g_unassigned[id] = false
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public menu_choosemodel_ct(id)
{
new fejlec[64]
format(fejlec,63,"\wTDM: \rChoose a class")
menu[id]=menu_create(fejlec,"_menu_choosemodel_ct")
menu_additem(menu[id], "\wSEAL Team 6", "1", 0)
menu_additem(menu[id], "\wGSG-9", "2", 0)
menu_additem(menu[id], "\wSAS", "3", 0)
menu_additem(menu[id], "\wGIGN", "4", 0)
menu_additem(menu[id], "\wSPETSNAZ", "5", 0)
menu_additem(menu[id], "\wNatasha", "6", 0)
menu_additem(menu[id], "\wGerrard", "7", 0)
menu_additem(menu[id], "\wLucia", "8", 0)
menu_additem(menu[id], "\wEnzo", "9", 0)
menu_display(id, menu[id], 0)
menu_setprop(menu[id],MPROP_EXIT,MEXIT_ALL)
}
public _menu_choosemodel_ct(id, menu, item)
{
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data)
switch(key)
{
case 1:
{
cs_set_user_model(id, "urban")
}
case 2:
{
cs_set_user_model(id, "gsg9")
}
case 3:
{
cs_set_user_model(id, "sas")
}
case 4:
{
cs_set_user_model(id, "gign")
}
case 5:
{
cs_set_user_model(id, "spetsnaz")
}
case 6:
{
cs_set_user_model(id, "natasha")
}
case 7:
{
cs_set_user_model(id, "gerrard")
}
case 8:
{
cs_set_user_model(id, "marinegirl")
}
case 9:
{
cs_set_user_model(id, "marineboy")
}
}
g_changed[id] = true
g_unassigned[id] = false
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public menu_chooseteam(id)
{
if (is_user_connected(id) && !is_user_bot(id) && !is_user_hltv(id))
{
check_teams(id)
new text[512], len
len = format(text, 511,"\yTeam Select Spect^n^n")
if (g_changed[id])
{
len += format(text[len], 511 - len, "\wTDM: Can only be replaced once a team^n")
len += format(text[len], 511 - len, "\d1. Terrorist Force^n")
len += format(text[len], 511 - len, "\d2. Counter-Terrorist Force^n")
len += format(text[len], 511 - len, "\d5. Auto-select^n")
len += format(text[len], 511 - len, "\d6. Spectator^n^n")
}
else
{
len += format(text[len], 511 - len, "\rTDM: Select your appearance^n")
len += format(text[len], 511 - len, "\r1. \wTerrorist Force^n")
len += format(text[len], 511 - len, "\r2. \wCounter-Terrorist Force^n")
len += format(text[len], 511 - len, "\r5. \wAuto-select^n")
}
if ((g_allow_spec && !g_changed[id]))
{
len += format(text[len], 511 - len, "\r6. \wSpectator^n^n")
len += format(text[len], 511 - len, "^n\r0. Exit^n")
show_menu(id, Keysmenu_1, text, -1, "mainmenu")
}
else
{
len += format(text[len], 511 - len, "^n\r0. Exit^n")
show_menu(id, Keysmenu_2, text, -1, "mainmenu")
}
}
}
public _menu_chooseteam(id, key)
{
check_teams(id)
switch(key)
{
case 0:
{
if (g_allow_t && !g_changed[id])
{
team_join(id, "1")
menu_choosemodel_t(id)
}
//set_force_team_join_task(id, g_msgid[id])
}
case 1:
{
if (g_allow_ct && !g_changed[id])
{
team_join(id, "2")
menu_choosemodel_ct(id)
}
//Send them to the submenu
}
case 4:
{
if (!g_changed[id])
{
if (g_allow_t && g_allow_ct)
{
if (get_systime() % 2)
{
team_join(id, "1")
menu_choosemodel_t(id)
}
else
{
team_join(id, "2")
menu_choosemodel_ct(id)
}
}
else if (g_allow_t)
{
team_join(id, "1")
menu_choosemodel_t(id)
//Send them to the submenu
}
else if (g_allow_ct)
{
team_join(id, "2")
menu_choosemodel_ct(id)
}
}
}
case 5:
{
if (!g_changed[id])
{
force_team_join(id, g_msgid[id], "6", _)
}
//Send them to the submenu
}
case 9:
{
return PLUGIN_HANDLED;
}
}
return PLUGIN_HANDLED;
}
public message_show_menu(msgid, dest, id) {
static team_select[] = "#Team_Select"
static menu_text_code[sizeof team_select]
get_msg_arg_string(4, menu_text_code, sizeof menu_text_code - 1)
//
//server_print("Graphic menu");
if (!equal(menu_text_code, team_select))
return PLUGIN_CONTINUE
g_msgid[id] = msgid
menu_chooseteam(id)
return PLUGIN_HANDLED
}
public message_vgui_menu(msgid, dest, id) {
if (get_msg_arg_int(1) != TEAM_SELECT_VGUI_MENU_ID)
return PLUGIN_CONTINUE
//
//server_print("VGUI menu");
g_msgid[id] = msgid
menu_chooseteam(id)
return PLUGIN_HANDLED
}
public check_teams(id)
{
g_allow_t= true
g_allow_ct = true
new playerst[32], playersct[32]
get_players(playerst, g_num_t, "eh", "TERRORIST")
get_players(playersct, g_num_ct, "eh", "CT")
if (get_pcvar_num(p_allow_spectators) && (g_num_t + g_num_ct > 1 || g_unassigned[id]))
{
g_allow_spec = true
}
else
{
g_allow_spec = false
}
if (get_user_team(id) == 2)//ct
{
g_num_ct--
}
else if (get_user_team(id) == 1)//t
{
g_num_t--
}
if (get_pcvar_num(p_teambalance))
{
new limit = get_pcvar_num(p_limitteams)
if (g_num_t - g_num_ct >= limit)
{
g_allow_t = false
}
else if (g_num_ct - g_num_t >= limit)
{
g_allow_ct = false
}
}
}
stock force_team_join(id, menu_msgid, team[] = "5", class[] = "0") {
static jointeam[] = "jointeam"
if (class[0] == '0') {
engclient_cmd(id, jointeam, team)
g_changed[id] = true
g_unassigned[id] = false
return
}
static msg_block, joinclass[] = "joinclass"
msg_block = get_msg_block(menu_msgid)
set_msg_block(menu_msgid, BLOCK_SET)
engclient_cmd(id, jointeam, team)
engclient_cmd(id, joinclass, class)
set_msg_block(menu_msgid, msg_block)
g_changed[id] = true
g_unassigned[id] = false
}