#include <amxmodx>
#include <amxmisc>
#pragma semicolon 1
enum Color {
NORMAL = 1, // clients scr_concolor cvar color
GREEN, // Green Color
TEAM_COLOR, // Red, grey, blue
GREY, // grey
RED, // Red
BLUE, // Blue
};
new TeamName[][] = {
"",
"TERRORIST",
"CT",
"SPECTATOR"
};
// - - - - - - - - - - -
#define MAX_GROUPS 11
new g_Rang[MAX_GROUPS][] = {
"[ DETINATOR ]",
"[ Manager ]",
"[ Owner ]",
"[ Co-Owner ]",
"[ God ]",
"[ Semi-God ]",
"[ Moderator ]",
"[ Administrator ]",
"[ Helper ]",
"[ Admin In Proba ]",
"[ Nume Securizat ]"
};
new g_RangFlag[MAX_GROUPS][] = {
"abcdefghijklmnopqrstu",
"abcdefghijklmnopqrst",
"abcdefijmnopqrstu",
"bcdefijmopqrstu",
"bcdefijmioqrst",
"bcdefijmioqrs",
"bcdefijmioqr",
"bcefimo",
"bceim",
"bcei",
"b"
};
// - - - - - - - - - - -
new g_RangFlag_Value[MAX_GROUPS];
new cvar_type;
public plugin_init() {
register_plugin("RangAdminChat", "0.6", "Ex3cuTioN");
register_clcmd("say","hook_say");
register_clcmd("say_team","hook_say2");
for(new i=0; i<MAX_GROUPS; i++) {
g_RangFlag_Value = read_flags(g_Rang);
}
cvar_type = register_cvar("amx_rang_chat","1");
}
public hook_say(id) {
if(is_user_bot(id)) {
return PLUGIN_CONTINUE;
}
new nick[32];
get_user_name(id,nick,31);
static chat[192];
read_args(chat, sizeof(chat) - 1);
remove_quotes(chat);
if(equali(chat,"")) {
return PLUGIN_CONTINUE;
}
if(is_user_admin(id)) {
for(new i=0; i<MAX_GROUPS; i++) {
if(get_user_flags(id) == read_flags(g_RangFlag)) {
switch(get_pcvar_num(cvar_type)) {
case 1:
{
ColorChat(0,TEAM_COLOR,"*^x04%s^x03*%s^x01 : %s",g_Rang,nick,chat);
}
case 2:
{
ColorChat(0,TEAM_COLOR,"%s^x01(^x04%s^x01) : %s",nick,g_Rang,chat);
}
case 3:
{
ColorChat(0,GREEN,"[%s]^x03 %s^x01 : %s",g_Rang,nick,chat);
}
}
return PLUGIN_HANDLED;
}
}
}
else {
if(is_user_alive(id)) {
ColorChat(0,TEAM_COLOR,"%s^x01 : %s",nick,chat);
}
else {
ColorChat(0,TEAM_COLOR,"*Dead*%s^x01 : %s",nick,chat);
}
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public hook_say2(id) {
if(is_user_bot(id)) {
return PLUGIN_CONTINUE;
}
new nick[32];
get_user_name(id,nick,31);
static chat[192];
read_args(chat, sizeof(chat) - 1);
remove_quotes(chat);
if(equali(chat,"")) {
return PLUGIN_CONTINUE;
}
if(is_user_admin(id)) {
for(new i=0; i<MAX_GROUPS; i++) {
if(get_user_flags(id) == read_flags(g_RangFlag)) {
new players[32],num;
get_players(players,num,"c");
for(new x=0; x<num; x++) {
if(get_user_team(id) == get_user_team(players[x])) {
switch(get_user_team(id)) {
case 1:
{
ColorChat(players[x],TEAM_COLOR,"(Terrorist)^x04[%s]^x03 %s^x01 : %s",g_Rang,nick,chat);
}
case 2:
{
ColorChat(players[x],TEAM_COLOR,"(Counter-Terrorist)^x04[%s]^x03 %s^x01 : %s",g_Rang,nick,chat);
}
case 3:
{
ColorChat(players[x],TEAM_COLOR,"(Spectator)^x04[%s]^x03 %s^x01 : %s",g_Rang,nick,chat);
}
}
}
return PLUGIN_HANDLED;
}
}
}
}
else {
new players[32],num;
get_players(players,num,"c");
for(new x=0; x<num; x++) {
if(get_user_team(id) == get_user_team(players[x])) {
switch(get_user_team(id)) {
case 1:
{
ColorChat(players[x],TEAM_COLOR,"(Terrorist) %s^x01 : %s",nick,chat);
}
case 2:
{
ColorChat(players[x],TEAM_COLOR,"(Counter-Terrorist) %s^x01 : %s",nick,chat);
}
case 3:
{
ColorChat(players[x],TEAM_COLOR,"(Spectator) %s^x01 : %s",nick,chat);
}
}
}
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...) {
new message[256];
switch(type) {
case NORMAL: // clients scr_concolor cvar color
{
message[0] = 0x01;
}
case GREEN: // Green
{
message[0] = 0x04;
}
default: // White, Red, Blue
{
message[0] = 0x03;
}
}
vformat(message[1], 251, msg, 4);
// Make sure message is not longer than 192 character. Will crash the server.
message[192] = '^0';
new team, ColorChange, index, MSG_Type;
if(id) {
MSG_Type = MSG_ONE;
index = id;
} else {
index = FindPlayer();
MSG_Type = MSG_ALL;
}
team = get_user_team(index);
ColorChange = ColorSelection(index, MSG_Type, type);
ShowColorMessage(index, MSG_Type, message);
if(ColorChange) {
Team_Info(index, MSG_Type, TeamName[team]);
}
}
ShowColorMessage(id, type, message[]) {
static bool:saytext_used;
static get_user_msgid_saytext;
if(!saytext_used)
{
get_user_msgid_saytext = get_user_msgid("SayText");
saytext_used = true;
}
message_begin(type, get_user_msgid_saytext, _, id);
write_byte(id);
write_string(message);
message_end();
}
Team_Info(id, type, team[]) {
static bool:teaminfo_used;
static get_user_msgid_teaminfo;
if(!teaminfo_used) {
get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
teaminfo_used = true;
}
message_begin(type, get_user_msgid_teaminfo, _, id);
write_byte(id);
write_string(team);
message_end();
return 1;
}
ColorSelection(index, type, Color:Type) {
switch(Type) {
case RED:
{
return Team_Info(index, type, TeamName[1]);
}
case BLUE:
{
return Team_Info(index, type, TeamName[2]);
}
case GREY:
{
return Team_Info(index, type, TeamName[0]);
}
}
return 0;
}
FindPlayer() {
new i = -1;
while(i <= get_maxplayers()) {
if(is_user_connected(++i))
return i;
}
return -1;
}