Merged heads.

This commit is contained in:
Greyscale 2009-06-22 13:07:49 -07:00
commit 79bf4230c1
6 changed files with 49 additions and 13 deletions

View File

@ -238,7 +238,7 @@ CvarsCreate()
g_hCvarsList[CVAR_CLASSES_DEFAULT_ADMIN] = CreateConVar("zr_classes_default_admin", "random", "Admin class assigned to admins on connect. [\"random\" = Random admin class | \"\" = Class config default]"); g_hCvarsList[CVAR_CLASSES_DEFAULT_ADMIN] = CreateConVar("zr_classes_default_admin", "random", "Admin class assigned to admins on connect. [\"random\" = Random admin class | \"\" = Class config default]");
// Menu // Menu
g_hCvarsList[CVAR_CLASSES_MENU_AUTOCLOSE] = CreateConVar("zr_classes_menu_autoclose", "0", "Automatically close class selection menu."); g_hCvarsList[CVAR_CLASSES_MENU_AUTOCLOSE] = CreateConVar("zr_classes_menu_autoclose", "0", "Automatically close class selection menu after selecting a class.");
// Overlays // Overlays
g_hCvarsList[CVAR_CLASSES_OVERLAY_TOGGLE] = CreateConVar("zr_classes_overlay_toggle", "1", "Allow players to toggle class overlay."); g_hCvarsList[CVAR_CLASSES_OVERLAY_TOGGLE] = CreateConVar("zr_classes_overlay_toggle", "1", "Allow players to toggle class overlay.");

View File

@ -101,8 +101,19 @@ bool:ClassApplyModel(client, classindex, cachetype = ZR_CLASS_CACHE_PLAYER)
// Check if the user specified no change. // Check if the user specified no change.
else if (strcmp(modelpath, "default", false) == 0) else if (strcmp(modelpath, "default", false) == 0)
{ {
// Don't change the model. // Get current model.
return true; GetClientModel(client, modelpath, sizeof(modelpath));
// Restore original model if not already set.
if (!StrEqual(ClassOriginalPlayerModel[client], modelpath))
{
strcopy(modelpath, sizeof(modelpath), ClassOriginalPlayerModel[client]);
}
else
{
// Wanted model is already set, don't change.
return true;
}
} }
SetEntityModel(client, modelpath); SetEntityModel(client, modelpath);

View File

@ -69,6 +69,10 @@ ClassOnClientDisconnect(client)
*/ */
ClassOnClientSpawn(client) ClassOnClientSpawn(client)
{ {
decl String:originalmodel[PLATFORM_MAX_PATH];
decl String:steamid[16];
decl String:classname[64];
// Check if the player is alive. // Check if the player is alive.
if (!IsPlayerAlive(client)) if (!IsPlayerAlive(client))
{ {
@ -85,10 +89,12 @@ ClassOnClientSpawn(client)
// Reset attributes by triggering death event. // Reset attributes by triggering death event.
ClassOnClientDeath(client); ClassOnClientDeath(client);
new bool:randomclass = GetConVarBool(g_hCvarsList[CVAR_CLASSES_RANDOM]); // Cache original player model.
GetClientModel(client, originalmodel, sizeof(originalmodel));
strcopy(ClassOriginalPlayerModel[client], PLATFORM_MAX_PATH, originalmodel);
decl String:steamid[16]; // Get random class setting.
decl String:classname[64]; new bool:randomclass = GetConVarBool(g_hCvarsList[CVAR_CLASSES_RANDOM]);
// Assign random classes if enabled. Always do it for bots. // Assign random classes if enabled. Always do it for bots.
GetClientAuthString(client, steamid, sizeof(steamid)); GetClientAuthString(client, steamid, sizeof(steamid));
@ -172,9 +178,9 @@ ClassOnClientInfected(client, bool:motherzombie = false)
// Check if it's a mother zombie. // Check if it's a mother zombie.
if (motherzombie) if (motherzombie)
{ {
// Set negative admin flag if client is admin, so it's removed in // Set admin flag if client is admin, so it's removed in special class
// special class flags. // flags.
isadmin = ZRIsClientAdmin(client) ? -ZR_CLASS_FLAG_ADMIN_ONLY : 0; isadmin = ZRIsClientAdmin(client) ? ZR_CLASS_FLAG_ADMIN_ONLY : 0;
// Get default mother zombie setting. // Get default mother zombie setting.
GetConVarString(g_hCvarsList[CVAR_CLASSES_DEFAULT_M_ZOMB], motherzombiesetting, sizeof(motherzombiesetting)); GetConVarString(g_hCvarsList[CVAR_CLASSES_DEFAULT_M_ZOMB], motherzombiesetting, sizeof(motherzombiesetting));
@ -186,7 +192,7 @@ ClassOnClientInfected(client, bool:motherzombie = false)
else if (StrEqual(motherzombiesetting, "random", false)) else if (StrEqual(motherzombiesetting, "random", false))
{ {
// Get random regular zombie class. Remove admin flag if admin. // Get random regular zombie class. Remove admin flag if admin.
motherindex = ClassGetRandomClass(ZR_CLASS_TEAM_ZOMBIES, _, _, ZR_CLASS_SPECIALFLAGS + isadmin); motherindex = ClassGetRandomClass(ZR_CLASS_TEAM_ZOMBIES, _, _, ZR_CLASS_SPECIALFLAGS - isadmin);
} }
else if (StrEqual(motherzombiesetting, "motherzombies", false)) else if (StrEqual(motherzombiesetting, "motherzombies", false))
{ {

View File

@ -231,6 +231,9 @@ ClassMenuSelect(client, teamid)
} }
} }
// Destroy array.
CloseHandle(classarray);
SetMenuExitBackButton(menu, true); SetMenuExitBackButton(menu, true);
DisplayMenu(menu, client, MENU_TIME_FOREVER); DisplayMenu(menu, client, MENU_TIME_FOREVER);
} }

View File

@ -492,7 +492,7 @@ stock bool:ClassFlagFilterMatch(index, require, deny, cachetype)
} }
// Match deny filter. // Match deny filter.
if (deny == 0 || ~flags & deny) if (deny == 0 || !(flags & deny))
{ {
// No denied flags are set. // No denied flags are set.
denypassed = true; denypassed = true;
@ -693,6 +693,7 @@ stock ClassGetRandomClass(teamfilter = -1, bool:ignoreEnabled = false, requirefl
new Handle:classarray; new Handle:classarray;
new arraycount; new arraycount;
new randnum; new randnum;
new buffer;
classarray = CreateArray(); classarray = CreateArray();
@ -704,11 +705,14 @@ stock ClassGetRandomClass(teamfilter = -1, bool:ignoreEnabled = false, requirefl
randnum = GetRandomInt(0, arraycount - 1); randnum = GetRandomInt(0, arraycount - 1);
// Return the value at the random index. // Return the value at the random index.
return GetArrayCell(classarray, randnum); buffer = GetArrayCell(classarray, randnum);
CloseHandle(classarray);
return buffer;
} }
else else
{ {
// Failed to get a random class. // Failed to get a random class.
CloseHandle(classarray);
return -1; return -1;
} }
} }
@ -808,6 +812,7 @@ stock ClassGetDefaultClass(teamid, bool:ignoreEnabled = false, requireflags = 0,
if (!ClassAddToArray(classarray, teamid, ignoreEnabled, requireflags, denyflags, cachetype)) if (!ClassAddToArray(classarray, teamid, ignoreEnabled, requireflags, denyflags, cachetype))
{ {
// Failed to get classes. // Failed to get classes.
CloseHandle(classarray);
return -1; return -1;
} }
@ -822,10 +827,12 @@ stock ClassGetDefaultClass(teamid, bool:ignoreEnabled = false, requireflags = 0,
if (ClassGetTeamDefault(classindex, cachetype)) if (ClassGetTeamDefault(classindex, cachetype))
{ {
// Default class found. // Default class found.
CloseHandle(classarray);
return classindex; return classindex;
} }
} }
CloseHandle(classarray);
return -1; return -1;
} }
@ -909,7 +916,7 @@ stock ClassGetDefaultSpawnClass(teamid, cachetype = ZR_CLASS_CACHE_MODIFIED)
// The class index is invalid or the team IDs didn't match. // The class index is invalid or the team IDs didn't match.
// Because it's user input, we'll fall back to the first class // Because it's user input, we'll fall back to the first class
// in the specified team, and log a warning. // in the specified team, and log a warning.
classindex = ClassGetFirstClass(teamid, _, _, cachetype); classindex = ClassGetFirstClass(teamid, _, _, ZR_CLASS_SPECIALFLAGS, cachetype);
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Default Spawn Class", "Warning: Failed to set \"%s\" as default spawn class for team %d. The class doesn't exist or the team IDs doesn't match. Falling back to the first class in the team.", classname, teamid); LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Default Spawn Class", "Warning: Failed to set \"%s\" as default spawn class for team %d. The class doesn't exist or the team IDs doesn't match. Falling back to the first class in the team.", classname, teamid);

View File

@ -366,6 +366,12 @@ new bool:ClassPlayerAdminMode[MAXPLAYERS + 1];
*/ */
new ClassPlayerNextAdminClass[MAXPLAYERS + 1]; new ClassPlayerNextAdminClass[MAXPLAYERS + 1];
/**
* Cache for storing original model path before applying custom models. Used
* when restoring to old model.
*/
new String:ClassOriginalPlayerModel[MAXPLAYERS + 1][PLATFORM_MAX_PATH];
#include "zr/playerclasses/filtertools" #include "zr/playerclasses/filtertools"
#include "zr/playerclasses/attributes" #include "zr/playerclasses/attributes"
#include "zr/playerclasses/apply" #include "zr/playerclasses/apply"
@ -538,6 +544,9 @@ ClassLoad(bool:keepMultipliers = false)
ConfigSetConfigReloadFunc(File_Classes, GetFunctionByName(GetMyHandle(), "ClassOnConfigReload")); ConfigSetConfigReloadFunc(File_Classes, GetFunctionByName(GetMyHandle(), "ClassOnConfigReload"));
// ConfigSetConfigHandle(File_Classes, INVALID_HANDLE); // ConfigSetConfigHandle(File_Classes, INVALID_HANDLE);
ConfigSetConfigPath(File_Classes, pathclasses); ConfigSetConfigPath(File_Classes, pathclasses);
// Remove key/value cache.
CloseHandle(kvClassData);
} }
/** /**