diff --git a/src/settings.cpp b/src/settings.cpp index 0d03a57c8f..a6e8904d65 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -463,7 +463,7 @@ size_t BoolSettingDesc::ParseValue(const char *str) const static bool ValidateEnumSetting(const IntSettingDesc *sdb, int32 &val) { - if (sdb->pre_check != nullptr && !sdb->pre_check(val)) return false; + if (sdb->flags & SF_ENUM_PRE_CB_VALIDATE && sdb->pre_check != nullptr && !sdb->pre_check(val)) return false; for (const SettingDescEnumEntry *enumlist = sdb->enumlist; enumlist != nullptr && enumlist->str != STR_NULL; enumlist++) { if (enumlist->val == val) { return true; diff --git a/src/settings_internal.h b/src/settings_internal.h index 7c6d268c00..0c8338e5f3 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -34,6 +34,7 @@ enum SettingFlag : uint32 { SF_RUN_CALLBACKS_ON_PARSE = 1 << 17, ///< run callbacks when parsing from config file SF_GUI_VELOCITY = 1 << 18, ///< setting value is a velocity SF_GUI_ADVISE_DEFAULT = 1 << 19, ///< Advise the user to leave this setting at its default value + SF_ENUM_PRE_CB_VALIDATE = 1 << 20, ///< Call the pre_check callback for enum incoming value validation }; DECLARE_ENUM_AS_BIT_SET(SettingFlag) diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index 6c97adda1a..8f74877c06 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -436,6 +436,7 @@ cat = SC_BASIC var = difficulty.town_council_tolerance type = SLE_UINT8 from = SLV_97 +flags = SF_ENUM_PRE_CB_VALIDATE def = 0 enumlist = _town_council_approval str = STR_CONFIG_SETTING_CITY_APPROVAL