summaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorPatric Stout <truebrain@openttd.org>2020-12-25 15:22:40 +0100
committerPatric Stout <github@truebrain.nl>2020-12-25 17:03:44 +0100
commit4319d31036a243cce860511a1b543461c9677f41 (patch)
treef0418e108141886954017e8aad7e731657a7cc08 /src/game
parent29e3331055a784ead663b62a67ef13b0112af1df (diff)
downloadopenttd-4319d31036a243cce860511a1b543461c9677f41.tar.xz
Fix #6468: don't store version of AIs-started-via-console in name
You can do: "startai myai.3", which starts version 3 of "myai". This is very useful for testing save/load code between different versions of your AI. However, when using this syntax, the AI got saved as "myai.3" as name of the AI, instead of "myai". This caused several problems, like indicating to the user the AI could not be found, but still load the AI. But in all cases, the AI never got the chance to load the saved data, making the whole reason this exists pointless. By splitting the name and version already in the console command, the code becomes simpler and AIs started this way now follow the normal flow after initialization.
Diffstat (limited to 'src/game')
-rw-r--r--src/game/game_scanner.cpp16
1 files changed, 5 insertions, 11 deletions
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();