#include <amxmodx>
new g_iPauseVotesCT; // Contador de votos de pausa para CT
new g_iPauseVotesT; // Contador de votos de pausa para T
new g_iPauseInProgressCT[33]; // Indica si una pausa está en curso para CT
new g_iPauseInProgressT[33]; // Indica si una pausa está en curso para T
new g_fOriginalFreezeTime; // Almacena el valor original del "freezetime"
new g_bPausaTacticaSolicitadaCT; //Indica si hay una pausa solicitada por los CT
new g_bPausaTacticaSolicitadaT; //Indica si hay una pausa solicitada por los T
new g_iVotesRequired; // Número mínimo de votos requeridos por equipo
new g_iPauseTime; // Tiempo de la pausa tactica
new g_bHasVoted[33]; // Array para rastrear si un jugador ha votado
public plugin_init()
{
register_plugin("Pausa Tactica", "1.0", "acetatomil");
register_clcmd("say .pausa", "cmdPause");
register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
g_iVotesRequired = register_cvar("votes_required", "1");
g_iPauseTime = register_cvar("pause_time", "60");
g_fOriginalFreezeTime = get_cvar_num("mp_freezetime");
g_iVotesRequired = get_cvar_pointer("votes_required");
g_iPauseTime = get_cvar_pointer("pause_time");
for (new i = 0; i < sizeof(g_bHasVoted); i++) //Reiniciar contador individual
g_bHasVoted[i] = false;
}
public cmdPause(id)
{
new pName[32];
get_user_name(id,pName,31);
if(is_user_alive(id))
{
if(g_bPausaTacticaSolicitadaCT || g_bPausaTacticaSolicitadaT)
client_print(id, print_chat, "La votacion de pausa tactica esta cerrada, dado que, los %s ya la han solicitado para la siguiente ronda.", (g_bPausaTacticaSolicitadaCT ? "CT" : "T"));
else if(get_user_team(id) == 2 && !g_iPauseInProgressCT[id])
{
if(!g_bHasVoted[id])
{
g_iPauseVotesCT++;
g_bHasVoted[id] = true;
if(g_iPauseVotesCT >= get_pcvar_num(g_iVotesRequired))
{
g_iPauseInProgressCT[id] = true;
g_bPausaTacticaSolicitadaCT = true;
client_print(0, print_chat, "Se confirmo una pausa tactica para los CT en la siguiente ronda.");
PausarJuego(id);
}
client_print(0, print_chat, "%s hizo voto de pausa tactica! %d/%d", pName, g_iPauseVotesCT, get_pcvar_num(g_iVotesRequired));
}
else
client_print(id, print_chat, "Ya haz solicitado tu voto.");
return PLUGIN_HANDLED;
}
else if(get_user_team(id) == 1 && !g_iPauseInProgressT[id])
{
if(!g_bHasVoted[id])
{
g_iPauseVotesT++;
g_bHasVoted[id] = true;
if(g_iPauseVotesT >= get_pcvar_num(g_iVotesRequired))
{
g_iPauseInProgressT[id] = true;
g_bPausaTacticaSolicitadaT = true;
client_print(0, print_chat, "Se confirmo una pausa tactica para los T en la siguiente ronda.");
PausarJuego(id);
}
client_print(0, print_chat, "%s hizo voto de pausa tactica! %d/%d", pName, g_iPauseVotesT, get_pcvar_num(g_iVotesRequired));
}
else
client_print(id, print_chat, "Ya haz solicitado tu voto.");
return PLUGIN_HANDLED;
}
}
return PLUGIN_HANDLED;
}
public PausarJuego(id)
{
g_iPauseInProgressCT[id] = false;
g_iPauseInProgressT[id] = false;
set_cvar_num("mp_freezetime", (get_pcvar_num(g_iPauseTime) + g_fOriginalFreezeTime));
}
public event_new_round()
{
set_task(2.0, "updateFreeze");
}
public updateFreeze(id)
{
for (new i = 0; i < sizeof(g_bHasVoted); i++) //Reiniciar contador individual
g_bHasVoted[i] = false;
g_bPausaTacticaSolicitadaCT = false;
g_bPausaTacticaSolicitadaT = false;
g_iPauseVotesCT = 0; // Reiniciar contador de votos CT
g_iPauseVotesT = 0; // Reiniciar contador de votos T
set_cvar_num("mp_freezetime", g_fOriginalFreezeTime);
}