Pug Mod 1.3

Created Diff never expires
#include <amxmodx>
#include <amxmodx>
#include <hamsandwich>
#include <hamsandwich>
#include <fakemeta>
#include <fakemeta>
#include <reapi>
#include <reapi>
#include <celltrie>
#include <celltrie>


#define PLUGIN "PUG MOD"
#define PLUGIN "PUG MOD"
#define VERSION "1.21"
#define VERSION "1.21"
#define AUTHOR "Sugisaki"
#define AUTHOR "Sugisaki"


#define END_ROUND_KNIFE_FIX
#define END_ROUND_KNIFE_FIX


#if AMXX_VERSION_NUM >= 183
#if AMXX_VERSION_NUM >= 183
#define client_disconnect client_disconnected
#define client_disconnect client_disconnected
#endif
#endif


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 bool:half_time
new bool:half_time


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 gMsgTeamScore


new bool:is_intermission
new bool:is_intermission


new pcvar_knife

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 g_vote_menues_count
new Trie:g_vote_menues
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", "1"},
{"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
g_vote_menues_count = 2
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_vote_menues = TrieCreate()
pcvar_knife = register_cvar("pug_knife", "0")
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")
gMsgTeamScore = get_user_msgid("TeamScore")


register_message(gMsgTeamScore, "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)
emessage_begin(MSG_ALL, gMsgTeamScore)
ewrite_string("CT")
ewrite_string("CT")
ewrite_short(g_iRound_team[CT])
ewrite_short(g_iRound_team[CT])
emessage_end()
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)
emessage_begin(MSG_ALL, gMsgTeamScore)
ewrite_string("TERRORIST")
ewrite_string("TERRORIST")
ewrite_short(g_iRound_team[TT])
ewrite_short(g_iRound_team[TT])
emessage_end()
emessage_end()
}
}


fn_update_server_name(0)
fn_update_server_name(0)


if(g_iRounds == 15 && !half_time)
if(g_iRounds == 15 && !half_time)
{
{
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
half_time = true
half_time = true
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")
SetHookChainReturn(ATYPE_INTEGER, 1)
SetHookChainReturn(ATYPE_INTEGER, 1)
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
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")
SetHookChainReturn(ATYPE_INTEGER, 1)
SetHookChainReturn(ATYPE_INTEGER, 1)
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_iFrags, 0, sizeof(g_iFrags))
arrayset(g_iDeaths, 0, sizeof(g_iDeaths))
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(dh)
while(dh)
{
{
trim(file)
trim(file)
if(check_bsp_file(file))
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)))
if(!next_file(dh, file, charsmax(file)))
{
{
close_dir(dh)
close_dir(dh)
dh = false
dh = false
}
}
}
}
}
}
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
half_time = false
half_time = 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 szPlugin[5]
new szPlugin[5]
num_to_str(Plugin, szPlugin, charsmax(szPlugin))
num_to_str(Plugin, szPlugin, charsmax(szPlugin))
*/
*/
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)
{
{
if(pug_state == ALIVE && !round_knife)
if(pug_state == ALIVE && !round_knife)
{
{
unregister_message(gMsgStatusIcon, gMsgRegisterStatusIcon)
unregister_message(gMsgStatusIcon, gMsgRegisterStatusIcon)
return PLUGIN_CONTINUE
return PLUGIN_CONTINUE
}
}
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")
register_native("pug_register_vote", "_native_register_vote")
register_native("pug_next_vote", "_native_next_vote")
}
public _native_register_vote(pl, pr)
{
//pug_register_vote(funcion[])
new string[32], num[4]
get_string(1, string, charsmax(string))
num_to_str(g_vote_menues_count, num, charsmax(num))
new arr[2]
arr[0] = get_func_id(string, pl)
if(!arr[0])
{
log_amx("Funcion %s no existe", string)
return
}
arr[1] = pl
TrieSetArray(g_vote_menues, num, arr, sizeof(arr))
g_vote_menues_count += 1
}
public _native_next_vote(pl, pr)
{
next_vote();
}
}
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
new count_t, players[32], count_ct
if(!(1 <= slot <= 2))
if(!(1 <= slot <= 2))
{
{
if(slot == 5)
if(slot == 5)
{
{
get_players(players, count_t, "e", "TERRORIST")
get_players(players, count_t, "e", "TERRORIST")
get_players(players, count_ct, "e", "CT")
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) )
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)
client_print(id, print_chat, "%s Todos los equipos se encuentran llenos", TAG)
SetHookChainReturn(ATYPE_INTEGER, 0)
SetHookChainReturn(ATYPE_INTEGER, 0)
return HC_BREAK
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", TAG)
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_BREAK
return HC_BREAK
}
}
new count
new count
get_players(players, count, "e", slot == 1 ? "TERRORIST" : "CT")
get_players(players, count, "e", slot == 1 ? "TERRORIST" : "CT")


if(count >= (get_pcvar_num(pcvar_max_players) / 2) )
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)
SetHookChainReturn(ATYPE_INTEGER, 0)
SetHookChainReturn(ATYPE_INTEGER, 0)
return HC_BREAK
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