Fixed stupid compiler error in cookies (oops) and recoded serial module to use steamids (serial's weren't workin' out) + the API was very confined, added ability to create SteamID cache's instead of one global cache. ZSpawn uses this new cache system.
This commit is contained in:
		| @@ -43,7 +43,7 @@ | ||||
| #include "zr/cvars" | ||||
| #include "zr/log" | ||||
| #include "zr/config" | ||||
| #include "zr/serial" | ||||
| #include "zr/steamidcache" | ||||
| #include "zr/sayhooks" | ||||
| #include "zr/tools" | ||||
| #include "zr/cookies" | ||||
| @@ -130,7 +130,6 @@ public OnPluginStart() | ||||
| public OnMapStart() | ||||
| { | ||||
|     // Forward event to modules. | ||||
|     SerialOnMapStart(); | ||||
|     OverlaysOnMapStart(); | ||||
|     RoundEndOnMapStart(); | ||||
|     InfectOnMapStart(); | ||||
|   | ||||
| @@ -48,7 +48,7 @@ CookiesSetClientCookieBool(client, Handle:cookie, bool:cookievalue) | ||||
|     ZRBoolToString(cookievalue, strCookievalue, sizeof(strCookievalue)); | ||||
|      | ||||
|     // Set the converted string to the cookie. | ||||
|     SetClientCookie(client, cookie, cookievalue); | ||||
|     SetClientCookie(client, cookie, strCookievalue); | ||||
| } | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -1,100 +0,0 @@ | ||||
| /* | ||||
|  * ============================================================================ | ||||
|  * | ||||
|  *   Zombie:Reloaded | ||||
|  * | ||||
|  *  File:          serial.inc | ||||
|  *  Type:          Core | ||||
|  *  Description:   Client serial number tracking API. | ||||
|  * | ||||
|  *  Copyright (C) 2009  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 <http://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  * ============================================================================ | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * Maximum length of a client's serial number. | ||||
|  */ | ||||
| #define SERIAL_MAX_LENGTH 8 | ||||
|  | ||||
| /** | ||||
|  * Array to store client serial numbers. | ||||
|  */ | ||||
| new Handle:arraySerial = INVALID_HANDLE; | ||||
|  | ||||
| /** | ||||
|  * Map is starting. | ||||
| */ | ||||
| SerialOnMapStart() | ||||
| { | ||||
|     // If array exists, destroy before recreating. | ||||
|     if (arraySerial != INVALID_HANDLE) | ||||
|     { | ||||
|         CloseHandle(arraySerial); | ||||
|     } | ||||
|      | ||||
|     // Create array. | ||||
|     arraySerial = CreateArray(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Add client serial number to global array. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  * @return          True if the client was added successfully, false if the client already exists. | ||||
|  */ | ||||
| bool:SerialAddClient(client) | ||||
| { | ||||
|     // Check if client is already added. | ||||
|     new bool:exists = SerialClientExists(client); | ||||
|     if (exists) | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     // Get client's serial number. | ||||
|     new serial = GetClientSerial(client); | ||||
|      | ||||
|     // Push serial number into the global array. | ||||
|     PushArrayCell(arraySerial, serial); | ||||
|      | ||||
|     // Client added successfully. | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Check if a client has been added to the global array. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  * @return          True if the client exists, false otherwise. | ||||
|  */ | ||||
| bool:SerialClientExists(client) | ||||
| { | ||||
|     // Get client's serial number. | ||||
|     new serial = GetClientSerial(client); | ||||
|      | ||||
|     // Return true if value was found, false otherwise. | ||||
|     return (FindValueInArray(arraySerial, serial) != -1); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Reset serial number array. | ||||
|  */ | ||||
| SerialReset() | ||||
| { | ||||
|     // Clear array. | ||||
|     ClearArray(arraySerial); | ||||
| } | ||||
							
								
								
									
										96
									
								
								src/zr/steamidcache.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/zr/steamidcache.inc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | ||||
| /* | ||||
|  * ============================================================================ | ||||
|  * | ||||
|  *   Zombie:Reloaded | ||||
|  * | ||||
|  *  File:          steamidcache.inc | ||||
|  *  Type:          Core | ||||
|  *  Description:   A SteamID caching API. | ||||
|  * | ||||
|  *  Copyright (C) 2009  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 <http://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  * ============================================================================ | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * The maximum length of a SteamID | ||||
|  */ | ||||
| #define STEAMIDCACHE_MAX_LENGTH 16 | ||||
|  | ||||
| /** | ||||
|  * Creates a steamid cache. | ||||
|  *  | ||||
|  * @return  Handle to SteamID cache. | ||||
|  */ | ||||
| stock Handle:SteamidCacheCreate() | ||||
| { | ||||
|     // Return steamid cache handle. | ||||
|     return CreateArray(STEAMIDCACHE_MAX_LENGTH); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Add client serial number to the SteamID cache. | ||||
|  *  | ||||
|  * @param steamidcache  The SteamID cache to add client to. | ||||
|  * @param client        The client index. | ||||
|  * @return              True if the client was added successfully, false if the client already exists. | ||||
|  */ | ||||
| stock bool:SteamidCacheAddClient(Handle:steamidcache, client) | ||||
| { | ||||
|     // Check if client is in the cache. | ||||
|     if (SteamidCacheClientExists(steamidcache, client)) | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     // Get client's SteamID. | ||||
|     decl String:steamid[STEAMIDCACHE_MAX_LENGTH]; | ||||
|     GetClientAuthString(client, steamid, sizeof(steamid)); | ||||
|      | ||||
|     // Push SteamID into the SteamID cache. | ||||
|     PushArrayString(steamidcache, steamid); | ||||
|      | ||||
|     // Client added successfully. | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Check if a client is in the SteamID cache. | ||||
|  *  | ||||
|  * @param steamidcache  The SteamID cache to check in. | ||||
|  * @param client        The client index. | ||||
|  * @return              True if the client exists, false otherwise. | ||||
|  */ | ||||
| stock bool:SteamidCacheClientExists(Handle:steamidcache, client) | ||||
| { | ||||
|     // Get client's SteamID. | ||||
|     decl String:steamid[STEAMIDCACHE_MAX_LENGTH]; | ||||
|     GetClientAuthString(client, steamid, sizeof(steamid)); | ||||
|      | ||||
|     // Return true if client was found, false otherwise. | ||||
|     return (FindStringInArray(steamidcache, steamid) != -1); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Reset SteamID cache. | ||||
|  *  | ||||
|  * @param steamidcache  The SteamID cache to reset. | ||||
|  */ | ||||
| stock SteamidCacheReset(Handle:steamidcache) | ||||
| { | ||||
|     // Clear array. | ||||
|     ClearArray(steamidcache); | ||||
| } | ||||
| @@ -30,6 +30,11 @@ | ||||
|  */ | ||||
| new Handle:tZSpawn = INVALID_HANDLE; | ||||
|  | ||||
| /** | ||||
|  * Global variable to store SteamID cache handle. | ||||
|  */ | ||||
| new Handle:g_hZSpawnSteamIDCache = INVALID_HANDLE; | ||||
|  | ||||
| /** | ||||
|  * Create commands specific to ZSpawn. | ||||
|  */ | ||||
| @@ -46,6 +51,15 @@ ZSpawnOnMapStart() | ||||
| { | ||||
|     // Reset timer handle. | ||||
|     tZSpawn = INVALID_HANDLE; | ||||
|      | ||||
|     // If SteamID cache hasn't been created yet, then create. | ||||
|     if (g_hZSpawnSteamIDCache == INVALID_HANDLE) | ||||
|     { | ||||
|         g_hZSpawnSteamIDCache = SteamidCacheCreate(); | ||||
|     } | ||||
|      | ||||
|     // Reset the SteamID cache. | ||||
|     SteamidCacheReset(g_hZSpawnSteamIDCache); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -61,8 +75,8 @@ ZSpawnOnClientDisconnect(client) | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     // Add client serial to global array. | ||||
|     SerialAddClient(client); | ||||
|     // Add client to the SteamID cache. | ||||
|     SteamidCacheAddClient(g_hZSpawnSteamIDCache, client); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -72,8 +86,8 @@ ZSpawnOnClientDisconnect(client) | ||||
|  */ | ||||
| ZSpawnOnClientDeath(client) | ||||
| { | ||||
|     // Add client serial to global array. | ||||
|     SerialAddClient(client); | ||||
|     // Add client to the SteamID cache. | ||||
|     SteamidCacheAddClient(g_hZSpawnSteamIDCache, client); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -81,8 +95,8 @@ ZSpawnOnClientDeath(client) | ||||
|  */ | ||||
| ZSpawnOnRoundStart() | ||||
| { | ||||
|     // Reset serial number array. | ||||
|     SerialReset(); | ||||
|     // Reset the SteamID cache. | ||||
|     SteamidCacheReset(g_hZSpawnSteamIDCache); | ||||
|      | ||||
|     // If zspawn timer is running, then kill it. | ||||
|     if (tZSpawn != INVALID_HANDLE) | ||||
| @@ -177,7 +191,7 @@ bool:ZSpawnClient(client) | ||||
|     } | ||||
|      | ||||
|     // Block if client has already played during this round. | ||||
|     if (SerialClientExists(client)) | ||||
|     if (SteamidCacheClientExists(g_hZSpawnSteamIDCache, client)) | ||||
|     { | ||||
|         // Tell client the command may only be used when joining late. | ||||
|         TranslationPrintToChat(client, "ZSpawn double spawn"); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user