Gag
21 removals
Words removed | 88 |
Total words | 1760 |
Words removed (%) | 5.00 |
741 lines
18 additions
Words added | 87 |
Total words | 1759 |
Words added (%) | 4.95 |
739 lines
#include <amxmodx>
#include <amxmodx>
#include <amxmisc>
#include <amxmisc>
#include <fakemeta>
#include <fakemeta>
#include <regex>
#include <regex>
#include <nvault>
#include <nvault>
#include <WPMGPrintChatColor>
#include <cromchat>
#define LOG_GAGS
#define LOG_GAGS
#define IP_PATTERN "([0-9]+.*[1-9][0-9]+.*[0-9]+.*[0-9])"
#define IP_PATTERN "([0-9]+.*[1-9][0-9]+.*[0-9]+.*[0-9])"
#define VERSION "1.1"
#define VERSION "1.1"
enum _:GagState
enum _:GagState
{
{
GAG_NOT,
GAG_NOT,
GAG_YES,
GAG_YES,
GAG_EXPIRED
GAG_EXPIRED
};
};
enum _:GagTimeData
enum _:GagTimeData
{
{
DISPLAY[64],
DISPLAY[64],
MINUTES
MINUTES
};
};
new const g_GagTimes[][GagTimeData] =
new const g_GagTimes[][GagTimeData] =
{
{
{ "1 minute", 1 },
{ "1 minute", 1 },
{ "5 minutes", 5 },
{ "5 minutes", 5 },
{ "10 minutes", 10 },
{ "10 minutes", 10 },
{ "15 minutes", 15 },
{ "15 minutes", 15 },
{ "20 minutes", 20 },
{ "20 minutes", 20 },
{ "30 minutes", 30 },
{ "30 minutes", 30 },
{ "1 hour", 60 },
{ "1 hour", 60 },
{ "2 hours", 120 },
{ "2 hours", 120 },
{ "6 hours", 360 },
{ "6 hours", 360 },
{ "1 day", 1440 },
{ "1 day", 1440 },
{ "1 week", 10080 },
{ "1 week", 10080 },
{ "Permanent", 0 }
{ "Permanent", 0 }
}
}
new const g_szVaultName[] = "gagsystem";
new const g_szVaultName[] = "gagsystem";
new const g_szChatPrefix[] = "[GagSystem]";
new const g_szGagSound[] = "buttons/blip1.wav";
new const g_szGagSound[] = "buttons/blip1.wav";
new const g_szLineStyle[] = "======================================================";
new const g_szLineStyle[] = "======================================================";
#if defined LOG_GAGS
#if defined LOG_GAGS
new const g_szLogFile[] = "addons/amxmodx/logs/gag_system.log";
new const g_szLogFile[] = "addons/amxmodx/logs/gag_system.log";
#endif
#endif
new g_iNVaultHandle, Regex:g_iRegexIPPattern, g_iUnused, g_iHudChannel, g_iThinkingEnt;
new g_iNVaultHandle, Regex:g_iRegexIPPattern, g_iUnused, g_iHudChannel, g_iThinkingEnt;
new g_iGagTimeIndex[33], g_iUserTarget[33], bool:g_blIsUserMuted[33];
new g_iGagTimeIndex[33], g_iUserTarget[33], bool:g_blIsUserMuted[33];
new gp_blHudEnabled, gp_blEnableGagExpireMsg;
new gp_blHudEnabled, gp_blEnableGagExpireMsg;
new g_GagForward, g_UngagForward;
new g_GagForward, g_UngagForward;
public plugin_init()
public plugin_init()
{
{
register_plugin("Gag System", VERSION, "TheRedShoko @ AMXX-BG.info");
register_plugin("Gag System", VERSION, "Idk"); // I'll put 'idk' cuz i don't know the guy who made this plugin but i like it :)
register_cvar("gagsystem_shoko", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED);
register_cvar("gagsystem_shoko", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED);
register_clcmd("say", "CommandSayExecuted");
register_clcmd("say", "CommandSayExecuted");
register_clcmd("say_team", "CommandSayExecuted");
register_clcmd("say_team", "CommandSayExecuted");
g_GagForward = CreateMultiForward("user_gagged", ET_IGNORE, FP_CELL);
g_GagForward = CreateMultiForward("user_gagged", ET_IGNORE, FP_CELL);
g_UngagForward = CreateMultiForward("user_ungagged", ET_IGNORE, FP_CELL);
g_UngagForward = CreateMultiForward("user_ungagged", ET_IGNORE, FP_CELL);
gp_blHudEnabled = register_cvar("gagsystem_showhud", "1");
gp_blHudEnabled = register_cvar("gagsystem_showhud", "1");
gp_blEnableGagExpireMsg = register_cvar("gagsystem_printexpired", "1");
gp_blEnableGagExpireMsg = register_cvar("gagsystem_printexpired", "1");
#if AMXX_VERSION_NUM >= 183
#if AMXX_VERSION_NUM >= 183
hook_cvar_change(gp_blEnableGagExpireMsg, "GagExpireCvarChanged");
hook_cvar_change(gp_blEnableGagExpireMsg, "GagExpireCvarChanged");
#endif
#endif
register_forward(FM_Voice_SetClientListening, "PlayerVoiceSpeak", 0);
register_forward(FM_Voice_SetClientListening, "PlayerVoiceSpeak", 0);
register_forward(FM_ClientUserInfoChanged, "FwClientInfoChanged", 0);
register_forward(FM_ClientUserInfoChanged, "FwClientInfoChanged", 0);
register_forward(FM_Think, "FwEntityThink", 1);
register_forward(FM_Think, "FwEntityThink", 1);
register_clcmd("amx_gag", "CommandGag", ADMIN_SLAY, "<name | #id | ip> <time> <reason>");
register_clcmd("amx_gag", "CommandGag", ADMIN_SLAY, "<name | #id | ip> <time> <reason>");
register_clcmd("amx_ungag", "CommandUngag", ADMIN_SLAY, "<name | #id | ip>");
register_clcmd("amx_ungag", "CommandUngag", ADMIN_SLAY, "<name | #id | ip>");
register_clcmd("amx_gagmenu", "CommandGagMenu", ADMIN_SLAY);
register_clcmd("amx_gagmenu", "CommandGagMenu", ADMIN_SLAY);
register_clcmd("amx_TYPE_GAGREASON", "CommandGagReason", ADMIN_SLAY);
register_clcmd("amx_TYPE_GAGREASON", "CommandGagReason", ADMIN_SLAY);
register_clcmd("amx_cleangags", "CommandCleanDB", ADMIN_RCON);
register_clcmd("amx_cleangags", "CommandCleanDB", ADMIN_RCON);
#if AMXX_VERSION_NUM < 183
#if AMXX_VERSION_NUM < 183
g_iRegexIPPattern = regex_compile(IP_PATTERN, g_iUnused, "", 0);
g_iRegexIPPattern = regex_compile(IP_PATTERN, g_iUnused, "", 0);
#else
#else
g_iRegexIPPattern = regex_compile_ex(IP_PATTERN);
g_iRegexIPPattern = regex_compile_ex(IP_PATTERN);
#endif
#endif
g_iNVaultHandle = nvault_open(g_szVaultName);
g_iNVaultHandle = nvault_open(g_szVaultName);
if (g_iNVaultHandle == INVALID_HANDLE)
if (g_iNVaultHandle == INVALID_HANDLE)
{
{
set_fail_state("Failed to open NVault DB!");
set_fail_state("Failed to open NVault DB!");
}
}
g_iHudChannel = CreateHudSyncObj();
g_iHudChannel = CreateHudSyncObj();
g_iThinkingEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
g_iThinkingEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
set_pev(g_iThinkingEnt, pev_nextthink, get_gametime() + 0.1);
set_pev(g_iThinkingEnt, pev_nextthink, get_gametime() + 0.1);
}
}
public plugin_precache()
public plugin_precache()
{
{
precache_sound(g_szGagSound);
precache_sound(g_szGagSound);
}
}
public plugin_end()
public plugin_end()
{
{
nvault_close(g_iNVaultHandle);
nvault_close(g_iNVaultHandle);
regex_free(g_iRegexIPPattern);
regex_free(g_iRegexIPPattern);
}
}
public plugin_natives()
public plugin_natives()
{
{
register_native("is_user_gagged", "native_is_gagged");
register_native("is_user_gagged", "native_is_gagged");
register_native("gag_user", "native_gag_user");
register_native("gag_user", "native_gag_user");
register_native("gag_user_byid", "native_gag_id");
register_native("gag_user_byid", "native_gag_id");
register_native("ungag_user", "native_ungag_user");
register_native("ungag_user", "native_ungag_user");
register_native("ungag_user_byid", "native_ungag_id");
register_native("ungag_user_byid", "native_ungag_id");
}
}
public native_is_gagged()
public native_is_gagged()
{
{
new id = get_param(1);
new id = get_param(1);
new bool:shouldPrint = bool:get_param(2);
new bool:shouldPrint = bool:get_param(2);
if (!is_user_connected(id))
if (!is_user_connected(id))
{
{
log_error(AMX_ERR_NATIVE, "Invalid player ID %d", id);
log_error(AMX_ERR_NATIVE, "Invalid player ID %d", id);
return false;
return false;
}
}
return IsUserGagged(id, shouldPrint) == GAG_YES;
return IsUserGagged(id, shouldPrint) == GAG_YES;
}
}
public native_gag_user()
public native_gag_user()
{
{
new szIP[16], szName[32], iDuration, szReason[64], szAdmin[32];
new szIP[16], szName[32], iDuration, szReason[64], szAdmin[32];
get_string(1, szName, charsmax(szName));
get_string(1, szName, charsmax(szName));
get_string(2, szIP, charsmax(szIP));
get_string(2, szIP, charsmax(szIP));
iDuration = get_param(3);
iDuration = get_param(3);
get_string(4, szReason, charsmax(szReason));
get_string(4, szReason, charsmax(szReason));
get_string(5, szAdmin, charsmax(szAdmin));
get_string(5, szAdmin, charsmax(szAdmin));
if (!regex_match_c(szIP, g_iRegexIPPattern, g_iUnused))
if (!regex_match_c(szIP, g_iRegexIPPattern, g_iUnused))
{
{
log_error(AMX_ERR_NATIVE, "%s is not a valid IP Address!", szIP);
log_error(AMX_ERR_NATIVE, "%s is not a valid IP Address!", szIP);
return;
return;
}
}
if (iDuration < 0)
if (iDuration < 0)
{
{
log_error(AMX_ERR_NATIVE, "Time cannot be negative!");
log_error(AMX_ERR_NATIVE, "Time cannot be negative!");
return;
return;
}
}
GagUser(szName, szIP, iDuration, szReason, szAdmin);
GagUser(szName, szIP, iDuration, szReason, szAdmin);
}
}
public native_gag_id()
public native_gag_id()
{
{
new id;
new id;
id = get_param(1);
id = get_param(1);
if (!is_user_connected(id))
if (!is_user_connected(id))
{
{
log_error(AMX_ERR_NATIVE, "Invalid player ID %d", id);
log_error(AMX_ERR_NATIVE, "Invalid player ID %d", id);
return;
return;
}
}
new szName[32], szIP[16], szReason[64], iDuration, szAdmin[32];
new szName[32], szIP[16], szReason[64], iDuration, szAdmin[32];
iDuration = get_param(2);
iDuration = get_param(2);
if (iDuration < 0)
if (iDuration < 0)
{
{
log_error(AMX_ERR_NATIVE, "Time cannot be negative!");
log_error(AMX_ERR_NATIVE, "Time cannot be negative!");
return;
return;
}
}
get_string(3, szReason, charsmax(szReason));
get_string(3, szReason, charsmax(szReason));
get_string(4, szAdmin, charsmax(szAdmin));
get_string(4, szAdmin, charsmax(szAdmin));
get_user_name(id, szName, charsmax(szName));
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP), 1);
get_user_ip(id, szIP, charsmax(szIP), 1);
GagUser(szName, szIP, iDuration, szReason, szAdmin);
GagUser(szName, szIP, iDuration, szReason, szAdmin);
}
}
public native_ungag_user()
public native_ungag_user()
{
{
new szIP[16], szName[32], szAdmin[32];
new szIP[16], szName[32], szAdmin[32];
get_string(1, szName, charsmax(szName));
get_string(1, szName, charsmax(szName));
get_string(2, szIP, charsmax(szIP));
get_string(2, szIP, charsmax(szIP));
get_string(3, szAdmin, charsmax(szAdmin));
get_string(3, szAdmin, charsmax(szAdmin));
if (!regex_match_c(szIP, g_iRegexIPPattern, g_iUnused))
if (!regex_match_c(szIP, g_iRegexIPPattern, g_iUnused))
{
{
log_error(AMX_ERR_NATIVE, "%s is not a valid IP Address!", szIP);
log_error(AMX_ERR_NATIVE, "%s is not a valid IP Address!", szIP);
return;
return;
}
}
UngagUser(szName, szIP, szAdmin);
UngagUser(szName, szIP, szAdmin);
}
}
public native_ungag_id()
public native_ungag_id()
{
{
new id;
new id;
id = get_param(1);
id = get_param(1);
if (!is_user_connected(id))
if (!is_user_connected(id))
{
{
log_error(AMX_ERR_NATIVE, "Invalid player ID %d", id);
log_error(AMX_ERR_NATIVE, "Invalid player ID %d", id);
return;
return;
}
}
new szAdmin[32], szName[32], szIP[16];
new szAdmin[32], szName[32], szIP[16];
get_string(2, szAdmin, charsmax(szAdmin));
get_string(2, szAdmin, charsmax(szAdmin));
get_user_name(id, szName, charsmax(szName));
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP), 1);
get_user_ip(id, szIP, charsmax(szIP), 1);
UngagUser(szName, szIP, szAdmin);
UngagUser(szName, szIP, szAdmin);
}
}
public client_putinserver(id)
public client_putinserver(id)
{
{
g_blIsUserMuted[id] = IsUserGagged(id, false) == GAG_YES;
g_blIsUserMuted[id] = IsUserGagged(id, false) == GAG_YES;
}
}
#if AMXX_VERSION_NUM >= 183
#if AMXX_VERSION_NUM >= 183
public GagExpireCvarChanged(pcvar, szOldValue[], szNewValue[])
public GagExpireCvarChanged(pcvar, szOldValue[], szNewValue[])
{
{
if (str_to_num(szNewValue) == 1)
if (str_to_num(szNewValue) == 1)
{
{
set_pev(g_iThinkingEnt, pev_nextthink, get_gametime() + 1.0);
set_pev(g_iThinkingEnt, pev_nextthink, get_gametime() + 1.0);
}
}
}
}
#endif
#endif
public PlayerVoiceSpeak(receiver, id)
public PlayerVoiceSpeak(receiver, id)
{
{
if (receiver == id || !is_user_connected(id))
if (receiver == id || !is_user_connected(id))
{
{
return FMRES_IGNORED;
return FMRES_IGNORED;
}
}
if (g_blIsUserMuted[id])
if (g_blIsUserMuted[id])
{
{
engfunc(EngFunc_SetClientListening, receiver, id, false);
engfunc(EngFunc_SetClientListening, receiver, id, false);
return FMRES_SUPERCEDE;
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
return FMRES_IGNORED;
}
}
public FwClientInfoChanged(id)
public FwClientInfoChanged(id)
{
{
if (!is_user_connected(id))
if (!is_user_connected(id))
{
{
return FMRES_IGNORED;
return FMRES_IGNORED;
}
}
new szOldName[32], szNewName[32];
new szOldName[32], szNewName[32];
get_user_name(id, szOldName, charsmax(szOldName));
get_user_name(id, szOldName, charsmax(szOldName));
get_user_info(id, "name", szNewName, charsmax(szNewName));
get_user_info(id, "name", szNewName, charsmax(szNewName));
if (!equal(szOldName, szNewName) && szOldName[0] != EOS && IsUserGagged(id, false) == GAG_YES)
if (!equal(szOldName, szNewName) && szOldName[0] != EOS && IsUserGagged(id, false) == GAG_YES)
{
{
set_user_info(id, "name", szOldName);
set_user_info(id, "name", szOldName);
return FMRES_HANDLED;
return FMRES_HANDLED;
}
}
return FMRES_IGNORED;
return FMRES_IGNORED;
}
}
public FwEntityThink(iEnt)
public FwEntityThink(iEnt)
{
{
if (iEnt != g_iThinkingEnt || !get_pcvar_num(gp_blEnableGagExpireMsg))
if (iEnt != g_iThinkingEnt || !get_pcvar_num(gp_blEnableGagExpireMsg))
{
{
return;
return;
}
}
static iPlayers[32], iPlayersNum, id;
static iPlayers[32], iPlayersNum, id;
get_players(iPlayers, iPlayersNum);
get_players(iPlayers, iPlayersNum);
for (new i = 0; i < iPlayersNum; i++)
for (new i = 0; i < iPlayersNum; i++)
{
{
id = iPlayers[i];
id = iPlayers[i];
if (IsUserGagged(id, false) == GAG_EXPIRED)
if (IsUserGagged(id, false) == GAG_EXPIRED)
{
{
static szName[32];
static szName[32];
get_user_name(id, szName, charsmax(szName));
get_user_name(id, szName, charsmax(szName));
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g%s!y Player!t %s!y is no longer gagged!", g_szChatPrefix, szName);
CC_SendMessage(0, "&x01[&x04GAG&x01] &x03 Player &x04%s &x01is no longer gagged!", szName);
if (get_pcvar_num(gp_blHudEnabled))
if (get_pcvar_num(gp_blHudEnabled))
{
{
set_hudmessage(255, 0, 0, 0.05, 0.30);
set_hudmessage(255, 0, 0, 0.05, 0.30);
ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s gag has expired^n%s", g_szLineStyle, szName, g_szLineStyle);
ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s gag has expired^n%s", g_szLineStyle, szName, g_szLineStyle);
}
}
}
}
}
}
set_pev(iEnt, pev_nextthink, get_gametime() + 10.0);
set_pev(iEnt, pev_nextthink, get_gametime() + 10.0);
}
}
public CommandSayExecuted(id)
public CommandSayExecuted(id)
{
{
if (IsUserGagged(id) == GAG_YES)
if (IsUserGagged(id) == GAG_YES)
{
{
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
return PLUGIN_CONTINUE;
}
}
public CommandGag(id, iLevel, iCmdId)
public CommandGag(id, iLevel, iCmdId)
{
{
if (!cmd_access(id, iLevel, iCmdId, 4))
if (!cmd_access(id, iLevel, iCmdId, 4))
{
{
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
new szTarget[33], szTargetIP[16], szTime[8], szReason[64];
new szTarget[33], szTargetIP[16], szTime[8], szReason[64];
read_argv(1, szTarget, charsmax(szTarget));
read_argv(1, szTarget, charsmax(szTarget));
if (!regex_match_c(szTarget, g_iRegexIPPattern, g_iUnused))
if (!regex_match_c(szTarget, g_iRegexIPPattern, g_iUnused))
{
{
new iTarget = cmd_target(id, szTarget);
new iTarget = cmd_target(id, szTarget);
if (!iTarget)
if (!iTarget)
{
{
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
get_user_name(iTarget, szTarget, charsmax(szTarget));
get_user_name(iTarget, szTarget, charsmax(szTarget));
get_user_ip(iTarget, szTargetIP, charsmax(szTargetIP), 1);
get_user_ip(iTarget, szTargetIP, charsmax(szTargetIP), 1);
g_blIsUserMuted[iTarget] = true;
g_blIsUserMuted[iTarget] = true;
}
}
else
else
{
{
copy(szTargetIP, charsmax(szTargetIP), szTarget);
copy(szTargetIP, charsmax(szTargetIP), szTarget);
}
}
read_argv(2, szTime, charsmax(szTime));
read_argv(2, szTime, charsmax(szTime));
read_argv(3, szReason, charsmax(szReason));
read_argv(3, szReason, charsmax(szReason));
new iTime = str_to_num(szTime);
new iTime = str_to_num(szTime);
new szAdmin[32];
new szAdmin[32];
get_user_name(id, szAdmin, charsmax(szAdmin));
get_user_name(id, szAdmin, charsmax(szAdmin));
console_print(id, "%s", GagUser(szTarget, szTargetIP, iTime, szReason, szAdmin));
console_print(id, "%s", GagUser(szTarget, szTargetIP, iTime, szReason, szAdmin));
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
public CommandUngag(id, iLevel, iCmdId)
public CommandUngag(id, iLevel, iCmdId)
{
{
if (!cmd_access(id, iLevel, iCmdId, 2))
if (!cmd_access(id, iLevel, iCmdId, 2))
{
{
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
new szTarget[32], szTargetIP[16];
new szTarget[32], szTargetIP[16];
read_argv(1, szTarget, charsmax(szTarget));
read_argv(1, szTarget, charsmax(szTarget));
if (!regex_match_c(szTarget, g_iRegexIPPattern, g_iUnused))
if (!regex_match_c(szTarget, g_iRegexIPPattern, g_iUnused))
{
{
new iTarget = cmd_target(id, szTarget, CMDTARGET_ALLOW_SELF);
new iTarget = cmd_target(id, szTarget, CMDTARGET_ALLOW_SELF);
if (!iTarget)
if (!iTarget)
{
{
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
get_user_name(iTarget, szTarget, charsmax(szTarget));
get_user_name(iTarget, szTarget, charsmax(szTarget));
get_user_ip(iTarget, szTargetIP, charsmax(szTargetIP), 1);
get_user_ip(iTarget, szTargetIP, charsmax(szTargetIP), 1);
}
}
else
else
{
{
copy(szTargetIP, charsmax(szTargetIP), szTarget);
copy(szTargetIP, charsmax(szTargetIP), szTarget);
}
}
new szAdminName[32];
new szAdminName[32];
get_user_name(id, szAdminName, charsmax(szAdminName));
get_user_name(id, szAdminName, charsmax(szAdminName));
console_print(id, "%s", UngagUser(szTarget, szTargetIP, szAdminName));
console_print(id, "%s", UngagUser(szTarget, szTargetIP, szAdminName));
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
public CommandGagMenu(id, iLevel, iCmdId)
public CommandGagMenu(id, iLevel, iCmdId)
{
{
if (!cmd_access(id, iLevel, iCmdId, 1))
if (!cmd_access(id, iLevel, iCmdId, 1))
{
{
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
g_iGagTimeIndex[id] = 0;
g_iGagTimeIndex[id] = 0;
g_iUserTarget[id] = 0;
g_iUserTarget[id] = 0;
ShowGagMenu(id);
ShowGagMenu(id);
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
ShowGagMenu(id, page = 0)
ShowGagMenu(id, page = 0)
{
{
new iMenu = menu_create("\rGag Menu", "GagMenuHandler");
new iMenu = menu_create("\rGag Menu", "GagMenuHandler");
new iPlayers[32], iPlayersNum;
new iPlayers[32], iPlayersNum;
get_players(iPlayers, iPlayersNum);
get_players(iPlayers, iPlayersNum);
new szItem[64], szName[32], szIndex[8];
new szItem[64], szName[32], szIndex[8];
new iPlayer;
new iPlayer;
for (new i = 0; i < iPlayersNum; i++)
for (new i = 0; i < iPlayersNum; i++)
{
{
iPlayer = iPlayers[i];
iPlayer = iPlayers[i];
if (i % 6 == 0)
if (i % 6 == 0)
{
{
formatex(szItem, charsmax(szItem), "\yGag length \r[\w%s\r]^n", g_GagTimes[g_iGagTimeIndex[id]][DISPLAY]);
formatex(szItem, charsmax(szItem), "\yGag length \r[\w%s\r]^n", g_GagTimes[g_iGagTimeIndex[id]][DISPLAY]);
menu_additem(iMenu, szItem, "time");
menu_additem(iMenu, szItem, "time");
}
}
get_user_name(iPlayer, szName, charsmax(szName));
get_user_name(iPlayer, szName, charsmax(szName));
num_to_str(iPlayer, szIndex, charsmax(szIndex));
num_to_str(iPlayer, szIndex, charsmax(szIndex));
if (IsUserGagged(iPlayer, false))
if (IsUserGagged(iPlayer, false))
{
{
formatex(szItem, charsmax(szItem), "\y%s \r[\wGagged\r]", szName);
formatex(szItem, charsmax(szItem), "\y%s \r[\wGagged\r]", szName);
}
}
else if (get_user_flags(iPlayer) & ADMIN_IMMUNITY)
else if (get_user_flags(iPlayer) & ADMIN_IMMUNITY)
{
{
formatex(szItem, charsmax(szItem), "\d%s \r[\wHas immunity\r]", szName);
formatex(szItem, charsmax(szItem), "\d%s \r[\wHas immunity\r]", szName);
}
}
else
else
{
{
copy(szItem, charsmax(szItem), szName);
copy(szItem, charsmax(szItem), szName);
}
}
menu_additem(iMenu, szItem, szIndex);
menu_additem(iMenu, szItem, szIndex);
}
}
menu_display(id, iMenu, page);
menu_display(id, iMenu, page);
}
}
public GagMenuHandler(id, iMenu, Item)
public GagMenuHandler(id, iMenu, Item)
{
{
if (Item == MENU_EXIT)
if (Item == MENU_EXIT)
{
{
menu_destroy(iMenu);
menu_destroy(iMenu);
return;
return;
}
}
new szInfo[8], iTemp;
new szInfo[8], iTemp;
menu_item_getinfo(iMenu, Item, iTemp, szInfo, charsmax(szInfo), _, _, iTemp);
menu_item_getinfo(iMenu, Item, iTemp, szInfo, charsmax(szInfo), _, _, iTemp);
if (equal(szInfo, "time"))
if (equal(szInfo, "time"))
{
{
++g_iGagTimeIndex[id];
++g_iGagTimeIndex[id];
g_iGagTimeIndex[id] %= sizeof g_GagTimes;
g_iGagTimeIndex[id] %= sizeof g_GagTimes;
menu_destroy(iMenu);
menu_destroy(iMenu);
ShowGagMenu(id, Item / 7);
ShowGagMenu(id, Item / 7);
return;
return;
}
}
new iTarget = str_to_num(szInfo);
new iTarget = str_to_num(szInfo);
if (IsUserGagged(iTarget, false) == GAG_YES)
if (IsUserGagged(iTarget, false) == GAG_YES)
{
{
new szName[32], szIP[16], szAdminName[32];
new szName[32], szIP[16], szAdminName[32];
get_user_name(id, szAdminName, charsmax(szAdminName));
get_user_name(id, szAdminName, charsmax(szAdminName));
get_user_name(iTarget, szName, charsmax(szName));
get_user_name(iTarget, szName, charsmax(szName));
get_user_ip(iTarget, szIP, charsmax(szIP), 1);
get_user_ip(iTarget, szIP, charsmax(szIP), 1);
UngagUser(szName, szIP, szAdminName);
UngagUser(szName, szIP, szAdminName);
menu_destroy(iMenu);
menu_destroy(iMenu);
return;
return;
}
}
if (get_user_flags(iTarget) & ADMIN_IMMUNITY)
if (get_user_flags(iTarget) & ADMIN_IMMUNITY)
{
{
menu_destroy(iMenu);
menu_destroy(iMenu);
return;
return;
}
}
g_iUserTarget[id] = iTarget;
g_iUserTarget[id] = iTarget;
client_cmd(id, "messagemode amx_TYPE_GAGREASON");
client_cmd(id, "messagemode amx_TYPE_GAGREASON");
menu_destroy(iMenu);
menu_destroy(iMenu);
}
}
public CommandGagReason(id, iLevel, iCmdId)
public CommandGagReason(id, iLevel, iCmdId)
{
{
if (!cmd_access(id, iLevel, iCmdId, 2) || !is_user_connected(g_iUserTarget[id]))
if (!cmd_access(id, iLevel, iCmdId, 2) || !is_user_connected(g_iUserTarget[id]))
{
{
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
new szReason[64], szName[32], szIP[16], szAdminName[32];
new szReason[64], szName[32], szIP[16], szAdminName[32];
read_argv(1, szReason, charsmax(szReason));
read_argv(1, szReason, charsmax(szReason));
get_user_name(id, szAdminName, charsmax(szAdminName));
get_user_name(id, szAdminName, charsmax(szAdminName));
get_user_name(g_iUserTarget[id], szName, charsmax(szName));
get_user_name(g_iUserTarget[id], szName, charsmax(szName));
get_user_ip(g_iUserTarget[id], szIP, charsmax(szIP), 1);
get_user_ip(g_iUserTarget[id], szIP, charsmax(szIP), 1);
GagUser(szName, szIP, g_GagTimes[g_iGagTimeIndex[id]][MINUTES], szReason, szAdminName);
GagUser(szName, szIP, g_GagTimes[g_iGagTimeIndex[id]][MINUTES], szReason, szAdminName);
g_blIsUserMuted[g_iUserTarget[id]] = true;
g_blIsUserMuted[g_iUserTarget[id]] = true;
ShowGagMenu(id);
ShowGagMenu(id);
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
public CommandCleanDB(id, iLevel, iCmdId)
public CommandCleanDB(id, iLevel, iCmdId)
{
{
if (!cmd_access(id, iLevel, iCmdId, 1))
if (!cmd_access(id, iLevel, iCmdId, 1))
{
{
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
nvault_prune(g_iNVaultHandle, 0, get_systime());
nvault_prune(g_iNVaultHandle, 0, get_systime());
console_print(id, "Database has been cleaned.");
console_print(id, "Database has been cleaned.");
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
UngagUser(szName[], szIP[], szAdmin[])
UngagUser(szName[], szIP[], szAdmin[])
{
{
new szResult[64], szTemp[3];
new szResult[64], szTemp[3];
if (!nvault_get(g_iNVaultHandle, szIP, szTemp, charsmax(szTemp)))
if (!nvault_get(g_iNVaultHandle, szIP, szTemp, charsmax(szTemp)))
{
{
formatex(szResult, charsmax(szResult), "User with IP %s not found.", szIP);
formatex(szResult, charsmax(szResult), "User with IP %s not found.", szIP);
return szResult;
return szResult;
}
}
nvault_remove(g_iNVaultHandle, szIP);
nvault_remove(g_iNVaultHandle, szIP);
if (!equal(szName, szIP))
if (!equal(szName, szIP))
{
{
new iTarget = cmd_target(0, szName, 0);
new iTarget = cmd_target(0, szName, 0);
g_blIsUserMuted[iTarget] = false;
g_blIsUserMuted[iTarget] = false;
PrintChatColor(iTarget, PRINT_COLOR_PLAYERTEAM, "!g%s!y You have been ungagged by admin!t %s!y!", g_szChatPrefix, szAdmin);
CC_SendMessage(0, "&x01[&x04GAG&x01] &x03You have been ungagged by &x04%s", szAdmin);
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g%s!y Player!t %s!y has been ungagged by!g %s!y.", g_szChatPrefix, szName, szAdmin);
CC_SendMessage(0, "&x01[&x04GAG&x01] &x03Player &x03%s &x01has been ungagged by &x04%s", szName, szAdmin);
if (get_pcvar_num(gp_blHudEnabled))
if (get_pcvar_num(gp_blHudEnabled))
{
{
set_hudmessage(255, 0, 0, 0.05, 0.30);
set_hudmessage(255, 0, 0, 0.05, 0.30);
ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s has been ungagged by %s^n%s", g_szLineStyle, szName, szAdmin, g_szLineStyle);
ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s has been ungagged by %s^n%s", g_szLineStyle, szName, szAdmin, g_szLineStyle);
}
}
}
}
new id = find_player("d", szIP);
new id = find_player("d", szIP);
if (id != 0)
if (id != 0)
{
{
ExecuteForward(g_UngagForward, g_iUnused, id);
ExecuteForward(g_UngagForward, g_iUnused, id);
}
}
#if defined LOG_GAGS
#if defined LOG_GAGS
log_to_file(g_szLogFile, "[UNGAG] ADMIN: %s | TARGET_NAME: %s [IP: %s]", szAdmin, szName, szIP);
log_to_file(g_szLogFile, "[UNGAG] ADMIN: %s | TARGET_NAME: %s [IP: %s]", szAdmin, szName, szIP);
#endif
#endif
copy(szResult, charsmax(szResult), "Player has been ungagged");
copy(szResult, charsmax(szResult), "Player has been ungagged");
return szResult;
return szResult;
}
}
GagUser(szName[], szIP[], iDuration, szReason[], szAdminName[])
GagUser(szName[], szIP[], iDuration, szReason[], szAdminName[])
{
{
new iExpireTime = iDuration != 0 ? get_systime() + (iDuration * 60) : 0;
new iExpireTime = iDuration != 0 ? get_systime() + (iDuration * 60) : 0;
new szResult[64];
new szResult[64];
if (nvault_get(g_iNVaultHandle, szIP, szResult, charsmax(szResult)))
if (nvault_get(g_iNVaultHandle, szIP, szResult, charsmax(szResult)))
{
{
copy(szResult, charsmax(szResult), "Player is already gagged.");
copy(szResult, charsmax(szResult), "Player is already gagged.");
return szResult;
return szResult;
}
}
new szValue[512];
new szValue[512];
formatex(szValue, charsmax(szValue), "^"%s^"#^"%s^"#%d#^"%s^"", szName, szReason, iExpireTime, szAdminName);
formatex(szValue, charsmax(szValue), "^"%s^"#^"%s^"#%d#^"%s^"", szName, szReason, iExpireTime, szAdminName);
set_hudmessage(0, 255, 0, 0.05, 0.30);
set_hudmessage(0, 255, 0, 0.05, 0.30);
if (iExpireTime == 0)
if (iExpireTime == 0)
{
{
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g%s!y Player!t %s!y has been gagged by!g %s!y. Reason: !t%s!y. Gag expires!t never!y.", g_szChatPrefix, szName, szAdminName, szReason);
CC_SendMessage(0, "&x01[&x04GAG&x01] &x03%s &x01Player &x03%s &x01has been gagged by &x04%s &x01. &x03Reason: &x04%s &x01. &x03Gag expires &x01never", szName, szAdminName, szReason);
if (get_pcvar_num(gp_blHudEnabled))
if (get_pcvar_num(gp_blHudEnabled))
{
{
ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s has been gagged by %s^nExpires never^nReason: %s^n%s", g_szLineStyle, szName, szAdminName, szReason, g_szLineStyle);
ShowSyncHudMsg(0, g_iHudChannel, "%s^n has been gagged by %s^nExpires never^nReason: %s^n%s", g_szLineStyle, szName, szAdminName, szReason, g_szLineStyle);
}
}
}
}
else
else
{
{
PrintChatColor(0, PRINT_COLOR_PLAYERTEAM, "!g%s!y Player!t %s!y has been gagged by!g %s!y. Reason: !t%s!y. Gag expires!t %s", g_szChatPrefix, szName, szAdminName, szReason, GetTimeAsString(iDuration * 60));
CC_SendMessage(0, "&x01[&x04GAG&x01] &x03Player &x03%s &x01has been gagged by &x04%s. &x03Reason: &x04%s. &x03Gag expires &x04%s", szName, szAdminName, szReason, GetTimeAsString(iDuration * 60));
if (get_pcvar_num(gp_blHudEnabled))
if (get_pcvar_num(gp_blHudEnabled))
{
{
ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s has been gagged by %s^nExpires in %s^nReason: %s^n%s", g_szLineStyle, szName, szAdminName, GetTimeAsString(iDuration * 60), szReason, g_szLineStyle);
ShowSyncHudMsg(0, g_iHudChannel, "%s^n%s has been gagged by %s^nExpires in %s^nReason: %s^n%s", g_szLineStyle, szName, szAdminName, GetTimeAsString(iDuration * 60), szReason, g_szLineStyle);
}
}
}
}
emit_sound(0, CHAN_AUTO, g_szGagSound, 1.0, ATTN_NORM, SND_SPAWNING, PITCH_NORM);
emit_sound(0, CHAN_AUTO, g_szGagSound, 1.0, ATTN_NORM, SND_SPAWNING, PITCH_NORM);
#if defined LOG_GAGS
#if defined LOG_GAGS
log_to_file(g_szLogFile, "ADMIN: %s | PLAYER: %s [IP: %s] | REASON: %s | TIME: %s", szAdminName, szName, szIP, szReason, GetTimeAsString(iDuration * 60));
log_to_file(g_szLogFile, "ADMIN: %s | PLAYER: %s [IP: %s] | REASON: %s | TIME: %s", szAdminName, szName, szIP, szReason, GetTimeAsString(iDuration * 60));
#endif
#endif
new id = find_player("d", szIP);
new id = find_player("d", szIP);
if (id != 0)
if (id != 0)
{
{
ExecuteForward(g_GagForward, g_iUnused, id);
ExecuteForward(g_GagForward, g_iUnused, id);
}
}
nvault_set(g_iNVaultHandle, szIP, szValue);
nvault_set(g_iNVaultHandle, szIP, szValue);
copy(szResult, charsmax(szResult), "Player successfully gagged.");
copy(szResult, charsmax(szResult), "Player successfully gagged.");
return szResult;
return szResult;
}
}
IsUserGagged(id, bool:print = true)
IsUserGagged(id, bool:print = true)
{
{
new szIP[16], szVaultData[512];
new szIP[16], szVaultData[512];
get_user_ip(id, szIP, charsmax(szIP), 1);
get_user_ip(id, szIP, charsmax(szIP), 1);
if (!nvault_get(g_iNVaultHandle, szIP, szVaultData, charsmax(szVaultData)))
if (!nvault_get(g_iNVaultHandle, szIP, szVaultData, charsmax(szVaultData)))
{
{
g_blIsUserMuted[id] = false;
g_blIsUserMuted[id] = false;
return GAG_NOT;
return GAG_NOT;
}
}
new szGaggedName[32], szReason[64], szExpireDate[32], szAdminName[32];
new szGaggedName[32], szReason[64], szExpireDate[32], szAdminName[32];
replace_all(szVaultData, charsmax(szVaultData), "#", " ");
replace_all(szVaultData, charsmax(szVaultData), "#", " ");
parse(szVaultData, szGaggedName, charsmax(szGaggedName), szReason, charsmax(szReason), szExpireDate, charsmax(szExpireDate), szAdminName, charsmax(szAdminName));
parse(szVaultData, szGaggedName, charsmax(szGaggedName), szReason, charsmax(szReason), szExpireDate, charsmax(szExpireDate), szAdminName, charsmax(szAdminName));
new iExpireTime = str_to_num(szExpireDate);
new iExpireTime = str_to_num(szExpireDate);
if (get_systime() < iExpireTime || iExpireTime == 0)
if (get_systime() < iExpireTime || iExpireTime == 0)
{
{
if (print)
if (print)
{
{
if (iExpireTime == 0)
if (iExpireTime == 0)
{
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g%s!y You are gagged! Your gag expires!t never!y.", g_szChatPrefix);
CC_SendMessage(0, "&x01[&x04GAG&x01] &x03You are gagged! Your gag expires &x01never.");
}
}
else
else
{
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g%s!y You are gagged! Your gag expires in!t %s", g_szChatPrefix, GetTimeAsString(iExpireTime - get_systime()));
CC_SendMessage(0, "&x01[&x04GAG&x01] &x03You are gagged! Your gag expires in &x04%s", GetTimeAsString(iExpireTime - get_systime()));
}
}
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g%s!y Gagged by!g %s!y. Gagged nickname:!t %s!y. Gag reason:!t %s!y.", g_szChatPrefix, szAdminName, szGaggedName, szReason);
CC_SendMessage(0, "&x01[&x04GAG&x01] &x03Gagged by &x03%s&x01. &x03Gagged nickname: &x04%s&x01. &x03Gag reason: &x04%s&x01.", szAdminName, szGaggedName, szReason);
}
}
g_blIsUserMuted[id] = true;
g_blIsUserMuted[id] = true;
return GAG_YES;
return GAG_YES;
}
}
g_blIsUserMuted[id] = false;
g_blIsUserMuted[id] = false;
ExecuteForward(g_UngagForward, g_iUnused, id);
ExecuteForward(g_UngagForward, g_iUnused, id);
nvault_remove(g_iNVaultHandle, szIP);
nvault_remove(g_iNVaultHandle, szIP);
return GAG_EXPIRED;
return GAG_EXPIRED;
}
}
GetTimeAsString(seconds)
GetTimeAsString(seconds)
{
{
new iYears = seconds / 31536000;
new iYears = seconds / 31536000;
seconds %= 31536000;
seconds %= 31536000;
new iMonths = seconds / 2592000;
new iMonths = seconds / 2592000;
seconds %= 2592000;
seconds %= 2592000;
new iWeeks = seconds / 604800;
new iWeeks = seconds / 604800;
seconds %= 604800;
seconds %= 604800;
new iDays = seconds / 86400;
new iDays = seconds / 86400;
seconds %= 86400;
seconds %= 86400;
new iHours = seconds / 3600;
new iHours = seconds / 3600;
seconds %= 3600;
seconds %= 3600;
new iMinutes = seconds / 60;
new iMinutes = seconds / 60;
seconds %= 60;
seconds %= 60;
new szResult[256];
new szResult[256];
if (iYears)
if (iYears)
{
{
format(szResult, charsmax(szResult), "%s%d Year%s ", szResult, iYears, iYears == 1 ? "" : "s");
format(szResult, charsmax(szResult), "%s%d Year%s ", szResult, iYears, iYears == 1 ? "" : "s");
}
}
if (iMonths)
if (iMonths)
{
{
format(szResult, charsmax(szResult), "%s%d Month%s ", szResult, iMonths, iMonths == 1 ? "" : "s");
format(szResult, charsmax(szResult), "%s%d Month%s ", szResult, iMonths, iMonths == 1 ? "" : "s");
}
}
if (iWeeks)
if (iWeeks)
{
{
format(szResult, charsmax(szResult), "%s%d Week%s ", szResult, iWeeks, iWeeks == 1 ? "" : "s");
format(szResult, charsmax(szResult), "%s%d Week%s ", szResult, iWeeks, iWeeks == 1 ? "" : "s");
}
}
if (iDays)
if (iDays)
{
{
format(szResult, charsmax(szResult), "%s%d Day%s ", szResult, iDays, iDays == 1 ? "" : "s");
format(szResult, charsmax(szResult), "%s%d Day%s ", szResult, iDays, iDays == 1 ? "" : "s");
}
}
if (iHours)
if (iHours)
{
{
format(szResult, charsmax(szResult), "%s%d Hour%s ", szResult, iHours, iHours == 1 ? "" : "s");
format(szResult, charsmax(szResult), "%s%d Hour%s ", szResult, iHours, iHours == 1 ? "" : "s");
}
}
if (iMinutes)
if (iMinutes)
{
{
format(szResult, charsmax(szResult), "%s%d Minute%s ", szResult, iMinutes, iMinutes == 1 ? "" : "s");
format(szResult, charsmax(szResult), "%s%d Minute%s ", szResult, iMinutes, iMinutes == 1 ? "" : "s");
}
}
if (seconds)
if (seconds)
{
{
format(szResult, charsmax(szResult), "%s%d Second%s", szResult, seconds, seconds == 1 ? "" : "s");
format(szResult, charsmax(szResult), "%s%d Second%s", szResult, seconds, seconds == 1 ? "" : "s");
}
}
return szResult;
return szResult;
}
}