/* * ============================================================================ * * Zombie:Reloaded * * File: zadmin.inc * Type: Core * Description: Handle admin functions and menus. * * Copyright (C) 2009-2013 Greyscale, Richard Helgeby * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ============================================================================ */ /** * Create commands specific to ZAdmin. */ ZAdminOnCommandsCreate() { // Register ZAdmin command. RegConsoleCmd(SAYHOOKS_KEYWORD_ZADMIN, ZAdminCommand, "Opens ZR admin menu."); } /** * Command callback (zadmin) * Opens ZR admin menu. * * @param client The client index. * @param argc Argument count. */ public Action:ZAdminCommand(client, argc) { // If client is console, then stop and tell them this feature is for players only. if (ZRIsConsole(client)) { TranslationPrintToServer("Must be player"); return Plugin_Handled; } // Send admin menu. ZAdminMenu(client); // This stops the "Unknown command" message in client's console. return Plugin_Handled; } /** * Main admin menu. * * @param client The client index. */ bool:ZAdminMenu(client) { // If client isn't an generic admin, then stop. if (!ZRIsClientAdmin(client)) { TranslationPrintToChat(client, "Must be admin"); return false; } // Boolean that tell if client is allowed to do configuration. new bool:configallowed = ZRIsClientPrivileged(client, OperationType_Configuration); // Create menu handle. new Handle:menu_zadmin = CreateMenu(ZAdminMenuHandle); // Set translation target as the client. SetGlobalTransTarget(client); decl String:title[MENU_LINE_TITLE_LENGTH]; decl String:classmultipliers[MENU_LINE_REG_LENGTH]; decl String:weapons[MENU_LINE_REG_LENGTH]; decl String:hitgroups[MENU_LINE_REG_LENGTH]; decl String:infect[MENU_LINE_REG_LENGTH]; decl String:zspawn[MENU_LINE_REG_LENGTH]; decl String:ztele[MENU_LINE_REG_LENGTH]; Format(title, sizeof(title), "%t\n ", "ZAdmin main title"); Format(classmultipliers, sizeof(classmultipliers), "%t", "ZAdmin main class multipliers"); Format(weapons, sizeof(weapons), "%t", "ZAdmin main weapons"); Format(hitgroups, sizeof(hitgroups), "%t", "ZAdmin main hitgroups"); Format(infect, sizeof(infect), "%t", "ZAdmin main zombie"); Format(zspawn, sizeof(zspawn), "%t", "ZAdmin main force zspawn"); Format(ztele, sizeof(ztele), "%t", "ZAdmin main force ztele"); // Get conditions for options. new configdraw = MenuGetItemDraw(configallowed); new moderatordraw = MenuGetItemDraw(ZRIsClientPrivileged(client, OperationType_Generic)); new hitgroupdraw = MenuGetItemDraw(GetConVarBool(g_hCvarsList[CVAR_HITGROUPS]) && configallowed); // Add items to menu. SetMenuTitle(menu_zadmin, title); AddMenuItem(menu_zadmin, "classmultipliers", classmultipliers, configdraw); AddMenuItem(menu_zadmin, "weapons", weapons, configdraw); AddMenuItem(menu_zadmin, "hitgroups", hitgroups, hitgroupdraw); AddMenuItem(menu_zadmin, "infect", infect, moderatordraw); AddMenuItem(menu_zadmin, "zspawn", zspawn, moderatordraw); AddMenuItem(menu_zadmin, "ztele", ztele, moderatordraw); // Set "Back" button. SetMenuExitBackButton(menu_zadmin, true); // Send menu to client. DisplayMenu(menu_zadmin, client, MENU_TIME_FOREVER); return true; } /** * Menu callback (zadmin) * Handles options selected in the admin menu. * * @param menu The menu handle. * @param action Action client is doing in menu. * @param client The client index. * @param slot The menu slot selected. (starting from 0) */ public ZAdminMenuHandle(Handle:menu_zadmin, MenuAction:action, client, slot) { if (action == MenuAction_Select) { // Create variable to possible resend menu later. new bool:resend = true; switch(slot) { // Class multipliers. case 0: { resend = !ClassTeamSelect(client); } // Weapon management. case 1: { resend = !WeaponsMenuMain(client); } // Hitgroup management. case 2: { resend = !HitgroupsMenuHitgroups(client); } // Zombie management. case 3: { // We're not resending this menu. resend = false; // Send list of clients to infect. InfectMenuClients(client); } // Force ZSpawn. case 4: { // We're not resending this menu. resend = false; // Send list of clients to infect. MenuClientList(client, ZSpawnForceHandle, true, false, true, "ZSpawn clients title"); } // Force ZTele. case 5: { // We're not resending this menu. resend = false; // Send list of clients to infect. MenuClientList(client, ZTele_ForceHandle, true, true, false, "ZTele clients title"); } } // Re-send menu if selection failed. if (resend) { ZAdminMenu(client); } } if (action == MenuAction_Cancel) { if (slot == MenuCancel_ExitBack) { // Exit back to main menu. ZMenuMain(client); } } else if (action == MenuAction_End) { CloseHandle(menu_zadmin); } }