# HG changeset patch
# User truebrain
# Date 1206960913 0
# Node ID 738b8f69675f939cd3480bd1cb3057f52d565823
# Parent 29f34a179daf994f1f8066f6863204ef1d9b077e
(svn r12510) [NoAI] -Add: added AIError, which allows you to catch errors triggered by commands (Morloth)
diff -r 29f34a179daf -r 738b8f69675f bin/ai/regression/regression.nut
--- a/bin/ai/regression/regression.nut Mon Mar 31 09:51:47 2008 +0000
+++ b/bin/ai/regression/regression.nut Mon Mar 31 10:55:13 2008 +0000
@@ -680,6 +680,9 @@
print(" BuildRoadDepot(): " + AIRoad.BuildRoadDepot(33411, 33411));
print(" BuildRoadDepot(): " + AIRoad.BuildRoadDepot(33411, 33414));
print(" BuildRoadDepot(): " + AIRoad.BuildRoadDepot(33411, 33412));
+ print(" GetLastError(): " + AIError.GetLastError());
+ print(" GetLastErrorString(): " + AIError.GetLastErrorString());
+ print(" GetErrorCategory(): " + AIError.GetErrorCategory());
print(" IsRoadTile(): " + AIRoad.IsRoadTile(33411));
print(" GetRoadDepotFrontTile(): " + AIRoad.GetRoadDepotFrontTile(33411));
print(" IsRoadDepotTile(): " + AIRoad.IsRoadDepotTile(33411));
diff -r 29f34a179daf -r 738b8f69675f bin/ai/regression/regression.txt
--- a/bin/ai/regression/regression.txt Mon Mar 31 09:51:47 2008 +0000
+++ b/bin/ai/regression/regression.txt Mon Mar 31 10:55:13 2008 +0000
@@ -5336,6 +5336,9 @@
BuildRoadDepot(): false
BuildRoadDepot(): true
BuildRoadDepot(): false
+ GetLastError(): 260
+ GetLastErrorString(): ERR_AREA_NOT_CLEAR
+ GetErrorCategory(): 1
IsRoadTile(): false
GetRoadDepotFrontTile(): 33412
IsRoadDepotTile(): true
diff -r 29f34a179daf -r 738b8f69675f projects/openttd_vs80.vcproj
--- a/projects/openttd_vs80.vcproj Mon Mar 31 09:51:47 2008 +0000
+++ b/projects/openttd_vs80.vcproj Mon Mar 31 10:55:13 2008 +0000
@@ -2196,6 +2196,10 @@
>
+
+
@@ -2348,6 +2352,10 @@
>
+
+
diff -r 29f34a179daf -r 738b8f69675f projects/openttd_vs90.vcproj
--- a/projects/openttd_vs90.vcproj Mon Mar 31 09:51:47 2008 +0000
+++ b/projects/openttd_vs90.vcproj Mon Mar 31 10:55:13 2008 +0000
@@ -2193,6 +2193,10 @@
>
+
+
@@ -2345,6 +2349,10 @@
>
+
+
diff -r 29f34a179daf -r 738b8f69675f source.list
--- a/source.list Mon Mar 31 09:51:47 2008 +0000
+++ b/source.list Mon Mar 31 10:55:13 2008 +0000
@@ -479,6 +479,7 @@
ai/api/ai_date.hpp
ai/api/ai_engine.hpp
ai/api/ai_enginelist.hpp
+ai/api/ai_error.hpp
ai/api/ai_event.hpp
ai/api/ai_event_types.hpp
ai/api/ai_execmode.hpp
@@ -518,6 +519,7 @@
ai/api/ai_date.cpp
ai/api/ai_engine.cpp
ai/api/ai_enginelist.cpp
+ai/api/ai_error.cpp
ai/api/ai_event.cpp
ai/api/ai_event_types.cpp
ai/api/ai_execmode.cpp
diff -r 29f34a179daf -r 738b8f69675f src/ai/ai_squirrel.cpp
--- a/src/ai/ai_squirrel.cpp Mon Mar 31 09:51:47 2008 +0000
+++ b/src/ai/ai_squirrel.cpp Mon Mar 31 10:55:13 2008 +0000
@@ -8,6 +8,7 @@
#include "../string_func.h"
#include "../fileio.h"
#include "../fios.h"
+#include "table/strings.h"
#include
#include
@@ -35,6 +36,7 @@
#include "api/ai_date.hpp.sq"
#include "api/ai_engine.hpp.sq"
#include "api/ai_enginelist.hpp.sq"
+#include "api/ai_error.hpp.sq"
#include "api/ai_event.hpp.sq"
#include "api/ai_event_types.hpp.sq"
#include "api/ai_execmode.hpp.sq"
@@ -224,6 +226,7 @@
SQAIDate_Register(this->engine);
SQAIEngine_Register(this->engine);
SQAIEngineList_Register(this->engine);
+ SQAIError_Register(this->engine);
SQAIEvent_Register(this->engine);
SQAIEventController_Register(this->engine);
SQAIEventSubsidiaryOffer_Register(this->engine);
diff -r 29f34a179daf -r 738b8f69675f src/ai/api/ai_error.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ai/api/ai_error.cpp Mon Mar 31 10:55:13 2008 +0000
@@ -0,0 +1,41 @@
+/* $Id$ */
+
+/** @file ai_error.cpp handles the commands-related functions of the AIError class */
+
+#include "ai_error.hpp"
+#include "table/strings.h"
+
+AIError::AIErrorMap AIError::error_map = AIError::AIErrorMap();
+AIError::AIErrorMapString AIError::error_map_string = AIError::AIErrorMapString();
+
+/* static */ uint AIError::GetLastError()
+{
+ if (AIObject::GetLastError() == STR_NULL) return ERR_NONE;
+
+ AIErrorMap::iterator it = error_map.find(AIObject::GetLastError());
+ if (it == error_map.end()) return ERR_UNKNOWN;
+ return (*it).second;
+}
+
+/* static */ const char *AIError::GetLastErrorString()
+{
+ if (AIObject::GetLastError() == STR_NULL) return strdup("ERR_NONE");
+
+ AIErrorMapString::iterator it = error_map_string.find(AIObject::GetLastError());
+ if (it == error_map_string.end()) return strdup("ERR_UNKNOWN");
+ return (*it).second;
+}
+
+/* static */ void AIError::RegisterErrorMap(uint internal_string_id, uint ai_error_msg)
+{
+ error_map[internal_string_id] = ai_error_msg;
+}
+
+/* static */ void AIError::RegisterErrorMapString(uint internal_string_id, const char *message)
+{
+ error_map_string[internal_string_id] = message;
+}
+
+/* static */ AIError::ErrorCategories AIError::GetErrorCategory() {
+ return (AIError::ErrorCategories)(GetLastError() >> (uint)ERR_CAT_BIT_SIZE);
+}
diff -r 29f34a179daf -r 738b8f69675f src/ai/api/ai_error.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ai/api/ai_error.hpp Mon Mar 31 10:55:13 2008 +0000
@@ -0,0 +1,102 @@
+/* $Id$ */
+
+/** @file ai_error.hpp Everything to query errors. */
+
+#ifndef AI_ERROR_HPP
+#define AI_ERROR_HPP
+
+#include "ai_object.hpp"
+#include