PHP Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <yap_const>
#include <yap_stocks>
#include <yap_natives>
#include <yap_forwards>
#include <yap_modspecific>
#define MAX_PLAYERS 32
#define TASK_TIMEREADY 120.0 // 2 minutos
new const plugin_author[] = "Twilight Suzuka"
new const plugin_name[] = "YAP-READY"
new const plugin_version[] = "2.0.0"
new bool:IsReady[MAX_PLAYERS + 1]
new pcvarToggle
CREATE_GEN_FORW_ID(pug_forward_ready);
public plugin_init()
{
// Rukia: Plugin definition
new p_id = register_plugin(plugin_name,plugin_version,plugin_author);
register_dictionary("yap_ready.txt")
register_clcmd("say .ready", "ready_1")
register_clcmd("say .listo", "ready_1")
register_clcmd("say .gaben", "ready_1")
register_clcmd("say_team .ready", "ready_1")
register_clcmd("say_team .listo", "ready_1")
register_clcmd("say_team .gaben", "ready_1")
register_concmd("amx_forceready","cmd_forceready",ADMIN_RCON,"<name or #userid> Forces a client to be ready")
register_concmd("amx_timeready","check_timeready",ADMIN_RCON,"<name or #userid> Forces a client to be unready")
pug_forward_ready = create_gen_forward("pug_all_ready",p_id,get_func_id("pug_ready_handler"))
//parse_header("BOE-E",pug_header,5)
register_event("ResetHUD","pug_keepup_menu","b")
pcvarToggle = register_cvar("ready_toggle", "1")
pug_change_display(get_func_id("pug_ready_display_really") , -1)
}
public ready_1(id)
{
new said[192]
read_args(said,192)
set_task(0.1,"ready_up",id)
return PLUGIN_CONTINUE
}
public ready_2(id)
{
new said[192]
read_args(said,192)
set_task(0.1,"ready_down",id)
return PLUGIN_CONTINUE
}
// Rukia: Ready variables
new pug_players_ready[33]
new pug_total_ready = 0;
// Rukia: make sure we keep up menu as much as possible, so that it updates correctly
public client_connect(id)
{
set_task(15.0,"pug_keepup_menu")
}
public client_putinserver(id)
{
pug_keepup_menu()
if(get_pcvar_num(pcvarToggle) && !is_user_hltv(id))
{
IsReady[id] = false
set_task(TASK_TIMEREADY, "task_kickplayer", id)
}
}
// Rukia: If someone disconnects, we need to take them out of the line up, and make sure that everything is cool
public client_disconnect(id)
{
if( GET_PUG_STAGE() != PUG_STAGE_READY ) return;
if(pug_players_ready[id])
{
pug_players_ready[id] = 0;
pug_total_ready--;
}
IsReady[id] = false
remove_task(id)
pug_keepup_menu()
}
// Rukia: Make sure to change HUD when people change names
public client_infochanged(id) set_task(0.1,"pug_keepup_menu")
// Rukia: Dynamic native code
public plugin_natives()
{
register_native("pug_ready_players","native_pug_ready_players")
register_native("register_ready_display","native_register_ready_display")
}
public native_pug_ready_players(id,params)
{
new p_id = get_param(2)
pug_ready_players(get_param(1),(p_id == -1) ? id : p_id)
}
public native_register_ready_display(id,params)
{
new p_id = get_param(2)
pug_change_display(get_param(1),(p_id == -1) ? id : p_id)
}
public cmd_forceready(id,level,cid)
{
if (!cmd_access(id, level, cid, 2) ) return PLUGIN_HANDLED;
static victim_arg[32]
read_argv(1,victim_arg,31)
if(equali(victim_arg,"all")) return cmd_force_all_ready(id);
new target = cmd_target(id,victim_arg,1)
if (!target) return PLUGIN_HANDLED
pug_admin_cmd_c(id,"PugForceReady","PUG_FORCE_READY",target,ready_up(target));
return PLUGIN_HANDLED;
}
public cmd_forceunready(id,level,cid)
{
if (!cmd_access(id, level, cid, 2) ) return PLUGIN_HANDLED;
static victim_arg[32]
read_argv(1,victim_arg,31)
if(equali(victim_arg,"all")) return cmd_force_all_unready(id);
new target = cmd_target(id,victim_arg,1)
if (!target) return PLUGIN_HANDLED
pug_admin_cmd_c(id,"PugForceUnReady","PUG_FORCE_UNREADY",target,ready_down(target));
return PLUGIN_HANDLED;
}
public cmd_force_all_ready(id)
{
static Players[32]
new playerCount, i
get_players(Players, playerCount, "h")
for (i=0; i<playerCount; i++) ready_up(Players[i])
pug_admin_cmd(id,"PugForceAllReady","PUG_FORCE_ALL_READY",1);
return PLUGIN_HANDLED
}
public cmd_force_all_unready(id)
{
static Players[32]
new playerCount, i
get_players(Players, playerCount, "h")
for (i=0; i<playerCount; i++) ready_down(Players[i])
pug_admin_cmd(id,"PugForceAllUnReady","PUG_FORCE_ALL_UNREADY",1);
return PLUGIN_HANDLED
}
public check_timeready(id,level,cid)
{
if (!cmd_access(id, level, cid, 2) ) return PLUGIN_HANDLED;
static victim_arg[32]
read_argv(1,victim_arg,31)
if(equali(victim_arg,"all")) return check_all_timeready(id);
new target = cmd_target(id,victim_arg,1)
if (!target) return PLUGIN_HANDLED
return PLUGIN_HANDLED;
}
public check_all_timeready(id)
{
static Players[32]
new playerCount, i
get_players(Players, playerCount, "h")
for (i=0; i<playerCount; i++) client_putinserver(Players[i])
return PLUGIN_HANDLED
}
// Rukia: Ready code
public pug_ready_funcid;
public pug_ready_plugin_id;
public pug_ready_prev_stage;
// Rukia: save the handler function
pug_ready_players(f_id, p_id = -1) {
if(GET_PUG_STAGE() == PUG_STAGE_READY) return;
pug_ready_funcid = f_id;
pug_ready_plugin_id = p_id;
pug_start_ready_players()
}
// Rukia: Save state, sub in our own, and start the ready!
public pug_start_ready_players()
{
if(GET_PUG_STATUS() != PUG_STATUS_LIVE) return pug_set_pause_call(get_func_id("pug_start_ready_players"));
pug_ready_prev_stage = GET_PUG_STAGE();
SET_PUG_STAGE(PUG_STAGE_READY);
SET_PUG_STATUS(PUG_STATUS_WAITING);
arrayset(pug_players_ready,0,33)
pug_total_ready = 0;
pug_msg_tmp_empty(0,"PUG_READY_UP")
pug_keepup_menu()
return 1;
}
public ready_up(id)
{
if((pug_players_ready[id] == 1) || GET_PUG_STATUS() != PUG_STATUS_WAITING || GET_PUG_STAGE() != PUG_STAGE_READY || is_user_hltv(id) )
{
return pug_msg_tmp_ready_empty(id,"PUG_READY_READY")
}
pug_players_ready[id] = 1;
pug_total_ready++;
static name[32]
get_user_name(id,name,31)
IsReady[id] = true
remove_task(id)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_PLAYER_READYED",name);
pug_check_ready();
return PLUGIN_HANDLED;
}
public ready_down(id)
{
if((pug_players_ready[id] == 0) || GET_PUG_STATUS() != PUG_STATUS_WAITING || GET_PUG_STAGE() != PUG_STAGE_READY || is_user_hltv(id))
{
return pug_msg_tmp_ready_empty(id,"PUG_READY_NOTREADY")
}
pug_players_ready[id] = 0;
pug_total_ready--;
pug_ready_display(9999.0)
static name[32]
get_user_name(id,name,31)
set_task(TASK_TIMEREADY, "task_kickplayer", id)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_PLAYER_UNREADYED",name);
return PLUGIN_HANDLED;
}
public task_kickplayer(id)
{
server_cmd( "kick #%i ^"You must ready up within 2 minutes.^"", get_user_userid(id) )
}
public pug_keepup_menu()
{
if(GET_PUG_STAGE() == PUG_STAGE_READY)
{
pug_ready_display(99999.0)
}
}
public pug_check_ready()
{
if(pug_total_ready >= GET_CVAR_MINPLAYERS() )
{
pug_ready_display(1.0)
pug_ready()
}
else pug_ready_display(9999.0)
}
public pug_ready_display_funcid
public pug_ready_display_plugin_id
public pug_change_display(f_id, p_id)
{
pug_ready_display_funcid = f_id;
pug_ready_display_plugin_id = p_id;
pug_keepup_menu()
}
// Rukia: NOTE TO DO: Allow for subbing in own ready display in other plugins.
public pug_ready_display(Float:hold_time)
{
callfunc_begin_i(pug_ready_display_funcid,pug_ready_display_plugin_id)
callfunc_push_float(hold_time)
callfunc_end()
}
public pug_ready_display_really(Float:hold_time)
{
static readys[1056], notreadys[1056], name[32]
readys[0] = '^0'
notreadys[0] = '^0'
static Players[32]
new playerCount, i, player
get_players(Players, playerCount, "ch")
for (i=0; i<playerCount; i++)
{
player = Players[i]
get_user_name(player,name,31)
if(pug_players_ready[player]) format(readys,1054,"%s%s^n",readys,name)
else format(notreadys,1054,"%s%s^n",notreadys,name)
}
new minplayers = GET_CVAR_MINPLAYERS()
set_hudmessage(0, 255, 0, 0.76, 0.09, 0, 0.0, hold_time, 0.0, 0.0, 3)
show_hudmessage(0,"Players Not Ready:",pug_get_players() - pug_total_ready,minplayers )
set_hudmessage(0, 255, 0, 0.76, 0.54, 0, 0.0, hold_time, 0.0, 0.0, 2)
show_hudmessage(0,"Players Ready:",pug_total_ready,minplayers)
set_hudmessage(255, 255, 225, 0.76, 0.58, 0, 0.0, hold_time, 0.0, 0.0, 1)
show_hudmessage(0,readys,1055)
set_hudmessage(255, 255, 225, 0.76, 0.13, 0, 0.0, hold_time, 0.0, 0.0, 4)
show_hudmessage(0,notreadys,1055)
}
// Rukia: We are ready to go! Tell everyone!
public pug_ready()
{
if(GET_PUG_STAGE() != PUG_STAGE_READY) return 0;
else if(GET_PUG_STATUS() != PUG_STATUS_WAITING) return pug_set_pause_call(get_func_id("pug_ready"));
execute_gen_forward(pug_forward_ready)
return 1;
}
// Rukia: Restore state, tell everyone we are ready, and call the handler function!
public pug_ready_handler()
{
if(GET_PUG_STATUS() != PUG_STATUS_WAITING) return pug_set_pause_call(get_func_id("pug_ready_handler"));
SET_PUG_STATUS(PUG_STATUS_LIVE);
SET_PUG_STAGE(pug_ready_prev_stage);
callfunc_begin_i(pug_ready_funcid,pug_ready_plugin_id)
callfunc_end()
return 1;
}