AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Gag Plugin (https://forums.alliedmods.net/showthread.php?t=309260)

ish12321 07-19-2018 07:52

Gag Plugin
 
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);     } }


All times are GMT -4. The time now is 12:41.

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