Added group class attribute, not implemented. Capitalized all class attribute names.
This commit is contained in:
		| @@ -651,8 +651,13 @@ The list below explains all available class attributes in detail: | ||||
|             setting must be set to "motherzombies" for this flag to take | ||||
|             effect. | ||||
|          | ||||
|         Remember that these flags can be used in a combination (1 + 2), so | ||||
|         it's a mother zombie class for admins only. | ||||
|         These flags can be used in a combination (1 + 2), so it could be a | ||||
|         mother zombie class for admins only. | ||||
|      | ||||
|     group                   text            Name of a valid SourceMod group. | ||||
|     --------------------------------------------------------------------------- | ||||
|         Rescrict class to members of this SourceMod group. Useful for making | ||||
|         VIP-only classes. Leave blank to allow everyone to use this class. | ||||
|      | ||||
|     name                    text            Unique, not empty, max 64 charact. | ||||
|     --------------------------------------------------------------------------- | ||||
| @@ -750,7 +755,7 @@ The list below explains all available class attributes in detail: | ||||
|      | ||||
|     kill_bonus              number          0 - 16 | ||||
|     --------------------------------------------------------------------------- | ||||
|         Zombie classes only. How many EXTRA points to give the killer of a | ||||
|         Zombie classes only. How many extra points to give the killer of this | ||||
|         zombie. If this is 0, the default value of 1 point will be given. | ||||
|      | ||||
|     speed                   decimal         10.0 - 2000.0 | ||||
| @@ -798,29 +803,30 @@ Attribute flags: | ||||
|     team                    2       2 | ||||
|     team_default            3       4 | ||||
|     flags                   4       8 | ||||
|     name                    5       16 | ||||
|     description             6       32 | ||||
|     model_path              7       64 | ||||
|     alpha_initial           8       128 | ||||
|     alpha_damaged           9       256 | ||||
|     alpha_damage            10      512 | ||||
|     overlay_path            11      1024 | ||||
|     nvgs                    12      2048 | ||||
|     fov                     13      4096 | ||||
|     has_napalm              14      8192 | ||||
|     napalm_time             15      16384 | ||||
|     immunity_mode           16      32768 | ||||
|     immunity_amount         17      65536 | ||||
|     no_fall_damage          18      131072 | ||||
|     health                  19      262144 | ||||
|     health_regen_interval   20      524288 | ||||
|     health_regen_amount     21      1048576 | ||||
|     infect_gain             22      2097152 | ||||
|     kill_bonus              23      4194304 | ||||
|     speed                   24      8388608 | ||||
|     knockback               25      16777216 | ||||
|     jump_height             26      33554432 | ||||
|     jump_distance           27      67108864 | ||||
|     group                   5       16 | ||||
|     name                    6       32 | ||||
|     description             7       64 | ||||
|     model_path              8       128 | ||||
|     alpha_initial           9       256 | ||||
|     alpha_damaged           10      512 | ||||
|     alpha_damage            11      1024 | ||||
|     overlay_path            12      2048 | ||||
|     nvgs                    13      4096 | ||||
|     fov                     14      8192 | ||||
|     has_napalm              15      16384 | ||||
|     napalm_time             16      32768 | ||||
|     immunity_mode           17      65536 | ||||
|     immunity_amount         18      131072 | ||||
|     no_fall_damage          19      262144 | ||||
|     health                  20      524288 | ||||
|     health_regen_interval   21      1048576 | ||||
|     health_regen_amount     22      2097152 | ||||
|     infect_gain             23      4194304 | ||||
|     kill_bonus              24      8388608 | ||||
|     speed                   25      16777216 | ||||
|     knockback               26      33554432 | ||||
|     jump_height             27      67108864 | ||||
|     jump_distance           28      134217728 | ||||
|  | ||||
| The error flags are stored in a bit field (explained in the log configuration | ||||
| in section 3.2). | ||||
|   | ||||
| @@ -52,15 +52,15 @@ stock bool:ClassIsEnabled(index, cachetype = ZR_CLASS_CACHE_MODIFIED) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_enabled]; | ||||
|             return ClassData[index][Class_Enabled]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_enabled]; | ||||
|             return ClassDataCache[index][Class_Enabled]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_enabled]; | ||||
|             return ClassPlayerCache[index][Class_Enabled]; | ||||
|         } | ||||
|     } | ||||
|     return false; | ||||
| @@ -84,15 +84,15 @@ stock ClassGetTeamID(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_team]; | ||||
|             return ClassData[index][Class_Team]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_team]; | ||||
|             return ClassDataCache[index][Class_Team]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_team]; | ||||
|             return ClassPlayerCache[index][Class_Team]; | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -118,15 +118,15 @@ stock bool:ClassGetTeamDefault(index, cachetype = ZR_CLASS_CACHE_MODIFIED) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_team_default]; | ||||
|             return ClassData[index][Class_TeamDefault]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_team_default]; | ||||
|             return ClassDataCache[index][Class_TeamDefault]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_team_default]; | ||||
|             return ClassPlayerCache[index][Class_TeamDefault]; | ||||
|         } | ||||
|     } | ||||
|     return false; | ||||
| @@ -151,15 +151,15 @@ stock ClassGetFlags(index, cachetype = ZR_CLASS_CACHE_MODIFIED) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_flags]; | ||||
|             return ClassData[index][Class_Flags]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_flags]; | ||||
|             return ClassDataCache[index][Class_Flags]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_flags]; | ||||
|             return ClassPlayerCache[index][Class_Flags]; | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -185,20 +185,55 @@ stock bool:ClassHasFlags(index, flags, cachetype = ZR_CLASS_CACHE_MODIFIED) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return bool:(ClassData[index][class_flags] & flags); | ||||
|             return bool:(ClassData[index][Class_Flags] & flags); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return bool:(ClassDataCache[index][class_flags] & flags); | ||||
|             return bool:(ClassDataCache[index][Class_Flags] & flags); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return bool:(ClassPlayerCache[index][class_flags] & flags); | ||||
|             return bool:(ClassPlayerCache[index][Class_Flags] & flags); | ||||
|         } | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Gets the class group required to be a member of to use the class. | ||||
|  * | ||||
|  * @param index     Index of the class in a class cache or a client index, | ||||
|  *                  depending on the cache type specified. | ||||
|  * @param buffer    The destination string buffer. | ||||
|  * @param maxlen    The length of the destination string buffer. | ||||
|  * @param cachetype Optional. Specifies what class cache to read from. Options: | ||||
|  *                  ZR_CLASS_CACHE_ORIGINAL - Unchanced class data. | ||||
|  *                  ZR_CLASS_CACHE_MODIFIED - Changed/newest class data. | ||||
|  *                  ZR_CLASS_CACHE_PLAYER (default) - Player cache. If this one | ||||
|  *                  is used, index will be used as a client index. | ||||
|  * @return          Number of cells written. -1 on error. | ||||
|  */ | ||||
| stock ClassGetGroup(index, String:buffer[], maxlen, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
| { | ||||
|     switch (cachetype) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassData[index][Class_Group]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassDataCache[index][Class_Group]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassPlayerCache[index][Class_Group]); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     return -1; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Gets the class name to be displayed in the class menu. | ||||
|  * | ||||
| @@ -219,15 +254,15 @@ stock ClassGetName(index, String:buffer[], maxlen, cachetype = ZR_CLASS_CACHE_PL | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassData[index][class_name]); | ||||
|             return strcopy(buffer, maxlen, ClassData[index][Class_Name]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassDataCache[index][class_name]); | ||||
|             return strcopy(buffer, maxlen, ClassDataCache[index][Class_Name]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassPlayerCache[index][class_name]); | ||||
|             return strcopy(buffer, maxlen, ClassPlayerCache[index][Class_Name]); | ||||
|         } | ||||
|     } | ||||
|      | ||||
| @@ -254,15 +289,15 @@ stock ClassGetDescription(index, String:buffer[], maxlen, cachetype = ZR_CLASS_C | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassData[index][class_description]); | ||||
|             return strcopy(buffer, maxlen, ClassData[index][Class_Description]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassDataCache[index][class_description]); | ||||
|             return strcopy(buffer, maxlen, ClassDataCache[index][Class_Description]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassPlayerCache[index][class_description]); | ||||
|             return strcopy(buffer, maxlen, ClassPlayerCache[index][Class_Description]); | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -298,15 +333,15 @@ stock ClassGetModelPath(index, String:buffer[], maxlen, cachetype = ZR_CLASS_CAC | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassData[index][class_model_path]); | ||||
|             return strcopy(buffer, maxlen, ClassData[index][Class_ModelPath]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassDataCache[index][class_model_path]); | ||||
|             return strcopy(buffer, maxlen, ClassDataCache[index][Class_ModelPath]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassPlayerCache[index][class_model_path]); | ||||
|             return strcopy(buffer, maxlen, ClassPlayerCache[index][Class_ModelPath]); | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -330,15 +365,15 @@ stock ClassGetAlphaInitial(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_alpha_initial]; | ||||
|             return ClassData[index][Class_AlphaInitial]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_alpha_initial]; | ||||
|             return ClassDataCache[index][Class_AlphaInitial]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_alpha_initial]; | ||||
|             return ClassPlayerCache[index][Class_AlphaInitial]; | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -363,15 +398,15 @@ stock ClassGetAlphaDamaged(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_alpha_damaged]; | ||||
|             return ClassData[index][Class_AlphaDamaged]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_alpha_damaged]; | ||||
|             return ClassDataCache[index][Class_AlphaDamaged]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_alpha_damaged]; | ||||
|             return ClassPlayerCache[index][Class_AlphaDamaged]; | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -396,15 +431,15 @@ stock ClassGetAlphaDamage(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_alpha_damage]; | ||||
|             return ClassData[index][Class_AlphaDamage]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_alpha_damage]; | ||||
|             return ClassDataCache[index][Class_AlphaDamage]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_alpha_damage]; | ||||
|             return ClassPlayerCache[index][Class_AlphaDamage]; | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -440,15 +475,15 @@ stock ClassGetOverlayPath(index, String:buffer[], maxlen, cachetype = ZR_CLASS_C | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassData[index][class_overlay_path]); | ||||
|             return strcopy(buffer, maxlen, ClassData[index][Class_OverlayPath]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassDataCache[index][class_overlay_path]); | ||||
|             return strcopy(buffer, maxlen, ClassDataCache[index][Class_OverlayPath]); | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return strcopy(buffer, maxlen, ClassPlayerCache[index][class_overlay_path]); | ||||
|             return strcopy(buffer, maxlen, ClassPlayerCache[index][Class_OverlayPath]); | ||||
|         } | ||||
|     } | ||||
|     return -1;     | ||||
| @@ -472,15 +507,15 @@ stock bool:ClassGetNvgs(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_nvgs]; | ||||
|             return ClassData[index][Class_Nvgs]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_nvgs]; | ||||
|             return ClassDataCache[index][Class_Nvgs]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_nvgs]; | ||||
|             return ClassPlayerCache[index][Class_Nvgs]; | ||||
|         } | ||||
|     } | ||||
|     return false; | ||||
| @@ -504,15 +539,15 @@ stock ClassGetFOV(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_fov]; | ||||
|             return ClassData[index][Class_Fov]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_fov]; | ||||
|             return ClassDataCache[index][Class_Fov]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_fov]; | ||||
|             return ClassPlayerCache[index][Class_Fov]; | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -546,15 +581,15 @@ stock bool:ClassGetHasNapalm(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_has_napalm]; | ||||
|             return ClassData[index][Class_HasNapalm]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_has_napalm]; | ||||
|             return ClassDataCache[index][Class_HasNapalm]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_has_napalm]; | ||||
|             return ClassPlayerCache[index][Class_HasNapalm]; | ||||
|         } | ||||
|     } | ||||
|     return false; | ||||
| @@ -580,15 +615,15 @@ stock Float:ClassGetNapalmTime(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_napalm_time]; | ||||
|             return ClassData[index][Class_NapalmTime]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_napalm_time]; | ||||
|             return ClassDataCache[index][Class_NapalmTime]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_napalm_time] * ClassGetAttributeMultiplier(index, ClassM_NapalmTime); | ||||
|             return ClassPlayerCache[index][Class_NapalmTime] * ClassGetAttributeMultiplier(index, ClassM_NapalmTime); | ||||
|         } | ||||
|     } | ||||
|     return -1.0; | ||||
| @@ -622,15 +657,15 @@ stock ClassGetImmunityMode(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_immunity_mode]; | ||||
|             return ClassData[index][Class_ImmunityMode]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_immunity_mode]; | ||||
|             return ClassDataCache[index][Class_ImmunityMode]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_immunity_mode]; | ||||
|             return ClassPlayerCache[index][Class_ImmunityMode]; | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -654,15 +689,15 @@ stock Float:ClassGetImmunityAmount(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_immunity_amount]; | ||||
|             return ClassData[index][Class_ImmunityAmount]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_immunity_amount]; | ||||
|             return ClassDataCache[index][Class_ImmunityAmount]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_immunity_amount]; | ||||
|             return ClassPlayerCache[index][Class_ImmunityAmount]; | ||||
|         } | ||||
|     } | ||||
|     return -1.0; | ||||
| @@ -687,15 +722,15 @@ stock bool:ClassGetNoFallDamage(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_no_fall_damage]; | ||||
|             return ClassData[index][Class_NoFallDamage]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_no_fall_damage]; | ||||
|             return ClassDataCache[index][Class_NoFallDamage]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_no_fall_damage]; | ||||
|             return ClassPlayerCache[index][Class_NoFallDamage]; | ||||
|         } | ||||
|     } | ||||
|     return false; | ||||
| @@ -721,15 +756,15 @@ stock ClassGetHealth(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_health]; | ||||
|             return ClassData[index][Class_Health]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_health]; | ||||
|             return ClassDataCache[index][Class_Health]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return RoundToCeil(ClassPlayerCache[index][class_health] * ClassGetAttributeMultiplier(index, ClassM_Health)); | ||||
|             return RoundToCeil(ClassPlayerCache[index][Class_Health] * ClassGetAttributeMultiplier(index, ClassM_Health)); | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -756,15 +791,15 @@ stock Float:ClassGetHealthRegenInterval(index, cachetype = ZR_CLASS_CACHE_PLAYER | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_health_regen_interval]; | ||||
|             return ClassData[index][Class_HealthRegenInterval]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_health_regen_interval]; | ||||
|             return ClassDataCache[index][Class_HealthRegenInterval]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_health_regen_interval] * ClassGetAttributeMultiplier(index, ClassM_HealthRegenInterval); | ||||
|             return ClassPlayerCache[index][Class_HealthRegenInterval] * ClassGetAttributeMultiplier(index, ClassM_HealthRegenInterval); | ||||
|         } | ||||
|     } | ||||
|     return -1.0; | ||||
| @@ -791,15 +826,15 @@ stock ClassGetHealthRegenAmount(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_health_regen_amount]; | ||||
|             return ClassData[index][Class_HealthRegenAmount]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_health_regen_amount]; | ||||
|             return ClassDataCache[index][Class_HealthRegenAmount]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return RoundToCeil(ClassPlayerCache[index][class_health_regen_amount] * ClassGetAttributeMultiplier(index, ClassM_HealthRegenAmount)); | ||||
|             return RoundToCeil(ClassPlayerCache[index][Class_HealthRegenAmount] * ClassGetAttributeMultiplier(index, ClassM_HealthRegenAmount)); | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -826,15 +861,15 @@ stock ClassGetHealthInfectGain(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_health_infect_gain]; | ||||
|             return ClassData[index][Class_HealthInfectGain]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_health_infect_gain]; | ||||
|             return ClassDataCache[index][Class_HealthInfectGain]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return RoundToCeil(ClassPlayerCache[index][class_health_infect_gain] * ClassGetAttributeMultiplier(index, ClassM_HealthInfectGain)); | ||||
|             return RoundToCeil(ClassPlayerCache[index][Class_HealthInfectGain] * ClassGetAttributeMultiplier(index, ClassM_HealthInfectGain)); | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -858,15 +893,15 @@ stock ClassGetKillBonus(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_kill_bonus]; | ||||
|             return ClassData[index][Class_KillBonus]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_kill_bonus]; | ||||
|             return ClassDataCache[index][Class_KillBonus]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_kill_bonus]; | ||||
|             return ClassPlayerCache[index][Class_KillBonus]; | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| @@ -892,15 +927,15 @@ stock Float:ClassGetSpeed(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_speed]; | ||||
|             return ClassData[index][Class_Speed]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_speed]; | ||||
|             return ClassDataCache[index][Class_Speed]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_speed] * ClassGetAttributeMultiplier(index, ClassM_Speed); | ||||
|             return ClassPlayerCache[index][Class_Speed] * ClassGetAttributeMultiplier(index, ClassM_Speed); | ||||
|         } | ||||
|     } | ||||
|     return -1.0; | ||||
| @@ -926,15 +961,15 @@ stock Float:ClassGetKnockback(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_knockback]; | ||||
|             return ClassData[index][Class_KnockBack]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_knockback]; | ||||
|             return ClassDataCache[index][Class_KnockBack]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_knockback] * ClassGetAttributeMultiplier(index, ClassM_Knockback); | ||||
|             return ClassPlayerCache[index][Class_KnockBack] * ClassGetAttributeMultiplier(index, ClassM_Knockback); | ||||
|         } | ||||
|     } | ||||
|     return 0.0; | ||||
| @@ -960,15 +995,15 @@ stock Float:ClassGetJumpHeight(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_jump_height]; | ||||
|             return ClassData[index][Class_JumpHeight]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_jump_height]; | ||||
|             return ClassDataCache[index][Class_JumpHeight]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_jump_height] * ClassGetAttributeMultiplier(index, ClassM_JumpHeight); | ||||
|             return ClassPlayerCache[index][Class_JumpHeight] * ClassGetAttributeMultiplier(index, ClassM_JumpHeight); | ||||
|         } | ||||
|     } | ||||
|     return -1.0; | ||||
| @@ -994,15 +1029,15 @@ stock Float:ClassGetJumpDistance(index, cachetype = ZR_CLASS_CACHE_PLAYER) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             return ClassData[index][class_jump_distance]; | ||||
|             return ClassData[index][Class_JumpDistance]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             return ClassDataCache[index][class_jump_distance]; | ||||
|             return ClassDataCache[index][Class_JumpDistance]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             return ClassPlayerCache[index][class_jump_distance] * ClassGetAttributeMultiplier(index, ClassM_JumpDistance); | ||||
|             return ClassPlayerCache[index][Class_JumpDistance] * ClassGetAttributeMultiplier(index, ClassM_JumpDistance); | ||||
|         } | ||||
|     } | ||||
|     return -1.0; | ||||
| @@ -1034,6 +1069,10 @@ stock ClassAttributeNameToFlag(const String:attributename[]) | ||||
|     { | ||||
|         return ZR_CLASS_FLAGS; | ||||
|     } | ||||
|     else if (StrEqual(attributename, "group", false)) | ||||
|     { | ||||
|         return ZR_CLASS_GROUP; | ||||
|     } | ||||
|     else if (StrEqual(attributename, "name", false)) | ||||
|     { | ||||
|         return ZR_CLASS_NAME; | ||||
| @@ -1230,7 +1269,8 @@ stock ClassDataTypes:ClassGetAttributeType(attributeflag) | ||||
|         } | ||||
|          | ||||
|         // String. | ||||
|         case ZR_CLASS_NAME, | ||||
|         case ZR_CLASS_GROUP, | ||||
|               ZR_CLASS_NAME, | ||||
|               ZR_CLASS_DESCRIPTION, | ||||
|               ZR_CLASS_MODEL_PATH, | ||||
|               ZR_CLASS_OVERLAY_PATH: | ||||
|   | ||||
| @@ -619,22 +619,22 @@ stock bool:ClassModifyBoolean(classindex, attributeflag, bool:value) | ||||
|     { | ||||
|         case ZR_CLASS_ENABLED: | ||||
|         { | ||||
|             ClassDataCache[classindex][class_enabled] = bool:value; | ||||
|             ClassDataCache[classindex][Class_Enabled] = bool:value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_NVGS: | ||||
|         { | ||||
|             ClassDataCache[classindex][class_nvgs] = bool:value; | ||||
|             ClassDataCache[classindex][Class_Nvgs] = bool:value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_NO_FALL_DAMAGE: | ||||
|         { | ||||
|             ClassDataCache[classindex][class_no_fall_damage] = bool:value; | ||||
|             ClassDataCache[classindex][Class_NoFallDamage] = bool:value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_HAS_NAPALM: | ||||
|         { | ||||
|             ClassDataCache[classindex][class_has_napalm] = bool:value; | ||||
|             ClassDataCache[classindex][Class_HasNapalm] = bool:value; | ||||
|             return true; | ||||
|         } | ||||
|     } | ||||
| @@ -670,80 +670,80 @@ stock ClassModifyInteger(classindex, attributeflag, value, Float:multiplier = 0. | ||||
|     { | ||||
|         case ZR_CLASS_FLAGS: | ||||
|         { | ||||
|             ClassDataCache[classindex][class_flags] = value; | ||||
|             ClassDataCache[classindex][Class_Flags] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_ALPHA_INITIAL: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = RoundToNearest(float(ClassData[classindex][class_alpha_initial]) * multiplier); | ||||
|                 value = RoundToNearest(float(ClassData[classindex][Class_AlphaInitial]) * multiplier); | ||||
|             } | ||||
|             ClassDataCache[classindex][class_alpha_initial] = value; | ||||
|             ClassDataCache[classindex][Class_AlphaInitial] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_ALPHA_DAMAGED: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = RoundToNearest(float(ClassData[classindex][class_alpha_damaged]) * multiplier); | ||||
|                 value = RoundToNearest(float(ClassData[classindex][Class_AlphaDamaged]) * multiplier); | ||||
|             } | ||||
|             ClassDataCache[classindex][class_alpha_damaged] = value; | ||||
|             ClassDataCache[classindex][Class_AlphaDamaged] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_ALPHA_DAMAGE: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = RoundToNearest(float(ClassData[classindex][class_alpha_damage]) * multiplier); | ||||
|                 value = RoundToNearest(float(ClassData[classindex][Class_AlphaDamage]) * multiplier); | ||||
|             } | ||||
|             ClassDataCache[classindex][class_alpha_damage] = value; | ||||
|             ClassDataCache[classindex][Class_AlphaDamage] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_FOV: | ||||
|         { | ||||
|             ClassDataCache[classindex][class_fov] = value; | ||||
|             ClassDataCache[classindex][Class_Fov] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_IMMUNITY_MODE: | ||||
|         { | ||||
|             ClassDataCache[classindex][class_fov] = value; | ||||
|             ClassDataCache[classindex][Class_ImmunityMode] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_HEALTH: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = RoundToNearest(float(ClassData[classindex][class_health]) * multiplier); | ||||
|                 value = RoundToNearest(float(ClassData[classindex][Class_Health]) * multiplier); | ||||
|             } | ||||
|             ClassDataCache[classindex][class_health] = value; | ||||
|             ClassDataCache[classindex][Class_Health] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_HEALTH_REGEN_AMOUNT: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = RoundToNearest(float(ClassData[classindex][class_health_regen_amount]) * multiplier); | ||||
|                 value = RoundToNearest(float(ClassData[classindex][Class_HealthRegenAmount]) * multiplier); | ||||
|             } | ||||
|             ClassDataCache[classindex][class_health_regen_amount] = value; | ||||
|             ClassDataCache[classindex][Class_HealthRegenAmount] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_HEALTH_INFECT_GAIN: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = RoundToNearest(float(ClassData[classindex][class_health_infect_gain]) * multiplier); | ||||
|                 value = RoundToNearest(float(ClassData[classindex][Class_HealthInfectGain]) * multiplier); | ||||
|             } | ||||
|             ClassDataCache[classindex][class_health_infect_gain] = value; | ||||
|             ClassDataCache[classindex][Class_HealthInfectGain] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_KILL_BONUS: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = RoundToNearest(float(ClassData[classindex][class_kill_bonus]) * multiplier); | ||||
|                 value = RoundToNearest(float(ClassData[classindex][Class_KillBonus]) * multiplier); | ||||
|             } | ||||
|             ClassDataCache[classindex][class_kill_bonus] = value; | ||||
|             ClassDataCache[classindex][Class_KillBonus] = value; | ||||
|             return true; | ||||
|         } | ||||
|     } | ||||
| @@ -777,63 +777,63 @@ stock ClassModifyFloat(classindex, attributeflag, Float:value, bool:ismultiplier | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = ClassData[classindex][class_napalm_time] * value; | ||||
|                 value = ClassData[classindex][Class_NapalmTime] * value; | ||||
|             } | ||||
|             ClassDataCache[classindex][class_napalm_time] = value; | ||||
|             ClassDataCache[classindex][Class_NapalmTime] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_IMMUNITY_AMOUNT: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = ClassData[classindex][class_immunity_amount] * value; | ||||
|                 value = ClassData[classindex][Class_ImmunityAmount] * value; | ||||
|             } | ||||
|             ClassDataCache[classindex][class_immunity_amount] = value; | ||||
|             ClassDataCache[classindex][Class_ImmunityAmount] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_HEALTH_REGEN_INTERVAL: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = ClassData[classindex][class_health_regen_interval] * value; | ||||
|                 value = ClassData[classindex][Class_HealthRegenInterval] * value; | ||||
|             } | ||||
|             ClassDataCache[classindex][class_health_regen_interval] = value; | ||||
|             ClassDataCache[classindex][Class_HealthRegenInterval] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_SPEED: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = ClassData[classindex][class_speed] * value; | ||||
|                 value = ClassData[classindex][Class_Speed] * value; | ||||
|             } | ||||
|             ClassDataCache[classindex][class_speed] = value; | ||||
|             ClassDataCache[classindex][Class_Speed] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_KNOCKBACK: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = ClassData[classindex][class_knockback] * value; | ||||
|                 value = ClassData[classindex][Class_KnockBack] * value; | ||||
|             } | ||||
|             ClassDataCache[classindex][class_knockback] = value; | ||||
|             ClassDataCache[classindex][Class_KnockBack] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_JUMP_HEIGHT: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = ClassData[classindex][class_jump_height] * value; | ||||
|                 value = ClassData[classindex][Class_JumpHeight] * value; | ||||
|             } | ||||
|             ClassDataCache[classindex][class_jump_height] = value; | ||||
|             ClassDataCache[classindex][Class_JumpHeight] = value; | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_JUMP_DISTANCE: | ||||
|         { | ||||
|             if (ismultiplier) | ||||
|             { | ||||
|                 value = ClassData[classindex][class_jump_distance] * value; | ||||
|                 value = ClassData[classindex][Class_JumpDistance] * value; | ||||
|             } | ||||
|             ClassDataCache[classindex][class_jump_distance] = value; | ||||
|             ClassDataCache[classindex][Class_JumpDistance] = value; | ||||
|             return true; | ||||
|         } | ||||
|     } | ||||
| @@ -860,24 +860,29 @@ stock ClassModifyString(classindex, attributeflag, const String:value[]) | ||||
|      | ||||
|     switch (attributeflag) | ||||
|     { | ||||
|         case ZR_CLASS_GROUP: | ||||
|         { | ||||
|             strcopy(ClassDataCache[classindex][Class_Group], 64, value); | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_NAME: | ||||
|         { | ||||
|             strcopy(ClassDataCache[classindex][class_name], 64, value); | ||||
|             strcopy(ClassDataCache[classindex][Class_Name], 64, value); | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_DESCRIPTION: | ||||
|         { | ||||
|             strcopy(ClassDataCache[classindex][class_description], 256, value); | ||||
|             strcopy(ClassDataCache[classindex][Class_Description], 256, value); | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_MODEL_PATH: | ||||
|         { | ||||
|             strcopy(ClassDataCache[classindex][class_model_path], PLATFORM_MAX_PATH, value); | ||||
|             strcopy(ClassDataCache[classindex][Class_ModelPath], PLATFORM_MAX_PATH, value); | ||||
|             return true; | ||||
|         } | ||||
|         case ZR_CLASS_OVERLAY_PATH: | ||||
|         { | ||||
|             strcopy(ClassDataCache[classindex][class_overlay_path], PLATFORM_MAX_PATH, value); | ||||
|             strcopy(ClassDataCache[classindex][Class_OverlayPath], PLATFORM_MAX_PATH, value); | ||||
|             return true; | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -107,26 +107,29 @@ stock ClassValidateAttributes(classindex) | ||||
|     new flags; | ||||
|      | ||||
|     // Team. | ||||
|     if (ClassData[classindex][class_team] < ZR_CLASS_TEAM_MIN || ClassData[classindex][class_team] > ZR_CLASS_TEAM_MAX) | ||||
|     if (ClassData[classindex][Class_Team] < ZR_CLASS_TEAM_MIN || ClassData[classindex][Class_Team] > ZR_CLASS_TEAM_MAX) | ||||
|     { | ||||
|         flags += ZR_CLASS_TEAM; | ||||
|     } | ||||
|      | ||||
|     // Class flags. | ||||
|     if (ClassData[classindex][class_flags] < ZR_CLASS_FLAGS_MIN || ClassData[classindex][class_flags] > ZR_CLASS_FLAGS_MAX) | ||||
|     if (ClassData[classindex][Class_Flags] < ZR_CLASS_FLAGS_MIN || ClassData[classindex][Class_Flags] > ZR_CLASS_FLAGS_MAX) | ||||
|     { | ||||
|         flags += ZR_CLASS_FLAGS; | ||||
|     } | ||||
|      | ||||
|     // Group. | ||||
|      | ||||
|      | ||||
|     // Name. | ||||
|     if (strlen(ClassData[classindex][class_name]) < ZR_CLASS_NAME_MIN) | ||||
|     if (strlen(ClassData[classindex][Class_Name]) < ZR_CLASS_NAME_MIN) | ||||
|     { | ||||
|         flags += ZR_CLASS_NAME; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         decl String:name[64]; | ||||
|         strcopy(name, sizeof(name), ClassData[classindex][class_name]); | ||||
|         strcopy(name, sizeof(name), ClassData[classindex][Class_Name]); | ||||
|          | ||||
|         // Check for reserved name keyworks. These aren't allowed as names. | ||||
|         if (StrEqual(name, "all", false) || | ||||
| @@ -139,14 +142,14 @@ stock ClassValidateAttributes(classindex) | ||||
|     } | ||||
|      | ||||
|     // Description. | ||||
|     if (strlen(ClassData[classindex][class_description]) < ZR_CLASS_DESCRIPTION_MIN) | ||||
|     if (strlen(ClassData[classindex][Class_Description]) < ZR_CLASS_DESCRIPTION_MIN) | ||||
|     { | ||||
|         flags += ZR_CLASS_DESCRIPTION; | ||||
|     } | ||||
|      | ||||
|     // Model path. | ||||
|     decl String:model_path[PLATFORM_MAX_PATH]; | ||||
|     if (strcopy(model_path, sizeof(model_path), ClassData[classindex][class_model_path]) == 0) | ||||
|     if (strcopy(model_path, sizeof(model_path), ClassData[classindex][Class_ModelPath]) == 0) | ||||
|     { | ||||
|         flags += ZR_CLASS_MODEL_PATH; | ||||
|     } | ||||
| @@ -164,21 +167,21 @@ stock ClassValidateAttributes(classindex) | ||||
|     } | ||||
|      | ||||
|     // Alpha, initial. | ||||
|     new alpha_initial = ClassData[classindex][class_alpha_initial]; | ||||
|     new alpha_initial = ClassData[classindex][Class_AlphaInitial]; | ||||
|     if (!(alpha_initial >= ZR_CLASS_ALPHA_INITIAL_MIN && alpha_initial <= ZR_CLASS_ALPHA_INITIAL_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_ALPHA_INITIAL; | ||||
|     } | ||||
|      | ||||
|     // Alpha, damaged. | ||||
|     new alpha_damaged = ClassData[classindex][class_alpha_damaged]; | ||||
|     new alpha_damaged = ClassData[classindex][Class_AlphaDamaged]; | ||||
|     if (!(alpha_damaged >= ZR_CLASS_ALPHA_DAMAGED_MIN && alpha_damaged <= ZR_CLASS_ALPHA_DAMAGED_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_ALPHA_DAMAGED; | ||||
|     } | ||||
|      | ||||
|     // Alpha, damage. | ||||
|     new alpha_damage = ClassData[classindex][class_alpha_damage]; | ||||
|     new alpha_damage = ClassData[classindex][Class_AlphaDamage]; | ||||
|     if (!(alpha_damage >= ZR_CLASS_ALPHA_DAMAGE_MIN && alpha_damage <= ZR_CLASS_ALPHA_DAMAGE_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_ALPHA_DAMAGE; | ||||
| @@ -187,7 +190,7 @@ stock ClassValidateAttributes(classindex) | ||||
|     // Overlay path. | ||||
|     decl String:overlay_path[PLATFORM_MAX_PATH]; | ||||
|     decl String:overlay[PLATFORM_MAX_PATH]; | ||||
|     if (strcopy(overlay_path, sizeof(overlay_path), ClassData[classindex][class_overlay_path]) > 0) | ||||
|     if (strcopy(overlay_path, sizeof(overlay_path), ClassData[classindex][Class_OverlayPath]) > 0) | ||||
|     { | ||||
|         // Check if the file exists. | ||||
|         Format(overlay, sizeof(overlay), "materials/%s.vmt", overlay_path); | ||||
| @@ -198,77 +201,80 @@ stock ClassValidateAttributes(classindex) | ||||
|     } | ||||
|      | ||||
|     // Field of view. | ||||
|     new fov = ClassData[classindex][class_fov]; | ||||
|     new fov = ClassData[classindex][Class_Fov]; | ||||
|     if (!(fov >= ZR_CLASS_FOV_MIN && fov <= ZR_CLASS_FOV_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_FOV; | ||||
|     } | ||||
|      | ||||
|     // Napalm time. | ||||
|     new Float:napalm_time = ClassData[classindex][class_napalm_time]; | ||||
|     new Float:napalm_time = ClassData[classindex][Class_NapalmTime]; | ||||
|     if (!(napalm_time >= ZR_CLASS_NAPALM_TIME_MIN && napalm_time <= ZR_CLASS_NAPALM_TIME_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_NAPALM_TIME; | ||||
|     } | ||||
|      | ||||
|     // Immunity mode (not implemented). | ||||
|      | ||||
|      | ||||
|     // Health. | ||||
|     new health = ClassData[classindex][class_health]; | ||||
|     new health = ClassData[classindex][Class_Health]; | ||||
|     if (!(health >= ZR_CLASS_HEALTH_MIN && health <= ZR_CLASS_HEALTH_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_HEALTH; | ||||
|     } | ||||
|      | ||||
|     // Health regen interval. | ||||
|     new Float:regen_interval = ClassData[classindex][class_health_regen_interval]; | ||||
|     new Float:regen_interval = ClassData[classindex][Class_HealthRegenInterval]; | ||||
|     if (!(regen_interval >= ZR_CLASS_REGEN_INTERVAL_MIN && regen_interval <= ZR_CLASS_REGEN_INTERVAL_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_HEALTH_REGEN_INTERVAL; | ||||
|     } | ||||
|      | ||||
|     // Health regen amount. | ||||
|     new regen_amount = ClassData[classindex][class_health_regen_amount]; | ||||
|     new regen_amount = ClassData[classindex][Class_HealthRegenAmount]; | ||||
|     if (!(regen_amount >= ZR_CLASS_REGEN_AMOUNT_MIN && regen_amount <= ZR_CLASS_REGEN_AMOUNT_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_HEALTH_REGEN_AMOUNT; | ||||
|     } | ||||
|      | ||||
|     // Health infect gain. | ||||
|     new infect_gain = ClassData[classindex][class_health_infect_gain]; | ||||
|     new infect_gain = ClassData[classindex][Class_HealthInfectGain]; | ||||
|     if (!(infect_gain >= ZR_CLASS_HEALTH_INFECT_GAIN_MIN && infect_gain <= ZR_CLASS_HEALTH_INFECT_GAIN_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_HEALTH_INFECT_GAIN; | ||||
|     } | ||||
|      | ||||
|     // Kill bonus. | ||||
|     new kill_bonus = ClassData[classindex][class_kill_bonus]; | ||||
|     new kill_bonus = ClassData[classindex][Class_KillBonus]; | ||||
|     if (!(kill_bonus >= ZR_CLASS_KILL_BONUS_MIN && kill_bonus <= ZR_CLASS_KILL_BONUS_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_KILL_BONUS; | ||||
|     } | ||||
|      | ||||
|     // Speed. | ||||
|     new Float:speed = ClassData[classindex][class_speed]; | ||||
|     new Float:speed = ClassData[classindex][Class_Speed]; | ||||
|     if (!(speed >= ZR_CLASS_SPEED_MIN && speed <= ZR_CLASS_SPEED_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_SPEED; | ||||
|     } | ||||
|      | ||||
|     // Knockback. | ||||
|     new Float:knockback = ClassData[classindex][class_knockback]; | ||||
|     new Float:knockback = ClassData[classindex][Class_KnockBack]; | ||||
|     if (!(knockback >= ZR_CLASS_KNOCKBACK_MIN && knockback <= ZR_CLASS_KNOCKBACK_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_KNOCKBACK; | ||||
|     } | ||||
|      | ||||
|     // Jump height. | ||||
|     new Float:jump_height = ClassData[classindex][class_jump_height]; | ||||
|     new Float:jump_height = ClassData[classindex][Class_JumpHeight]; | ||||
|     if (!(jump_height >= ZR_CLASS_JUMP_HEIGHT_MIN && jump_height <= ZR_CLASS_JUMP_HEIGHT_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_JUMP_HEIGHT; | ||||
|     } | ||||
|      | ||||
|     // Jump distance. | ||||
|     new Float:jump_distance = ClassData[classindex][class_jump_distance]; | ||||
|     new Float:jump_distance = ClassData[classindex][Class_JumpDistance]; | ||||
|     if (!(jump_distance >= ZR_CLASS_JUMP_DISTANCE_MIN && jump_distance <= ZR_CLASS_JUMP_DISTANCE_MAX)) | ||||
|     { | ||||
|         flags += ZR_CLASS_JUMP_DISTANCE; | ||||
| @@ -315,21 +321,21 @@ stock bool:ClassTeamCompare(index, teamid, cachetype = ZR_CLASS_CACHE_MODIFIED) | ||||
|     { | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             if (ClassData[index][class_team] == teamid) | ||||
|             if (ClassData[index][Class_Team] == teamid) | ||||
|             { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             if (ClassDataCache[index][class_team] == teamid) | ||||
|             if (ClassDataCache[index][Class_Team] == teamid) | ||||
|             { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_PLAYER: | ||||
|         { | ||||
|             if (ClassPlayerCache[index][class_team] == teamid) | ||||
|             if (ClassPlayerCache[index][Class_Team] == teamid) | ||||
|             { | ||||
|                 return true; | ||||
|             } | ||||
|   | ||||
| @@ -31,7 +31,7 @@ | ||||
|     - Zombies have to hurt humans so they loose hp. When the hp reach zero (or | ||||
|       below) they turn into zombies. | ||||
|     - Fully imune to all damage. Can't take or give damage. Sould only be used | ||||
|       on admin classes. | ||||
|       on admin mode classes. | ||||
|      | ||||
|     TODO: Make class attributes for for changing model render mode and colors. | ||||
|      | ||||
| @@ -104,6 +104,7 @@ | ||||
| #define ZR_CLASS_DEFAULT_TEAM                   ZR_CLASS_TEAM_ZOMBIES | ||||
| #define ZR_CLASS_DEFAULT_TEAM_DEFAULT           true | ||||
| #define ZR_CLASS_DEFAULT_FLAGS                  0 | ||||
| #define ZR_CLASS_DEFAULT_GROUP                  "" | ||||
| #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" | ||||
| @@ -181,77 +182,94 @@ | ||||
| #define ZR_CLASS_TEAM                   (1<<1) | ||||
| #define ZR_CLASS_TEAM_DEFAULT           (1<<2) | ||||
| #define ZR_CLASS_FLAGS                  (1<<3) | ||||
| #define ZR_CLASS_NAME                   (1<<4) | ||||
| #define ZR_CLASS_DESCRIPTION            (1<<5) | ||||
| #define ZR_CLASS_MODEL_PATH             (1<<6) | ||||
| #define ZR_CLASS_ALPHA_INITIAL          (1<<7) | ||||
| #define ZR_CLASS_ALPHA_DAMAGED          (1<<8) | ||||
| #define ZR_CLASS_ALPHA_DAMAGE           (1<<9) | ||||
| #define ZR_CLASS_OVERLAY_PATH           (1<<10) | ||||
| #define ZR_CLASS_NVGS                   (1<<11) | ||||
| #define ZR_CLASS_FOV                    (1<<12) | ||||
| #define ZR_CLASS_HAS_NAPALM             (1<<13) | ||||
| #define ZR_CLASS_NAPALM_TIME            (1<<14) | ||||
| #define ZR_CLASS_IMMUNITY_MODE          (1<<15) | ||||
| #define ZR_CLASS_IMMUNITY_AMOUNT        (1<<16) | ||||
| #define ZR_CLASS_NO_FALL_DAMAGE         (1<<17) | ||||
| #define ZR_CLASS_HEALTH                 (1<<18) | ||||
| #define ZR_CLASS_HEALTH_REGEN_INTERVAL  (1<<19) | ||||
| #define ZR_CLASS_HEALTH_REGEN_AMOUNT    (1<<20) | ||||
| #define ZR_CLASS_HEALTH_INFECT_GAIN     (1<<21) | ||||
| #define ZR_CLASS_KILL_BONUS             (1<<22) | ||||
| #define ZR_CLASS_SPEED                  (1<<23) | ||||
| #define ZR_CLASS_KNOCKBACK              (1<<24) | ||||
| #define ZR_CLASS_JUMP_HEIGHT            (1<<25) | ||||
| #define ZR_CLASS_JUMP_DISTANCE          (1<<26) | ||||
| #define ZR_CLASS_GROUP                  (1<<4) | ||||
| #define ZR_CLASS_NAME                   (1<<5) | ||||
| #define ZR_CLASS_DESCRIPTION            (1<<6) | ||||
| #define ZR_CLASS_MODEL_PATH             (1<<7) | ||||
| #define ZR_CLASS_ALPHA_INITIAL          (1<<8) | ||||
| #define ZR_CLASS_ALPHA_DAMAGED          (1<<9) | ||||
| #define ZR_CLASS_ALPHA_DAMAGE           (1<<10) | ||||
| #define ZR_CLASS_OVERLAY_PATH           (1<<11) | ||||
| #define ZR_CLASS_NVGS                   (1<<12) | ||||
| #define ZR_CLASS_FOV                    (1<<13) | ||||
| #define ZR_CLASS_HAS_NAPALM             (1<<14) | ||||
| #define ZR_CLASS_NAPALM_TIME            (1<<15) | ||||
| #define ZR_CLASS_IMMUNITY_MODE          (1<<16) | ||||
| #define ZR_CLASS_IMMUNITY_AMOUNT        (1<<17) | ||||
| #define ZR_CLASS_NO_FALL_DAMAGE         (1<<18) | ||||
| #define ZR_CLASS_HEALTH                 (1<<19) | ||||
| #define ZR_CLASS_HEALTH_REGEN_INTERVAL  (1<<20) | ||||
| #define ZR_CLASS_HEALTH_REGEN_AMOUNT    (1<<21) | ||||
| #define ZR_CLASS_HEALTH_INFECT_GAIN     (1<<22) | ||||
| #define ZR_CLASS_KILL_BONUS             (1<<23) | ||||
| #define ZR_CLASS_SPEED                  (1<<24) | ||||
| #define ZR_CLASS_KNOCKBACK              (1<<25) | ||||
| #define ZR_CLASS_JUMP_HEIGHT            (1<<26) | ||||
| #define ZR_CLASS_JUMP_DISTANCE          (1<<27) | ||||
| /** | ||||
|  * @endsection | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * Generic player attributes. | ||||
|  * | ||||
|  * Stuff that must be updated when new attributes are added: | ||||
|  * ZR_CLASS_DEFAULT_... define | ||||
|  * ZR_CLASS_..._MAX/MIN defines | ||||
|  * ZR_CLASS_... define (place in same order as listed in ClassAttributes, bump bit numbers + update numbers in docs) | ||||
|  * ClassLoad | ||||
|  * ClassReloadDataCache | ||||
|  * ClassReloadPlayerCache | ||||
|  * ClassDumpData | ||||
|  * attributes.inc - Add new Get-function | ||||
|  * ClassAttributeNameToFlag | ||||
|  * ClassGetAttributeType | ||||
|  * ClassValidateAttributes | ||||
|  * ClassModify* in classcommands.inc | ||||
|  * Update docs with detailed attribute description | ||||
|  */ | ||||
| enum ClassAttributes | ||||
| { | ||||
|     /* General */ | ||||
|     bool:class_enabled, | ||||
|     class_team, | ||||
|     bool:class_team_default, | ||||
|     class_flags, | ||||
|     bool:Class_Enabled, | ||||
|     Class_Team, | ||||
|     bool:Class_TeamDefault, | ||||
|     Class_Flags, | ||||
|     String:Class_Group[64], | ||||
|      | ||||
|     String:class_name[64], | ||||
|     String:class_description[256], | ||||
|     String:Class_Name[64], | ||||
|     String:Class_Description[256], | ||||
|      | ||||
|     /* Model */ | ||||
|     String:class_model_path[PLATFORM_MAX_PATH], | ||||
|     class_alpha_initial, | ||||
|     class_alpha_damaged, | ||||
|     class_alpha_damage, | ||||
|     String:Class_ModelPath[PLATFORM_MAX_PATH], | ||||
|     Class_AlphaInitial, | ||||
|     Class_AlphaDamaged, | ||||
|     Class_AlphaDamage, | ||||
|      | ||||
|     /* Hud */ | ||||
|     String:class_overlay_path[PLATFORM_MAX_PATH], | ||||
|     bool:class_nvgs, | ||||
|     class_fov, | ||||
|     String:Class_OverlayPath[PLATFORM_MAX_PATH], | ||||
|     bool:Class_Nvgs, | ||||
|     Class_Fov, | ||||
|      | ||||
|     /* Effects */ | ||||
|     bool:class_has_napalm, | ||||
|     Float:class_napalm_time, | ||||
|     bool:Class_HasNapalm, | ||||
|     Float:Class_NapalmTime, | ||||
|      | ||||
|     /* Player behaviour */ | ||||
|     class_immunity_mode, | ||||
|     Float:class_immunity_amount, | ||||
|     bool:class_no_fall_damage, | ||||
|     Class_ImmunityMode, | ||||
|     Float:Class_ImmunityAmount, | ||||
|     bool:Class_NoFallDamage, | ||||
|      | ||||
|     class_health, | ||||
|     Float:class_health_regen_interval, | ||||
|     class_health_regen_amount, | ||||
|     class_health_infect_gain, | ||||
|     class_kill_bonus, | ||||
|     Class_Health, | ||||
|     Float:Class_HealthRegenInterval, | ||||
|     Class_HealthRegenAmount, | ||||
|     Class_HealthInfectGain, | ||||
|     Class_KillBonus, | ||||
|      | ||||
|     Float:class_speed, | ||||
|     Float:class_knockback, | ||||
|     Float:class_jump_height, | ||||
|     Float:class_jump_distance | ||||
|     Float:Class_Speed, | ||||
|     Float:Class_KnockBack, | ||||
|     Float:Class_JumpHeight, | ||||
|     Float:Class_JumpDistance | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -435,6 +453,7 @@ ClassLoad(bool:keepMultipliers = false) | ||||
|     } | ||||
|      | ||||
|     decl String:name[64]; | ||||
|     decl String:group[64]; | ||||
|     decl String:description[256]; | ||||
|     decl String:model_path[PLATFORM_MAX_PATH]; | ||||
|     decl String:overlay_path[PLATFORM_MAX_PATH]; | ||||
| @@ -455,55 +474,58 @@ ClassLoad(bool:keepMultipliers = false) | ||||
|         } | ||||
|          | ||||
|         /* General */ | ||||
|         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_flags] = KvGetNum(kvClassData, "flags", ZR_CLASS_DEFAULT_FLAGS); | ||||
|         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_TeamDefault] = bool:KvGetNum(kvClassData, "team_default", ZR_CLASS_DEFAULT_TEAM_DEFAULT); | ||||
|         ClassData[ClassCount][Class_Flags] = KvGetNum(kvClassData, "flags", ZR_CLASS_DEFAULT_FLAGS); | ||||
|          | ||||
|         KvGetString(kvClassData, "group", group, sizeof(group), ZR_CLASS_DEFAULT_GROUP); | ||||
|         strcopy(ClassData[ClassCount][Class_Group], 64, group); | ||||
|          | ||||
|         KvGetString(kvClassData, "name", name, sizeof(name), ZR_CLASS_DEFAULT_NAME); | ||||
|         strcopy(ClassData[ClassCount][class_name], 64, name); | ||||
|         strcopy(ClassData[ClassCount][Class_Name], 64, name); | ||||
|          | ||||
|         KvGetString(kvClassData, "description", description, sizeof(description), ZR_CLASS_DEFAULT_DESCRIPTION); | ||||
|         strcopy(ClassData[ClassCount][class_description], 256, description); | ||||
|         strcopy(ClassData[ClassCount][Class_Description], 256, description); | ||||
|          | ||||
|          | ||||
|         /* Model */ | ||||
|         KvGetString(kvClassData, "model_path", model_path, sizeof(model_path), ZR_CLASS_DEFAULT_MODEL_PATH); | ||||
|         strcopy(ClassData[ClassCount][class_model_path], PLATFORM_MAX_PATH, model_path); | ||||
|         strcopy(ClassData[ClassCount][Class_ModelPath], PLATFORM_MAX_PATH, model_path); | ||||
|          | ||||
|         ClassData[ClassCount][class_alpha_initial] = KvGetNum(kvClassData, "alpha_initial", ZR_CLASS_DEFAULT_ALPHA_INITIAL); | ||||
|         ClassData[ClassCount][class_alpha_damaged] = KvGetNum(kvClassData, "alpha_damaged", ZR_CLASS_DEFAULT_ALPHA_DAMAGED); | ||||
|         ClassData[ClassCount][class_alpha_damage] = KvGetNum(kvClassData, "alpha_damage", ZR_CLASS_DEFAULT_ALPHA_DAMAGE); | ||||
|         ClassData[ClassCount][Class_AlphaInitial] = KvGetNum(kvClassData, "alpha_initial", ZR_CLASS_DEFAULT_ALPHA_INITIAL); | ||||
|         ClassData[ClassCount][Class_AlphaDamaged] = KvGetNum(kvClassData, "alpha_damaged", ZR_CLASS_DEFAULT_ALPHA_DAMAGED); | ||||
|         ClassData[ClassCount][Class_AlphaDamage] = KvGetNum(kvClassData, "alpha_damage", ZR_CLASS_DEFAULT_ALPHA_DAMAGE); | ||||
|          | ||||
|          | ||||
|         /* Hud */ | ||||
|         KvGetString(kvClassData, "overlay_path", overlay_path, sizeof(overlay_path), ZR_CLASS_DEFAULT_OVERLAY_PATH); | ||||
|         strcopy(ClassData[ClassCount][class_overlay_path], PLATFORM_MAX_PATH, overlay_path); | ||||
|         strcopy(ClassData[ClassCount][Class_OverlayPath], PLATFORM_MAX_PATH, overlay_path); | ||||
|          | ||||
|         ClassData[ClassCount][class_nvgs] = bool:KvGetNum(kvClassData, "nvgs", ZR_CLASS_DEFAULT_NVGS); | ||||
|         ClassData[ClassCount][class_fov] = KvGetNum(kvClassData, "fov", ZR_CLASS_DEFAULT_FOV); | ||||
|         ClassData[ClassCount][Class_Nvgs] = bool:KvGetNum(kvClassData, "nvgs", ZR_CLASS_DEFAULT_NVGS); | ||||
|         ClassData[ClassCount][Class_Fov] = KvGetNum(kvClassData, "fov", ZR_CLASS_DEFAULT_FOV); | ||||
|          | ||||
|          | ||||
|         /* Effects */ | ||||
|         ClassData[ClassCount][class_has_napalm] = bool:KvGetNum(kvClassData, "have_napalm", ZR_CLASS_DEFAULT_HAS_NAPALM); | ||||
|         ClassData[ClassCount][class_napalm_time] = KvGetFloat(kvClassData, "napalm_time", ZR_CLASS_DEFAULT_NAPALM_TIME); | ||||
|         ClassData[ClassCount][Class_HasNapalm] = bool:KvGetNum(kvClassData, "have_napalm", ZR_CLASS_DEFAULT_HAS_NAPALM); | ||||
|         ClassData[ClassCount][Class_NapalmTime] = KvGetFloat(kvClassData, "napalm_time", ZR_CLASS_DEFAULT_NAPALM_TIME); | ||||
|          | ||||
|          | ||||
|         /* Player behaviour */ | ||||
|         ClassData[ClassCount][class_immunity_mode] = KvGetNum(kvClassData, "immunity_mode", ZR_CLASS_DEFAULT_IMMUNITY_MODE); | ||||
|         ClassData[ClassCount][class_immunity_amount] = KvGetFloat(kvClassData, "immunity_amount", ZR_CLASS_DEFAULT_IMMUNITY_AMOUNT); | ||||
|         ClassData[ClassCount][class_no_fall_damage] = bool:KvGetNum(kvClassData, "no_fall_damage", ZR_CLASS_DEFAULT_NO_FALL_DAMAGE); | ||||
|         ClassData[ClassCount][Class_ImmunityMode] = KvGetNum(kvClassData, "immunity_mode", ZR_CLASS_DEFAULT_IMMUNITY_MODE); | ||||
|         ClassData[ClassCount][Class_ImmunityAmount] = KvGetFloat(kvClassData, "immunity_amount", ZR_CLASS_DEFAULT_IMMUNITY_AMOUNT); | ||||
|         ClassData[ClassCount][Class_NoFallDamage] = bool:KvGetNum(kvClassData, "no_fall_damage", ZR_CLASS_DEFAULT_NO_FALL_DAMAGE); | ||||
|          | ||||
|         ClassData[ClassCount][class_health] = KvGetNum(kvClassData, "health", ZR_CLASS_DEFAULT_HEALTH); | ||||
|         ClassData[ClassCount][class_health_regen_interval] = KvGetFloat(kvClassData, "health_regen_interval", ZR_CLASS_DEFAULT_HEALTH_REGEN_INTERVAL); | ||||
|         ClassData[ClassCount][class_health_regen_amount] = KvGetNum(kvClassData, "health_regen_amount", ZR_CLASS_DEFAULT_HEALTH_REGEN_AMOUNT); | ||||
|         ClassData[ClassCount][class_health_infect_gain] = KvGetNum(kvClassData, "health_infect_gain", ZR_CLASS_DEFAULT_HEALTH_INFECT_GAIN); | ||||
|         ClassData[ClassCount][class_kill_bonus] = KvGetNum(kvClassData, "kill_bonus", ZR_CLASS_DEFAULT_KILL_BONUS); | ||||
|         ClassData[ClassCount][Class_Health] = KvGetNum(kvClassData, "health", ZR_CLASS_DEFAULT_HEALTH); | ||||
|         ClassData[ClassCount][Class_HealthRegenInterval] = KvGetFloat(kvClassData, "health_regen_interval", ZR_CLASS_DEFAULT_HEALTH_REGEN_INTERVAL); | ||||
|         ClassData[ClassCount][Class_HealthRegenAmount] = KvGetNum(kvClassData, "health_regen_amount", ZR_CLASS_DEFAULT_HEALTH_REGEN_AMOUNT); | ||||
|         ClassData[ClassCount][Class_HealthInfectGain] = KvGetNum(kvClassData, "health_infect_gain", ZR_CLASS_DEFAULT_HEALTH_INFECT_GAIN); | ||||
|         ClassData[ClassCount][Class_KillBonus] = KvGetNum(kvClassData, "kill_bonus", ZR_CLASS_DEFAULT_KILL_BONUS); | ||||
|          | ||||
|         ClassData[ClassCount][class_speed] = KvGetFloat(kvClassData, "speed", ZR_CLASS_DEFAULT_SPEED); | ||||
|         ClassData[ClassCount][class_knockback] = KvGetFloat(kvClassData, "knockback", ZR_CLASS_DEFAULT_KNOCKBACK); | ||||
|         ClassData[ClassCount][class_jump_height] = KvGetFloat(kvClassData, "jump_height", ZR_CLASS_DEFAULT_JUMP_HEIGHT); | ||||
|         ClassData[ClassCount][class_jump_distance] = KvGetFloat(kvClassData, "jump_distance", ZR_CLASS_DEFAULT_JUMP_DISTANCE); | ||||
|         ClassData[ClassCount][Class_Speed] = KvGetFloat(kvClassData, "speed", ZR_CLASS_DEFAULT_SPEED); | ||||
|         ClassData[ClassCount][Class_KnockBack] = KvGetFloat(kvClassData, "knockback", ZR_CLASS_DEFAULT_KNOCKBACK); | ||||
|         ClassData[ClassCount][Class_JumpHeight] = KvGetFloat(kvClassData, "jump_height", ZR_CLASS_DEFAULT_JUMP_HEIGHT); | ||||
|         ClassData[ClassCount][Class_JumpDistance] = KvGetFloat(kvClassData, "jump_distance", ZR_CLASS_DEFAULT_JUMP_DISTANCE); | ||||
|          | ||||
|         // Validate the class attributes. | ||||
|         ClassErrorFlags = ClassValidateAttributes(ClassCount); | ||||
| @@ -511,7 +533,7 @@ ClassLoad(bool:keepMultipliers = false) | ||||
|         { | ||||
|             // There's one or more invalid class attributes. Disable the class | ||||
|             // and log an error message. | ||||
|             ClassData[ClassCount][class_enabled] = false; | ||||
|             ClassData[ClassCount][Class_Enabled] = false; | ||||
|             LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid class at index %d, disabled class. Class error flags: %d.", ClassCount, ClassErrorFlags); | ||||
|              | ||||
|             failedcount++; | ||||
| @@ -589,41 +611,42 @@ bool:ClassReloadDataCache() | ||||
|     for (new classindex = 0; classindex < ClassCount; classindex++) | ||||
|     { | ||||
|         /* General */ | ||||
|         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_flags] = ClassData[classindex][class_flags]; | ||||
|         strcopy(ClassDataCache[classindex][class_name], 64, ClassData[classindex][class_name]); | ||||
|         strcopy(ClassDataCache[classindex][class_description], 256, ClassData[classindex][class_description]); | ||||
|         ClassDataCache[classindex][Class_Enabled] = ClassData[classindex][Class_Enabled]; | ||||
|         ClassDataCache[classindex][Class_Team] = ClassData[classindex][Class_Team]; | ||||
|         ClassDataCache[classindex][Class_TeamDefault] = ClassData[classindex][Class_TeamDefault]; | ||||
|         ClassDataCache[classindex][Class_Flags] = ClassData[classindex][Class_Flags]; | ||||
|         strcopy(ClassDataCache[classindex][Class_Group], 64, ClassData[classindex][Class_Group]); | ||||
|         strcopy(ClassDataCache[classindex][Class_Name], 64, ClassData[classindex][Class_Name]); | ||||
|         strcopy(ClassDataCache[classindex][Class_Description], 256, ClassData[classindex][Class_Description]); | ||||
|          | ||||
|         /* Model */ | ||||
|         strcopy(ClassDataCache[classindex][class_model_path], PLATFORM_MAX_PATH, ClassData[classindex][class_model_path]); | ||||
|         ClassDataCache[classindex][class_alpha_initial] = ClassData[classindex][class_alpha_initial]; | ||||
|         ClassDataCache[classindex][class_alpha_damaged] = ClassData[classindex][class_alpha_damaged]; | ||||
|         ClassDataCache[classindex][class_alpha_damage] = ClassData[classindex][class_alpha_damage]; | ||||
|         strcopy(ClassDataCache[classindex][Class_ModelPath], PLATFORM_MAX_PATH, ClassData[classindex][Class_ModelPath]); | ||||
|         ClassDataCache[classindex][Class_AlphaInitial] = ClassData[classindex][Class_AlphaInitial]; | ||||
|         ClassDataCache[classindex][Class_AlphaDamaged] = ClassData[classindex][Class_AlphaDamaged]; | ||||
|         ClassDataCache[classindex][Class_AlphaDamage] = ClassData[classindex][Class_AlphaDamage]; | ||||
|          | ||||
|         /* Hud */ | ||||
|         strcopy(ClassDataCache[classindex][class_overlay_path], PLATFORM_MAX_PATH, ClassData[classindex][class_overlay_path]); | ||||
|         ClassDataCache[classindex][class_nvgs] = ClassData[classindex][class_nvgs]; | ||||
|         ClassDataCache[classindex][class_fov] = ClassData[classindex][class_fov]; | ||||
|         strcopy(ClassDataCache[classindex][Class_OverlayPath], PLATFORM_MAX_PATH, ClassData[classindex][Class_OverlayPath]); | ||||
|         ClassDataCache[classindex][Class_Nvgs] = ClassData[classindex][Class_Nvgs]; | ||||
|         ClassDataCache[classindex][Class_Fov] = ClassData[classindex][Class_Fov]; | ||||
|          | ||||
|         /* Effects */ | ||||
|         ClassDataCache[classindex][class_has_napalm] = ClassData[classindex][class_has_napalm]; | ||||
|         ClassDataCache[classindex][class_napalm_time] = ClassData[classindex][class_napalm_time]; | ||||
|         ClassDataCache[classindex][Class_HasNapalm] = ClassData[classindex][Class_HasNapalm]; | ||||
|         ClassDataCache[classindex][Class_NapalmTime] = ClassData[classindex][Class_NapalmTime]; | ||||
|          | ||||
|         /* Player behaviour */ | ||||
|         ClassDataCache[classindex][class_immunity_mode] = ClassData[classindex][class_immunity_mode]; | ||||
|         ClassDataCache[classindex][class_immunity_amount] = ClassData[classindex][class_immunity_amount]; | ||||
|         ClassDataCache[classindex][class_no_fall_damage] = ClassData[classindex][class_no_fall_damage]; | ||||
|         ClassDataCache[classindex][class_health] = ClassData[classindex][class_health]; | ||||
|         ClassDataCache[classindex][class_health_regen_interval] = ClassData[classindex][class_health_regen_interval]; | ||||
|         ClassDataCache[classindex][class_health_regen_amount] = ClassData[classindex][class_health_regen_amount]; | ||||
|         ClassDataCache[classindex][class_health_infect_gain] = ClassData[classindex][class_health_infect_gain]; | ||||
|         ClassDataCache[classindex][class_kill_bonus] = ClassData[classindex][class_kill_bonus]; | ||||
|         ClassDataCache[classindex][class_speed] = ClassData[classindex][class_speed]; | ||||
|         ClassDataCache[classindex][class_knockback] = ClassData[classindex][class_knockback]; | ||||
|         ClassDataCache[classindex][class_jump_height] = ClassData[classindex][class_jump_height]; | ||||
|         ClassDataCache[classindex][class_jump_distance] = ClassData[classindex][class_jump_distance]; | ||||
|         ClassDataCache[classindex][Class_ImmunityMode] = ClassData[classindex][Class_ImmunityMode]; | ||||
|         ClassDataCache[classindex][Class_ImmunityAmount] = ClassData[classindex][Class_ImmunityAmount]; | ||||
|         ClassDataCache[classindex][Class_NoFallDamage] = ClassData[classindex][Class_NoFallDamage]; | ||||
|         ClassDataCache[classindex][Class_Health] = ClassData[classindex][Class_Health]; | ||||
|         ClassDataCache[classindex][Class_HealthRegenInterval] = ClassData[classindex][Class_HealthRegenInterval]; | ||||
|         ClassDataCache[classindex][Class_HealthRegenAmount] = ClassData[classindex][Class_HealthRegenAmount]; | ||||
|         ClassDataCache[classindex][Class_HealthInfectGain] = ClassData[classindex][Class_HealthInfectGain]; | ||||
|         ClassDataCache[classindex][Class_KillBonus] = ClassData[classindex][Class_KillBonus]; | ||||
|         ClassDataCache[classindex][Class_Speed] = ClassData[classindex][Class_Speed]; | ||||
|         ClassDataCache[classindex][Class_KnockBack] = ClassData[classindex][Class_KnockBack]; | ||||
|         ClassDataCache[classindex][Class_JumpHeight] = ClassData[classindex][Class_JumpHeight]; | ||||
|         ClassDataCache[classindex][Class_JumpDistance] = ClassData[classindex][Class_JumpDistance]; | ||||
|     } | ||||
|      | ||||
|     return true; | ||||
| @@ -653,80 +676,82 @@ bool:ClassReloadPlayerCache(client, classindex, cachetype = ZR_CLASS_CACHE_MODIF | ||||
|         case ZR_CLASS_CACHE_ORIGINAL: | ||||
|         { | ||||
|             /* General */ | ||||
|             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_flags] = ClassData[classindex][class_flags]; | ||||
|             strcopy(ClassPlayerCache[client][class_name], 64, ClassData[classindex][class_name]); | ||||
|             strcopy(ClassPlayerCache[client][class_description], 256, ClassData[classindex][class_description]); | ||||
|             ClassPlayerCache[client][Class_Enabled] = ClassData[classindex][Class_Enabled]; | ||||
|             ClassPlayerCache[client][Class_Team] = ClassData[classindex][Class_Team]; | ||||
|             ClassPlayerCache[client][Class_TeamDefault] = ClassData[classindex][Class_TeamDefault]; | ||||
|             ClassPlayerCache[client][Class_Flags] = ClassData[classindex][Class_Flags]; | ||||
|             strcopy(ClassPlayerCache[client][Class_Group], 64, ClassData[classindex][Class_Group]); | ||||
|             strcopy(ClassPlayerCache[client][Class_Name], 64, ClassData[classindex][Class_Name]); | ||||
|             strcopy(ClassPlayerCache[client][Class_Description], 256, ClassData[classindex][Class_Description]); | ||||
|              | ||||
|             /* Model */ | ||||
|             strcopy(ClassPlayerCache[client][class_model_path], PLATFORM_MAX_PATH, ClassData[classindex][class_model_path]); | ||||
|             ClassPlayerCache[client][class_alpha_initial] = ClassData[classindex][class_alpha_initial]; | ||||
|             ClassPlayerCache[client][class_alpha_damaged] = ClassData[classindex][class_alpha_damaged]; | ||||
|             ClassPlayerCache[client][class_alpha_damage] = ClassData[classindex][class_alpha_damage]; | ||||
|             strcopy(ClassPlayerCache[client][Class_ModelPath], PLATFORM_MAX_PATH, ClassData[classindex][Class_ModelPath]); | ||||
|             ClassPlayerCache[client][Class_AlphaInitial] = ClassData[classindex][Class_AlphaInitial]; | ||||
|             ClassPlayerCache[client][Class_AlphaDamaged] = ClassData[classindex][Class_AlphaDamaged]; | ||||
|             ClassPlayerCache[client][Class_AlphaDamage] = ClassData[classindex][Class_AlphaDamage]; | ||||
|              | ||||
|             /* Hud */ | ||||
|             strcopy(ClassPlayerCache[client][class_overlay_path], PLATFORM_MAX_PATH, ClassData[classindex][class_overlay_path]); | ||||
|             ClassPlayerCache[client][class_nvgs] = ClassData[classindex][class_nvgs]; | ||||
|             ClassPlayerCache[client][class_fov] = ClassData[classindex][class_fov]; | ||||
|             strcopy(ClassPlayerCache[client][Class_OverlayPath], PLATFORM_MAX_PATH, ClassData[classindex][Class_OverlayPath]); | ||||
|             ClassPlayerCache[client][Class_Nvgs] = ClassData[classindex][Class_Nvgs]; | ||||
|             ClassPlayerCache[client][Class_Fov] = ClassData[classindex][Class_Fov]; | ||||
|              | ||||
|             /* Effects */ | ||||
|             ClassPlayerCache[client][class_has_napalm] = ClassData[classindex][class_has_napalm]; | ||||
|             ClassPlayerCache[client][class_napalm_time] = ClassData[classindex][class_napalm_time]; | ||||
|             ClassPlayerCache[client][Class_HasNapalm] = ClassData[classindex][Class_HasNapalm]; | ||||
|             ClassPlayerCache[client][Class_NapalmTime] = ClassData[classindex][Class_NapalmTime]; | ||||
|              | ||||
|             /* Player behaviour */ | ||||
|             ClassPlayerCache[client][class_immunity_mode] = ClassData[classindex][class_immunity_mode]; | ||||
|             ClassPlayerCache[client][class_immunity_amount] = ClassData[classindex][class_immunity_amount]; | ||||
|             ClassPlayerCache[client][class_no_fall_damage] = ClassData[classindex][class_no_fall_damage]; | ||||
|             ClassPlayerCache[client][class_health] = ClassData[classindex][class_health]; | ||||
|             ClassPlayerCache[client][class_health_regen_interval] = ClassData[classindex][class_health_regen_interval]; | ||||
|             ClassPlayerCache[client][class_health_regen_amount] = ClassData[classindex][class_health_regen_amount]; | ||||
|             ClassPlayerCache[client][class_health_infect_gain] = ClassData[classindex][class_health_infect_gain]; | ||||
|             ClassPlayerCache[client][class_kill_bonus] = ClassData[classindex][class_kill_bonus]; | ||||
|             ClassPlayerCache[client][class_speed] = ClassData[classindex][class_speed]; | ||||
|             ClassPlayerCache[client][class_knockback] = ClassData[classindex][class_knockback]; | ||||
|             ClassPlayerCache[client][class_jump_height] = ClassData[classindex][class_jump_height]; | ||||
|             ClassPlayerCache[client][class_jump_distance] = ClassData[classindex][class_jump_distance]; | ||||
|             ClassPlayerCache[client][Class_ImmunityMode] = ClassData[classindex][Class_ImmunityMode]; | ||||
|             ClassPlayerCache[client][Class_ImmunityAmount] = ClassData[classindex][Class_ImmunityAmount]; | ||||
|             ClassPlayerCache[client][Class_NoFallDamage] = ClassData[classindex][Class_NoFallDamage]; | ||||
|             ClassPlayerCache[client][Class_Health] = ClassData[classindex][Class_Health]; | ||||
|             ClassPlayerCache[client][Class_HealthRegenInterval] = ClassData[classindex][Class_HealthRegenInterval]; | ||||
|             ClassPlayerCache[client][Class_HealthRegenAmount] = ClassData[classindex][Class_HealthRegenAmount]; | ||||
|             ClassPlayerCache[client][Class_HealthInfectGain] = ClassData[classindex][Class_HealthInfectGain]; | ||||
|             ClassPlayerCache[client][Class_KillBonus] = ClassData[classindex][Class_KillBonus]; | ||||
|             ClassPlayerCache[client][Class_Speed] = ClassData[classindex][Class_Speed]; | ||||
|             ClassPlayerCache[client][Class_KnockBack] = ClassData[classindex][Class_KnockBack]; | ||||
|             ClassPlayerCache[client][Class_JumpHeight] = ClassData[classindex][Class_JumpHeight]; | ||||
|             ClassPlayerCache[client][Class_JumpDistance] = ClassData[classindex][Class_JumpDistance]; | ||||
|         } | ||||
|         case ZR_CLASS_CACHE_MODIFIED: | ||||
|         { | ||||
|             /* General */ | ||||
|             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_flags] = ClassDataCache[classindex][class_flags]; | ||||
|             strcopy(ClassPlayerCache[client][class_name], 64, ClassDataCache[classindex][class_name]); | ||||
|             strcopy(ClassPlayerCache[client][class_description], 256, ClassDataCache[classindex][class_description]); | ||||
|             ClassPlayerCache[client][Class_Enabled] = ClassDataCache[classindex][Class_Enabled]; | ||||
|             ClassPlayerCache[client][Class_Team] = ClassDataCache[classindex][Class_Team]; | ||||
|             ClassPlayerCache[client][Class_TeamDefault] = ClassDataCache[classindex][Class_TeamDefault]; | ||||
|             ClassPlayerCache[client][Class_Flags] = ClassDataCache[classindex][Class_Flags]; | ||||
|             strcopy(ClassPlayerCache[client][Class_Group], 64, ClassDataCache[classindex][Class_Group]); | ||||
|             strcopy(ClassPlayerCache[client][Class_Name], 64, ClassDataCache[classindex][Class_Name]); | ||||
|             strcopy(ClassPlayerCache[client][Class_Description], 256, ClassDataCache[classindex][Class_Description]); | ||||
|              | ||||
|             /* Model */ | ||||
|             strcopy(ClassPlayerCache[client][class_model_path], PLATFORM_MAX_PATH, ClassDataCache[classindex][class_model_path]); | ||||
|             ClassPlayerCache[client][class_alpha_initial] = ClassDataCache[classindex][class_alpha_initial]; | ||||
|             ClassPlayerCache[client][class_alpha_damaged] = ClassDataCache[classindex][class_alpha_damaged]; | ||||
|             ClassPlayerCache[client][class_alpha_damage] = ClassDataCache[classindex][class_alpha_damage]; | ||||
|             strcopy(ClassPlayerCache[client][Class_ModelPath], PLATFORM_MAX_PATH, ClassDataCache[classindex][Class_ModelPath]); | ||||
|             ClassPlayerCache[client][Class_AlphaInitial] = ClassDataCache[classindex][Class_AlphaInitial]; | ||||
|             ClassPlayerCache[client][Class_AlphaDamaged] = ClassDataCache[classindex][Class_AlphaDamaged]; | ||||
|             ClassPlayerCache[client][Class_AlphaDamage] = ClassDataCache[classindex][Class_AlphaDamage]; | ||||
|              | ||||
|             /* Hud */ | ||||
|             strcopy(ClassPlayerCache[client][class_overlay_path], PLATFORM_MAX_PATH, ClassDataCache[classindex][class_overlay_path]); | ||||
|             ClassPlayerCache[client][class_nvgs] = ClassDataCache[classindex][class_nvgs]; | ||||
|             ClassPlayerCache[client][class_fov] = ClassDataCache[classindex][class_fov]; | ||||
|             strcopy(ClassPlayerCache[client][Class_OverlayPath], PLATFORM_MAX_PATH, ClassDataCache[classindex][Class_OverlayPath]); | ||||
|             ClassPlayerCache[client][Class_Nvgs] = ClassDataCache[classindex][Class_Nvgs]; | ||||
|             ClassPlayerCache[client][Class_Fov] = ClassDataCache[classindex][Class_Fov]; | ||||
|              | ||||
|             /* Effects */ | ||||
|             ClassPlayerCache[client][class_has_napalm] = ClassDataCache[classindex][class_has_napalm]; | ||||
|             ClassPlayerCache[client][class_napalm_time] = ClassDataCache[classindex][class_napalm_time]; | ||||
|             ClassPlayerCache[client][Class_HasNapalm] = ClassDataCache[classindex][Class_HasNapalm]; | ||||
|             ClassPlayerCache[client][Class_NapalmTime] = ClassDataCache[classindex][Class_NapalmTime]; | ||||
|              | ||||
|             /* Player behaviour */ | ||||
|             ClassPlayerCache[client][class_immunity_mode] = ClassDataCache[classindex][class_immunity_mode]; | ||||
|             ClassPlayerCache[client][class_immunity_amount] = ClassDataCache[classindex][class_immunity_amount]; | ||||
|             ClassPlayerCache[client][class_no_fall_damage] = ClassDataCache[classindex][class_no_fall_damage]; | ||||
|             ClassPlayerCache[client][class_health] = ClassDataCache[classindex][class_health]; | ||||
|             ClassPlayerCache[client][class_health_regen_interval] = ClassDataCache[classindex][class_health_regen_interval]; | ||||
|             ClassPlayerCache[client][class_health_regen_amount] = ClassDataCache[classindex][class_health_regen_amount]; | ||||
|             ClassPlayerCache[client][class_health_infect_gain] = ClassDataCache[classindex][class_health_infect_gain]; | ||||
|             ClassPlayerCache[client][class_kill_bonus] = ClassDataCache[classindex][class_kill_bonus]; | ||||
|             ClassPlayerCache[client][class_speed] = ClassDataCache[classindex][class_speed]; | ||||
|             ClassPlayerCache[client][class_knockback] = ClassDataCache[classindex][class_knockback]; | ||||
|             ClassPlayerCache[client][class_jump_height] = ClassDataCache[classindex][class_jump_height]; | ||||
|             ClassPlayerCache[client][class_jump_distance] = ClassDataCache[classindex][class_jump_distance]; | ||||
|             ClassPlayerCache[client][Class_ImmunityMode] = ClassDataCache[classindex][Class_ImmunityMode]; | ||||
|             ClassPlayerCache[client][Class_ImmunityAmount] = ClassDataCache[classindex][Class_ImmunityAmount]; | ||||
|             ClassPlayerCache[client][Class_NoFallDamage] = ClassDataCache[classindex][Class_NoFallDamage]; | ||||
|             ClassPlayerCache[client][Class_Health] = ClassDataCache[classindex][Class_Health]; | ||||
|             ClassPlayerCache[client][Class_HealthRegenInterval] = ClassDataCache[classindex][Class_HealthRegenInterval]; | ||||
|             ClassPlayerCache[client][Class_HealthRegenAmount] = ClassDataCache[classindex][Class_HealthRegenAmount]; | ||||
|             ClassPlayerCache[client][Class_HealthInfectGain] = ClassDataCache[classindex][Class_HealthInfectGain]; | ||||
|             ClassPlayerCache[client][Class_KillBonus] = ClassDataCache[classindex][Class_KillBonus]; | ||||
|             ClassPlayerCache[client][Class_Speed] = ClassDataCache[classindex][Class_Speed]; | ||||
|             ClassPlayerCache[client][Class_KnockBack] = ClassDataCache[classindex][Class_KnockBack]; | ||||
|             ClassPlayerCache[client][Class_JumpHeight] = ClassDataCache[classindex][Class_JumpHeight]; | ||||
|             ClassPlayerCache[client][Class_JumpDistance] = ClassDataCache[classindex][Class_JumpDistance]; | ||||
|         } | ||||
|         default: | ||||
|         { | ||||
| @@ -786,7 +811,7 @@ ClassResetMultiplierCache() | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Resets the selected class indexes for next span on one or all clients. | ||||
|  * Resets the selected class indexes for next spawn on one or all clients. | ||||
|  * | ||||
|  * @param client    Optional. Specify client to reset. Default is all. | ||||
|  */ | ||||
| @@ -818,7 +843,7 @@ ClassResetNextIndexes(client = -1) | ||||
|  * Note: Does not apply attributes. The classes are only marked as selected. | ||||
|  * | ||||
|  * @param client        The client index. | ||||
|  * @param excludeTeam   Do not restore the specified team. | ||||
|  * @param excludeTeam   Optional. Do not restore the specified team. | ||||
|  */ | ||||
| ClassRestoreNextIndexes(client, excludeTeam = -1) | ||||
| { | ||||
| @@ -980,6 +1005,10 @@ ClassDumpData(index, cachetype, String:buffer[], maxlen) | ||||
|     Format(attribute, sizeof(attribute), "flags:                 \"%d\"\n", ClassGetFlags(index, cachetype)); | ||||
|     cellcount += StrCat(buffer, maxlen, attribute); | ||||
|      | ||||
|     ClassGetGroup(index, format_buffer, sizeof(format_buffer), cachetype); | ||||
|     Format(attribute, sizeof(attribute), "group:                 \"%d\"\n", format_buffer); | ||||
|     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); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user