summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ai/ai_config.cpp7
-rw-r--r--src/ai/ai_info.cpp8
-rw-r--r--src/ai/ai_info.hpp5
3 files changed, 19 insertions, 1 deletions
diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp
index dc7a3e48d..cc309b62f 100644
--- a/src/ai/ai_config.cpp
+++ b/src/ai/ai_config.cpp
@@ -88,7 +88,12 @@ int AIConfig::GetSetting(const char *name)
void AIConfig::SetSetting(const char *name, int value)
{
/* You can only set ai specific settings if an AI is selected. */
- assert(strcmp(name, "start_date") == 0 || this->info != NULL);
+ assert(this->info != NULL);
+
+ const AIConfigItem *config_item = this->info->GetConfigItem(name);
+ if (config_item == NULL) return;
+
+ value = Clamp(value, config_item->min_value, config_item->max_value);
SettingValueList::iterator it = this->settings.find(name);
if (it != this->settings.end()) {
diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp
index 9e439cce2..c68972c45 100644
--- a/src/ai/ai_info.cpp
+++ b/src/ai/ai_info.cpp
@@ -295,6 +295,14 @@ const AIConfigItemList *AIInfo::GetConfigList()
return &this->config_list;
}
+const AIConfigItem *AIInfo::GetConfigItem(const char *name)
+{
+ for (AIConfigItemList::iterator it = this->config_list.begin(); it != this->config_list.end(); it++) {
+ if (strcmp((*it).name, name) == 0) return &(*it);
+ }
+ return NULL;
+}
+
int AIInfo::GetSettingDefaultValue(const char *name)
{
for (AIConfigItemList::iterator it = this->config_list.begin(); it != this->config_list.end(); it++) {
diff --git a/src/ai/ai_info.hpp b/src/ai/ai_info.hpp
index 205e89b38..9d283966d 100644
--- a/src/ai/ai_info.hpp
+++ b/src/ai/ai_info.hpp
@@ -127,6 +127,11 @@ public:
const AIConfigItemList *GetConfigList();
/**
+ * Get the description of a certain ai config option.
+ */
+ const AIConfigItem *GetConfigItem(const char *name);
+
+ /**
* Set a setting.
*/
SQInteger AddSetting(HSQUIRRELVM vm);