Raised This Month: $51 Target: $400
 12% 

Gag Plugin


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
ish12321
Veteran Member
Join Date: May 2016
Old 07-19-2018 , 07:52   Gag Plugin
Reply With Quote #1

Hello,
I'm sharing the code of a gag plugin below. I wish to know if there could be any sort of improvement in the code.

Code:
#include <amxmodx> #include <amxmisc> // #include <cstrike> // #include <engine> // #include <fakemeta> // #include <hamsandwich> // #include <fun> // #include <xs> // #include <sqlx> #include <reapi> #include <nvault_util> #define PLUGIN  "Mute Menu" #define VERSION "1.0" #define AUTHOR  "Ish Chhabra" #pragma semicolon 1 // Decalare global variables. // Booleans. new bool:g_bIsGagged[MAX_PLAYERS + 1]; // Integers. new g_iVaultHandle; new g_iGagMenuCallback; new g_iGagTimes[MAX_PLAYERS + 1]; public plugin_init() {     register_plugin(PLUGIN, VERSION, AUTHOR);         register_clcmd("amx_gag", "GagPlayerCommand", ADMIN_LEVEL_B, "<nick, #userid, authid> <time in minutes> <reason>");     register_clcmd("amx_ungag", "UnGagPlayerCommand", ADMIN_LEVEL_B, "<authid>");     // Add gag and ungag option to "amxmodmenu"     AddMenuItem("Gag Player", "amx_gagmenu", ADMIN_LEVEL_B, PLUGIN);     AddMenuItem("Ungag Player", "amx_ungagmenu", ADMIN_LEVEL_B, PLUGIN);     register_clcmd("amx_gagmenu", "GagMenu", ADMIN_LEVEL_B);     register_clcmd("amx_ungagmenu", "UnGagMenu", ADMIN_LEVEL_B);     register_clcmd("say", "BlockSay");     register_clcmd("say_team", "BlockSay");     RegisterHookChain(RG_CSGameRules_CanPlayerHearPlayer, "RG_Hook_CanPlayerHearPlayer", false);     g_iVaultHandle = nvault_open("GagVault");         g_iGagMenuCallback = menu_makecallback("GagMenu_Callback");         set_task(5.0, "gagvault_prune", _, _, _, "b"); } // Close (n)vault on plugin end. public plugin_end() {     nvault_close(g_iVaultHandle); } // Check if player is gagged on player connect. public client_putinserver(id) {     new szAuthID[34];     get_user_authid(id, szAuthID, charsmax(szAuthID));         // Check for gagged     new iTimeStamp, iKeyExists = nvault_lookup(g_iVaultHandle, szAuthID, "", 0, iTimeStamp);     if (iKeyExists) g_bIsGagged[id] = true; } public client_disconnected(id) {     g_bIsGagged[id] = false; } // Remove ungagged players entry from nvault. public gagvault_prune() {     // Close and reopen vault in order to let nvaul_util get realtime data.     nvault_close(g_iVaultHandle);     g_iVaultHandle = nvault_open("GagVault");     new Data[1]; Data[0] = get_systime();     new iVaultHandle = nvault_util_open("GagVault");     nvault_util_readall(iVaultHandle, "nvault_util_prune", Data);     nvault_util_close(iVaultHandle); } // Prune with ungagging player on server if he is present. public nvault_util_prune(iCurrent, iTotal, szKey[], szVal[], iTimeStamp, Data[], iSize) {     if (Data[0] >= iTimeStamp) {         nvault_remove(g_iVaultHandle, szKey);         // If the ungagged player is present on server, set the variable storing gag status of player to "false".         new iTarget = find_player("c", szKey);         if (iTarget) {             g_bIsGagged[iTarget] = false;         }     } } // Gag by console command public GagPlayerCommand(id, level, cid) {     if (!cmd_access(id, level, cid, 2)) {         return PLUGIN_HANDLED;     }     new szTarget[36]; // Max AuthID Length : 34, Max Name Length : 32, Max ID Length : 4 (Including #) --> 2 extra for safety.     read_argv(1, szTarget, charsmax(szTarget));     new iTarget = cmd_target(id, szTarget, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF);     if (!iTarget) {         return PLUGIN_HANDLED;     }     new time = read_argv_int(2);     if (time < 0) {         console_print(id, "Time can not be less than zero.");         return PLUGIN_HANDLED;     }     new szTargetAuthID[34];     get_user_authid(iTarget, szTargetAuthID, charsmax(szTargetAuthID));     new szTargetName[MAX_NAME_LENGTH];     get_user_name(iTarget, szTargetName, charsmax(szTargetName));     GagPlayer(id, szTargetAuthID, szTargetName, time);     return PLUGIN_HANDLED; } // Ungag by console command. public UnGagPlayerCommand(id, level, cid) {     if (!cmd_access(id, level, cid, 1)) {         return PLUGIN_HANDLED;     }     new szAuthID[34];     read_argv(1, szAuthID, charsmax(szAuthID));     UngagPlayer(id, szAuthID);     return PLUGIN_HANDLED; } // Gag menu command. public GagMenu(id, level, cid) {     if (!cmd_access(id, level, cid, 0)) {         return PLUGIN_HANDLED;     }     g_iGagTimes[id] = 5; // When menu is displayed first time, reset the ban time to 5     ShowGagMenu(id, 0);     return PLUGIN_HANDLED; } // Show gag menu. ShowGagMenu(id, menupage = 0) {     new iMenu = menu_create("Gag Menu", "GagMenu_Handler");     new players[32], num, player;     get_players(players, num);         new CountMenuItems = 0, CountCurrentItemNumber = 1, szName[MAX_NAME_LENGTH], szAuthID[34];     while (CountMenuItems < num) {         if (CountCurrentItemNumber == 7) {             static szFormat[64];             if (g_iGagTimes[id] == 0) {                 formatex(szFormat, charsmax(szFormat), "Permanent");             }             else {                 formatex(szFormat, charsmax(szFormat), "%d minutes", g_iGagTimes[id]);             }             menu_additem(iMenu, szFormat, "GAGTIME");                         CountCurrentItemNumber = 1;         }         else {             player = players[CountMenuItems];             get_user_name(player, szName, charsmax(szName));             get_user_authid(player, szAuthID, charsmax(szAuthID));             menu_additem(iMenu, szName, szAuthID, _, g_iGagMenuCallback);             CountCurrentItemNumber++;             CountMenuItems++;         }     }     if (CountCurrentItemNumber > 1) {         while(CountCurrentItemNumber != 7) {             menu_addblank2(iMenu);             CountCurrentItemNumber++;         }         menu_addblank(iMenu, 0);         new szFormat[64];         if (g_iGagTimes[id] == 0) {             formatex(szFormat, charsmax(szFormat), "Permanent");         }         else {             formatex(szFormat, charsmax(szFormat), "%d minutes", g_iGagTimes[id]);         }         menu_additem(iMenu, szFormat, "GAGTIME");     }     menu_display(id, iMenu, menupage); } // Gag menu handler. public GagMenu_Handler(id, iMenu, iKey) {     if (iKey == MENU_EXIT) {         menu_destroy(iMenu);         return;     }     new _access, _callback, szInfo[34], szName[MAX_NAME_LENGTH];     menu_item_getinfo(iMenu, iKey, _access, szInfo, charsmax(szInfo), szName, charsmax(szName), _callback);         if (equal(szInfo, "GAGTIME")) {         if (g_iGagTimes[id] > 15) {             g_iGagTimes[id] = (g_iGagTimes[id] + 10) % 60;         }         else {             g_iGagTimes[id] = (g_iGagTimes[id] + 5) % 60;         }     }     else {         GagPlayer(id, szInfo, szName, g_iGagTimes[id]);     }     new _menu, _newmenu, menupage;     player_menu_info(id, _menu, _newmenu, menupage);     menu_destroy(iMenu);     ShowGagMenu(id, menupage); } // Gag menu callback. public GagMenu_Callback(id, iMenu, iKey) {     new _access, _callback, szInfo[34];     menu_item_getinfo(iMenu, iKey, _access, szInfo, charsmax(szInfo), _, _, _callback);         new iTarget = find_player("c", szInfo);     if (!iTarget) set_fail_state("ERROR LINE 339");     if(g_bIsGagged[iTarget]) return ITEM_DISABLED;     return ITEM_ENABLED; } // Ungag menu command. public UnGagMenu(id, level, cid) {     if (!cmd_access(id, level, cid, 0)) {         return PLUGIN_HANDLED;     }     ShowUnGagMenu(id, 0);     return PLUGIN_HANDLED; } // Show ungag menu. ShowUnGagMenu(id, menupage = 0) {     new iMenu = menu_create("Ungag Menu", "UnGagMenu_Handler");     new players[32], num, player, szName[MAX_NAME_LENGTH], szAuthID[34];     get_players(players, num);     new Count = 0;     for (new i = 0; i < num; i++) {         player = players[i];         if(!g_bIsGagged[player]) continue;         get_user_name(player, szName, charsmax(szName));         get_user_authid(player, szAuthID, charsmax(szAuthID));         menu_additem(iMenu, szName, szAuthID);         Count++;     }     if (Count == 0) {         client_print_color(id, print_chat, "^4|HSG|~ ^1There is no gagged player currently on the server.");         return PLUGIN_HANDLED;     }     menu_display(id, iMenu, menupage);     return PLUGIN_HANDLED; } // Ungag menu handler. public UnGagMenu_Handler(id, iMenu, iKey) {     if (iKey == MENU_EXIT) {         menu_destroy(iMenu);         return;     }     new _access, _callback, szAuthID[34];     menu_item_getinfo(iMenu, iKey, _access, szAuthID, charsmax(szAuthID), _, _, _callback);     UngagPlayer(id, szAuthID);     new _menu, _newmenu, menupage;     player_menu_info(id, _menu, _newmenu, menupage);     menu_destroy(iMenu);     ShowUnGagMenu(id, menupage); } // Block  voice talk if player is gagged. public RG_Hook_CanPlayerHearPlayer(const listener, const sender) {     if (listener != sender && g_bIsGagged[sender]) {         SetHookChainReturn(ATYPE_INTEGER, 0);         return HC_SUPERCEDE;     }         return HC_CONTINUE; } // Block chat talk if player is gagged. public BlockSay(id) {     return g_bIsGagged[id] ? PLUGIN_HANDLED : PLUGIN_CONTINUE; } GagPlayer(iAdmin, szTargetAuthID[], szTargetName[], time) {     new iUngagTime = get_systime()time * 60;     new szAdminName[MAX_NAME_LENGTH];     get_user_name(iAdmin, szAdminName, charsmax(szAdminName));         new iTimeStamp, iKeyExists = nvault_lookup(g_iVaultHandle, szTargetAuthID, "", 0, iTimeStamp);     if(iKeyExists) {         client_print_color(iAdmin, print_team_default, "^4|HSG|~ ^1PLAYER %s is already gagged.", szTargetName);         return;     }     if(time == 0) {         nvault_pset(g_iVaultHandle, szTargetAuthID, szTargetName);         client_print_color(0, print_team_default, "^4|HSG|~ ^1ADMIN : %s gagged %s permanently.", szAdminName, szTargetName);     }     else {         nvault_set(g_iVaultHandle, szTargetAuthID, szTargetName);         nvault_touch(g_iVaultHandle, szTargetAuthID, iUngagTime);         client_print_color(0, print_team_default, "^4|HSG|~ ^1ADMIN : %s gagged %s for %d minutes.", szAdminName, szTargetName, time);     }     new iTarget = find_player("c", szTargetAuthID);     if (iTarget) {         g_bIsGagged[iTarget] = true;     } } UngagPlayer(iAdmin, szTargetAuthID[]) {     new szTargetName[MAX_NAME_LENGTH], iTimeStamp, iKeyExists = nvault_lookup(g_iVaultHandle, szTargetAuthID, szTargetName, charsmax(szTargetName), iTimeStamp);     if(iKeyExists) {         nvault_remove(g_iVaultHandle, szTargetAuthID);         new szAdminName[MAX_NAME_LENGTH];         get_user_name(iAdmin, szAdminName, charsmax(szAdminName));         client_print_color(0, print_team_default, "^4|HSG|~ ^1ADMIN : %s ungagged %s.", szAdminName, szTargetName);         new iTarget = find_player("c", szTargetAuthID);         if (iTarget) {             g_bIsGagged[iTarget] = false;         }     }     else {         client_print_color(0, print_team_default, "^4|HSG|~ ^1PLAYER %s is not gagged", szTargetName);     } }
__________________
['O|s|G'] | Death Wins a.k.a Ish Chhabra was here
ish12321 is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 05:09.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode