Merged heads.
This commit is contained in:
commit
79bf4230c1
@ -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]");
|
||||
|
||||
// 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
|
||||
g_hCvarsList[CVAR_CLASSES_OVERLAY_TOGGLE] = CreateConVar("zr_classes_overlay_toggle", "1", "Allow players to toggle class overlay.");
|
||||
|
@ -101,9 +101,20 @@ bool:ClassApplyModel(client, classindex, cachetype = ZR_CLASS_CACHE_PLAYER)
|
||||
// Check if the user specified no change.
|
||||
else if (strcmp(modelpath, "default", false) == 0)
|
||||
{
|
||||
// Don't change the model.
|
||||
// Get current model.
|
||||
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);
|
||||
return true;
|
||||
|
@ -69,6 +69,10 @@ ClassOnClientDisconnect(client)
|
||||
*/
|
||||
ClassOnClientSpawn(client)
|
||||
{
|
||||
decl String:originalmodel[PLATFORM_MAX_PATH];
|
||||
decl String:steamid[16];
|
||||
decl String:classname[64];
|
||||
|
||||
// Check if the player is alive.
|
||||
if (!IsPlayerAlive(client))
|
||||
{
|
||||
@ -85,10 +89,12 @@ ClassOnClientSpawn(client)
|
||||
// Reset attributes by triggering death event.
|
||||
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];
|
||||
decl String:classname[64];
|
||||
// Get random class setting.
|
||||
new bool:randomclass = GetConVarBool(g_hCvarsList[CVAR_CLASSES_RANDOM]);
|
||||
|
||||
// Assign random classes if enabled. Always do it for bots.
|
||||
GetClientAuthString(client, steamid, sizeof(steamid));
|
||||
@ -172,9 +178,9 @@ ClassOnClientInfected(client, bool:motherzombie = false)
|
||||
// Check if it's a mother zombie.
|
||||
if (motherzombie)
|
||||
{
|
||||
// Set negative admin flag if client is admin, so it's removed in
|
||||
// special class flags.
|
||||
isadmin = ZRIsClientAdmin(client) ? -ZR_CLASS_FLAG_ADMIN_ONLY : 0;
|
||||
// Set admin flag if client is admin, so it's removed in special class
|
||||
// flags.
|
||||
isadmin = ZRIsClientAdmin(client) ? ZR_CLASS_FLAG_ADMIN_ONLY : 0;
|
||||
|
||||
// Get default mother zombie setting.
|
||||
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))
|
||||
{
|
||||
// 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))
|
||||
{
|
||||
|
@ -231,6 +231,9 @@ ClassMenuSelect(client, teamid)
|
||||
}
|
||||
}
|
||||
|
||||
// Destroy array.
|
||||
CloseHandle(classarray);
|
||||
|
||||
SetMenuExitBackButton(menu, true);
|
||||
DisplayMenu(menu, client, MENU_TIME_FOREVER);
|
||||
}
|
||||
|
@ -492,7 +492,7 @@ stock bool:ClassFlagFilterMatch(index, require, deny, cachetype)
|
||||
}
|
||||
|
||||
// Match deny filter.
|
||||
if (deny == 0 || ~flags & deny)
|
||||
if (deny == 0 || !(flags & deny))
|
||||
{
|
||||
// No denied flags are set.
|
||||
denypassed = true;
|
||||
@ -693,6 +693,7 @@ stock ClassGetRandomClass(teamfilter = -1, bool:ignoreEnabled = false, requirefl
|
||||
new Handle:classarray;
|
||||
new arraycount;
|
||||
new randnum;
|
||||
new buffer;
|
||||
|
||||
classarray = CreateArray();
|
||||
|
||||
@ -704,11 +705,14 @@ stock ClassGetRandomClass(teamfilter = -1, bool:ignoreEnabled = false, requirefl
|
||||
randnum = GetRandomInt(0, arraycount - 1);
|
||||
|
||||
// Return the value at the random index.
|
||||
return GetArrayCell(classarray, randnum);
|
||||
buffer = GetArrayCell(classarray, randnum);
|
||||
CloseHandle(classarray);
|
||||
return buffer;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Failed to get a random class.
|
||||
CloseHandle(classarray);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -808,6 +812,7 @@ stock ClassGetDefaultClass(teamid, bool:ignoreEnabled = false, requireflags = 0,
|
||||
if (!ClassAddToArray(classarray, teamid, ignoreEnabled, requireflags, denyflags, cachetype))
|
||||
{
|
||||
// Failed to get classes.
|
||||
CloseHandle(classarray);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -822,10 +827,12 @@ stock ClassGetDefaultClass(teamid, bool:ignoreEnabled = false, requireflags = 0,
|
||||
if (ClassGetTeamDefault(classindex, cachetype))
|
||||
{
|
||||
// Default class found.
|
||||
CloseHandle(classarray);
|
||||
return classindex;
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(classarray);
|
||||
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.
|
||||
// Because it's user input, we'll fall back to the first class
|
||||
// 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);
|
||||
|
||||
|
@ -366,6 +366,12 @@ new bool:ClassPlayerAdminMode[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/attributes"
|
||||
#include "zr/playerclasses/apply"
|
||||
@ -538,6 +544,9 @@ ClassLoad(bool:keepMultipliers = false)
|
||||
ConfigSetConfigReloadFunc(File_Classes, GetFunctionByName(GetMyHandle(), "ClassOnConfigReload"));
|
||||
// ConfigSetConfigHandle(File_Classes, INVALID_HANDLE);
|
||||
ConfigSetConfigPath(File_Classes, pathclasses);
|
||||
|
||||
// Remove key/value cache.
|
||||
CloseHandle(kvClassData);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user