1.1 --- a/plugins/include/helpers.inc Fri Mar 28 06:21:34 2008 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,289 +0,0 @@
1.4 -/**
1.5 - * vim: set ts=4 :
1.6 - * =============================================================================
1.7 - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
1.8 - * =============================================================================
1.9 - *
1.10 - * This file is part of the SourceMod/SourcePawn SDK.
1.11 - *
1.12 - * This program is free software; you can redistribute it and/or modify it under
1.13 - * the terms of the GNU General Public License, version 3.0, as published by the
1.14 - * Free Software Foundation.
1.15 - *
1.16 - * This program is distributed in the hope that it will be useful, but WITHOUT
1.17 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1.18 - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
1.19 - * details.
1.20 - *
1.21 - * You should have received a copy of the GNU General Public License along with
1.22 - * this program. If not, see <http://www.gnu.org/licenses/>.
1.23 - *
1.24 - * As a special exception, AlliedModders LLC gives you permission to link the
1.25 - * code of this program (as well as its derivative works) to "Half-Life 2," the
1.26 - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
1.27 - * by the Valve Corporation. You must obey the GNU General Public License in
1.28 - * all respects for all other code used. Additionally, AlliedModders LLC grants
1.29 - * this exception to all derivative works. AlliedModders LLC defines further
1.30 - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
1.31 - * or <http://www.sourcemod.net/license.php>.
1.32 - *
1.33 - * Version: $Id$
1.34 - */
1.35 -
1.36 -#if defined _helpers_included
1.37 - #endinput
1.38 -#endif
1.39 -#define _helpers_included
1.40 -
1.41 -/**
1.42 - * Formats a user's info as log text. This is usually not needed because
1.43 - * %L can be used to auto-format client information into a string.
1.44 - *
1.45 - * @param client Client index.
1.46 - * @param buffer Buffer for text.
1.47 - * @param maxlength Maximum length of text.
1.48 - */
1.49 -stock FormatUserLogText(client, String:buffer[], maxlength)
1.50 -{
1.51 - decl String:auth[32];
1.52 - decl String:name[40];
1.53 -
1.54 - new userid = GetClientUserId(client);
1.55 - if (!GetClientAuthString(client, auth, sizeof(auth)))
1.56 - {
1.57 - strcopy(auth, sizeof(auth), "UNKNOWN");
1.58 - }
1.59 - if (!GetClientName(client, name, sizeof(name)))
1.60 - {
1.61 - strcopy(name, sizeof(name), "UNKNOWN");
1.62 - }
1.63 -
1.64 - /** Currently, no team stuff ... */
1.65 -
1.66 - Format(buffer, maxlength, "\"%s<%d><%s><>\"", name, userid, auth);
1.67 -}
1.68 -
1.69 -/**
1.70 - * Returns plugin handle from plugin filename.
1.71 - *
1.72 - * @param filename Filename of the plugin to search for.
1.73 - * @return Handle to plugin if found, INVALID_HANDLE otherwise.
1.74 - */
1.75 -stock Handle:FindPluginByFile(const String:filename[])
1.76 -{
1.77 - decl String:buffer[256];
1.78 -
1.79 - new Handle:iter = GetPluginIterator();
1.80 - new Handle:pl;
1.81 -
1.82 - while (MorePlugins(iter))
1.83 - {
1.84 - pl = ReadPlugin(iter);
1.85 -
1.86 - GetPluginFilename(pl, buffer, sizeof(buffer));
1.87 - if (strcmp(buffer, filename, false) == 0)
1.88 - {
1.89 - CloseHandle(iter);
1.90 - return pl;
1.91 - }
1.92 - }
1.93 -
1.94 - CloseHandle(iter);
1.95 -
1.96 - return INVALID_HANDLE;
1.97 -}
1.98 -
1.99 -/**
1.100 - * @deprecated Use FindTarget() or ProcessTargetString().
1.101 - */
1.102 -#pragma deprecated Use FindTarget() or ProcessTargetString()
1.103 -stock SearchForClients(const String:pattern[], clients[], maxClients)
1.104 -{
1.105 - new maxclients = GetMaxClients();
1.106 - new total = 0;
1.107 -
1.108 - if (maxClients == 0)
1.109 - {
1.110 - return 0;
1.111 - }
1.112 -
1.113 - if (pattern[0] == '#')
1.114 - {
1.115 - new input = StringToInt(pattern[1]);
1.116 - if (!input)
1.117 - {
1.118 - decl String:name[65]
1.119 - for (new i=1; i<=maxclients; i++)
1.120 - {
1.121 - if (!IsClientInGame(i))
1.122 - {
1.123 - continue;
1.124 - }
1.125 - GetClientName(i, name, sizeof(name));
1.126 - if (strcmp(name, pattern, false) == 0)
1.127 - {
1.128 - clients[0] = i;
1.129 - return 1;
1.130 - }
1.131 - }
1.132 - } else {
1.133 - new client = GetClientOfUserId(input);
1.134 - if (client)
1.135 - {
1.136 - clients[0] = client;
1.137 - return 1;
1.138 - }
1.139 - }
1.140 - }
1.141 -
1.142 - decl String:name[65]
1.143 - for (new i=1; i<=maxclients; i++)
1.144 - {
1.145 - if (!IsClientInGame(i))
1.146 - {
1.147 - continue;
1.148 - }
1.149 - GetClientName(i, name, sizeof(name));
1.150 - if (StrContains(name, pattern, false) != -1)
1.151 - {
1.152 - clients[total++] = i;
1.153 - if (total >= maxClients)
1.154 - {
1.155 - break;
1.156 - }
1.157 - }
1.158 - }
1.159 -
1.160 - return total;
1.161 -}
1.162 -
1.163 -/**
1.164 - * Wraps ProcessTargetString() and handles producing error messages for
1.165 - * bad targets.
1.166 - *
1.167 - * @param client Client who issued command
1.168 - * @param target Client's target argument
1.169 - * @param nobots Optional. Set to true if bots should NOT be targetted
1.170 - * @param immunity Optional. Set to false to ignore target immunity.
1.171 - * @return Index of target client, or -1 on error.
1.172 - */
1.173 -stock FindTarget(client, const String:target[], bool:nobots = false, bool:immunity = true)
1.174 -{
1.175 - decl String:target_name[MAX_TARGET_LENGTH];
1.176 - decl target_list[1], target_count, bool:tn_is_ml;
1.177 -
1.178 - new flags = COMMAND_FILTER_NO_MULTI;
1.179 - if (nobots)
1.180 - {
1.181 - flags |= COMMAND_FILTER_NO_BOTS;
1.182 - }
1.183 - if (!immunity)
1.184 - {
1.185 - flags |= COMMAND_FILTER_NO_IMMUNITY;
1.186 - }
1.187 -
1.188 - if ((target_count = ProcessTargetString(
1.189 - target,
1.190 - client,
1.191 - target_list,
1.192 - 1,
1.193 - flags,
1.194 - target_name,
1.195 - sizeof(target_name),
1.196 - tn_is_ml)) > 0)
1.197 - {
1.198 - return target_list[0];
1.199 - }
1.200 - else
1.201 - {
1.202 - ReplyToTargetError(client, target_count);
1.203 - return -1;
1.204 - }
1.205 -}
1.206 -
1.207 -/**
1.208 - * Loads a specified array with maps. The maps will be either loaded from mapcyclefile, or if supplied
1.209 - * a cvar containing a file name. If the file in the cvar is bad, it will use mapcyclefile. The fileTime
1.210 - * parameter is used to store a timestamp of the file. If specified, the file will only be reloaded if it
1.211 - * has changed.
1.212 - *
1.213 - * @param array Valid array handle, should be created with CreateArray(33) or larger.
1.214 - * @param fileTime Variable containing the "last changed" time of the file. Used to avoid needless reloading.
1.215 - * @param fileCvar CVAR set to the file to be loaded. Optional.
1.216 - * @return Number of maps loaded or 0 if in error.
1.217 - */
1.218 - stock LoadMaps(Handle:array, &fileTime = 0, Handle:fileCvar = INVALID_HANDLE)
1.219 - {
1.220 - decl String:mapPath[256], String:mapFile[64];
1.221 - new bool:fileFound = false;
1.222 -
1.223 - if (fileCvar != INVALID_HANDLE)
1.224 - {
1.225 - GetConVarString(fileCvar, mapFile, 64);
1.226 - BuildPath(Path_SM, mapPath, sizeof(mapPath), mapFile);
1.227 - fileFound = FileExists(mapPath);
1.228 - }
1.229 -
1.230 - if (!fileFound)
1.231 - {
1.232 - new Handle:mapCycleFile = FindConVar("mapcyclefile");
1.233 - GetConVarString(mapCycleFile, mapPath, sizeof(mapPath));
1.234 - fileFound = FileExists(mapPath);
1.235 - }
1.236 -
1.237 - if (!fileFound)
1.238 - {
1.239 - LogError("Failed to find a file to load maps from. No maps loaded.");
1.240 - ClearArray(array);
1.241 -
1.242 - return 0;
1.243 - }
1.244 -
1.245 - // If the file hasn't changed, there's no reason to reload
1.246 - // all of the maps.
1.247 - new newTime = GetFileTime(mapPath, FileTime_LastChange);
1.248 - if (fileTime == newTime)
1.249 - {
1.250 - return GetArraySize(array);
1.251 - }
1.252 -
1.253 - fileTime = newTime;
1.254 -
1.255 - ClearArray(array);
1.256 -
1.257 - new Handle:file = OpenFile(mapPath, "rt");
1.258 - if (file == INVALID_HANDLE)
1.259 - {
1.260 - LogError("Could not open file: %s", mapPath);
1.261 -
1.262 - return 0;
1.263 - }
1.264 -
1.265 - LogMessage("Loading maps from file: %s", mapPath);
1.266 -
1.267 - decl String:buffer[64], len;
1.268 - while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
1.269 - {
1.270 - TrimString(buffer);
1.271 -
1.272 - if ((len = StrContains(buffer, ".bsp", false)) != -1)
1.273 - {
1.274 - buffer[len] = '\0';
1.275 - }
1.276 -
1.277 - if (buffer[0] == '\0' || !IsValidConVarChar(buffer[0]) || !IsMapValid(buffer))
1.278 - {
1.279 - continue;
1.280 - }
1.281 -
1.282 - if (FindStringInArray(array, buffer) != -1)
1.283 - {
1.284 - continue;
1.285 - }
1.286 -
1.287 - PushArrayString(array, buffer);
1.288 - }
1.289 -
1.290 - CloseHandle(file);
1.291 - return GetArraySize(array);
1.292 -}