PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>
#include <yap_forwards>
#include <yap_natives>
#include <yap_stocks>
#include <yap_const>
new const plugin_author[] = "Twilight Suzuka"
new const plugin_name[] = "YAP-CS"
new const plugin_version[] = "0.0.1"
new mp_limitteams;
public pug_cvar_shield;
public pug_cvar_allow_spec;
public pug_cvar_switch_delay
public pug_cvar_force_restart
public plugin_init()
{
register_plugin(plugin_name,plugin_version,plugin_author);
register_clcmd("shield","block_shield")
register_dictionary("yap.txt")
register_dictionary("yap_mod.txt")
pug_cvar_shield = register_cvar("pug_noshield","1")
pug_cvar_switch_delay = register_cvar("pug_switch_delay","5")
pug_cvar_force_restart = register_cvar("pug_force_restart","0")
register_event("HLTV", "round_start", "a", "1=0", "2=0")
//register_logevent("round_start", 2, "1=Round_Start")
register_event("SendAudio", "t_won", "a", "2&%!MRAD_terwin")
register_event("SendAudio", "ct_won", "a", "2&%!MRAD_ctwin")
register_event("SendAudio","x_won","a","2=%!MRAD_terwin","2=%!MRAD_ctwin")
register_logevent("round_end", 2, "1=Round_End")
register_event("ResetHUD","event_resethud","b")
// Rukia: Check to see if they try to buy a shield
register_menucmd(register_menuid("BuyItem", 1 ),511,"blockmenu")
register_menucmd(-34,511,"blockmenu")
// Rukia: Manipulate team joining
register_menucmd(register_menuid("Team_Select",1),(1<<0)|(1<<1)|(1<<4)|(1<<5),"team_select")
register_menucmd(-2,(1<<0)|(1<<1)|(1<<4)|(1<<5),"team_select")
register_clcmd("jointeam","join_team")
//parse_header("BOE-E",pug_header,5)
}
public plugin_cfg()
{
pug_register_team("Terrorists")
pug_register_team("Counter-Terrorists")
set_task(0.5,"get_mp_cvar")
}
public get_mp_cvar()
{
mp_limitteams = get_cvar_pointer ( "mp_limitteams" )
pug_cvar_allow_spec = get_cvar_pointer("pug_allowspec")
}
public plugin_natives()
{
register_native("pug_get_players","pug_get_players")
register_native("pug_teams_randomize","cs_teams_randomize")
register_native("pug_teams_balance","cs_teams_balance")
register_native("pug_get_client_team","cs_get_client_team")
register_native("pug_set_client_team","cs_set_client_team")
}
public cs_get_client_team()
{
return _:cs_get_user_team(get_param(1));
}
public cs_set_client_team()
{
cs_set_user_team(get_param(1),_:get_param(2));
}
public force_restart()
{
server_cmd("sv_restartround 1")
server_exec()
}
public cs_teams_randomize()
{
static Players[32]
new playerCount, i, player
get_players(Players, playerCount, "ch")
new type = 0;
for (i=0; i<playerCount; i++)
{
player = Players[i]
switch ( cs_get_user_team(player) )
{
case 1:
{
if(type == 0) { type = random_num(1,2); cs_set_user_team(player,_:type); }
else { cs_set_user_team(player,(type == 1) ? 2 : 1); type = 0; }
}
case 2:
{
if(type == 0) { type = random_num(1,2); cs_set_user_team(player,_:type); }
else { cs_set_user_team(player,(type == 1) ? 2 : 1); type = 0; }
}
}
}
if(get_pcvar_num(pug_cvar_force_restart)) force_restart()
}
public cs_teams_balance()
{
static Players[32]
new playerCount, i, player
get_players(Players, playerCount, "ch")
new a, b, a_player, b_player;
for (i=0; i<playerCount; i++)
{
player = Players[i]
switch ( cs_get_user_team(player) )
{
case 1: { ++a; a_player = player; }
case 2: { ++b; b_player = player; }
}
}
if(a == b) return;
else if( (a + 2) == b) cs_set_user_team(a_player,_:2)
else if( (b + 2) == a) cs_set_user_team(b_player,_:1)
else if( (a+b) < GET_CVAR_MINPLAYERS() )
{
a = pug_get_team_score(1)
b = pug_get_team_score(2)
if(a < b) cs_set_user_team(b_player,_:1)
else if(b < a) cs_set_user_team(a_player,_:2)
}
}
public pug_get_players()
{
static Players[32]
new playerCount, i, player
get_players(Players, playerCount, "ch")
new players = 0;
for (i=0; i<playerCount; i++)
{
player = Players[i]
switch ( cs_get_user_team(player) )
{
case 1: ++players;
case 2: ++players;
}
}
return players;
}
public event_resethud(id) cs_reset_user_model(id)
public block_shield(id)
{
if(get_pcvar_num(pug_cvar_shield) == 1)
{
//client_print(id,print_center,shield_disabled)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public blockmenu(id,key)
{
if( (key == 7) && (get_pcvar_num(pug_cvar_shield) == 1) )
{
//client_print(id,print_center,shield_disabled)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
new who_won
public t_won()
{
if(who_won != -1) who_won = 1
}
public ct_won()
{
if(who_won != -1) who_won = 2
}
public x_won()
{
if(who_won == -1) return;
static msg[32]
read_data(2,msg,32)
if(containi(msg,"ct") != -1) who_won = 2;
else if(containi(msg,"ter") != -1) who_won = 1;
}
public round_end()
{
pug_call_roundend((who_won == -1) ? 0 : who_won);
who_won = -1;
}
public round_start()
{
who_won = 0
pug_call_roundstart();
}
public pug_intermission(GEN_FORW_ID(forward_id))
{
switch_teams()
}
public pug_ot_intermission(GEN_FORW_ID(forward_id))
{
switch_teams()
}
public switch_teams()
{
set_task(get_pcvar_float(pug_cvar_switch_delay),"switch_teams_really")
}
public switch_teams_really()
{
new score = pug_get_team_score(1)
pug_set_team_score(1,pug_get_team_score(2) )
pug_set_team_score(2,score)
static limitt
limitt = get_pcvar_num(mp_limitteams)
set_pcvar_num(mp_limitteams,0)
static Players[32]
new playerCount, i, player
get_players(Players, playerCount, "ch")
for (i=0; i<playerCount; i++)
{
player = Players[i]
switch ( cs_get_user_team(player) )
{
case 1: cs_set_user_team(player,_:2);
case 2: cs_set_user_team(player,_:1);
}
}
set_pcvar_num(mp_limitteams,limitt)
if(get_pcvar_num(pug_cvar_force_restart)) force_restart()
}
public join_team(id)
{
new arg[2]
read_argv(1,arg,1)
return check_team(id,str_to_num(arg))
}
public team_select(id,key) return check_team(id,key+1)
public check_team(id,newteam)
{
new players = pug_get_players()
new oldteam = _:cs_get_user_team(id)
// Rukia: We allow spectators and such in, but they can't join the teams.
new min_players = GET_CVAR_MINPLAYERS()
if( (players >= min_players ) && (oldteam != 1) && (oldteam != 2) )
{
return pug_msg_tmp_empty(id,"PUG_FULL")
}
// Rukia: If its live, we can slot people in, but we shouldn't let people change teams.
else if(GET_PUG_STATUS() == PUG_STATUS_LIVE)
{
if( (oldteam == 1) || (oldteam == 2) ) return pug_msg_tmp_empty(id,"PUG_SELECTTEAM_NOSWITCH")
}
// Rukia: Don't let them go to spec unless they are admin!
else if(newteam == 6)
{
if(access(id,PUG_CMD_LVL) || get_pcvar_num(pug_cvar_allow_spec) ) return PLUGIN_CONTINUE
pug_msg_tmp_empty(id,"PUG_SELECTTEAM_NOSPC")
engclient_cmd(id,"chooseteam")
return PLUGIN_HANDLED
}
// Rukia: Also, no switching to same team.
else if(oldteam == newteam) return pug_msg_tmp_empty(id,"PUG_SELECTTEAM_SAMETEAM")
static Players[32]
new playerCount, i, player
get_players(Players, playerCount, "ch")
new t_players, ct_players
for (i=0; i<playerCount; i++)
{
player = Players[i]
switch ( cs_get_user_team(player) )
{
case 1: ++t_players;
case 2: ++ct_players;
}
}
if( (newteam == 1) && ( t_players == (min_players / 2) ) )
{ return pug_msg_tmp_empty(id,"PUG_SELECTTEAM_TEAMFULL"); }
if( (newteam == 2) && ( ct_players == (min_players / 2) ) )
{ return pug_msg_tmp_empty(id,"PUG_SELECTTEAM_TEAMFULL"); }
// Rukia: Lets hope the CS auto balancer can figure out what we want
else if(newteam == 5)
{
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}