I made something a while ago which automatically mutes players upon joining the server. You could give them access to use the voice chat by the /vrm chat command.
PHP Code:
/* Sublime AMXX Editor v2.2 */
#include <amxmodx>
#include <cromchat>
// #include <amxmisc>
// #include <cstrike>
// #include <engine>
#include <fakemeta>
// #include <hamsandwich>
// #include <fun>
// #include <xs>
// #include <sqlx>
#pragma semicolon 1
#if AMXX_VERSION_NUM < 183
const MAX_PLAYERS = 32;
#endif
#define PLUGIN "VoiceRecordManager [VRM]"
#define VERSION "1.0"
#define AUTHOR "LadderGoat"
new bool:g_bAdmin[MAX_PLAYERS + 1];
new bool:g_bMuted[MAX_PLAYERS + 1];
new bool:g_bPlayerMuted[MAX_PLAYERS + 1][MAX_PLAYERS + 1];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /vrm", "cmdVoiceRecordMenu");
register_forward(FM_Voice_SetClientListening, "forwardSetClientListening");
}
public client_putinserver(id)
{
if(get_user_flags(id) & ADMIN_KICK)
{
g_bAdmin[id] = true;
g_bMuted[id] = false;
}
else
{
g_bAdmin[id] = false;
g_bMuted[id] = true;
}
new iPlayers[MAX_PLAYERS], iNum;
get_players(iPlayers, iNum);
for(new i; i < iNum; i++)
{
g_bPlayerMuted[id][i] = false;
}
}
public client_disconnected(id)
{
g_bAdmin[id] = false;
g_bMuted[id] = false;
new iPlayers[MAX_PLAYERS], iNum;
get_players(iPlayers, iNum);
for(new i; i < iNum; i++)
{
g_bPlayerMuted[id][i] = false;
}
}
public cmdVoiceRecordMenu(id)
{
new mMenu = menu_create("\r[VRM]\w Voice Record Manager - Main Menu", "vrmMenuHandler");
menu_additem(mMenu, "Mute a player");
new szTemp[100];
formatex(szTemp, charsmax(szTemp), "%sVoice Record access management %s", g_bAdmin[id] ? "" : "\d", g_bAdmin[id] ? "" : "\r [NO ACCESS]");
menu_additem(mMenu, szTemp);
menu_display(id, mMenu);
}
public vrmMenuHandler(id, mMenu, iItem)
{
if(iItem == MENU_EXIT)
{
menu_destroy(mMenu);
return PLUGIN_HANDLED;
}
switch(iItem)
{
case 0: cmdMuteMenu(id);
case 1:
{
if(!g_bAdmin[id])
{
ColorChat(id, GREEN, "[VRM]^1 Only admins can access this menu.");
return PLUGIN_HANDLED;
}
cmdAccessMenu(id);
}
}
return PLUGIN_HANDLED;
}
public cmdMuteMenu(id)
{
if(is_user_connected(id))
{
new mMenu = menu_create("\r[VRM]\w Voice Record Manager - Mute Menu", "vrmMuteMenuHandler");
new iPlayers[MAX_PLAYERS], iNum, szName[MAX_PLAYERS + 1], szUserId[MAX_PLAYERS + 1], iPlayer, szTemp[512];
get_players(iPlayers, iNum, "ch");
for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i];
get_user_name(iPlayer, szName, charsmax(szName));
if(id == iPlayer)
formatex(szTemp, charsmax(szTemp), "\d%s", szName);
else
formatex(szTemp, charsmax(szTemp), "%s %s", szName, g_bPlayerMuted[id][iPlayer] ? "\r[MUTED]" : "");
num_to_str(get_user_userid(iPlayer), szUserId, charsmax(szUserId));
menu_additem(mMenu, szTemp, szUserId);
}
menu_display(id, mMenu);
}
}
public vrmMuteMenuHandler(id, mMenu, iItem)
{
if(iItem == MENU_EXIT)
{
menu_destroy(mMenu);
return PLUGIN_HANDLED;
}
new szData[6], szName[64];
new iItemAccess, iItemCallback;
menu_item_getinfo(mMenu, iItem, iItemAccess, szData, charsmax(szData), szName, charsmax(szName), iItemCallback);
new iUserId = str_to_num(szData);
new iPlayer = find_player("k", iUserId);
if(!is_user_connected(iPlayer))
{
ColorChat(id, GREEN, "[VRM]^1 The player you are looking for is no longer connected.");
menu_display(id, mMenu);
return PLUGIN_HANDLED;
}
if(id == iPlayer)
{
ColorChat(id, GREEN, "[VRM]^1 You can't mute yourself.");
menu_display(id, mMenu);
return PLUGIN_HANDLED;
}
if(g_bPlayerMuted[id][iPlayer])
g_bPlayerMuted[id][iPlayer] = false;
else
g_bPlayerMuted[id][iPlayer] = true;
get_user_name(iPlayer, szName, charsmax(szName));
ColorChat(id, GREEN, "[VRM]^1 You %s^4 %s", g_bPlayerMuted[id][iPlayer] ? "muted" : "unmuted", szName);
cmdMuteMenu(id);
return PLUGIN_HANDLED;
}
public cmdAccessMenu(id)
{
if(is_user_connected(id))
{
new mMenu = menu_create("\r[VRM]\w Voice Record Manager - Access Menu", "vrmAccessMenuHandler");
new iPlayers[MAX_PLAYERS], iNum, szName[MAX_PLAYERS + 1], szUserId[MAX_PLAYERS + 1], iPlayer, szTemp[512];
get_players(iPlayers, iNum, "ch");
for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i];
get_user_name(iPlayer, szName, charsmax(szName));
if(id == iPlayer)
formatex(szTemp, charsmax(szTemp), "\d%s", szName);
else
formatex(szTemp, charsmax(szTemp), "%s%s%s%s", g_bAdmin[iPlayer] ? "\d" : "\w", szName, g_bMuted[iPlayer] ? " \r[MUTED]" : "", g_bAdmin[iPlayer] ? " \r[IMMUNITY]" : "");
num_to_str(get_user_userid(iPlayer), szUserId, charsmax(szUserId));
menu_additem(mMenu, szTemp, szUserId);
}
menu_display(id, mMenu);
}
}
public vrmAccessMenuHandler(id, mMenu, iItem)
{
if(iItem == MENU_EXIT)
{
menu_destroy(mMenu);
return PLUGIN_HANDLED;
}
new szData[6], szName[64], szAdminName[MAX_PLAYERS];
new iItemAccess, iItemCallback;
menu_item_getinfo(mMenu, iItem, iItemAccess, szData, charsmax(szData), szName, charsmax(szName), iItemCallback);
new iUserId = str_to_num(szData);
new iPlayer = find_player("k", iUserId);
if(!is_user_connected(iPlayer))
{
ColorChat(id, GREEN, "[VRM]^1 The player you are looking for is no longer connected.");
menu_display(id, mMenu);
return PLUGIN_HANDLED;
}
if(id == iPlayer)
{
ColorChat(id, GREEN, "[VRM] Why would you do that?", szName);
menu_display(id, mMenu);
return PLUGIN_HANDLED;
}
if(g_bAdmin[iPlayer])
{
ColorChat(id, GREEN, "[VRM]^1 This user is imune from muting.");
menu_display(id, mMenu);
return PLUGIN_HANDLED;
}
if(g_bMuted[iPlayer])
g_bMuted[iPlayer] = false;
else
g_bMuted[iPlayer] = true;
get_user_name(iPlayer, szName, charsmax(szName));
get_user_name(id, szAdminName, charsmax(szAdminName));
ColorChat(0, GREEN, "[VRM] %s^1 has %s^3 %s.", szAdminName, g_bMuted[iPlayer] ? "taken access from" : "granted access to", szName);
menu_display(id, mMenu);
return PLUGIN_HANDLED;
}
public forwardSetClientListening(iReceiver, iSender, bool:bListen)
{
if(iReceiver == iSender)
return FMRES_SUPERCEDE;
if(g_bMuted[iSender])
{
engfunc(EngFunc_SetClientListening, iReceiver, iSender, false);
forward_return(FMV_CELL, false);
return FMRES_SUPERCEDE;
}
else
{
if(g_bPlayerMuted[iReceiver][iSender])
{
engfunc(EngFunc_SetClientListening, iReceiver, iSender, false);
forward_return(FMV_CELL, false);
return FMRES_SUPERCEDE;
}
}
engfunc(EngFunc_SetClientListening, iReceiver, iSender, true);
forward_return(FMV_CELL, true);
return FMRES_SUPERCEDE;
}