RSSy MYGO.pl Opublikowano Sierpień 19, 2022 o 21:42 RSSy Udostępnij Opublikowano Sierpień 19, 2022 o 21:42 I use this plugin to mute and gag players. The problem is that when an admin gags a player and said player disconnects, when a new player joins that slot, he gets automatically gagged. Is there a way to avoid or fix this? Thanks! PHP Code: #include <amxmodx> #include <amxmisc> #include <fakemeta> #pragma semicolon 1 #define SZPREFIX "!g[CS 1.6]" const OFFSET_CSMENUCODE = 205; const OFFSET_MENU_OFFSET = 5; enum _:MUTE_STRUCT { MICROPHONE, CHAT, GAGGED }; enum _:GAG_STRUCT { PLAYER, TARGET, TIME }; new const TITTLE_MENUES[][] = { "MICROPHONE", "CHAT", "ALL \d[GAG]" }; new g_mute[33][MUTE_STRUCT][33]; new g_gag[33][GAG_STRUCT]; new g_page[33]; new g_maxplayers[1 char]; new g_msgsaytext; public plugin_init() { register_plugin("Mute Menú", "1.0", "Cristian'"); register_clcmd("say", "clcmd_say"); register_clcmd("say_team", "clcmd_say"); register_clcmd("say /mute", "clcmd_mute"); register_clcmd("say_team /mute", "clcmd_mute"); register_clcmd("AMORDAZAR_TIEMPO", "clcmd_gag"); register_forward(FM_Voice_SetClientListening, "fw_Voice_SetClientListening"); g_msgsaytext = get_user_msgid("SayText"); register_message(g_msgsaytext, "message_saytext"); g_maxplayers{0} = get_maxplayers(); set_task(120.0, "print_message", 0, _, _, "b"); } public print_message() chat_color(0, "%s !yMUTE !g/MUTE", SZPREFIX); public clcmd_say(id) { if (g_gag[id][PLAYER]) { chat_color(id, "%s !yYou are muted. Can't speak or use the chat", SZPREFIX); return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } public clcmd_mute(id) { static menu; menu = menu_create("\r[Vtl] \yMute Menu ", "handled_clcmd_mute"); menu_additem(menu, "Silence microphone", "1", 0); menu_additem(menu, "Silence chat", "2", 0); if (get_user_flags(id) & ADMIN_RCON) menu_additem(menu, "Gag a player", "3", 0); menu_display(id, menu); return PLUGIN_HANDLED; } public handled_clcmd_mute(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return; } g_page[id] = item; show_menu_players(id); menu_destroy(menu); } public show_menu_players(id) { static menu, i, sztext[128], num[7], name[32]; format(sztext, charsmax(sztext), "\yMUTE %s", TITTLE_MENUES[g_page[id]]); menu = menu_create(sztext, "handled_show_players"); switch(g_page[id]) { case MICROPHONE: { for (i = 1; i <= g_maxplayers{0}; i++) { if (!is_user_connected(i)) continue; if (i == id) continue; if (get_user_flags(i) & ADMIN_RCON) continue; num_to_str(i, num, charsmax(num)); get_user_name(i, name, charsmax(name)); format(sztext, charsmax(sztext), "%s%s %s", (g_mute[id][MICROPHONE][i]) ? "\d" : "\w", name, (g_mute[id][MICROPHONE][i]) ? "\y[MUTED]" : ""); menu_additem(menu, sztext, num); } } case CHAT: { for (i = 1; i <= g_maxplayers{0}; i++) { if (!is_user_connected(i)) continue; if (i == id) continue; if (get_user_flags(i) & ADMIN_RCON) continue; num_to_str(i, num, charsmax(num)); get_user_name(i, name, charsmax(name)); format(sztext, charsmax(sztext), "%s%s %s", (g_mute[id][CHAT][i]) ? "\d" : "\w", name, (g_mute[id][CHAT][i]) ? "\y[MUTED]" : ""); menu_additem(menu, sztext, num); } } case GAGGED: { if (!(get_user_flags(id) & ADMIN_RCON)) { menu_destroy(menu); return; } for (i = 1; i <= g_maxplayers{0}; i++) { if (!is_user_connected(i)) continue; if (i == id) continue; if (get_user_flags(i) & ADMIN_RCON) continue; num_to_str(i, num, charsmax(num)); get_user_name(i, name, charsmax(name)); format(sztext, charsmax(sztext), "%s%s %s", (g_gag[i][PLAYER]) ? "\d" : "\w", name, (g_gag[i][PLAYER]) ? "[GAGGED]" : ""); menu_additem(menu, sztext, num); } } } menu_setprop(menu, MPROP_BACKNAME, "BACK"); menu_setprop(menu, MPROP_NEXTNAME, "NEXT"); menu_setprop(menu, MPROP_EXITNAME, "RETURN"); set_pdata_int(id, OFFSET_CSMENUCODE, false, OFFSET_MENU_OFFSET); menu_display(id, menu); } public handled_show_players(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); clcmd_mute(id); return; } static target, num[7], callback, data, name[32]; menu_item_getinfo(menu, item, data, num, charsmax(num), _, _, callback); target = str_to_num(num); if (is_user_connected(target)) { switch(g_page[id]) { case MICROPHONE: { g_mute[id][MICROPHONE][target] = !(g_mute[id][MICROPHONE][target]); get_user_name(target, name, charsmax(name)); chat_color(id, "%s !yYou %s the micropgone for !g%s!y.", SZPREFIX, (g_mute[id][MICROPHONE][target]) ? "turned off" : "turned on", name); } case CHAT: { g_mute[id][CHAT][target] = !(g_mute[id][CHAT][target]); get_user_name(target, name, charsmax(name)); chat_color(id, "%s !yYou %s chat for !g%s!y.", SZPREFIX, (g_mute[id][CHAT][target]) ? "turned off" : "turned on", name); } case GAGGED: { if (!(get_user_flags(id) & ADMIN_RCON)) { menu_destroy(menu); return; } if (g_gag[target][PLAYER]) { static name[32], name2[32]; get_user_name(id, name, charsmax(name)); get_user_name(target, name2, charsmax(name2)); chat_color(0, "%s !g%s!y ungagged !g%s!y.", SZPREFIX, name, name2); g_gag[target][PLAYER] = false; return; } g_gag[id][TARGET] = target; client_cmd(id, "messagemode ^"AMORDAZAR_TIEMPO^""); } } } else chat_color(id, "%s !yPlayer disconnected from the server", SZPREFIX); menu_destroy(menu); show_menu_players(id); } public clcmd_gag(id) { if (!g_gag[id][TARGET]) return; static text[12], name[32], name2[32]; read_args(text, charsmax(text)); remove_quotes(text); trim(text); if (!isdigit(text[0])) { chat_color(id, "%s !yNumbers only.", SZPREFIX); return; } if (!strlen(text) || strlen(text) < 1) { chat_color(id, "%s !yValue higher than 0.", SZPREFIX); return; } get_user_name(id, name, charsmax(name)); get_user_name(g_gag[id][TARGET], name2, charsmax(name2)); g_gag[id][TIME] = str_to_num(text); g_gag[g_gag[id][TARGET]][PLAYER] = true; chat_color(0, "%s !g%s!y %s!g%s!y for !g%d %s!y.", SZPREFIX, name2, g_gag[id][TIME], (g_gag[id][TIME] > 1) ? "minutes" : "minute"); set_task(float(g_gag[id][TIME]) * 60.0, "task_player_gag", g_gag[id][TARGET]); } public task_player_gag(id) { static name[32]; get_user_name(id, name, charsmax(name)); g_gag[id][PLAYER] = false; chat_color(0, "%s !yPlayer !g%s!y can write and speak again", SZPREFIX, name); } public fw_Voice_SetClientListening(receiver, sender, listen) { if (receiver == sender) return FMRES_IGNORED; if (g_mute[receiver][MICROPHONE][sender] || g_gag[sender][PLAYER]) { engfunc(EngFunc_SetClientListening, receiver, sender, false); return FMRES_SUPERCEDE; } return FMRES_IGNORED; } public message_saytext(msgid, dest, id) { if (g_mute[id][CHAT][get_msg_arg_int(1)]) return PLUGIN_HANDLED; return PLUGIN_CONTINUE; } stock chat_color(id, const input[], any:...) { static message[191]; vformat(message, 190, input, 3); replace_all(message, 190, "!g", "^4"); replace_all(message, 190, "!t", "^3"); replace_all(message, 190, "!y", "^1"); message_begin((id) ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, get_user_msgid("SayText"), .player = id); write_byte((id) ? id : 33); write_string(message); message_end(); } Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi