dvander@460: /** ds@475: * vim: set ts=4 : dvander@460: * =============================================================== dvander@460: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@460: * =============================================================== dvander@460: * dvander@460: * This file is part of the SourceMod/SourcePawn SDK. This file may only be used dvander@460: * or modified under the Terms and Conditions of its License Agreement, which is found dvander@460: * in LICENSE.txt. The Terms and Conditions for making SourceMod extensions/plugins dvander@460: * may change at any time. To view the latest information, see: dvander@460: * http://www.sourcemod.net/license.php dvander@460: * dvander@460: * Version: $Id$ dvander@460: */ dvander@460: dvander@460: #if defined _helpers_included dvander@460: #endinput dvander@460: #endif dvander@460: #define _helpers_included dvander@460: dvander@460: /** dvander@926: * Provided by basecommands.sp when sm_ban is called. dvander@926: * dvander@927: * @param admin Admin client index (0 for server). dvander@926: * @param client Client index which will be banned. dvander@927: * @param time Minutes banned for (0 is permanent). dvander@926: * @param reason Ban reason (may be empty if none exists). dvander@982: * @return Pl_Handled to block output, Pl_Stop to block output and action. dvander@926: */ dvander@982: forward Action:OnClientBanned(admin, client, time, const String:reason[]); dvander@927: dvander@927: /** dvander@927: * Provided by basecommands.sp when sm_addban or sm_banip is called. dvander@927: * dvander@927: * @param admin Admin client index (0 for server). dvander@927: * @param info User info (either steamid or ip). dvander@927: * @param time Minutes banned for (0 is permanent). dvander@927: * @param reason Ban reason (may be empty if none exists). dvander@982: * @return Pl_Handled to block output, Pl_Stop to block output and action. dvander@927: */ dvander@982: forward Action:OnBanAdded(admin, const String:info[], time, const String:reason[]); dvander@927: dvander@927: /** dvander@927: * Provided by basecommands.sp when sm_unban or sm_unbanip is called. dvander@927: * dvander@927: * @param admin Admin client index (0 for server). dvander@927: * @param info User info (either steamid or ip). dvander@982: * @return Pl_Handled to block output, Pl_Stop to block output and action. dvander@927: */ dvander@982: forward Action:OnBanRemoved(admin, const String:info[]); dvander@926: dvander@926: /** dvander@982: * Formats a user's info as log text. This is usually not needed because dvander@982: * %L can be used to auto-format client information into a string. dvander@460: * dvander@460: * @param client Client index. dvander@460: * @param buffer Buffer for text. dvander@460: * @param maxlength Maximum length of text. dvander@460: */ dvander@460: stock FormatUserLogText(client, String:buffer[], maxlength) dvander@460: { dvander@460: decl String:auth[32]; dvander@460: decl String:name[40]; dvander@460: dvander@460: new userid = GetClientUserId(client); dvander@460: if (!GetClientAuthString(client, auth, sizeof(auth))) dvander@460: { ds@1083: strcopy(auth, sizeof(auth), "UNKNOWN"); dvander@460: } dvander@460: if (!GetClientName(client, name, sizeof(name))) dvander@460: { ds@1083: strcopy(name, sizeof(name), "UNKNOWN"); dvander@460: } dvander@460: dvander@460: /** Currently, no team stuff ... */ dvander@460: dvander@460: Format(buffer, maxlength, "\"%s<%d><%s><>\"", name, userid, auth); dvander@460: } ds@621: ds@621: /** ds@621: * Returns plugin handle from plugin filename. ds@621: * ds@621: * @param filename Filename of the plugin to search for. ds@622: * @return Handle to plugin if found, INVALID_HANDLE otherwise. ds@621: */ ds@621: stock Handle:FindPluginByFile(const String:filename[]) ds@621: { ds@621: decl String:buffer[256]; ds@621: ds@621: new Handle:iter = GetPluginIterator(); ds@621: new Handle:pl; ds@621: ds@621: while (MorePlugins(iter)) ds@621: { ds@621: pl = ReadPlugin(iter); ds@621: ds@621: GetPluginFilename(pl, buffer, sizeof(buffer)); ds@1083: if (strcmp(buffer, filename, false) == 0) ds@621: { dvander@982: CloseHandle(iter); ds@621: return pl; ds@621: } ds@621: } ds@621: ds@650: CloseHandle(iter); ds@650: ds@621: return INVALID_HANDLE; ds@621: } dvander@902: dvander@902: /** dvander@902: * Searches for clients that match an input string. dvander@902: * dvander@902: * Allowed patterns: dvander@902: * 1) # or # dvander@902: * 2) dvander@903: * dvander@903: * @param pattern Pattern to search for. dvander@903: * @param clients Array to store matching clients in. dvander@903: * @param maxClients Maximum clients in the array. dvander@903: * @return Number of clients found. dvander@902: */ dvander@902: stock SearchForClients(const String:pattern[], clients[], maxClients) dvander@902: { dvander@902: new maxclients = GetMaxClients(); dvander@902: new total = 0; dvander@902: dvander@902: if (maxClients == 0) dvander@902: { dvander@902: return 0; dvander@902: } dvander@902: dvander@902: if (pattern[0] == '#') dvander@902: { dvander@902: new input = StringToInt(pattern[1]); dvander@902: if (!input) dvander@902: { dvander@902: decl String:name[65] dvander@902: for (new i=1; i<=maxclients; i++) dvander@902: { dvander@902: if (!IsClientInGame(i)) dvander@902: { dvander@902: continue; dvander@902: } dvander@902: GetClientName(i, name, sizeof(name)); ds@1083: if (strcmp(name, pattern, false) == 0) dvander@902: { dvander@902: clients[0] = i; dvander@902: return 1; dvander@902: } dvander@902: } dvander@902: } else { dvander@902: new client = GetClientOfUserId(input); dvander@902: if (client) dvander@902: { dvander@902: clients[0] = client; dvander@902: return 1; dvander@902: } dvander@902: } dvander@902: } dvander@902: dvander@902: decl String:name[65] dvander@902: for (new i=1; i<=maxclients; i++) dvander@902: { dvander@902: if (!IsClientInGame(i)) dvander@902: { dvander@902: continue; dvander@902: } dvander@902: GetClientName(i, name, sizeof(name)); dvander@902: if (StrContains(name, pattern, false) != -1) dvander@902: { dvander@902: clients[total++] = i; dvander@902: if (total >= maxClients) dvander@902: { dvander@902: break; dvander@902: } dvander@902: } dvander@902: } dvander@902: dvander@902: return total; dvander@902: }