Competitive V1.2

Created Diff never expires
69 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
1151 lines
51 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
1134 lines
#include <amxmodx>
#include <amxmodx>
#include <hamsandwich>
#include <hamsandwich>
#include <fakemeta>
#include <fakemeta>
#include <reapi>
#include <reapi>
#include <celltrie>


#define PLUGIN "PUG MOD"
#define PLUGIN "PUG MOD"
#define VERSION "1.0"
#define VERSION "1.2"
#define AUTHOR "Sugisaki"
#define AUTHOR "Sugisaki"


#define END_ROUND_KNIFE_FIX
#define END_ROUND_KNIFE_FIX


new TASK_HUD_READY = 552214
new TASK_HUD_READY = 552214
new TASK_HUD_VOTE = 996541
new TASK_HUD_VOTE = 996541
new TASK_END_VOTE = 441017
new TASK_END_VOTE = 441017
new TASK_PUG_END = 778745
new TASK_PUG_END = 778745


new const TAG[] = "[Pug Mod]"
new const TAG[] = "[Pug Mod]"


enum _:PUGSTATE
enum _:PUGSTATE
{
{
NO_ALIVE = 0,
NO_ALIVE = 0,
ALIVE,
ALIVE,
COMMENCING
COMMENCING
}
}


enum _:PUG_ROUND
enum _:PUG_ROUND
{
{
TT = 0,
TT = 0,
CT
CT
}
}




new Trie:t_Command
new Trie:t_Command
new Trie:t_Command_Plugin
new Trie:t_Command_Plugin
new pug_state
new pug_state
new g_PluginId
new g_PluginId
new iMaxPlayers
new iMaxPlayers
new bool:ready[33]
new bool:ready[33]
new ready_count
new ready_count
new HamHook:SpawnWeapon
new HamHook:SpawnWeapon
new HamHook:DefuseKit
new HamHook:DefuseKit
new HamHook:PlayerPostink
new HamHook:PlayerPostink
new HamHook:PlayerSpawn
new HamHook:PlayerSpawn
new bool:vote_map
new bool:vote_map
new g_vote_id
new g_vote_id
new g_pcvar_votemap
new g_pcvar_votemap
new g_vote_countdown
new g_vote_countdown
new bool:private
new bool:private
new Trie:g_private
new Trie:g_private
new bool:round_knife
new bool:round_knife


new Sync1
new Sync1
new Sync2
new Sync2
new Sync3
new Sync3
new Sync4
new Sync4
new pcvar_max_players
new pcvar_max_players


new g_iDmg[33][33]
new g_iDmg[33][33]
new g_iHits[33][33]
new g_iHits[33][33]


new Array:g_maps
new Array:g_maps
new g_votes[32]
new g_votes[32]
new g_iRound_team[2]
new g_iRound_team[2]
new g_iRounds
new g_iRounds
new g_iFrags[33]
new g_iFrags[33]
new g_iDeaths[33]
new g_iDeaths[33]


new g_vote_count
new g_vote_count


new g_VoteMenu
new g_VoteMenu


new gMsgStatusIcon
new gMsgStatusIcon
new gMsgRegisterStatusIcon
new gMsgRegisterStatusIcon


new gMsgServerName
new gMsgServerName
new gMsgTextMsg
new gMsgTextMsg
new gMsgScoreInfo
new gMsgScoreInfo
new gMsgTeamScore


new bool:is_intermission
new bool:is_intermission


new SND_MUSIC[][] =
new SND_MUSIC[][] =
{
{
"sound/pug/music1.mp3"
"sound/pug/music1.mp3"
}
}
new SND_COUNTER_BEEP[] = "sound/UI/buttonrollover.wav"
new SND_COUNTER_BEEP[] = "sound/UI/buttonrollover.wav"
new SND_STINGER[] = "sound/pug/cs_stinger.wav"
new SND_STINGER[] = "sound/pug/cs_stinger.wav"


enum _:CMDS
enum _:CMDS
{
{
COMMAND[32],
COMMAND[32],
VALUE[10]
VALUE[10]
}
}


new Pregame_Cmds[][CMDS] =
new Pregame_Cmds[][CMDS] =
{
{
{"mp_forcerespawn", "1"},
{"mp_forcerespawn", "1"},
{"mp_round_infinite", "acdefg"},
{"mp_round_infinite", "acdefg"},
{"mp_auto_reload_weapons", "1"},
{"mp_auto_reload_weapons", "1"},
{"mp_auto_join_team", "1"},
{"mp_auto_join_team", "1"},
{"mp_autoteambalance", "0"},
{"mp_autoteambalance", "0"},
{"mp_limitteams", "0"},
{"mp_limitteams", "0"},
{"mp_freezetime", "0"},
{"mp_freezetime", "0"},
{"mp_timelimit", "0"},
{"mp_timelimit", "0"},
{"mp_refill_bpammo_weapons", "3"},
{"mp_refill_bpammo_weapons", "3"},
{"mp_startmoney", "16000"},
{"mp_startmoney", "16000"},
{"sv_alltalk", "1"},
{"sv_alltalk", "1"},
{"mp_buytime", "-1"},
{"mp_buytime", "-1"},
{"mp_consistency", "1"},
{"mp_consistency", "1"},
{"mp_flashlight", "0"},
{"mp_flashlight", "0"},
{"mp_forcechasecam", "0"},
{"mp_forcechasecam", "0"},
{"mp_forcecamera", "0"},
{"mp_forcecamera", "0"},
{"mp_roundtime", "0"},
{"mp_roundtime", "0"},
{"allow_spectators", "0"},
{"allow_spectators", "1"},
{"sv_timeout", "20"}
{"sv_timeout", "20"}
}
}


new PugStartCmds[][CMDS] =
new PugStartCmds[][CMDS] =
{
{
{"mp_forcerespawn", "0"},
{"mp_forcerespawn", "0"},
{"mp_startmoney", "800"},
{"mp_startmoney", "800"},
{"mp_freezetime", "0"},
{"mp_freezetime", "0"},
{"sv_alltalk", "0"},
{"sv_alltalk", "0"},
{"mp_refill_bpammo_weapons", "0"},
{"mp_refill_bpammo_weapons", "0"},
{"mp_buytime", ".25"},
{"mp_buytime", ".25"},
{"mp_forcechasecam", "2"},
{"mp_forcechasecam", "2"},
{"mp_forcecamera", "2"},
{"mp_forcecamera", "2"},
{"mp_freezetime", "11"},
{"mp_freezetime", "11"},
{"mp_roundtime", "1.75"},
{"mp_roundtime", "1.75"},
{"mp_auto_join_team", "0"}
{"mp_auto_join_team", "0"}
}
}


public plugin_init()
public plugin_init()
{
{
g_PluginId = register_plugin(PLUGIN, VERSION, AUTHOR)
g_PluginId = register_plugin(PLUGIN, VERSION, AUTHOR)
pug_state = NO_ALIVE
pug_state = NO_ALIVE
register_clcmd("say", "pfn_Hook_Say")
register_clcmd("say", "pfn_Hook_Say")
register_clcmd("say_team", "pfn_Hook_Say")
register_clcmd("say_team", "pfn_Hook_Say")
SpawnWeapon = RegisterHam(Ham_Spawn, "weaponbox", "pfn_remove_weapon", 1)
SpawnWeapon = RegisterHam(Ham_Spawn, "weaponbox", "pfn_remove_weapon", 1)
PlayerPostink = RegisterHam(Ham_Player_PostThink, "player", "pfn_postink", 1)
PlayerPostink = RegisterHam(Ham_Player_PostThink, "player", "pfn_postink", 1)
PlayerSpawn = RegisterHam(Ham_Spawn, "player", "pfn_player_spawn", 1)
PlayerSpawn = RegisterHam(Ham_Spawn, "player", "pfn_player_spawn", 1)
DisableHamForward(PlayerSpawn)
DisableHamForward(PlayerSpawn)
DisableHamForward(PlayerPostink)
DisableHamForward(PlayerPostink)
DefuseKit = RegisterHam(Ham_Spawn, "item_thighpack", "pfn_remove_weapon", 1)
DefuseKit = RegisterHam(Ham_Spawn, "item_thighpack", "pfn_remove_weapon", 1)
register_event("Money", "pfn_money", "b")
register_event("Money", "pfn_money", "b")
g_private = TrieCreate()
g_private = TrieCreate()
g_pcvar_votemap = register_cvar("pug_votemap", "1")
g_pcvar_votemap = register_cvar("pug_votemap", "1")
t_Command = TrieCreate()
t_Command = TrieCreate()
t_Command_Plugin = TrieCreate()
t_Command_Plugin = TrieCreate()
g_maps = ArrayCreate(32)
g_maps = ArrayCreate(32)
iMaxPlayers = get_maxplayers();
iMaxPlayers = get_maxplayers();
Sync1 = CreateHudSyncObj()
Sync1 = CreateHudSyncObj()
Sync2 = CreateHudSyncObj()
Sync2 = CreateHudSyncObj()
Sync3 = CreateHudSyncObj()
Sync3 = CreateHudSyncObj()
Sync4 = CreateHudSyncObj()
Sync4 = CreateHudSyncObj()
gMsgStatusIcon = get_user_msgid("StatusIcon")
gMsgStatusIcon = get_user_msgid("StatusIcon")
gMsgServerName = get_user_msgid("ServerName")
gMsgServerName = get_user_msgid("ServerName")
gMsgTextMsg = get_user_msgid("TextMsg")
gMsgTextMsg = get_user_msgid("TextMsg")
gMsgScoreInfo = get_user_msgid("ScoreInfo")
gMsgScoreInfo = get_user_msgid("ScoreInfo")
gMsgTeamScore = get_user_msgid("TeamScore")


register_message(get_user_msgid("TeamScore"), "pfn_TeamScore")
register_message(gMsgTeamScore, "pfn_TeamScore")
pcvar_max_players = register_cvar("pug_players", "10")
pcvar_max_players = register_cvar("pug_players", "10")
register_event("HLTV", "ev_new_round", "a", "1=0", "2=0")
register_event("HLTV", "ev_new_round", "a", "1=0", "2=0")


RegisterHookChain(RG_RoundEnd, "pfn_Round_End_Hook")
RegisterHookChain(RG_RoundEnd, "pfn_Round_End_Hook")
RegisterHookChain(RG_HandleMenu_ChooseTeam, "pfn_Hook_ChooseTeam")
RegisterHookChain(RG_HandleMenu_ChooseTeam, "pfn_Hook_ChooseTeam")


register_event("Damage", "pfn_EVENT_damage", "b")
register_event("Damage", "pfn_EVENT_damage", "b")


register_message(gMsgTextMsg, "pfn_TextMsg")
register_message(gMsgTextMsg, "pfn_TextMsg")
register_message(gMsgScoreInfo, "pfn_ScoreInfo")
register_message(gMsgScoreInfo, "pfn_ScoreInfo")
register_event("DeathMsg", "pfn_PlayerDeath", "a")
register_event("DeathMsg", "pfn_PlayerDeath", "a")


pug_register_command(".ready", "pfn_ready", g_PluginId)
pug_register_command(".ready", "pfn_ready", g_PluginId)
pug_register_command(".unready", "pfn_unready", g_PluginId)
pug_register_command(".unready", "pfn_unready", g_PluginId)
pug_register_command(".score", "pfn_score", g_PluginId)
pug_register_command(".score", "pfn_score", g_PluginId)
pug_register_command(".start", "pfn_force_start_pug", g_PluginId)
pug_register_command(".start", "pfn_force_start_pug", g_PluginId)
pug_register_command(".forceready", "pfn_forceready", g_PluginId)
pug_register_command(".forceready", "pfn_forceready", g_PluginId)
pug_register_command(".cancel", "pfn_force_cancel", g_PluginId)
pug_register_command(".cancel", "pfn_force_cancel", g_PluginId)
pug_register_command(".dmg", "cmd_dmg", g_PluginId)
pug_register_command(".dmg", "cmd_dmg", g_PluginId)
pug_register_command(".vidas", "cmds_vidas", g_PluginId)
pug_register_command(".vidas", "cmds_vidas", g_PluginId)


set_task(5.0, "start_pregame")
set_task(5.0, "start_pregame")
read_maps()
read_maps()
read_ini()
read_ini()
}
}


public pfn_player_spawn(id)
public pfn_player_spawn(id)
{
{
if(round_knife)
if(round_knife)
{
{
rg_remove_all_items(id)
rg_remove_all_items(id)
rg_give_item(id, "weapon_knife")
rg_give_item(id, "weapon_knife")
set_member(id, m_iAccount, 1)
set_member(id, m_iAccount, 1)
}
}
}
}


read_ini()
read_ini()
{
{
new _sz_file[] = "addons/amxmodx/configs/pug_private.ini"
new _sz_file[] = "addons/amxmodx/configs/pug_private.ini"
if(file_exists(_sz_file))
if(file_exists(_sz_file))
{
{
server_print("Servidor Privado!!!!!")
server_print("Servidor Privado!!!!!")
private = true
private = true
new fh = fopen(_sz_file, "r")
new fh = fopen(_sz_file, "r")
new line[34]
new line[34]
new _auth[32]
new _auth[32]
new _sz_team[3]
new _sz_team[3]


while(!feof(fh))
while(!feof(fh))
{
{
fgets(fh, line, charsmax(line))
fgets(fh, line, charsmax(line))
trim(line)
trim(line)
if(!line[0] || line[0] == ';')
if(!line[0] || line[0] == ';')
{
{
continue;
continue;
}
}
parse(line, _auth, charsmax(_auth), _sz_team, charsmax(_sz_team))
parse(line, _auth, charsmax(_auth), _sz_team, charsmax(_sz_team))
trim(_sz_team)
trim(_sz_team)
trim(_auth)
trim(_auth)
TrieSetCell(g_private, _auth, str_to_num(_sz_team))
TrieSetCell(g_private, _auth, str_to_num(_sz_team))
}
}
fclose(fh)
fclose(fh)
}
}
else
else
{
{
private = false
private = false
server_print("Servidor Publico!!!!!")
server_print("Servidor Publico!!!!!")
}
}
}
}


public client_connect(id)
public client_connect(id)
{
{
static _steam_id[32]
static _steam_id[32]
if(private)
if(private)
{
{
get_user_authid(id, _steam_id, charsmax(_steam_id))
get_user_authid(id, _steam_id, charsmax(_steam_id))
if(!TrieKeyExists(g_private, _steam_id))
if(!TrieKeyExists(g_private, _steam_id))
{
{
server_cmd("kick #%i 'Servidor Privado!!!'", get_user_userid(id))
server_cmd("kick #%i 'Servidor Privado!!!'", get_user_userid(id))
return
return
}
}
}
}
}
}


public pfn_money(id)
public pfn_money(id)
{
{
if(round_knife)
if(round_knife)
{
{
set_member(id, m_iAccount, 1)
set_member(id, m_iAccount, 1)
return
return
}
}
if(pug_state == ALIVE)
if(pug_state == ALIVE)
{
{
return
return
}
}
set_member(id, m_iAccount, 25000)
set_member(id, m_iAccount, 25000)
}
}


public pfn_PlayerDeath()
public pfn_PlayerDeath()
{
{
if(pug_state == ALIVE && !is_intermission && !round_knife )
if(pug_state == ALIVE && !is_intermission && !round_knife )
{
{
new v = read_data(2)
new v = read_data(2)
new k = read_data(1)
new k = read_data(1)
if(!(1<= k <= iMaxPlayers) || v == k)
if(!(1<= k <= iMaxPlayers) || v == k)
{
{
g_iDeaths[v]++
g_iDeaths[v]++
g_iFrags[v]--
g_iFrags[v]--
}
}
else
else
{
{
g_iFrags[k]++
g_iFrags[k]++
g_iDeaths[v]++
g_iDeaths[v]++
}
}
}
}


}
}


public pfn_ScoreInfo(m, s, id)
public pfn_ScoreInfo(m, s, id)
{
{
static _score_player_id
static _score_player_id
_score_player_id = get_msg_arg_int(1)
_score_player_id = get_msg_arg_int(1)
if(pug_state == ALIVE && !round_knife)
if(pug_state == ALIVE && !round_knife)
{
{
set_msg_arg_int(2, ARG_SHORT, g_iFrags[_score_player_id])
set_msg_arg_int(2, ARG_SHORT, g_iFrags[_score_player_id])
set_msg_arg_int(3, ARG_SHORT, g_iDeaths[_score_player_id])
set_msg_arg_int(3, ARG_SHORT, g_iDeaths[_score_player_id])
}
}
}
}


public cmds_vidas(id)
public cmds_vidas(id)
{
{
new team = get_user_team(id)
new team = get_user_team(id)
new name[32]
new name[32]
for(new i = 1 ; i <= iMaxPlayers ; i++)
for(new i = 1 ; i <= iMaxPlayers ; i++)
{
{
if(team == get_user_team(i))
if(team == get_user_team(i))
continue
continue
get_user_name(i, name, 32)
get_user_name(i, name, 32)
client_print(id, print_chat, "%s %i", name, get_user_health(i))
client_print(id, print_chat, "%s %i", name, get_user_health(i))
}
}
}
}
public pfn_EVENT_damage(id)
public pfn_EVENT_damage(id)
{
{
new a = get_user_attacker(id)
new a = get_user_attacker(id)
new damage = read_data(2)
new damage = read_data(2)


if(pug_state != ALIVE || !is_user_alive(a) || !(1 <= a <= iMaxPlayers) || a == id || damage <= 0)
if(pug_state != ALIVE || !is_user_alive(a) || !(1 <= a <= iMaxPlayers) || a == id || damage <= 0)
{
{
return
return
}
}


g_iDmg[id][a] += damage
g_iDmg[id][a] += damage
g_iHits[id][a] += 1
g_iHits[id][a] += 1
}
}
public cmd_dmg(id)
public cmd_dmg(id)
{
{
if(pug_state != ALIVE || is_user_alive(id))
if(pug_state != ALIVE || is_user_alive(id))
{
{
client_print(id, print_chat, "%s Accion no permitida en este momento", TAG)
client_print(id, print_chat, "%s Accion no permitida en este momento", TAG)
return
return
}
}
new tmp_name[32], count
new tmp_name[32], count
for(new i = 0 ; i < iMaxPlayers ; i++)
for(new i = 0 ; i < iMaxPlayers ; i++)
{
{
if(g_iHits[i][id] > 0)
if(g_iHits[i][id] > 0)
{
{
if(!is_user_connected(i))
if(!is_user_connected(i))
{
{
continue;
continue;
}
}
get_user_name(i, tmp_name, charsmax(tmp_name))
get_user_name(i, tmp_name, charsmax(tmp_name))
client_print(id, print_chat, "%s | %s | Dmg: %i | Hits: %i ", TAG, tmp_name, g_iDmg[i][id], g_iHits[i][id])
client_print(id, print_chat, "%s | %s | Dmg: %i | Hits: %i ", TAG, tmp_name, g_iDmg[i][id], g_iHits[i][id])
count++
count++
}
}
}
}
if(!count)
if(!count)
{
{
client_print(id, print_chat, "%s No Le diste a nadie en esta ronda", TAG)
client_print(id, print_chat, "%s No Le diste a nadie en esta ronda", TAG)
}
}
}
}
public pfn_TeamScore(m, e, id)
public pfn_TeamScore(m, e, id)
{
{
static _____team_score[2]
static _____team_score[2]
get_msg_arg_string(1, _____team_score, charsmax(_____team_score))
get_msg_arg_string(1, _____team_score, charsmax(_____team_score))
switch(_____team_score[0])
switch(_____team_score[0])
{
{
case 'T' : set_msg_arg_int(2, ARG_SHORT, g_iRound_team[TT])
case 'T' : set_msg_arg_int(2, ARG_SHORT, g_iRound_team[TT])
case 'C' : set_msg_arg_int(2, ARG_SHORT, g_iRound_team[CT])
case 'C' : set_msg_arg_int(2, ARG_SHORT, g_iRound_team[CT])
}
}
}
}
public newRound(id)
public newRound(id)
{
{
fn_update_server_name(id)
fn_update_server_name(id)
}
}
public pfn_Round_End_Hook(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay)
public pfn_Round_End_Hook(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay)
{
{
if(pug_state == NO_ALIVE || event == ROUND_GAME_RESTART)
if(pug_state == NO_ALIVE || event == ROUND_GAME_RESTART)
{
{
return HC_CONTINUE
return HC_CONTINUE
}
}
else if(is_intermission)
else if(is_intermission)
{
{
SetHookChainReturn(ATYPE_INTEGER, 1)
SetHookChainReturn(ATYPE_INTEGER, 1)
return HC_SUPERCEDE
return HC_SUPERCEDE
}
}
if(round_knife)
if(round_knife)
{
{
if(status == WINSTATUS_CTS)
if(status == WINSTATUS_CTS)
{
{
for(new i = 1 ; i <= iMaxPlayers ; i++)
for(new i = 1 ; i <= iMaxPlayers ; i++)
{
{
if(!is_user_connected(i) || !(1 <= get_user_team(i) <= 2))
if(!is_user_connected(i) || !(1 <= get_user_team(i) <= 2))
{
{
continue;
continue;
}
}
rg_switch_team(i)
rg_switch_team(i)
}
}
client_print(0, print_chat, "%s Han ganado los CTs, Se realizara un cambio de equipos", TAG)
client_print(0, print_chat, "%s Han ganado los CTs, Se realizara un cambio de equipos", TAG)
}
}
else if(status == WINSTATUS_TERRORISTS)
else if(status == WINSTATUS_TERRORISTS)
{
{
client_print(0, print_chat, "%s Han ganado los TTs, No realizara cambio de equipos", TAG)
client_print(0, print_chat, "%s Han ganado los TTs, No realizara cambio de equipos", TAG)
}
}
else
else
{
{
client_print(0, print_chat, "%s Nadie Gano!, No realizara cambio de equipos", TAG)
client_print(0, print_chat, "%s Nadie Gano!, No realizara cambio de equipos", TAG)
}
}
round_knife = false
round_knife = false
#if defined END_ROUND_KNIFE_FIX
#if defined END_ROUND_KNIFE_FIX
set_cvar_num(Pregame_Cmds[1][COMMAND], 1)
set_cvar_num(Pregame_Cmds[1][COMMAND], 1)
#endif
#endif
DisableHamForward(PlayerSpawn)
DisableHamForward(PlayerSpawn)
SetHookChainReturn(ATYPE_INTEGER, 1)
SetHookChainReturn(ATYPE_INTEGER, 1)
Send_TextMsg(status == WINSTATUS_TERRORISTS ? "#Terrorists_Win" : status == WINSTATUS_CTS ? "#CTs_Win" : "")
Send_TextMsg(status == WINSTATUS_TERRORISTS ? "#Terrorists_Win" : status == WINSTATUS_CTS ? "#CTs_Win" : "")
server_cmd("sv_restart 4")
server_cmd("sv_restart 4")


DisableHamForward(SpawnWeapon)
DisableHamForward(SpawnWeapon)
unregister_message(gMsgStatusIcon, gMsgRegisterStatusIcon)
unregister_message(gMsgStatusIcon, gMsgRegisterStatusIcon)
rg_send_audio(0, status == WINSTATUS_TERRORISTS ? "%!MRAD_terwin" : status == WINSTATUS_CTS ? "%!MRAD_ctwin" : "%!MRAD_rounddraw", PITCH_NORM)
rg_send_audio(0, status == WINSTATUS_TERRORISTS ? "%!MRAD_terwin" : status == WINSTATUS_CTS ? "%!MRAD_ctwin" : "%!MRAD_rounddraw", PITCH_NORM)
return HC_SUPERCEDE
return HC_SUPERCEDE
}
}

if(status == WINSTATUS_CTS)
if(status == WINSTATUS_CTS)
{
{
g_iRound_team[CT]++
g_iRound_team[CT]++
emessage_begin(MSG_ALL, gMsgTeamScore)
ewrite_string("CT")
ewrite_short(g_iRound_team[CT])
emessage_end()
}
}
else if(status == WINSTATUS_TERRORISTS)
else if(status == WINSTATUS_TERRORISTS)
{
{
g_iRound_team[TT]++
g_iRound_team[TT]++
emessage_begin(MSG_ALL, gMsgTeamScore)
ewrite_string("TERRORIST")
ewrite_short(g_iRound_team[TT])
emessage_end()
}
}


fn_update_server_name(0)
fn_update_server_name(0)


if(g_iRounds == 15)
if(g_iRounds == 15)
{
{
EnableHamForward(PlayerPostink)
EnableHamForward(PlayerPostink)
g_vote_countdown = 15
g_vote_countdown = 15
set_task(1.0, "pfn_intermission_count", TASK_HUD_READY, _, _, "b")
set_task(1.0, "pfn_intermission_count", TASK_HUD_READY, _, _, "b")
is_intermission = true
is_intermission = true
SetHookChainReturn(ATYPE_INTEGER, 1)
SetHookChainReturn(ATYPE_INTEGER, 1)
rg_send_audio(0, status == WINSTATUS_TERRORISTS ? "%!MRAD_terwin" : status == WINSTATUS_CTS ? "%!MRAD_ctwin" : "%!MRAD_rounddraw", PITCH_NORM)
rg_send_audio(0, status == WINSTATUS_TERRORISTS ? "%!MRAD_terwin" : status == WINSTATUS_CTS ? "%!MRAD_ctwin" : "%!MRAD_rounddraw", PITCH_NORM)
Send_TextMsg(status == WINSTATUS_TERRORISTS ? "#Terrorists_Win" : status == WINSTATUS_CTS ? "#CTs_Win" : "")
Send_TextMsg(status == WINSTATUS_TERRORISTS ? "#Terrorists_Win" : status == WINSTATUS_CTS ? "#CTs_Win" : "")
client_cmd(0, "mp3 play ^"%s^"", SND_MUSIC[random_num(0, charsmax(SND_MUSIC))])
client_cmd(0, "mp3 play ^"%s^"", SND_MUSIC[random_num(0, charsmax(SND_MUSIC))])
client_cmd(0, "wait;^"mp3fadeTime^" ^"0.5^";wait")
client_cmd(0, "wait;^"mp3fadeTime^" ^"0.5^";wait")
return HC_SUPERCEDE
return HC_SUPERCEDE
}
}
else if(g_iRounds == 30 || g_iRound_team[CT] >= 16 || g_iRound_team[TT] >= 16)
else if(g_iRounds == 30 || g_iRound_team[CT] >= 16 || g_iRound_team[TT] >= 16)
{
{
EnableHamForward(PlayerPostink)
EnableHamForward(PlayerPostink)
g_vote_countdown = 15
g_vote_countdown = 15
set_task(1.0, "pfn_pug_end_countdown", TASK_PUG_END, _, _, "b")
set_task(1.0, "pfn_pug_end_countdown", TASK_PUG_END, _, _, "b")
is_intermission = true
is_intermission = true
SetHookChainReturn(ATYPE_INTEGER, 1)
SetHookChainReturn(ATYPE_INTEGER, 1)
Send_TextMsg(status == WINSTATUS_TERRORISTS ? "#Terrorists_Win" : status == WINSTATUS_CTS ? "#CTs_Win" : "")
Send_TextMsg(status == WINSTATUS_TERRORISTS ? "#Terrorists_Win" : status == WINSTATUS_CTS ? "#CTs_Win" : "")
rg_send_audio(0, status == WINSTATUS_TERRORISTS ? "%!MRAD_terwin" : status == WINSTATUS_CTS ? "%!MRAD_ctwin" : "%!MRAD_rounddraw", PITCH_NORM)
rg_send_audio(0, status == WINSTATUS_TERRORISTS ? "%!MRAD_terwin" : status == WINSTATUS_CTS ? "%!MRAD_ctwin" : "%!MRAD_rounddraw", PITCH_NORM)
client_cmd(0, "mp3 play ^"%s^"", SND_MUSIC[random_num(0, charsmax(SND_MUSIC))])
client_cmd(0, "mp3 play ^"%s^"", SND_MUSIC[random_num(0, charsmax(SND_MUSIC))])
client_cmd(0, "wait;^"mp3fadeTime^" ^"0.5^";wait")
client_cmd(0, "wait;^"mp3fadeTime^" ^"0.5^";wait")
return HC_SUPERCEDE
return HC_SUPERCEDE
}
}


return HC_CONTINUE
return HC_CONTINUE


}
}


stock Send_TextMsg(msg[])
stock Send_TextMsg(msg[])
{
{
message_begin(MSG_BROADCAST, gMsgTextMsg)
message_begin(MSG_BROADCAST, gMsgTextMsg)
write_byte(4)
write_byte(4)
write_string(msg)
write_string(msg)
message_end()
message_end()
}
}


public pfn_pug_end_countdown(task)
public pfn_pug_end_countdown(task)
{
{
g_vote_countdown--
g_vote_countdown--
if(g_vote_countdown > 0)
if(g_vote_countdown > 0)
{
{
if(g_iRound_team[CT] == g_iRound_team[TT])
if(g_iRound_team[CT] == g_iRound_team[TT])
{
{
make_hud_title("La partida quedo empatada")
make_hud_title("La partida quedo empatada")
}
}
else if(g_iRound_team[CT] >= g_iRound_team[TT])
else if(g_iRound_team[CT] >= g_iRound_team[TT])
{
{
make_hud_title("Los Anti-Terroristas Han ganado la partida")
make_hud_title("Los Anti-Terroristas Han ganado la partida")
}
}
else
else
{
{
make_hud_title("Los Terroristas Han ganado la partida")
make_hud_title("Los Terroristas Han ganado la partida")
}
}
make_hud_body("Reiniciando en: %i", g_vote_countdown)
make_hud_body("Reiniciando en: %i", g_vote_countdown)
}
}
else
else
{
{
DisableHamForward(PlayerPostink)
DisableHamForward(PlayerPostink)
remove_task(task)
remove_task(task)
start_pregame()
start_pregame()
client_cmd(0, "-showscores")
client_cmd(0, "-showscores")
client_cmd(0, "wait;^"mp3fadeTime^" ^"0.5^";wait")
client_cmd(0, "wait;^"mp3fadeTime^" ^"0.5^";wait")
client_cmd(0, "wait;^"cd^" ^"fadeout^";wait")
client_cmd(0, "wait;^"cd^" ^"fadeout^";wait")
}
}
}
}


public pfn_intermission_count(task)
public pfn_intermission_count(task)
{
{
g_vote_countdown--
g_vote_countdown--
if(g_vote_countdown > 0)
if(g_vote_countdown > 0)
{
{
make_hud_title("Descanso:")
make_hud_title("Descanso:")
make_hud_body("Cambio de Equipos en 00:%02i", g_vote_countdown)
make_hud_body("Cambio de Equipos en 00:%02i", g_vote_countdown)
}
}
else
else
{
{
client_cmd(0, "wait;^"mp3fadeTime^" ^"0.5^";wait")
client_cmd(0, "wait;^"mp3fadeTime^" ^"0.5^";wait")
client_cmd(0, "wait;^"cd^" ^"fadeout^";wait")
client_cmd(0, "wait;^"cd^" ^"fadeout^";wait")
remove_task(task)
remove_task(task)
DisableHamForward(PlayerPostink)
DisableHamForward(PlayerPostink)
server_cmd("sv_restart 1")
server_cmd("sv_restart 1")
new temp = g_iRound_team[CT]
new temp = g_iRound_team[CT]
g_iRound_team[CT] = g_iRound_team[TT]
g_iRound_team[CT] = g_iRound_team[TT]
g_iRound_team[TT] = temp
g_iRound_team[TT] = temp
is_intermission = false
is_intermission = false
for(new i = 1 ; i<= iMaxPlayers ;i++)
for(new i = 1 ; i<= iMaxPlayers ;i++)
{
{
if(!is_user_connected(i) || !(1<= get_user_team(i) <= 2))
if(!is_user_connected(i) || !(1<= get_user_team(i) <= 2))
{
{
continue
continue
}
}
rg_switch_team(i)
rg_switch_team(i)
}
}
client_cmd(0, "-showscores")
client_cmd(0, "-showscores")
}
}
}
}
fn_update_server_name(id)
fn_update_server_name(id)
{
{
new szFmt[128]
new szFmt[128]
if(round_knife)
if(round_knife)
{
{
formatex(szFmt, charsmax(szFmt), "Ronda de cuchillos")
formatex(szFmt, charsmax(szFmt), "Ronda de cuchillos")
}
}
else if(pug_state != NO_ALIVE)
else if(pug_state != NO_ALIVE)
{
{
formatex(szFmt, charsmax(szFmt), "Ronda: %i | CT: %i | TT: %i", g_iRounds, g_iRound_team[CT], g_iRound_team[TT])
formatex(szFmt, charsmax(szFmt), "Ronda: %i | CT: %i | TT: %i", g_iRounds, g_iRound_team[CT], g_iRound_team[TT])
}
}
else
else
{
{
formatex(szFmt, charsmax(szFmt), "PUG NO ALIVE")
formatex(szFmt, charsmax(szFmt), "PUG NO ALIVE")
}
}
if(id)
if(id)
{
{
message_begin(MSG_ONE, gMsgServerName, {0, 0, 0}, id)
message_begin(MSG_ONE, gMsgServerName, {0, 0, 0}, id)
}
}
else
else
{
{
message_begin(MSG_BROADCAST, gMsgServerName)
message_begin(MSG_BROADCAST, gMsgServerName)
}
}
write_string(szFmt)
write_string(szFmt)
message_end();
message_end();
if(pug_state != NO_ALIVE)
if(pug_state != NO_ALIVE)
{
{


if(round_knife)
if(round_knife)
{
{
formatex(szFmt, charsmax(szFmt), "Ronda de cuchillos")
formatex(szFmt, charsmax(szFmt), "Ronda de cuchillos")
}
}
else if(g_iRound_team[CT] == g_iRound_team[TT])
else if(g_iRound_team[CT] == g_iRound_team[TT])
{
{
formatex(szFmt, charsmax(szFmt), "Ronda: %i | TT: %i | CT: %i", g_iRounds, g_iRound_team[CT], g_iRound_team[TT])
formatex(szFmt, charsmax(szFmt), "Ronda: %i | TT: %i | CT: %i", g_iRounds, g_iRound_team[CT], g_iRound_team[TT])
}
}
else if(g_iRound_team[CT] > g_iRound_team[TT])
else if(g_iRound_team[CT] > g_iRound_team[TT])
{
{
formatex(szFmt, charsmax(szFmt), "Ronda: %i | CT: %i | TT: %i", g_iRounds, g_iRound_team[CT], g_iRound_team[TT])
formatex(szFmt, charsmax(szFmt), "Ronda: %i | CT: %i | TT: %i", g_iRounds, g_iRound_team[CT], g_iRound_team[TT])
}
}
else
else
{
{
formatex(szFmt, charsmax(szFmt), "Ronda: %i | TT: %i | CT: %i", g_iRounds, g_iRound_team[TT], g_iRound_team[CT])
formatex(szFmt, charsmax(szFmt), "Ronda: %i | TT: %i | CT: %i", g_iRounds, g_iRound_team[TT], g_iRound_team[CT])
}
}
set_member_game(m_GameDesc, szFmt)
set_member_game(m_GameDesc, szFmt)
}
}
else
else
{
{
set_member_game(m_GameDesc, "PUG NO ALIVE")
set_member_game(m_GameDesc, "PUG NO ALIVE")
}
}
}
}


public ev_new_round()
public ev_new_round()
{
{
if(pug_state == NO_ALIVE)
if(pug_state == NO_ALIVE)
{
{
return
return
}
}
else if(pug_state == COMMENCING)
else if(pug_state == COMMENCING)
{
{
pug_state = ALIVE
pug_state = ALIVE
set_cvar_num("mp_round_infinite", 0)
set_cvar_num("mp_round_infinite", 0)
}
}
if(round_knife)
if(round_knife)
{
{
fn_update_server_name(0)
fn_update_server_name(0)
return
return
}
}


g_iRounds++
g_iRounds++


#if defined END_ROUND_KNIFE_FIX
#if defined END_ROUND_KNIFE_FIX
if(g_iRounds == 1)
if(g_iRounds == 1)
{
{
set_cvar_num(Pregame_Cmds[1][COMMAND], 0)
set_cvar_num(Pregame_Cmds[1][COMMAND], 0)
arrayset(g_iFrags, 0, sizeof(g_iFrags))
arrayset(g_iDeaths, 0, sizeof(g_iDeaths))
}
}
#endif
#endif


if(g_iRounds == 15 || g_iRound_team[CT] == 15 || g_iRound_team[TT] == 15)
if(g_iRounds == 15 || g_iRound_team[CT] == 15 || g_iRound_team[TT] == 15)
{
{
client_cmd(0, "spk ^"%s^"; spk ^"%s^"", SND_STINGER[6], SND_STINGER[6])
client_cmd(0, "spk ^"%s^"; spk ^"%s^"", SND_STINGER[6], SND_STINGER[6])
set_dhudmessage(255, 255, 255, -1.0, 0.3, 0, 1.0, 1.5)
set_dhudmessage(255, 255, 255, -1.0, 0.3, 0, 1.0, 1.5)
if(g_iRounds == 30)
if(g_iRounds == 30)
{
{
show_dhudmessage(0, "Ronda Final")
show_dhudmessage(0, "Ronda Final")
}
}
else
else
{
{
show_dhudmessage(0, "Punto de partido")
show_dhudmessage(0, "Punto de partido")
}
}
}
}


fn_update_server_name(0)
fn_update_server_name(0)
fn_score(0)
fn_score(0)
new i
new i
for(i = 0 ; i < iMaxPlayers ; i++)
for(i = 0 ; i < iMaxPlayers ; i++)
{
{
arrayset(g_iDmg[i], 0, sizeof(g_iDmg))
arrayset(g_iDmg[i], 0, sizeof(g_iDmg))
arrayset(g_iHits[i], 0, sizeof(g_iHits))
arrayset(g_iHits[i], 0, sizeof(g_iHits))
}
}
}
}


public plugin_end()
public plugin_end()
{
{
TrieDestroy(t_Command)
TrieDestroy(t_Command)
TrieDestroy(t_Command_Plugin)
TrieDestroy(t_Command_Plugin)
ArrayDestroy(g_maps)
ArrayDestroy(g_maps)
}
}
stock is_user_admin(id)
stock is_user_admin(id)
{
{
new __flags=get_user_flags(id);
new __flags=get_user_flags(id);
return (__flags>0 && !(__flags&ADMIN_USER));
return (__flags>0 && !(__flags&ADMIN_USER));
}
}
read_maps()
read_maps()
{
{
new file[32]
new file[32]
new curmap[32]
new curmap[32]
ArrayPushString(g_maps, "Jugar Este Mapa")
ArrayPushString(g_maps, "Jugar Este Mapa")
get_mapname(curmap, charsmax(curmap))
get_mapname(curmap, charsmax(curmap))
new dh = open_dir("maps", file, charsmax(file))
new dh = open_dir("maps", file, charsmax(file))
if(!dh)
if(!dh)
{
{
set_fail_state("Error al abrir la carpeta de mapas");
set_fail_state("Error al abrir la carpeta de mapas");
return
return
}
}
while(next_file(dh, file, charsmax(file)))
while(dh)
{
{
trim(file)
trim(file)
if(check_bsp_file(file) && file[0] == 'd' && file[1] == 'e')
if(check_bsp_file(file))
{
{
replace(file, charsmax(file), ".bsp", "")
replace(file, charsmax(file), ".bsp", "")
if(equal(curmap, file))
if(equal(curmap, file))
{
{

continue;
continue;
}
}
ArrayPushString(g_maps, file)
ArrayPushString(g_maps, file)
}
}
if(!next_file(dh, file, charsmax(file)))
{
close_dir(dh)
dh = false
}
}
}
close_dir(dh)
}
}
bool:check_bsp_file(file[])
bool:check_bsp_file(file[])
{
{
if(equal(file[strlen(file)-4], ".bsp"))
if(equal(file[strlen(file)-4], ".bsp"))
{
{
return true
return true
}
}
return false
return false
}
}
public pfn_postink(id)
public pfn_postink(id)
{
{
if(!(1 <= get_user_team(id) <= 2))
if(!(1 <= get_user_team(id) <= 2))
{
{
return
return
}
}
set_pev(id, pev_maxspeed, 0.1)
set_pev(id, pev_maxspeed, 0.1)
if(pug_state == ALIVE)
if(pug_state == ALIVE)
{
{
client_cmd(id, "+showscores")
client_cmd(id, "+showscores")
}
}
}
}
public pfn_remove_weapon(ent)
public pfn_remove_weapon(ent)
{
{
set_pev(ent, pev_flags, FL_KILLME)
set_pev(ent, pev_flags, FL_KILLME)
}
}
public pfn_remove_entity(id)
public pfn_remove_entity(id)
{
{
if(pev_valid(id))
if(pev_valid(id))
{
{
engfunc(EngFunc_RemoveEntity, id)
engfunc(EngFunc_RemoveEntity, id)
}
}
client_print(0, print_chat, "Think")
client_print(0, print_chat, "Think")
}
}
reset_user_vars()
reset_user_vars()
{
{
arrayset(ready, false, sizeof(ready))
arrayset(ready, false, sizeof(ready))
ready_count = 0
ready_count = 0
g_vote_id = 0;
g_vote_id = 0;
round_knife = false
round_knife = false
g_iRound_team[TT] = 0
g_iRound_team[TT] = 0
g_iRound_team[CT] = 0
g_iRound_team[CT] = 0
arrayset(g_iFrags, 0, sizeof(g_iFrags))
arrayset(g_iFrags, 0, sizeof(g_iFrags))
arrayset(g_iDeaths, 0, sizeof(g_iDeaths))
arrayset(g_iDeaths, 0, sizeof(g_iDeaths))
}
}
stock pug_register_command(Command[], Function[], Plugin)
stock pug_register_command(Command[], Function[], Plugin)
{
{
new funcid = get_func_id(Function, Plugin)
new funcid = get_func_id(Function, Plugin)
if(!funcid)
if(!funcid)
{
{
server_print("Funcion: ^"%s^" No encontrada", Function)
server_print("Funcion: ^"%s^" No encontrada", Function)
return
return
}
}
else if(TrieKeyExists(t_Command, Command))
else if(TrieKeyExists(t_Command, Command))
{
{
server_print("Funcion ^"%s^" ya existente", Command)
server_print("Funcion ^"%s^" ya existente", Command)
return
return
}
}


TrieSetCell(t_Command, Command, Plugin)
TrieSetCell(t_Command, Command, Plugin)
TrieSetCell(t_Command_Plugin, Command, funcid)
TrieSetCell(t_Command_Plugin, Command, funcid)
}
}
public start_pregame()
public start_pregame()
{
{
for(new i = 0 ; i < sizeof(Pregame_Cmds) ; i++)
for(new i = 0 ; i < sizeof(Pregame_Cmds) ; i++)
{
{
set_cvar_string(Pregame_Cmds[i][COMMAND], Pregame_Cmds[i][VALUE])
set_cvar_string(Pregame_Cmds[i][COMMAND], Pregame_Cmds[i][VALUE])
}
}
is_intermission = false
is_intermission = false
pug_state = NO_ALIVE
pug_state = NO_ALIVE
gMsgRegisterStatusIcon = register_message(gMsgStatusIcon, "pfn_StatusIcon")
gMsgRegisterStatusIcon = register_message(gMsgStatusIcon, "pfn_StatusIcon")
server_cmd("sv_restart 1")
server_cmd("sv_restart 1")
EnableHamForward(SpawnWeapon)
EnableHamForward(SpawnWeapon)
EnableHamForward(DefuseKit)
EnableHamForward(DefuseKit)
reset_user_vars()
reset_user_vars()
fn_update_server_name(0)
fn_update_server_name(0)
if(get_pcvar_num(g_pcvar_votemap) == 1)
if(get_pcvar_num(g_pcvar_votemap) == 1)
{
{
set_task(1.0, "pfn_Hud_Ready", TASK_HUD_READY, _, _, "b")
set_task(1.0, "pfn_Hud_Ready", TASK_HUD_READY, _, _, "b")
}
}
else
else
{
{
g_vote_countdown = 60
g_vote_countdown = 60
set_task(1.0, "pfn_waiting_players", TASK_HUD_READY, _, _, "b")
set_task(1.0, "pfn_waiting_players", TASK_HUD_READY, _, _, "b")
}
}


if(private)
if(private)
{
{
set_cvar_string(Pregame_Cmds[3][COMMAND], "0")
set_cvar_string(Pregame_Cmds[3][COMMAND], "0")
}
}
}
}


public pfn_StatusIcon(m, e, id)
public pfn_StatusIcon(m, e, id)
{
{
new arg[4]
new arg[4]
get_msg_arg_string(2, arg, charsmax(arg))
get_msg_arg_string(2, arg, charsmax(arg))
if(equal(arg, "c4"))
if(equal(arg, "c4"))
{
{
client_cmd(id, "drop weapon_c4")
client_cmd(id, "drop weapon_c4")
}
}
return PLUGIN_CONTINUE
return PLUGIN_CONTINUE
}
}
public pfn_Hud_Ready()
public pfn_Hud_Ready()
{
{
set_hudmessage(255, 0, 0, 0.8, 0.07, 0, 1.0, 1.1)
set_hudmessage(255, 0, 0, 0.8, 0.07, 0, 1.0, 1.1)
new i;
new i;
new __pcount = 0
new __pcount = 0
for(i = 1 ; i <= iMaxPlayers ;i++ )
for(i = 1 ; i <= iMaxPlayers ;i++ )
{
{
if(!is_user_connected(i) || !(1 <= get_user_team(i) <= 2))
if(!is_user_connected(i) || !(1 <= get_user_team(i) <= 2))
{
{
continue;
continue;
}
}
__pcount += 1
__pcount += 1
}
}
ShowSyncHudMsg(0, Sync1, "No Listos: %i", __pcount - ready_count)
ShowSyncHudMsg(0, Sync1, "No Listos: %i", __pcount - ready_count)
new fmt[33 * 33], name[32]
new fmt[33 * 33], name[32]
copy(fmt, charsmax(fmt), "")
copy(fmt, charsmax(fmt), "")
for(i = 1 ; i <= iMaxPlayers ;i++ )
for(i = 1 ; i <= iMaxPlayers ;i++ )
{
{
if(ready[i] || !is_user_connected(i) || !(1 <= get_user_team(i) <= 2))
if(ready[i] || !is_user_connected(i) || !(1 <= get_user_team(i) <= 2))
{
{
continue;
continue;
}
}
get_user_name(i, name, charsmax(name))
get_user_name(i, name, charsmax(name))
format(fmt, charsmax(fmt), "%s%s^n", fmt, name)
format(fmt, charsmax(fmt), "%s%s^n", fmt, name)
}
}
set_hudmessage(255, 255, 255, 0.8, 0.1, 0, 1.0, 1.1)
set_hudmessage(255, 255, 255, 0.8, 0.1, 0, 1.0, 1.1)
ShowSyncHudMsg(0, Sync2, fmt)
ShowSyncHudMsg(0, Sync2, fmt)
copy(fmt, charsmax(fmt), "")
copy(fmt, charsmax(fmt), "")
set_hudmessage(0, 255, 0, 0.8, 0.5, 0, 1.0, 1.1)
set_hudmessage(0, 255, 0, 0.8, 0.5, 0, 1.0, 1.1)
ShowSyncHudMsg(0, Sync3, "Listos: %i", ready_count)
ShowSyncHudMsg(0, Sync3, "Listos: %i", ready_count)
for(i = 1 ; i <= iMaxPlayers ;i++ )
for(i = 1 ; i <= iMaxPlayers ;i++ )
{
{
if(!ready[i] || !is_user_connected(i) || !(1 <= get_user_team(i) <= 2))
if(!ready[i] || !is_user_connected(i) || !(1 <= get_user_team(i) <= 2))
{
{
continue;
continue;
}
}
get_user_name(i, name, charsmax(name))
get_user_name(i, name, charsmax(name))
format(fmt, charsmax(fmt), "%s%s^n", fmt, name)
format(fmt, charsmax(fmt), "%s%s^n", fmt, name)
}
}
set_hudmessage(255, 255, 255, 0.8, 0.53, 0, 1.0, 1.1)
set_hudmessage(255, 255, 255, 0.8, 0.53, 0, 1.0, 1.1)
ShowSyncHudMsg(0, Sync4, fmt)
ShowSyncHudMsg(0, Sync4, fmt)
}
}
public plugin_natives()
public plugin_natives()
{
{
register_native("pug_register_command", "native_register_command", .style=0)
register_native("pug_register_command", "native_register_command", .style=0)
register_native("pug_get_state", "native_pug_get_state")
register_native("pug_get_state", "native_pug_get_state")
}
}
public native_pug_get_state(pl, pr)
public native_pug_get_state(pl, pr)
{
{
return pug_state;
return pug_state;
}
}
public native_register_command(pl, pr)
public native_register_command(pl, pr)
{
{
new szCommand[20], szForward[32]
new szCommand[20], szForward[32]
get_string(1, szCommand, charsmax(szCommand))
get_string(1, szCommand, charsmax(szCommand))
get_string(2, szForward, charsmax(szForward))
get_string(2, szForward, charsmax(szForward))
pug_register_command(szCommand, szForward, pl)
pug_register_command(szCommand, szForward, pl)
}
}
public pfn_Hook_Say(id)
public pfn_Hook_Say(id)
{
{
if(!is_user_connected(id))
if(!is_user_connected(id))
{
{
return PLUGIN_CONTINUE
return PLUGIN_CONTINUE
}
}
new said[32]
new said[32]
read_argv(1, said, charsmax(said))
read_argv(1, said, charsmax(said))
remove_quotes(said)
remove_quotes(said)
trim(said)
trim(said)
if(TrieKeyExists(t_Command, said))
if(TrieKeyExists(t_Command, said))
{
{
new iPlugin, iFunc
new iPlugin, iFunc
TrieGetCell(t_Command, said, iPlugin)
TrieGetCell(t_Command, said, iPlugin)
TrieGetCell(t_Command_Plugin, said, iFunc)
TrieGetCell(t_Command_Plugin, said, iFunc)
callfunc_begin_i(iFunc, iPlugin)
callfunc_begin_i(iFunc, iPlugin)
callfunc_push_int(id)
callfunc_push_int(id)
callfunc_end()
callfunc_end()
return PLUGIN_HANDLED_MAIN
return PLUGIN_HANDLED_MAIN
}
}
return PLUGIN_CONTINUE
return PLUGIN_CONTINUE
}
}


public pfn_ready(id)
public pfn_ready(id)
{
{
if(pug_state != NO_ALIVE || !(1 <= get_user_team(id) <= 2))
if(pug_state != NO_ALIVE || !(1 <= get_user_team(id) <= 2))
{
{
client_print(id, print_chat, "%s Accion no permitida en este momento", TAG)
client_print(id, print_chat, "%s Accion no permitida en este momento", TAG)
return
return
}
}
else if(ready[id])
else if(ready[id])
{
{
client_print(id, print_chat, "%s Ya estas listo", TAG)
client_print(id, print_chat, "%s Ya estas listo", TAG)
return
return
}
}
new name[32]
new name[32]
get_user_name(id, name, charsmax(name))
get_user_name(id, name, charsmax(name))
client_print(0, print_chat, "%s %s Esta Listo", TAG, name)
client_print(0, print_chat, "%s %s Esta Listo", TAG, name)
ready[id] = true
ready[id] = true
ready_count ++
ready_count ++
if(ready_count == get_pcvar_num(pcvar_max_players))
if(ready_count == get_pcvar_num(pcvar_max_players))
{
{
start_vote()
start_vote()
}
}
}
}
public pfn_unready(id)
public pfn_unready(id)
{
{
if(pug_state != NO_ALIVE)
if(pug_state != NO_ALIVE)
{
{
client_print(id, print_chat, "%s Accion no permitida en este momento", TAG)
client_print(id, print_chat, "%s Accion no permitida en este momento", TAG)
return
return
}
}
else if(!ready[id])
else if(!ready[id])
{
{
client_print(id, print_chat, "%s Aun no estas listo", TAG)
client_print(id, print_chat, "%s Aun no estas listo", TAG)
return
return
}
}
new name[32]
new name[32]
get_user_name(id, name, charsmax(name))
get_user_name(id, name, charsmax(name))
client_print(0, print_chat, "%s %s Dejo de estar Listo", TAG, name)
client_print(0, print_chat, "%s %s Dejo de estar Listo", TAG, name)
ready[id] = false;
ready[id] = false;
ready_count --
ready_count --
}
}
public pfn_TextMsg(m, e, id)
public pfn_TextMsg(m, e, id)
{
{
new msg[23]
new msg[23]
get_msg_arg_string(2, msg, charsmax(msg))
get_msg_arg_string(2, msg, charsmax(msg))
if(equal(msg, "#Game_will_restart_in"))
if(equal(msg, "#Game_will_restart_in"))
{
{
return PLUGIN_HANDLED
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
return PLUGIN_CONTINUE
}
}
public pfn_Hook_ChooseTeam(id, _:slot)
public pfn_Hook_ChooseTeam(id, _:slot)
{
{
new count_t, players[32], count_ct
if(!(1 <= slot <= 2))
if(!(1 <= slot <= 2))
{
{
if(slot == 5)
{
get_players(players, count_t, "e", "TERRORIST")
get_players(players, count_ct, "e", "CT")

if(count_t >= (get_pcvar_num(pcvar_max_players) / 2) && count_ct >= (get_pcvar_num(pcvar_max_players) / 2) )
{
client_print(id, print_chat, "%s Todos los equipos se encuentran llenos", TAG)
SetHookChainReturn(ATYPE_INTEGER, 0)
return HC_BREAK
}
}
return HC_CONTINUE
return HC_CONTINUE
}
}
else if((1 <= slot <= 2) && (1 <= get_user_team(id) <= 2) && pug_state == ALIVE)
else if((1 <= slot <= 2) && (1 <= get_user_team(id) <= 2) && pug_state == ALIVE)
{
{
client_print(id, print_chat, "%s No puedes hacer un cambio de equipos estando una partida en curso")
client_print(id, print_chat, "%s No puedes hacer un cambio de equipos estando una partida en curso", TAG)
SetHookChainReturn(ATYPE_INTEGER, 0)
SetHookChainReturn(ATYPE_INTEGER, 0)
return HC_SUPERCEDE
return HC_BREAK
}
}
new players[32], count
new count
new Team[10]
get_players(players, count, "e", slot == 1 ? "TERRORIST" : "CT")


if(slot == 1)
if(count >= (get_pcvar_num(pcvar_max_players) / 2) )
{
Team = "TERRORIST"
}
else
{
Team = "CT"
}
get_players(players, count, "e", Team)
if(count >= get_pcvar_num(pcvar_max_players) / 2)
{
{
center_print(id, "%s Este Equipo esta lleno^n^n^n^n^n", TAG)
center_print(id, "%s Este Equipo esta lleno^n^n^n^n^n", TAG)
client_cmd(id, "chooseteam")
SetHookChainReturn(ATYPE_INTEGER, 0)
SetHookChainReturn(ATYPE_INTEGER, 0)
return HC_SUPERCEDE
return HC_BREAK
}
}
return HC_CONTINUE
return HC_CONTINUE

}
}


stock center_print(id, const msg[], any:...)
stock center_print(id, const msg[], any:...)
{
{
new arg[50]
new arg[50]
vformat(arg, charsmax(arg), msg, 3)
vformat(arg, charsmax(arg), msg, 3)
if(id == 0)
if(id == 0)
{
{
for(new z = 1 ; z <= iMaxPlayers ; z++)
for(new z = 1 ; z <= iMaxPlayers ; z++)
{
{
if(!is_user_connected(z))
if(!is_user_connected(z))
{
{
continue
continue
}
}
engfunc(EngFunc_ClientPrintf, z, 1, arg)
engfunc(EngFunc_ClientPrintf, z, 1, arg)
}
}
}
}
else
else
{
{
engfunc(EngFunc_ClientPrintf, id, 1, arg)
engfunc(EngFunc_ClientPrintf, id, 1, arg)
}
}
}
}


public client_putinserver(id)
public client_putinserver(id)
{
{
if(ready[id])
if(ready[id])
{
{
ready[id] = false
ready[id] = false
ready_count--
ready_count--
}
}
g_iFrags[id] = 0
g_iFrags[id] = 0
g_iDeaths[id] = 0
g_iDeaths[id] = 0
fn_update_server_name(id)
fn_update_server_name(id)
if(private && pug_state != ALIVE)
if(private && pug_state != ALIVE)
{
{
set_task(1.0, "pfn_set_team", id + 666)
set_task(1.0, "pfn_set_team", id + 666)
}
}
}
}
public pfn_set_team(id)
public pfn_set_team(id)
{
{
id -= 666
id -= 666
if(!is_user_connected(id))
if(!is_user_connected(id))
return
return
static _c_team, _sz__steam_id_put[32]
static _c_team, _sz__steam_id_put[32]
get_user_authid(id, _sz__steam_id_put, charsmax(_sz__steam_id_put))
get_user_authid(id, _sz__steam_id_put, charsmax(_sz__steam_id_put))
if(TrieKeyExists(g_private, _sz__steam_id_put))
if(TrieKeyExists(g_private, _sz__steam_id_put))
{
{
TrieGetCell(g_private, _sz__steam_id_put, _c_team)
TrieGetCell(g_private, _sz__steam_id_put, _c_team)
if(!(1<= _c_team <= 3))
if(!(1<= _c_team <= 3))
{
{
return
return
}
}
if(_c_team == 3)
if(_c_team == 3)
{
{
rg_join_team(id, TEAM_SPECTATOR)
rg_join_team(id, TEAM_SPECTATOR)
return
return
}
}
if(get_user_team(id) == _c_team)
if(get_user_team(id) == _c_team)
{
{
return
return
}
}
rg_set_user_team(id, _c_team == 1 ? TEAM_TERRORIST : TEAM_CT)
rg_set_user_team(id, _c_team == 1 ? TEAM_TERRORIST : TEAM_CT)
ExecuteHam(Ham_CS_RoundRespawn, id)
ExecuteHam(Ham_CS_RoundRespawn, id)
}
}
}
}
public client_disconnect(id)
public client_disconnect(id)
{
{
if(is_intermission)
{
return
}
if(ready[id])
if(ready[id])
{
{
ready[id] = false
ready[id] = false
ready_count--
ready_count--