summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ai/ai_scanner.cpp16
-rw-r--r--src/console_cmds.cpp19
-rw-r--r--src/game/game_scanner.cpp16
3 files changed, 28 insertions, 23 deletions
diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp
index ee14fd214..aeb5b50fa 100644
--- a/src/ai/ai_scanner.cpp
+++ b/src/ai/ai_scanner.cpp
@@ -101,20 +101,10 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo
strecpy(ai_name, nameParam, lastof(ai_name));
strtolower(ai_name);
- AIInfo *info = nullptr;
- int version = -1;
-
if (versionParam == -1) {
/* We want to load the latest version of this AI; so find it */
if (this->info_single_list.find(ai_name) != this->info_single_list.end()) return static_cast<AIInfo *>(this->info_single_list[ai_name]);
-
- /* If we didn't find a match AI, maybe the user included a version */
- char *e = strrchr(ai_name, '.');
- if (e == nullptr) return nullptr;
- *e = '\0';
- e++;
- versionParam = atoi(e);
- /* Continue, like we were calling this function with a version. */
+ return nullptr;
}
if (force_exact_match) {
@@ -123,8 +113,12 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo
seprintf(ai_name_tmp, lastof(ai_name_tmp), "%s.%d", ai_name, versionParam);
strtolower(ai_name_tmp);
if (this->info_list.find(ai_name_tmp) != this->info_list.end()) return static_cast<AIInfo *>(this->info_list[ai_name_tmp]);
+ return nullptr;
}
+ AIInfo *info = nullptr;
+ int version = -1;
+
/* See if there is a compatible AI which goes by that name, with the highest
* version which allows loading the requested version */
ScriptInfoList::iterator it = this->info_list.begin();
diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp
index 2f678b2fc..e87232b36 100644
--- a/src/console_cmds.cpp
+++ b/src/console_cmds.cpp
@@ -1172,7 +1172,24 @@ DEF_CONSOLE_CMD(ConStartAI)
AIConfig *config = AIConfig::GetConfig((CompanyID)n);
if (argc >= 2) {
- config->Change(argv[1], -1, true);
+ config->Change(argv[1], -1, false);
+
+ /* If the name is not found, and there is a dot in the name,
+ * try again with the assumption everything right of the dot is
+ * the version the user wants to load. */
+ if (!config->HasScript()) {
+ char *name = stredup(argv[1]);
+ char *e = strrchr(name, '.');
+ if (e != nullptr) {
+ *e = '\0';
+ e++;
+
+ int version = atoi(e);
+ config->Change(name, version, true);
+ }
+ free(name);
+ }
+
if (!config->HasScript()) {
IConsoleWarning("Failed to load the specified AI");
return true;
diff --git a/src/game/game_scanner.cpp b/src/game/game_scanner.cpp
index 68efa350c..6bcba4455 100644
--- a/src/game/game_scanner.cpp
+++ b/src/game/game_scanner.cpp
@@ -40,20 +40,10 @@ GameInfo *GameScannerInfo::FindInfo(const char *nameParam, int versionParam, boo
strecpy(game_name, nameParam, lastof(game_name));
strtolower(game_name);
- GameInfo *info = nullptr;
- int version = -1;
-
if (versionParam == -1) {
/* We want to load the latest version of this Game script; so find it */
if (this->info_single_list.find(game_name) != this->info_single_list.end()) return static_cast<GameInfo *>(this->info_single_list[game_name]);
-
- /* If we didn't find a match Game script, maybe the user included a version */
- char *e = strrchr(game_name, '.');
- if (e == nullptr) return nullptr;
- *e = '\0';
- e++;
- versionParam = atoi(e);
- /* Continue like we were calling this function with a version. */
+ return nullptr;
}
if (force_exact_match) {
@@ -62,8 +52,12 @@ GameInfo *GameScannerInfo::FindInfo(const char *nameParam, int versionParam, boo
seprintf(game_name_tmp, lastof(game_name_tmp), "%s.%d", game_name, versionParam);
strtolower(game_name_tmp);
if (this->info_list.find(game_name_tmp) != this->info_list.end()) return static_cast<GameInfo *>(this->info_list[game_name_tmp]);
+ return nullptr;
}
+ GameInfo *info = nullptr;
+ int version = -1;
+
/* See if there is a compatible Game script which goes by that name, with the highest
* version which allows loading the requested version */
ScriptInfoList::iterator it = this->info_list.begin();