plugins/include/helpers.inc
author David Anderson <dvander@alliedmods.net>
Thu Jun 07 03:57:10 2007 +0000 (2007-06-07)
changeset 903 a210892076b6
parent 902 7cf6f3696164
child 926 b42be6b5f221
permissions -rw-r--r--
finished doc on SearchForClients
dvander@460
     1
/**
ds@475
     2
 * vim: set ts=4 :
dvander@460
     3
 * ===============================================================
dvander@460
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@460
     5
 * ===============================================================
dvander@460
     6
 *
dvander@460
     7
 *  This file is part of the SourceMod/SourcePawn SDK.  This file may only be used 
dvander@460
     8
 * or modified under the Terms and Conditions of its License Agreement, which is found 
dvander@460
     9
 * in LICENSE.txt.  The Terms and Conditions for making SourceMod extensions/plugins 
dvander@460
    10
 * may change at any time.  To view the latest information, see:
dvander@460
    11
 *   http://www.sourcemod.net/license.php
dvander@460
    12
 *
dvander@460
    13
 * Version: $Id$
dvander@460
    14
 */
dvander@460
    15
 
dvander@460
    16
#if defined _helpers_included
dvander@460
    17
 #endinput
dvander@460
    18
#endif
dvander@460
    19
#define _helpers_included
dvander@460
    20
dvander@460
    21
/**
dvander@460
    22
 * Formats a user's info as log text.
dvander@460
    23
 *
dvander@460
    24
 * @param client		Client index.
dvander@460
    25
 * @param buffer		Buffer for text.
dvander@460
    26
 * @param maxlength		Maximum length of text.
dvander@460
    27
 */
dvander@460
    28
stock FormatUserLogText(client, String:buffer[], maxlength)
dvander@460
    29
{
dvander@460
    30
	decl String:auth[32];
dvander@460
    31
	decl String:name[40];
dvander@460
    32
	
dvander@460
    33
	new userid = GetClientUserId(client);
dvander@460
    34
	if (!GetClientAuthString(client, auth, sizeof(auth)))
dvander@460
    35
	{
dvander@460
    36
		StrCopy(auth, sizeof(auth), "UNKNOWN");
dvander@460
    37
	}
dvander@460
    38
	if (!GetClientName(client, name, sizeof(name)))
dvander@460
    39
	{
dvander@460
    40
		StrCopy(name, sizeof(name), "UNKNOWN");
dvander@460
    41
	}
dvander@460
    42
	
dvander@460
    43
	/** Currently, no team stuff ... */
dvander@460
    44
	
dvander@460
    45
	Format(buffer, maxlength, "\"%s<%d><%s><>\"", name, userid, auth);
dvander@460
    46
}
ds@621
    47
ds@621
    48
/**
ds@621
    49
 * Returns plugin handle from plugin filename.
ds@621
    50
 *
ds@621
    51
 * @param filename		Filename of the plugin to search for.
ds@622
    52
 * @return				Handle to plugin if found, INVALID_HANDLE otherwise.
ds@621
    53
 */
ds@621
    54
stock Handle:FindPluginByFile(const String:filename[])
ds@621
    55
{
ds@621
    56
	decl String:buffer[256];
ds@621
    57
	
ds@621
    58
	new Handle:iter = GetPluginIterator();
ds@621
    59
	new Handle:pl;
ds@621
    60
	
ds@621
    61
	while (MorePlugins(iter))
ds@621
    62
	{
ds@621
    63
		pl = ReadPlugin(iter);
ds@621
    64
		
ds@621
    65
		GetPluginFilename(pl, buffer, sizeof(buffer));
ds@621
    66
		if (StrCompare(buffer, filename) == 0)
ds@621
    67
		{
ds@621
    68
			return pl;
ds@621
    69
		}
ds@621
    70
	}
ds@621
    71
	
ds@650
    72
	CloseHandle(iter);
ds@650
    73
	
ds@621
    74
	return INVALID_HANDLE;
ds@621
    75
}
dvander@902
    76
dvander@902
    77
/**
dvander@902
    78
 * Searches for clients that match an input string.
dvander@902
    79
 *
dvander@902
    80
 * Allowed patterns: 
dvander@902
    81
 *  1) #<userid> or #<exact name>
dvander@902
    82
 *  2) <partial or full name>
dvander@903
    83
 *
dvander@903
    84
 * @param pattern		Pattern to search for.
dvander@903
    85
 * @param clients		Array to store matching clients in.
dvander@903
    86
 * @param maxClients	Maximum clients in the array.
dvander@903
    87
 * @return				Number of clients found.
dvander@902
    88
 */
dvander@902
    89
stock SearchForClients(const String:pattern[], clients[], maxClients)
dvander@902
    90
{
dvander@902
    91
	new maxclients = GetMaxClients();
dvander@902
    92
	new total = 0;
dvander@902
    93
	
dvander@902
    94
	if (maxClients == 0)
dvander@902
    95
	{
dvander@902
    96
		return 0;
dvander@902
    97
	}
dvander@902
    98
	
dvander@902
    99
	if (pattern[0] == '#')
dvander@902
   100
	{
dvander@902
   101
		new input = StringToInt(pattern[1]);
dvander@902
   102
		if (!input)
dvander@902
   103
		{
dvander@902
   104
			decl String:name[65]
dvander@902
   105
			for (new i=1; i<=maxclients; i++)
dvander@902
   106
			{
dvander@902
   107
				if (!IsClientInGame(i))
dvander@902
   108
				{
dvander@902
   109
					continue;
dvander@902
   110
				}
dvander@902
   111
				GetClientName(i, name, sizeof(name));
dvander@902
   112
				if (StrEqual(name, pattern, false))
dvander@902
   113
				{
dvander@902
   114
					clients[0] = i;
dvander@902
   115
					return 1;
dvander@902
   116
				}
dvander@902
   117
			}
dvander@902
   118
		} else {
dvander@902
   119
			new client = GetClientOfUserId(input);
dvander@902
   120
			if (client)
dvander@902
   121
			{
dvander@902
   122
				clients[0] = client;
dvander@902
   123
				return 1;
dvander@902
   124
			}
dvander@902
   125
		}
dvander@902
   126
	}
dvander@902
   127
	
dvander@902
   128
	decl String:name[65]
dvander@902
   129
	for (new i=1; i<=maxclients; i++)
dvander@902
   130
	{
dvander@902
   131
		if (!IsClientInGame(i))
dvander@902
   132
		{
dvander@902
   133
			continue;
dvander@902
   134
		}
dvander@902
   135
		GetClientName(i, name, sizeof(name));
dvander@902
   136
		if (StrContains(name, pattern, false) != -1)
dvander@902
   137
		{
dvander@902
   138
			clients[total++] = i;
dvander@902
   139
			if (total >= maxClients)
dvander@902
   140
			{
dvander@902
   141
				break;
dvander@902
   142
			}
dvander@902
   143
		}
dvander@902
   144
	}
dvander@902
   145
	
dvander@902
   146
	return total;
dvander@902
   147
}