Loading

Revision differences

Old revision #puz8c3l3nNew revision #phjib9464
1Index: console_cmds.cpp  1Index: src/ai/ai_scanner.cpp
2===================================================================  2===================================================================  
3--- console_cmds.cpp    (revision 27582)  3--- src/ai/ai_scanner.cpp    (revision 27582)
4+++ console_cmds.cpp    (working copy)  4+++ src/ai/ai_scanner.cpp    (working copy)
5@@ -34,6 +34,7 @@  5@@ -136,6 +136,31 @@
6 #include "gamelog.h"    
7 #include "ai/ai.hpp"    
8 #include "ai/ai_config.hpp"    
9+#include "ai/ai_info.hpp"    
10 #include "newgrf.h"    
11 #include "console_func.h"    
12 #include "engine_base.h"    
13@@ -1171,6 +1172,9 @@    
14         if (!config->HasScript()) {    
15             IConsoleWarning("Failed to load the specified AI");    
16             return true;    
17+        } else {    
18+            AIInfo *info = config->GetInfo();    
19+            config->Change(info->GetName());    
20         }  6         }  
21         if (argc == 3) {  7     }
22             config->StringToSettings(argv[2]); 8 
   9+    if (info == NULL && !force_exact_match && versionParam != -1) {
   10+        /* If we didn't find a match AI, maybe the user included a version */
   11+        char *e = strrchr(ai_name, '.');
   12+        if (e == NULL) return NULL;
   13+        *e = '\0';
   14+        e++;
   15+        versionParam = atoi(e);
   16+        /* Try to find a direct 'name.version' match */
   17+        char ai_name_tmp[1024];
   18+        seprintf(ai_name_tmp, lastof(ai_name_tmp), "%s.%d", ai_name, versionParam);
   19+        strtolower(ai_name_tmp);
   20+        if (this->info_list.find(ai_name_tmp) != this->info_list.end()) return static_cast<AIInfo *>(this->info_list[ai_name_tmp]);
   21+
   22+        /* See if there is a compatible AI which goes by that name, with the highest
   23+        *  version which allows loading the requested version */
   24+        ScriptInfoList::iterator it = this->info_list.begin();
   25+        for (; it != this->info_list.end(); it++) {
   26+            AIInfo *i = static_cast<AIInfo *>((*it).second);
   27+            if (strcasecmp(ai_name, i->GetName()) == 0 && i->CanLoadFromVersion(versionParam) && (version == -1 || i->GetVersion() > version)) {
   28+                version = (*it).second->GetVersion();
   29+                info = i;
   30+            }
   31+        }
   32+    }
   33+
   34     return info;
   35 }
   36 
   37Index: src/game/game_scanner.cpp
   38===================================================================
   39--- src/game/game_scanner.cpp    (revision 27582)
   40+++ src/game/game_scanner.cpp    (working copy)
   41@@ -77,6 +77,31 @@
   42         }
   43     }
   44 
   45+    if (info == NULL && !force_exact_match && versionParam != -1) {
   46+        /* If we didn't find a match Game script, maybe the user included a version */
   47+        char *e = strrchr(game_name, '.');
   48+        if (e == NULL) return NULL;
   49+        *e = '\0';
   50+        e++;
   51+        versionParam = atoi(e);
   52+        /* Try to find a direct 'name.version' match */
   53+        char game_name_tmp[1024];
   54+        seprintf(game_name_tmp, lastof(game_name_tmp), "%s.%d", game_name, versionParam);
   55+        strtolower(game_name_tmp);
   56+        if (this->info_list.find(game_name_tmp) != this->info_list.end()) return static_cast<GameInfo *>(this->info_list[game_name_tmp]);
   57+
   58+        /* See if there is a compatible Game script which goes by that name, with the highest
   59+        *  version which allows loading the requested version */
   60+        ScriptInfoList::iterator it = this->info_list.begin();
   61+        for (; it != this->info_list.end(); it++) {
   62+            GameInfo *i = static_cast<GameInfo *>((*it).second);
   63+            if (strcasecmp(game_name, i->GetName()) == 0 && i->CanLoadFromVersion(versionParam) && (version == -1 || i->GetVersion() > version)) {
   64+                version = (*it).second->GetVersion();
   65+                info = i;
   66+            }
   67+        }
   68+    }
   69+
   70     return info;
   71 }