f0.gg-kreedzsrv/amxmodx/scripting/KZ_Chat.sma

318 lines
8.4 KiB
Plaintext
Raw Normal View History

2021-07-25 12:20:46 +00:00
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#define PLUGIN "KZ[L]Chat"
#define VERSION "1.05"
#define AUTHOR "`L."
#pragma tabsize 0
new g_msgChannel;
new g_Values[10][] = {{255, 255, 255}, {255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 0}, {255, 0, 255}, {0, 255, 255}, {227, 96, 8}, {45, 89, 116}, {103, 44, 38}};
new Float:g_Pos[4][] = {{0.0, 0.0}, {0.05, 0.55}, {-1.0, 0.2}, {-1.0, 0.7}};
// ALL CHAT
new COLCHAR[3][2] = { "^x03"/*team col*/, "^x04"/*green*/, "^x01"/*white*/ };
new alv_sndr, alv_str2[26], alv_str4[101];
new msg[200];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say", "cmdSayChat", _, "@[@|@|@][w|r|g|b|y|m|c]<text> - displays hud message");
register_clcmd("say_team", "cmdSayAdmin", _, "@<text> - displays message to admins");
register_concmd("amx_chat", "cmdChat", _, "<message> - sends message to admins");
register_message(get_user_msgid("SayText"), "col_changer");
register_message(get_user_msgid("ShowMenu"), "message_show_menu");
register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu");
register_dictionary("common.txt");
}
public cmdSayChat(id, level, cid) {
if(!cmd_access(id, ADMIN_CHAT, cid, 2,false))
return PLUGIN_CONTINUE;
new said[6], i = 0;
read_argv(1, said, charsmax(said));
while (said[i] == '@')
i++
if(!i || i > 3)
return PLUGIN_CONTINUE;
new message[192], a = 0;
read_args(message, charsmax(message));
remove_quotes(message);
switch(said[i]) {
case 'r': a = 1;
case 'g': a = 2;
case 'b': a = 3;
case 'y': a = 4;
case 'm': a = 5;
case 'c': a = 6;
case 'o': a = 7;
}
new n, s = i;
if(a) {
n++;
s++;
}
while(said[s] && isspace(said[s])) {
n++;
s++;
}
new name[32];
get_user_name(id, name, charsmax(name));
if(++g_msgChannel > 6 || g_msgChannel < 3)
g_msgChannel = 3;
new Float:verpos = g_Pos[i][1] + float(g_msgChannel) / 35.0;
set_hudmessage(g_Values[a][0], g_Values[a][1], g_Values[a][2], g_Pos[i][0], verpos, 0, 6.0, 6.0, 0.5, 0.15, -1);
show_hudmessage(0, "%s : %s", name, message[i + n]);
return PLUGIN_HANDLED;
}
public cmdSayAdmin(id) {
new said[2];
read_argv(1, said, charsmax(said));
if(said[0] != '@')
return PLUGIN_CONTINUE;
new message[192], name[32];
new players[32], inum, pl;
read_args(message, charsmax(message));
remove_quotes(message);
get_user_name(id, name, charsmax(name));
if(is_user_admin(id))
format(message, charsmax(message), "^1[^4ADMINs^1/^4VIPs^1] ^3%s^1 : %s", name, message[1]);
else
format(message, charsmax(message), "^1(USER) %s : %s", name, message[1]);
get_players(players, inum, "ch");
for(new i = 0; i < inum; ++i) {
pl = players[i];
if(pl == id || get_user_flags(pl) & ADMIN_CHAT)
ColorChat(id, RED, "%s", message);
}
return PLUGIN_HANDLED;
}
public cmdChat(id) {
if(!access(id, ADMIN_CHAT))
return PLUGIN_HANDLED;
new message[192];
read_args(message, charsmax(message));
remove_quotes(message);
if(!message[0])
return PLUGIN_HANDLED;
new name[32], players[32], inum, authid[32], pl; //, userid;
get_user_authid(id, authid, charsmax(authid));
get_user_name(id, name, charsmax(name));
//userid = get_user_userid(id);
get_players(players, inum, "ch");
log_amx("Chat: ^"%s [%s]^" chat ^"%s^"", name, authid, message);
log_message("^"%s [%s]^" triggered ^"amx_chat^" (text ^"%s^")", name, authid, message);
format(message, charsmax(message), "(ADMINS) %s : %s", name, message);
console_print(id, "%s", message);
for(new i = 0; i < inum; ++i) {
pl = players[i];
if(access(pl, ADMIN_CHAT))
client_print(pl, print_chat, "%s", message);
}
return PLUGIN_HANDLED;
}
/////////////////////////// ALL CHAT /////////////////////////////////
public col_changer(msg_id, msg_dest, rcvr) {
new str2[26];
get_msg_arg_string(2, str2, 25);
if(equal(str2, "#Cstrike_Chat", 13)) {
new str3[22];
get_msg_arg_string(3, str3, 21);
if(!strlen(str3)) {
new str4[101], reshetka;
get_msg_arg_string(4, str4, charsmax(str4));
if(containi(str4, "#") != -1) {
for(new i = 0; i <= strlen(str4); i++)
if(str4[i] == '#') reshetka++;
if(reshetka >= 5)
return PLUGIN_CONTINUE;
}
new sndr = get_msg_arg_int(1);
new bool:is_team_msg = !bool:equal(str2, "#Cstrike_Chat_All", 17);
new sndr_team = get_user_team(sndr);
new bool:is_sndr_spec = !bool:(0 < sndr_team < 3);
new bool:same_as_last = bool:(alv_sndr == sndr && equal(alv_str2, str2) && equal(alv_str4, str4));
if(!same_as_last) {
if(!(is_team_msg && (is_sndr_spec || is_team_msg))) {
new flags[5], team[10];
if(is_user_alive(sndr))
flags = "bch";
else
flags = "ach";
if(is_team_msg) {
add(flags[strlen(flags)], 4, "e");
if(sndr_team == 1)
team = "TERRORIST";
else
team = "CT"
}
new players[32], num;
get_players(players, num, flags, team);
if(get_user_flags(sndr) & ADMIN_CFG)
buildmsg(sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 1, str4);
else
buildmsg(sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4);
for(new i=0; i < num; i++) {
message_begin(MSG_ONE, get_user_msgid("SayText"), _, players[i]);
write_byte(sndr);
write_string(msg);
message_end();
}
}
alv_sndr = sndr;
alv_str2 = str2;
alv_str4 = str4;
if(task_exists(411))
remove_task(411);
set_task(0.1, "task_clear_antiloop_vars", 411);
}
if(get_user_flags(sndr) & ADMIN_CFG) {
if(!same_as_last)
buildmsg(sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 1, str4);
set_msg_arg_string(2, msg);
set_msg_arg_string(4, "");
}
}
}
return PLUGIN_CONTINUE;
}
public buildmsg(sndr, is_sndr_spec, is_team_msg, sndr_team, namecol, msgcol, str4[]) {
new sndr_name[33];
get_user_name(sndr, sndr_name, 32);
new prefix[30] = "^x01";
if(is_sndr_spec)
prefix = "^x01[SPEC] ";
else if(!is_user_alive(sndr))
prefix = "^x01[DEAD] ";
if(is_team_msg) {
if(is_sndr_spec)
prefix = "^x01[Spectator] ";
else if(sndr_team == 1)
add(prefix[strlen(prefix)-1], 29, "[Terrorist] ");
else if(sndr_team == 2)
add(prefix[strlen(prefix)-1], 29, "[Counter-Terrorist] ");
}
format(msg, 199, "%s%s%s : %s%s", strlen(prefix) > 1 ? prefix : "", COLCHAR[namecol], sndr_name, COLCHAR[msgcol], str4);
return PLUGIN_HANDLED;
}
public task_clear_antiloop_vars() {
alv_sndr = 0;
alv_str2 = "";
alv_str4 = "";
return PLUGIN_HANDLED;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Auto Join CT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public message_show_menu(msgid, dest, id) {
if(!should_autojoin(id))
return PLUGIN_CONTINUE;
static team_select[] = "#Team_Select";
static menu_text_code[sizeof team_select];
get_msg_arg_string(4, menu_text_code, sizeof menu_text_code - 1);
if(!equal(menu_text_code, team_select))
return PLUGIN_CONTINUE;
set_force_team_join_task(id, msgid);
return PLUGIN_HANDLED;
}
public message_vgui_menu(msgid, dest, id) {
if(get_msg_arg_int(1) != 2 || !should_autojoin(id))
return PLUGIN_CONTINUE;
set_force_team_join_task(id, msgid);
return PLUGIN_HANDLED;
}
bool:should_autojoin(id) {
return (2 && !get_user_team(id) && !task_exists(id));
}
set_force_team_join_task(id, menu_msgid) {
static param_menu_msgid[2];
param_menu_msgid[0] = menu_msgid;
set_task(0.1, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid);
}
public task_force_team_join(menu_msgid[], id) {
if(get_user_team(id))
return;
force_team_join(id, menu_msgid[0]);
}
stock force_team_join(id, menu_msgid, const team[] = "2", const class[] = "1") {
static jointeam[] = "jointeam";
if(class[0] == '0') {
engclient_cmd(id, jointeam, team);
return;
}
static msg_block, joinclass[] = "joinclass";
msg_block = get_msg_block(menu_msgid);
set_msg_block(menu_msgid, BLOCK_SET);
engclient_cmd(id, jointeam, team);
engclient_cmd(id, joinclass, class)
set_msg_block(menu_msgid, msg_block);
}