diff --git a/cstrike/addons/sourcemod/configs/zr/playerclasses.txt b/cstrike/addons/sourcemod/configs/zr/playerclasses.txt index 91a63f9..3ba0449 100644 --- a/cstrike/addons/sourcemod/configs/zr/playerclasses.txt +++ b/cstrike/addons/sourcemod/configs/zr/playerclasses.txt @@ -54,6 +54,7 @@ "enabled" "1" "team" "0" "team_default" "1" + "admin_only" "0" "name" "Classic" "description" "Need brains!!! Arrrrggghh!" @@ -96,6 +97,7 @@ "enabled" "1" "team" "0" "team_default" "0" + "admin_only" "0" "name" "Fast" "description" "-HP | +Speed | +Jump | +Knockback" @@ -138,6 +140,7 @@ "enabled" "1" "team" "0" "team_default" "0" + "admin_only" "0" "name" "Mutated" "description" "+HP | -Speed | +Jump | +Knockback" @@ -180,6 +183,7 @@ "enabled" "1" "team" "0" "team_default" "0" + "admin_only" "0" "name" "Heavy" "description" "+HP | -Speed | -Jump | -Knockback" @@ -228,6 +232,7 @@ "enabled" "1" "team" "1" "team_default" "1" + "admin_only" "0" "name" "Normal Human" "description" "Default Counter-Strike settings" @@ -270,6 +275,7 @@ "enabled" "1" "team" "1" "team_default" "0" + "admin_only" "0" "name" "Speedy" "description" "Fast human" @@ -312,6 +318,7 @@ "enabled" "1" "team" "1" "team_default" "0" + "admin_only" "0" "name" "Light" "description" "Regular human with improved jump skills" diff --git a/src/zr/playerclasses/attributes.inc b/src/zr/playerclasses/attributes.inc index 1d27b3f..d830aab 100644 --- a/src/zr/playerclasses/attributes.inc +++ b/src/zr/playerclasses/attributes.inc @@ -132,6 +132,39 @@ stock bool:ClassGetTeamDefault(index, cachetype = ZR_CLASS_CACHE_MODIFIED) return false; } +/** + * Checks if the specified class is for admins only or not. + * + * @param index Index of the class in a class cache or a client index, + * depending on the cache type specified. + * @param cachetype Optional. Specifies what class cache to read from. Options: + * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. + * ZR_CLASS_CACHE_MODIFIED (default) - Changed/newest class + * data. + * ZR_CLASS_CACHE_PLAYER - Player cache. If this one is used, + * index will be used as a client index. + * @return True if it's for admins only, false otherwise. + */ +stock bool:ClassGetAdminOnly(index, cachetype = ZR_CLASS_CACHE_MODIFIED) +{ + switch (cachetype) + { + case ZR_CLASS_CACHE_ORIGINAL: + { + return ClassData[index][class_admin_only]; + } + case ZR_CLASS_CACHE_MODIFIED: + { + return ClassDataCache[index][class_admin_only]; + } + case ZR_CLASS_CACHE_PLAYER: + { + return ClassPlayerCache[index][class_admin_only]; + } + } + return false; +} + /** * Gets the class name to be displayed in the class menu. * @@ -963,6 +996,10 @@ stock ClassAttributeNameToFlag(const String:attributename[]) { return ZR_CLASS_FLAG_TEAM_DEFAULT; } + else if (StrEqual(attributename, "admin_only", false)) + { + return ZR_CLASS_FLAG_ADMIN_ONLY; + } else if (StrEqual(attributename, "name", false)) { return ZR_CLASS_FLAG_NAME; @@ -1121,7 +1158,8 @@ stock ClassDataTypes:ClassGetAttributeType(attributeflag) // Boolean. case ZR_CLASS_FLAG_ENABLED, ZR_CLASS_FLAG_NVGS, - ZR_CLASS_FLAG_NO_FALL_DAMAGE: + ZR_CLASS_FLAG_NO_FALL_DAMAGE, + ZR_CLASS_FLAG_ADMIN_ONLY: { return ClassDataType_Boolean; } diff --git a/src/zr/playerclasses/classmenus.inc b/src/zr/playerclasses/classmenus.inc index 8570b57..f039bc7 100644 --- a/src/zr/playerclasses/classmenus.inc +++ b/src/zr/playerclasses/classmenus.inc @@ -177,6 +177,7 @@ ClassMenuSelect(client, teamid) new Handle:menu = CreateMenu(ClassMenuSelectHandle); new arraycount; new classindex; + new bool:clientisadmin = ZRIsClientAdmin(client); decl String:title[64]; decl String:classname[64]; @@ -207,7 +208,8 @@ ClassMenuSelect(client, teamid) new Handle:classarray = CreateArray(); // Copy all class indexes into the array, with the specified team filter. - if (ClassAddToArray(classarray, teamid)) + // Also list admin-only classes if client is a admin. + if (ClassAddToArray(classarray, teamid, _, clientisadmin)) { // Get number of classes. arraycount = GetArraySize(classarray); diff --git a/src/zr/playerclasses/filtertools.inc b/src/zr/playerclasses/filtertools.inc index d273d15..dc91f11 100644 --- a/src/zr/playerclasses/filtertools.inc +++ b/src/zr/playerclasses/filtertools.inc @@ -47,8 +47,8 @@ stock bool:ClassValidateTeamRequirements(cachetype = ZR_CLASS_CACHE_ORIGINAL) } // Test if a zombie and human class was found. - zombieindex = ClassGetFirstClass(ZR_CLASS_TEAM_ZOMBIES, _, cachetype); - humanindex = ClassGetFirstClass(ZR_CLASS_TEAM_HUMANS, _, cachetype); + zombieindex = ClassGetFirstClass(ZR_CLASS_TEAM_ZOMBIES, _, _, cachetype); + humanindex = ClassGetFirstClass(ZR_CLASS_TEAM_HUMANS, _, _, cachetype); // Validate indexes. if (ClassValidateIndex(zombieindex) && ClassValidateIndex(humanindex)) @@ -79,8 +79,8 @@ stock bool:ClassValidateTeamDefaults(cachetype = ZR_CLASS_CACHE_ORIGINAL) } // Test if a default zombie and human class was found. - zombieindex = ClassGetDefaultClass(ZR_CLASS_TEAM_ZOMBIES, _, cachetype); - humanindex = ClassGetDefaultClass(ZR_CLASS_TEAM_HUMANS, _, cachetype); + zombieindex = ClassGetDefaultClass(ZR_CLASS_TEAM_ZOMBIES, _, _, cachetype); + humanindex = ClassGetDefaultClass(ZR_CLASS_TEAM_HUMANS, _, _, cachetype); // Validate indexes. if (ClassValidateIndex(zombieindex) && ClassValidateIndex(humanindex)) @@ -448,20 +448,22 @@ stock Float:ClassGetAttributeMultiplier(client, ClassMultipliers:attribute) * Gets all class indexes or from a specified team, and adds them to the * specified array. * - * @param array The destination array to add class indexes. - * @param teamfilter Optional. The team ID to filter. A negative value for - * no filter (default). - * @param ignoreEnabled Optional. Ignore the class's enabled attribute. Default - * is false. - * @param cachetype Optional. Specifies what class cache to read from. - * Options: - * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. - * ZR_CLASS_CACHE_MODIFIED (default) - Changed/newest - * class data. + * @param array The destination array to add class indexes. + * @param teamfilter Optional. The team ID to filter. A negative value + * for no filter (default). + * @param ignoreEnabled Optional. Ignore whether the class is enabled or + * not. Default is false. + * @param ignoreAdminOnly Optional. Ignore whether the class is for admins + * only or not. Default is false. + * @param cachetype Optional. Specifies what class cache to read from. + * Options: + * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. + * ZR_CLASS_CACHE_MODIFIED (default) - Changed/newest + * class data. * @return True on success. False on error or if no classes were added or * found. */ -stock bool:ClassAddToArray(Handle:array, teamfilter = -1, bool:ignoreEnabled = false, cachetype = ZR_CLASS_CACHE_MODIFIED) +stock bool:ClassAddToArray(Handle:array, teamfilter = -1, bool:ignoreEnabled = false, bool:ignoreAdminOnly = false, cachetype = ZR_CLASS_CACHE_MODIFIED) { // Validate the array. if (array == INVALID_HANDLE) @@ -489,6 +491,13 @@ stock bool:ClassAddToArray(Handle:array, teamfilter = -1, bool:ignoreEnabled = f continue; } + if (!ignoreAdminOnly && ClassGetAdminOnly(classindex, cachetype)) + { + // The class is for admins only. This attribute isn't ignored so + // skip to the next class. + continue; + } + // Check team filtering. if (has_filter) { @@ -524,7 +533,10 @@ stock bool:ClassAddToArray(Handle:array, teamfilter = -1, bool:ignoreEnabled = f * * @param teamfilter Optional. The team ID to filter. Negative value for * no filter (default). - * @param ignoreEnabled Ignore the enabled attribute. + * @param ignoreEnabled Optional. Ignore whether the class is enabled or + * not. Default is false. + * @param ignoreAdminOnly Optional. Ignore whether the class is for admins + * only or not. Default is false. * @param cachetype Optional. Specifies what class cache to read from. * Options: * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. @@ -532,7 +544,7 @@ stock bool:ClassAddToArray(Handle:array, teamfilter = -1, bool:ignoreEnabled = f * class data. * @return Number of total classes or classes in the specified team. */ -stock ClassCountTeam(teamfilter = -1, bool:ignoreEnabled = false, cachetype = ZR_CLASS_CACHE_MODIFIED) +stock ClassCountTeam(teamfilter = -1, bool:ignoreEnabled = false, bool:ignoreAdminOnly = false, cachetype = ZR_CLASS_CACHE_MODIFIED) { // Check if there are no classes. if (ClassCount == 0) @@ -554,6 +566,13 @@ stock ClassCountTeam(teamfilter = -1, bool:ignoreEnabled = false, cachetype = ZR continue; } + if (!ignoreAdminOnly && ClassGetAdminOnly(classindex, cachetype)) + { + // The class is for admins only. This attribute isn't ignored so + // skip to the next class. + continue; + } + // Check team filtering. if (has_filter) { @@ -578,18 +597,20 @@ stock ClassCountTeam(teamfilter = -1, bool:ignoreEnabled = false, cachetype = ZR /** * Gets a random class index from a specified team or from all classes. * - * @param teamfilter Optional. The team ID to filter. A negative value for - * no filter (default). - * @param ignoreEnabled Optional. Ignore the class's enabled attribute. Default - * is false. - * @param cachetype Optional. Specifies what class cache to read from. - * Options: - * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. - * ZR_CLASS_CACHE_MODIFIED (default) - Changed/newest - * class data. + * @param teamfilter Optional. The team ID to filter. A negative value + * for no filter (default). + * @param ignoreEnabled Optional. Ignore whether the class is enabled or + * not. Default is false. + * @param ignoreAdminOnly Optional. Ignore whether the class is for admins + * only or not. Default is false. + * @param cachetype Optional. Specifies what class cache to read from. + * Options: + * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. + * ZR_CLASS_CACHE_MODIFIED (default) - Changed/newest + * class data. * @return The class index if successful, or -1 on error. */ -stock ClassGetRandomClass(teamfilter = -1, bool:ignoreEnabled = false, cachetype = ZR_CLASS_CACHE_MODIFIED) +stock ClassGetRandomClass(teamfilter = -1, bool:ignoreEnabled = false, bool:ignoreAdminOnly = false, cachetype = ZR_CLASS_CACHE_MODIFIED) { new Handle:classarray; new arraycount; @@ -598,7 +619,7 @@ stock ClassGetRandomClass(teamfilter = -1, bool:ignoreEnabled = false, cachetype classarray = CreateArray(); // Try to get a class list. - if (ClassAddToArray(classarray, teamfilter, ignoreEnabled, cachetype)) + if (ClassAddToArray(classarray, teamfilter, ignoreEnabled, ignoreAdminOnly, cachetype)) { // Get a random index from the new class array. arraycount = GetArraySize(classarray); @@ -618,19 +639,21 @@ stock ClassGetRandomClass(teamfilter = -1, bool:ignoreEnabled = false, cachetype * Gets the first class index, or the first class index with the specified team * ID. * - * @param teamfilter Optional. The team ID to filter. A negative value for - * no filter (default). - * @param ignoreEnabled Optional. Ignore the class's enabled attribute. Default - * is false. - * @param cachetype Optional. Specifies what class cache to read from. - * Options: - * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. - * ZR_CLASS_CACHE_MODIFIED (default) - Changed/newest - * class data. + * @param teamfilter Optional. The team ID to filter. A negative value + * for no filter (default). + * @param ignoreEnabled Optional. Ignore whether the class is enabled or + * not. Default is false. + * @param ignoreAdminOnly Optional. Ignore whether the class is for admins + * only or not. Default is false. + * @param cachetype Optional. Specifies what class cache to read from. + * Options: + * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. + * ZR_CLASS_CACHE_MODIFIED (default) - Changed/newest + * class data. * @return The first class index, or the first class index with the specified * team ID. -1 on error. */ -stock ClassGetFirstClass(teamfilter = -1, bool:ignoreEnabled = false, cachetype = ZR_CLASS_CACHE_MODIFIED) +stock ClassGetFirstClass(teamfilter = -1, bool:ignoreEnabled = false, bool:ignoreAdminOnly = false, cachetype = ZR_CLASS_CACHE_MODIFIED) { // Check if there are no classes. if (ClassCount == 0) @@ -645,6 +668,15 @@ stock ClassGetFirstClass(teamfilter = -1, bool:ignoreEnabled = false, cachetype { if (!ignoreEnabled && !ClassIsEnabled(classindex, cachetype)) { + // The class is disabled and the enabled attribute is NOT ignored. + // Skip to the next class. + continue; + } + + if (!ignoreAdminOnly && ClassGetAdminOnly(classindex, cachetype)) + { + // The class is for admins only. This attribute isn't ignored so + // skip to the next class. continue; } @@ -669,17 +701,19 @@ stock ClassGetFirstClass(teamfilter = -1, bool:ignoreEnabled = false, cachetype /** * Gets the first class marked as default for the specified team. * - * @param teamid The team ID. - * @param ignoreEnabled Optional. Ignore the class's enabled attribute. Default - * is false. - * @param cachetype Optional. Specifies what class cache to read from. - * Options: - * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. - * ZR_CLASS_CACHE_MODIFIED (default) - Changed/newest - * class data. + * @param teamid The team ID. + * @param ignoreEnabled Optional. Ignore whether the class is enabled or + * not. Default is false. + * @param ignoreAdminOnly Optional. Ignore whether the class is for admins + * only or not. Default is false. + * @param cachetype Optional. Specifies what class cache to read from. + * Options: + * ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. + * ZR_CLASS_CACHE_MODIFIED (default) - Changed/newest + * class data. * @return The first default class index. -1 on error. */ -stock ClassGetDefaultClass(teamid, bool:ignoreEnabled = false, cachetype = ZR_CLASS_CACHE_MODIFIED) +stock ClassGetDefaultClass(teamid, bool:ignoreEnabled = false, bool:ignoreAdminOnly = false, cachetype = ZR_CLASS_CACHE_MODIFIED) { new Handle:classarray; new arraycount; @@ -688,7 +722,7 @@ stock ClassGetDefaultClass(teamid, bool:ignoreEnabled = false, cachetype = ZR_CL classarray = CreateArray(); // Get all classes from the specified team. - if (!ClassAddToArray(classarray, teamid, ignoreEnabled, cachetype)) + if (!ClassAddToArray(classarray, teamid, ignoreEnabled, ignoreAdminOnly, cachetype)) { // Failed to get classes. return -1; @@ -759,7 +793,7 @@ stock ClassGetDefaultSpawnClass(teamid, cachetype = ZR_CLASS_CACHE_MODIFIED) if (strcmp(classname, "random", false) == 0) { // Get a list of all classes with the specified team ID. - classindex = ClassGetRandomClass(teamid, _, cachetype); + classindex = ClassGetRandomClass(teamid, _, _, cachetype); // Validate the result, in case there were errors. if (ClassValidateIndex(classindex)) @@ -791,7 +825,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, _, _, 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); @@ -813,6 +847,6 @@ stock ClassGetDefaultSpawnClass(teamid, cachetype = ZR_CLASS_CACHE_MODIFIED) else { // Blank class name, get the default class and return the index. - return ClassGetDefaultClass(teamid, _, cachetype); + return ClassGetDefaultClass(teamid, _, _, cachetype); } } diff --git a/src/zr/playerclasses/playerclasses.inc b/src/zr/playerclasses/playerclasses.inc index de79533..424b462 100644 --- a/src/zr/playerclasses/playerclasses.inc +++ b/src/zr/playerclasses/playerclasses.inc @@ -91,6 +91,7 @@ #define ZR_CLASS_DEFAULT_ENABLED true #define ZR_CLASS_DEFAULT_TEAM ZR_CLASS_TEAM_ZOMBIES #define ZR_CLASS_DEFAULT_TEAM_DEFAULT true +#define ZR_CLASS_DEFAULT_ADMIN_ONLY false #define ZR_CLASS_DEFAULT_NAME "classic" #define ZR_CLASS_DEFAULT_DESCRIPTION "Need brains!!! Arrrrggghh!" #define ZR_CLASS_DEFAULT_MODEL_PATH "models/player/zh/zh_zombie003.mdl" @@ -165,29 +166,30 @@ #define ZR_CLASS_FLAG_ENABLED (1<<0) #define ZR_CLASS_FLAG_TEAM (1<<1) #define ZR_CLASS_FLAG_TEAM_DEFAULT (1<<2) -#define ZR_CLASS_FLAG_NAME (1<<3) -#define ZR_CLASS_FLAG_DESCRIPTION (1<<4) -#define ZR_CLASS_FLAG_MODEL_PATH (1<<5) -#define ZR_CLASS_FLAG_ALPHA_INITIAL (1<<6) -#define ZR_CLASS_FLAG_ALPHA_DAMAGED (1<<7) -#define ZR_CLASS_FLAG_ALPHA_DAMAGE (1<<8) -#define ZR_CLASS_FLAG_OVERLAY_PATH (1<<9) -#define ZR_CLASS_FLAG_NVGS (1<<10) -#define ZR_CLASS_FLAG_FOV (1<<11) -#define ZR_CLASS_FLAG_HAS_NAPALM (1<<12) -#define ZR_CLASS_FLAG_NAPALM_TIME (1<<13) -#define ZR_CLASS_FLAG_IMMUNITY_MODE (1<<14) -#define ZR_CLASS_FLAG_IMMUNITY_AMOUNT (1<<15) -#define ZR_CLASS_FLAG_NO_FALL_DAMAGE (1<<16) -#define ZR_CLASS_FLAG_HEALTH (1<<17) -#define ZR_CLASS_FLAG_HEALTH_REGEN_INTERVAL (1<<18) -#define ZR_CLASS_FLAG_HEALTH_REGEN_AMOUNT (1<<19) -#define ZR_CLASS_FLAG_HEALTH_INFECT_GAIN (1<<20) -#define ZR_CLASS_FLAG_KILL_BONUS (1<<21) -#define ZR_CLASS_FLAG_SPEED (1<<22) -#define ZR_CLASS_FLAG_KNOCKBACK (1<<23) -#define ZR_CLASS_FLAG_JUMP_HEIGHT (1<<24) -#define ZR_CLASS_FLAG_JUMP_DISTANCE (1<<25) +#define ZR_CLASS_FLAG_ADMIN_ONLY (1<<3) +#define ZR_CLASS_FLAG_NAME (1<<4) +#define ZR_CLASS_FLAG_DESCRIPTION (1<<5) +#define ZR_CLASS_FLAG_MODEL_PATH (1<<6) +#define ZR_CLASS_FLAG_ALPHA_INITIAL (1<<7) +#define ZR_CLASS_FLAG_ALPHA_DAMAGED (1<<8) +#define ZR_CLASS_FLAG_ALPHA_DAMAGE (1<<9) +#define ZR_CLASS_FLAG_OVERLAY_PATH (1<<10) +#define ZR_CLASS_FLAG_NVGS (1<<11) +#define ZR_CLASS_FLAG_FOV (1<<12) +#define ZR_CLASS_FLAG_HAS_NAPALM (1<<13) +#define ZR_CLASS_FLAG_NAPALM_TIME (1<<14) +#define ZR_CLASS_FLAG_IMMUNITY_MODE (1<<15) +#define ZR_CLASS_FLAG_IMMUNITY_AMOUNT (1<<16) +#define ZR_CLASS_FLAG_NO_FALL_DAMAGE (1<<17) +#define ZR_CLASS_FLAG_HEALTH (1<<18) +#define ZR_CLASS_FLAG_HEALTH_REGEN_INTERVAL (1<<19) +#define ZR_CLASS_FLAG_HEALTH_REGEN_AMOUNT (1<<20) +#define ZR_CLASS_FLAG_HEALTH_INFECT_GAIN (1<<21) +#define ZR_CLASS_FLAG_KILL_BONUS (1<<22) +#define ZR_CLASS_FLAG_SPEED (1<<23) +#define ZR_CLASS_FLAG_KNOCKBACK (1<<24) +#define ZR_CLASS_FLAG_JUMP_HEIGHT (1<<25) +#define ZR_CLASS_FLAG_JUMP_DISTANCE (1<<26) /** * @endsection */ @@ -201,6 +203,7 @@ enum ClassAttributes bool:class_enabled, class_team, bool:class_team_default, + bool:class_admin_only, String:class_name[64], String:class_description[256], @@ -426,6 +429,7 @@ ClassLoad(bool:keepMultipliers = false) ClassData[ClassCount][class_enabled] = bool:KvGetNum(kvClassData, "enabled", ZR_CLASS_DEFAULT_ENABLED); ClassData[ClassCount][class_team] = KvGetNum(kvClassData, "team", ZR_CLASS_DEFAULT_TEAM); ClassData[ClassCount][class_team_default] = bool:KvGetNum(kvClassData, "team_default", ZR_CLASS_DEFAULT_TEAM_DEFAULT); + ClassData[ClassCount][class_admin_only] = bool:KvGetNum(kvClassData, "admin_only", ZR_CLASS_DEFAULT_ADMIN_ONLY); KvGetString(kvClassData, "name", name, sizeof(name), ZR_CLASS_DEFAULT_NAME); strcopy(ClassData[ClassCount][class_name], 64, name); @@ -553,6 +557,7 @@ bool:ClassReloadDataCache() ClassDataCache[classindex][class_enabled] = ClassData[classindex][class_enabled]; ClassDataCache[classindex][class_team] = ClassData[classindex][class_team]; ClassDataCache[classindex][class_team_default] = ClassData[classindex][class_team_default]; + ClassDataCache[classindex][class_admin_only] = ClassData[classindex][class_admin_only]; strcopy(ClassDataCache[classindex][class_name], 64, ClassData[classindex][class_name]); strcopy(ClassDataCache[classindex][class_description], 256, ClassData[classindex][class_description]); @@ -616,6 +621,7 @@ bool:ClassReloadPlayerCache(client, classindex, cachetype = ZR_CLASS_CACHE_MODIF ClassPlayerCache[client][class_enabled] = ClassData[classindex][class_enabled]; ClassPlayerCache[client][class_team] = ClassData[classindex][class_team]; ClassPlayerCache[client][class_team_default] = ClassData[classindex][class_team_default]; + ClassPlayerCache[client][class_admin_only] = ClassData[classindex][class_admin_only]; strcopy(ClassPlayerCache[client][class_name], 64, ClassData[classindex][class_name]); strcopy(ClassPlayerCache[client][class_description], 256, ClassData[classindex][class_description]); @@ -654,6 +660,7 @@ bool:ClassReloadPlayerCache(client, classindex, cachetype = ZR_CLASS_CACHE_MODIF ClassPlayerCache[client][class_enabled] = ClassDataCache[classindex][class_enabled]; ClassPlayerCache[client][class_team] = ClassDataCache[classindex][class_team]; ClassPlayerCache[client][class_team_default] = ClassDataCache[classindex][class_team_default]; + ClassPlayerCache[client][class_admin_only] = ClassDataCache[classindex][class_admin_only]; strcopy(ClassPlayerCache[client][class_name], 64, ClassDataCache[classindex][class_name]); strcopy(ClassPlayerCache[client][class_description], 256, ClassDataCache[classindex][class_description]); @@ -852,6 +859,9 @@ ClassDumpData(index, cachetype, String:buffer[], maxlen) Format(attribute, sizeof(attribute), "team_default: \"%d\"\n", ClassGetTeamDefault(index, cachetype)); cellcount += StrCat(buffer, maxlen, attribute); + Format(attribute, sizeof(attribute), "admin_only: \"%d\"\n", ClassGetAdminOnly(index, cachetype)); + cellcount += StrCat(buffer, maxlen, attribute); + ClassGetName(index, format_buffer, sizeof(format_buffer), cachetype); Format(attribute, sizeof(attribute), "name: \"%s\"\n", format_buffer); cellcount += StrCat(buffer, maxlen, attribute);