Added validation log messages for individual attributes when loading classes.

This commit is contained in:
Richard Helgeby 2010-08-06 14:24:10 +02:00
parent d795604978
commit 3f68eaa2f0
2 changed files with 106 additions and 10 deletions

View File

@ -98,46 +98,66 @@ stock bool:ClassValidateTeamDefaults(cachetype = ZR_CLASS_CACHE_ORIGINAL)
* check if they have invalid values. Boolean settings are not validated. * check if they have invalid values. Boolean settings are not validated.
* *
* @param classindex The index of the class to validate. * @param classindex The index of the class to validate.
* @param logErrors Log invalid attributes.
* @return A value with attribute error flags. * @return A value with attribute error flags.
*/ */
stock ClassValidateAttributes(classindex) stock ClassValidateAttributes(classindex, bool:logErrors = false)
{ {
// TODO: Validate immunity mode and amount. // TODO: Validate immunity mode and amount.
new flags; new flags;
// Team. // Team.
if (ClassData[classindex][Class_Team] < ZR_CLASS_TEAM_MIN || ClassData[classindex][Class_Team] > ZR_CLASS_TEAM_MAX) new team = ClassData[classindex][Class_Team];
if (team < ZR_CLASS_TEAM_MIN || team > ZR_CLASS_TEAM_MAX)
{ {
flags += ZR_CLASS_TEAM; flags += ZR_CLASS_TEAM;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid team at index %d: %d", classindex, team);
}
} }
// Class flags. // Class flags.
if (ClassData[classindex][Class_Flags] < ZR_CLASS_FLAGS_MIN || ClassData[classindex][Class_Flags] > ZR_CLASS_FLAGS_MAX) new class_flags = ClassData[classindex][Class_Flags];
if (class_flags < ZR_CLASS_FLAGS_MIN || class_flags > ZR_CLASS_FLAGS_MAX)
{ {
flags += ZR_CLASS_FLAGS; flags += ZR_CLASS_FLAGS;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid flags at index %d: %d", classindex, class_flags);
}
} }
// Group. // Group.
if (strlen(ClassData[classindex][Class_Group])) decl String:group[64];
group[0] = 0;
if (strcopy(group, sizeof(group), ClassData[classindex][Class_Group]) > 0)
{ {
// Check if the group exist. // Check if the group exist.
if (FindAdmGroup(ClassData[classindex][Class_Group]) == INVALID_GROUP_ID) if (FindAdmGroup(group) == INVALID_GROUP_ID)
{ {
flags += ZR_CLASS_GROUP; flags += ZR_CLASS_GROUP;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid group at index %d: \"%s\"", classindex, group);
}
} }
} }
// Name. // Name.
if (strlen(ClassData[classindex][Class_Name]) < ZR_CLASS_NAME_MIN) decl String:name[64];
name[0] = 0;
if (strcopy(name, sizeof(name), ClassData[classindex][Class_Name]) < ZR_CLASS_NAME_MIN)
{ {
flags += ZR_CLASS_NAME; flags += ZR_CLASS_NAME;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Missing name at index %d.", classindex);
}
} }
else else
{ {
decl String:name[64];
strcopy(name, sizeof(name), ClassData[classindex][Class_Name]);
// Check for reserved name keyworks. These aren't allowed as names. // Check for reserved name keyworks. These aren't allowed as names.
if (StrEqual(name, "all", false) || if (StrEqual(name, "all", false) ||
StrEqual(name, "humans", false) || StrEqual(name, "humans", false) ||
@ -145,6 +165,10 @@ stock ClassValidateAttributes(classindex)
StrEqual(name, "admins", false)) StrEqual(name, "admins", false))
{ {
flags += ZR_CLASS_NAME; flags += ZR_CLASS_NAME;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid name at index %d. Cannot be a team name: \"%s\"", classindex, name);
}
} }
} }
@ -152,6 +176,10 @@ stock ClassValidateAttributes(classindex)
if (strlen(ClassData[classindex][Class_Description]) < ZR_CLASS_DESCRIPTION_MIN) if (strlen(ClassData[classindex][Class_Description]) < ZR_CLASS_DESCRIPTION_MIN)
{ {
flags += ZR_CLASS_DESCRIPTION; flags += ZR_CLASS_DESCRIPTION;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Missing description at index %d.", classindex);
}
} }
// Model path. // Model path.
@ -159,6 +187,10 @@ stock ClassValidateAttributes(classindex)
if (strcopy(model_path, sizeof(model_path), ClassData[classindex][Class_ModelPath]) == 0) if (strcopy(model_path, sizeof(model_path), ClassData[classindex][Class_ModelPath]) == 0)
{ {
flags += ZR_CLASS_MODEL_PATH; flags += ZR_CLASS_MODEL_PATH;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Missing model_path at index %d.", classindex, model_path);
}
} }
else else
{ {
@ -175,6 +207,10 @@ stock ClassValidateAttributes(classindex)
if (!FileExists(model_path)) if (!FileExists(model_path))
{ {
flags += ZR_CLASS_MODEL_PATH; flags += ZR_CLASS_MODEL_PATH;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid model_path at index %d. File not found: \"%s\"", classindex, model_path);
}
} }
} }
} }
@ -184,6 +220,10 @@ stock ClassValidateAttributes(classindex)
if (!(alpha_initial >= ZR_CLASS_ALPHA_INITIAL_MIN && alpha_initial <= ZR_CLASS_ALPHA_INITIAL_MAX)) if (!(alpha_initial >= ZR_CLASS_ALPHA_INITIAL_MIN && alpha_initial <= ZR_CLASS_ALPHA_INITIAL_MAX))
{ {
flags += ZR_CLASS_ALPHA_INITIAL; flags += ZR_CLASS_ALPHA_INITIAL;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid alpha_inital at index %d: %d", classindex, alpha_initial);
}
} }
// Alpha, damaged. // Alpha, damaged.
@ -191,6 +231,10 @@ stock ClassValidateAttributes(classindex)
if (!(alpha_damaged >= ZR_CLASS_ALPHA_DAMAGED_MIN && alpha_damaged <= ZR_CLASS_ALPHA_DAMAGED_MAX)) if (!(alpha_damaged >= ZR_CLASS_ALPHA_DAMAGED_MIN && alpha_damaged <= ZR_CLASS_ALPHA_DAMAGED_MAX))
{ {
flags += ZR_CLASS_ALPHA_DAMAGED; flags += ZR_CLASS_ALPHA_DAMAGED;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid alpha_damaged at index %d: %d", classindex, alpha_damaged);
}
} }
// Alpha, damage. // Alpha, damage.
@ -198,6 +242,10 @@ stock ClassValidateAttributes(classindex)
if (!(alpha_damage >= ZR_CLASS_ALPHA_DAMAGE_MIN && alpha_damage <= ZR_CLASS_ALPHA_DAMAGE_MAX)) if (!(alpha_damage >= ZR_CLASS_ALPHA_DAMAGE_MIN && alpha_damage <= ZR_CLASS_ALPHA_DAMAGE_MAX))
{ {
flags += ZR_CLASS_ALPHA_DAMAGE; flags += ZR_CLASS_ALPHA_DAMAGE;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid alpha_damage at index %d: %d", classindex, alpha_damage);
}
} }
// Overlay path. // Overlay path.
@ -210,6 +258,10 @@ stock ClassValidateAttributes(classindex)
if (!FileExists(overlay)) if (!FileExists(overlay))
{ {
flags += ZR_CLASS_OVERLAY_PATH; flags += ZR_CLASS_OVERLAY_PATH;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid overlay_path at index %d. File not found: \"%s\"", classindex, overlay_path);
}
} }
} }
@ -218,6 +270,10 @@ stock ClassValidateAttributes(classindex)
if (!(fov >= ZR_CLASS_FOV_MIN && fov <= ZR_CLASS_FOV_MAX)) if (!(fov >= ZR_CLASS_FOV_MIN && fov <= ZR_CLASS_FOV_MAX))
{ {
flags += ZR_CLASS_FOV; flags += ZR_CLASS_FOV;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid fov at index %d: %d", classindex, fov);
}
} }
// Napalm time. // Napalm time.
@ -225,6 +281,10 @@ stock ClassValidateAttributes(classindex)
if (!(napalm_time >= ZR_CLASS_NAPALM_TIME_MIN && napalm_time <= ZR_CLASS_NAPALM_TIME_MAX)) if (!(napalm_time >= ZR_CLASS_NAPALM_TIME_MIN && napalm_time <= ZR_CLASS_NAPALM_TIME_MAX))
{ {
flags += ZR_CLASS_NAPALM_TIME; flags += ZR_CLASS_NAPALM_TIME;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid napalm_time at index %d: %0.2f", classindex, napalm_time);
}
} }
// Immunity mode (not implemented). // Immunity mode (not implemented).
@ -235,6 +295,10 @@ stock ClassValidateAttributes(classindex)
if (!(health >= ZR_CLASS_HEALTH_MIN && health <= ZR_CLASS_HEALTH_MAX)) if (!(health >= ZR_CLASS_HEALTH_MIN && health <= ZR_CLASS_HEALTH_MAX))
{ {
flags += ZR_CLASS_HEALTH; flags += ZR_CLASS_HEALTH;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid health at index %d: %d", classindex, health);
}
} }
// Health regen interval. // Health regen interval.
@ -242,6 +306,10 @@ stock ClassValidateAttributes(classindex)
if (!(regen_interval >= ZR_CLASS_REGEN_INTERVAL_MIN && regen_interval <= ZR_CLASS_REGEN_INTERVAL_MAX)) if (!(regen_interval >= ZR_CLASS_REGEN_INTERVAL_MIN && regen_interval <= ZR_CLASS_REGEN_INTERVAL_MAX))
{ {
flags += ZR_CLASS_HEALTH_REGEN_INTERVAL; flags += ZR_CLASS_HEALTH_REGEN_INTERVAL;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid health_regen_interval at index %d: %0.2f", classindex, regen_interval);
}
} }
// Health regen amount. // Health regen amount.
@ -249,6 +317,10 @@ stock ClassValidateAttributes(classindex)
if (!(regen_amount >= ZR_CLASS_REGEN_AMOUNT_MIN && regen_amount <= ZR_CLASS_REGEN_AMOUNT_MAX)) if (!(regen_amount >= ZR_CLASS_REGEN_AMOUNT_MIN && regen_amount <= ZR_CLASS_REGEN_AMOUNT_MAX))
{ {
flags += ZR_CLASS_HEALTH_REGEN_AMOUNT; flags += ZR_CLASS_HEALTH_REGEN_AMOUNT;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid health_regen_amount at index %d: %d", classindex, regen_amount);
}
} }
// Health infect gain. // Health infect gain.
@ -256,6 +328,10 @@ stock ClassValidateAttributes(classindex)
if (!(infect_gain >= ZR_CLASS_HEALTH_INFECT_GAIN_MIN && infect_gain <= ZR_CLASS_HEALTH_INFECT_GAIN_MAX)) if (!(infect_gain >= ZR_CLASS_HEALTH_INFECT_GAIN_MIN && infect_gain <= ZR_CLASS_HEALTH_INFECT_GAIN_MAX))
{ {
flags += ZR_CLASS_HEALTH_INFECT_GAIN; flags += ZR_CLASS_HEALTH_INFECT_GAIN;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid health_infect_gain at index %d: %d", classindex, infect_gain);
}
} }
// Kill bonus. // Kill bonus.
@ -263,6 +339,10 @@ stock ClassValidateAttributes(classindex)
if (!(kill_bonus >= ZR_CLASS_KILL_BONUS_MIN && kill_bonus <= ZR_CLASS_KILL_BONUS_MAX)) if (!(kill_bonus >= ZR_CLASS_KILL_BONUS_MIN && kill_bonus <= ZR_CLASS_KILL_BONUS_MAX))
{ {
flags += ZR_CLASS_KILL_BONUS; flags += ZR_CLASS_KILL_BONUS;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid kill_bonus at index %d: %d", classindex, kill_bonus);
}
} }
// Speed. // Speed.
@ -285,6 +365,10 @@ stock ClassValidateAttributes(classindex)
if (!(speed >= min && speed <= max)) if (!(speed >= min && speed <= max))
{ {
flags += ZR_CLASS_SPEED; flags += ZR_CLASS_SPEED;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid speed at index %d: %0.2f", classindex, speed);
}
} }
// Knockback. // Knockback.
@ -292,6 +376,10 @@ stock ClassValidateAttributes(classindex)
if (!(knockback >= ZR_CLASS_KNOCKBACK_MIN && knockback <= ZR_CLASS_KNOCKBACK_MAX)) if (!(knockback >= ZR_CLASS_KNOCKBACK_MIN && knockback <= ZR_CLASS_KNOCKBACK_MAX))
{ {
flags += ZR_CLASS_KNOCKBACK; flags += ZR_CLASS_KNOCKBACK;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid knockback at index %d: %0.2f", classindex, knockback);
}
} }
// Jump height. // Jump height.
@ -299,6 +387,10 @@ stock ClassValidateAttributes(classindex)
if (!(jump_height >= ZR_CLASS_JUMP_HEIGHT_MIN && jump_height <= ZR_CLASS_JUMP_HEIGHT_MAX)) if (!(jump_height >= ZR_CLASS_JUMP_HEIGHT_MIN && jump_height <= ZR_CLASS_JUMP_HEIGHT_MAX))
{ {
flags += ZR_CLASS_JUMP_HEIGHT; flags += ZR_CLASS_JUMP_HEIGHT;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid jump_height at index %d: %0.2f", classindex, jump_height);
}
} }
// Jump distance. // Jump distance.
@ -306,6 +398,10 @@ stock ClassValidateAttributes(classindex)
if (!(jump_distance >= ZR_CLASS_JUMP_DISTANCE_MIN && jump_distance <= ZR_CLASS_JUMP_DISTANCE_MAX)) if (!(jump_distance >= ZR_CLASS_JUMP_DISTANCE_MIN && jump_distance <= ZR_CLASS_JUMP_DISTANCE_MAX))
{ {
flags += ZR_CLASS_JUMP_DISTANCE; flags += ZR_CLASS_JUMP_DISTANCE;
if (logErrors)
{
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid jump_distance at index %d: %0.2f", classindex, jump_distance);
}
} }
return flags; return flags;

View File

@ -612,7 +612,7 @@ ClassLoad()
ClassData[ClassCount][Class_JumpDistance] = KvGetFloat(kvClassData, "jump_distance", ZR_CLASS_DEFAULT_JUMP_DISTANCE); ClassData[ClassCount][Class_JumpDistance] = KvGetFloat(kvClassData, "jump_distance", ZR_CLASS_DEFAULT_JUMP_DISTANCE);
// Validate the class attributes. // Validate the class attributes.
ClassErrorFlags = ClassValidateAttributes(ClassCount); ClassErrorFlags = ClassValidateAttributes(ClassCount, true);
if (ClassErrorFlags > 0) if (ClassErrorFlags > 0)
{ {
// There's one or more invalid class attributes. Disable the class // There's one or more invalid class attributes. Disable the class