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]");
|
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.");
|
||||||
|
@ -101,9 +101,20 @@ 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.
|
||||||
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SetEntityModel(client, modelpath);
|
SetEntityModel(client, modelpath);
|
||||||
return true;
|
return true;
|
||||||
|
@ -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))
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user