#include <amxmodx>
#include <csx>
#include <fakemeta>
#define PDATA_SAFE 2
#define OFFSET_LINUX 5
#define OFFSET_CSTEAMS 114
enum
{
FM_CS_TEAM_UNASSIGNED = 0,
FM_CS_TEAM_T,
FM_CS_TEAM_CT,
FM_CS_TEAM_SPECTATOR
}
new const team_names[][] =
{
"UNASSIGNED",
"TERRORIST",
"CT",
"SPECTATOR"
}
enum
{
RED = 1,
BLUE,
GREY
}
new g_msg_saytext, g_msg_teaminfo;
new bool:g_valid_player[33];
public plugin_init()
{
register_plugin("Chat Rank", "1.0", "cyby")
register_clcmd("say", "hook_say")
g_msg_saytext = get_user_msgid("SayText")
g_msg_teaminfo = get_user_msgid("TeamInfo")
}
public client_putinserver(id)
g_valid_player[id] = true
public client_disconnect(id)
g_valid_player[id] = false
public hook_say(id)
{
if(!g_valid_player[id])
return PLUGIN_HANDLED;
static chat[192], users_team, name[32]
read_argv(1, chat, charsmax(chat))
get_user_name(id, name, charsmax(name) - 1)
users_team = fm_cs_get_user_team(id)
static stats[8], crap[8], rank;
rank = get_user_stats(id, stats, crap)
if(is_user_alive(id))
{
if(users_team == FM_CS_TEAM_T)
{
if(get_user_flags(id) & ADMIN_SLAY)
chat_color(0, id, users_team, RED, "^4[Rank: %d]^3 %s:^4 %s", rank, name, chat)
else
chat_color(0, id, users_team, RED, "^4[Rank: %d]^3 %s:^1 %s", rank, name, chat)
}
else if(users_team == FM_CS_TEAM_CT)
{
if(get_user_flags(id) & ADMIN_SLAY)
chat_color(0, id, users_team, BLUE, "^4[Rank: %d]^3 %s:^4 %s", rank, name, chat)
else
chat_color(0, id, users_team, BLUE, "^4[Rank: %d]^3 %s:^1 %s", rank, name, chat)
}
}
else
{
if(users_team == FM_CS_TEAM_SPECTATOR)
{
if(get_user_flags(id) & ADMIN_SLAY)
chat_color(0, id, users_team, GREY, "^4[Rank: %d]^3 *SPEC* %s:^4 %s", rank, name, chat)
else
chat_color(0, id, users_team, GREY, "^4[Rank: %d]^3 *SPEC* %s:^1 %s", rank, name, chat)
}
else if(users_team == FM_CS_TEAM_T)
{
if(get_user_flags(id) & ADMIN_SLAY)
chat_color(0, id, users_team, RED, "^4[Rank: %d]^3 *DEAD* %s:^4 %s", rank, name, chat)
else
chat_color(0, id, users_team, RED, "^4[Rank: %d]^3 *DEAD* %s:^1 %s", rank, name, chat)
}
else if(users_team == FM_CS_TEAM_CT)
{
if(get_user_flags(id) & ADMIN_SLAY)
chat_color(0, id, users_team, BLUE, "^4[Rank: %d]^3 *DEAD* %s:^4 %s", rank, name, chat)
else
chat_color(0, id, users_team, BLUE, "^4[Rank: %d]^3 *DEAD* %s:^1 %s", rank, name, chat)
}
}
return PLUGIN_HANDLED
}
chat_color(team_format, player, player_team, color, const chat_msg[], ...)
{
static msg[192]
vformat(msg, charsmax(msg) - 1, chat_msg, 6)
if (team_format)
{
static id, i, players[32], count
get_players(players, count, "e", team_names[player_team])
for(i = 0; i < count; i++)
{
id = players
if(!id) continue;
message_begin(MSG_ONE_UNRELIABLE, g_msg_saytext, _, id)
write_byte(player)
write_string(msg)
message_end()
}
}
else
{
if (player_team == color)
{
message_begin(MSG_BROADCAST, g_msg_saytext)
write_byte(player)
write_string(msg)
message_end()
}
else
{
message_begin(MSG_BROADCAST, g_msg_teaminfo)
write_byte(player)
write_string(team_names[color])
message_end()
message_begin(MSG_BROADCAST, g_msg_saytext)
write_byte(player)
write_string(msg)
message_end()
message_begin(MSG_BROADCAST, g_msg_teaminfo)
write_byte(player)
write_string(team_names[player_team])
message_end()
}
}
}
stock fm_cs_get_user_team(id)
{
if(pev_valid(id) != PDATA_SAFE)
return FM_CS_TEAM_UNASSIGNED;
return get_pdata_int(id, OFFSET_CSTEAMS, OFFSET_LINUX);
}