plugins/include/helpers.inc
author Scott Ehlert <ds@alliedmods.net>
Fri Jun 22 15:37:12 2007 +0000 (2007-06-22)
changeset 1001 8de56a71f200
parent 982 c4fdf408ccee
child 1083 9b3e66a9369b
permissions -rw-r--r--
Implemented amb423 - Added IsClientObserver() native
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@926
    22
 * Provided by basecommands.sp when sm_ban is called.
dvander@926
    23
 *
dvander@927
    24
 * @param admin			Admin client index (0 for server).
dvander@926
    25
 * @param client		Client index which will be banned.
dvander@927
    26
 * @param time			Minutes banned for (0 is permanent).
dvander@926
    27
 * @param reason		Ban reason (may be empty if none exists).
dvander@982
    28
 * @return				Pl_Handled to block output, Pl_Stop to block output and action.
dvander@926
    29
 */
dvander@982
    30
forward Action:OnClientBanned(admin, client, time, const String:reason[]);
dvander@927
    31
dvander@927
    32
/**
dvander@927
    33
 * Provided by basecommands.sp when sm_addban or sm_banip is called.
dvander@927
    34
 *
dvander@927
    35
 * @param admin			Admin client index (0 for server).
dvander@927
    36
 * @param info			User info (either steamid or ip).
dvander@927
    37
 * @param time			Minutes banned for (0 is permanent).
dvander@927
    38
 * @param reason		Ban reason (may be empty if none exists).
dvander@982
    39
 * @return				Pl_Handled to block output, Pl_Stop to block output and action.
dvander@927
    40
 */
dvander@982
    41
forward Action:OnBanAdded(admin, const String:info[], time, const String:reason[]);
dvander@927
    42
dvander@927
    43
/**
dvander@927
    44
 * Provided by basecommands.sp when sm_unban or sm_unbanip is called.
dvander@927
    45
 *
dvander@927
    46
 * @param admin			Admin client index (0 for server).
dvander@927
    47
 * @param info 			User info (either steamid or ip).
dvander@982
    48
 * @return				Pl_Handled to block output, Pl_Stop to block output and action.
dvander@927
    49
 */
dvander@982
    50
forward Action:OnBanRemoved(admin, const String:info[]);
dvander@926
    51
dvander@926
    52
/**
dvander@982
    53
 * Formats a user's info as log text.  This is usually not needed because
dvander@982
    54
 * %L can be used to auto-format client information into a string.
dvander@460
    55
 *
dvander@460
    56
 * @param client		Client index.
dvander@460
    57
 * @param buffer		Buffer for text.
dvander@460
    58
 * @param maxlength		Maximum length of text.
dvander@460
    59
 */
dvander@460
    60
stock FormatUserLogText(client, String:buffer[], maxlength)
dvander@460
    61
{
dvander@460
    62
	decl String:auth[32];
dvander@460
    63
	decl String:name[40];
dvander@460
    64
	
dvander@460
    65
	new userid = GetClientUserId(client);
dvander@460
    66
	if (!GetClientAuthString(client, auth, sizeof(auth)))
dvander@460
    67
	{
dvander@460
    68
		StrCopy(auth, sizeof(auth), "UNKNOWN");
dvander@460
    69
	}
dvander@460
    70
	if (!GetClientName(client, name, sizeof(name)))
dvander@460
    71
	{
dvander@460
    72
		StrCopy(name, sizeof(name), "UNKNOWN");
dvander@460
    73
	}
dvander@460
    74
	
dvander@460
    75
	/** Currently, no team stuff ... */
dvander@460
    76
	
dvander@460
    77
	Format(buffer, maxlength, "\"%s<%d><%s><>\"", name, userid, auth);
dvander@460
    78
}
ds@621
    79
ds@621
    80
/**
ds@621
    81
 * Returns plugin handle from plugin filename.
ds@621
    82
 *
ds@621
    83
 * @param filename		Filename of the plugin to search for.
ds@622
    84
 * @return				Handle to plugin if found, INVALID_HANDLE otherwise.
ds@621
    85
 */
ds@621
    86
stock Handle:FindPluginByFile(const String:filename[])
ds@621
    87
{
ds@621
    88
	decl String:buffer[256];
ds@621
    89
	
ds@621
    90
	new Handle:iter = GetPluginIterator();
ds@621
    91
	new Handle:pl;
ds@621
    92
	
ds@621
    93
	while (MorePlugins(iter))
ds@621
    94
	{
ds@621
    95
		pl = ReadPlugin(iter);
ds@621
    96
		
ds@621
    97
		GetPluginFilename(pl, buffer, sizeof(buffer));
ds@621
    98
		if (StrCompare(buffer, filename) == 0)
ds@621
    99
		{
dvander@982
   100
			CloseHandle(iter);
ds@621
   101
			return pl;
ds@621
   102
		}
ds@621
   103
	}
ds@621
   104
	
ds@650
   105
	CloseHandle(iter);
ds@650
   106
	
ds@621
   107
	return INVALID_HANDLE;
ds@621
   108
}
dvander@902
   109
dvander@902
   110
/**
dvander@902
   111
 * Searches for clients that match an input string.
dvander@902
   112
 *
dvander@902
   113
 * Allowed patterns: 
dvander@902
   114
 *  1) #<userid> or #<exact name>
dvander@902
   115
 *  2) <partial or full name>
dvander@903
   116
 *
dvander@903
   117
 * @param pattern		Pattern to search for.
dvander@903
   118
 * @param clients		Array to store matching clients in.
dvander@903
   119
 * @param maxClients	Maximum clients in the array.
dvander@903
   120
 * @return				Number of clients found.
dvander@902
   121
 */
dvander@902
   122
stock SearchForClients(const String:pattern[], clients[], maxClients)
dvander@902
   123
{
dvander@902
   124
	new maxclients = GetMaxClients();
dvander@902
   125
	new total = 0;
dvander@902
   126
	
dvander@902
   127
	if (maxClients == 0)
dvander@902
   128
	{
dvander@902
   129
		return 0;
dvander@902
   130
	}
dvander@902
   131
	
dvander@902
   132
	if (pattern[0] == '#')
dvander@902
   133
	{
dvander@902
   134
		new input = StringToInt(pattern[1]);
dvander@902
   135
		if (!input)
dvander@902
   136
		{
dvander@902
   137
			decl String:name[65]
dvander@902
   138
			for (new i=1; i<=maxclients; i++)
dvander@902
   139
			{
dvander@902
   140
				if (!IsClientInGame(i))
dvander@902
   141
				{
dvander@902
   142
					continue;
dvander@902
   143
				}
dvander@902
   144
				GetClientName(i, name, sizeof(name));
dvander@902
   145
				if (StrEqual(name, pattern, false))
dvander@902
   146
				{
dvander@902
   147
					clients[0] = i;
dvander@902
   148
					return 1;
dvander@902
   149
				}
dvander@902
   150
			}
dvander@902
   151
		} else {
dvander@902
   152
			new client = GetClientOfUserId(input);
dvander@902
   153
			if (client)
dvander@902
   154
			{
dvander@902
   155
				clients[0] = client;
dvander@902
   156
				return 1;
dvander@902
   157
			}
dvander@902
   158
		}
dvander@902
   159
	}
dvander@902
   160
	
dvander@902
   161
	decl String:name[65]
dvander@902
   162
	for (new i=1; i<=maxclients; i++)
dvander@902
   163
	{
dvander@902
   164
		if (!IsClientInGame(i))
dvander@902
   165
		{
dvander@902
   166
			continue;
dvander@902
   167
		}
dvander@902
   168
		GetClientName(i, name, sizeof(name));
dvander@902
   169
		if (StrContains(name, pattern, false) != -1)
dvander@902
   170
		{
dvander@902
   171
			clients[total++] = i;
dvander@902
   172
			if (total >= maxClients)
dvander@902
   173
			{
dvander@902
   174
				break;
dvander@902
   175
			}
dvander@902
   176
		}
dvander@902
   177
	}
dvander@902
   178
	
dvander@902
   179
	return total;
dvander@902
   180
}