diff options
author | yexo <yexo@openttd.org> | 2009-08-20 10:39:39 +0000 |
---|---|---|
committer | yexo <yexo@openttd.org> | 2009-08-20 10:39:39 +0000 |
commit | 14b5862c229a7003fbb0dc259386dc1153048c56 (patch) | |
tree | 7b9b888a24c43d2028d72eb4b44c1b284cbfb094 /src/ai/api | |
parent | 0960f15c7ed46ac71881456ed71dfcd0a33ae4bb (diff) | |
download | openttd-14b5862c229a7003fbb0dc259386dc1153048c56.tar.xz |
(svn r17230) -Fix (r15027): don't assert when an AI uses AI*Mode objects incorrectly but crash the AI instead
Diffstat (limited to 'src/ai/api')
-rw-r--r-- | src/ai/api/ai_execmode.cpp | 11 | ||||
-rw-r--r-- | src/ai/api/ai_testmode.cpp | 11 |
2 files changed, 20 insertions, 2 deletions
diff --git a/src/ai/api/ai_execmode.cpp b/src/ai/api/ai_execmode.cpp index 941718bee..b51adfd48 100644 --- a/src/ai/api/ai_execmode.cpp +++ b/src/ai/api/ai_execmode.cpp @@ -4,6 +4,9 @@ #include "ai_execmode.hpp" #include "../../command_type.h" +#include "../../company_base.h" +#include "../../company_func.h" +#include "../ai_instance.hpp" bool AIExecMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs) { @@ -21,6 +24,12 @@ AIExecMode::AIExecMode() AIExecMode::~AIExecMode() { - assert(this->GetDoCommandModeInstance() == this); + if (this->GetDoCommandModeInstance() != this) { + AIInstance *instance = Company::Get(_current_company)->ai_instance; + /* Ignore this error if the AI already died. */ + if (!instance->IsDead()) { + throw AI_FatalError("AIExecMode object was removed while it was not the latest AI*Mode object created."); + } + } this->SetDoCommandMode(this->last_mode, this->last_instance); } diff --git a/src/ai/api/ai_testmode.cpp b/src/ai/api/ai_testmode.cpp index 484333b42..114366722 100644 --- a/src/ai/api/ai_testmode.cpp +++ b/src/ai/api/ai_testmode.cpp @@ -4,6 +4,9 @@ #include "ai_testmode.hpp" #include "../../command_type.h" +#include "../../company_base.h" +#include "../../company_func.h" +#include "../ai_instance.hpp" bool AITestMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs) { @@ -21,6 +24,12 @@ AITestMode::AITestMode() AITestMode::~AITestMode() { - assert(this->GetDoCommandModeInstance() == this); + if (this->GetDoCommandModeInstance() != this) { + AIInstance *instance = Company::Get(_current_company)->ai_instance; + /* Ignore this error if the AI already died. */ + if (!instance->IsDead()) { + throw AI_FatalError("AITestmode object was removed while it was not the latest AI*Mode object created."); + } + } this->SetDoCommandMode(this->last_mode, this->last_instance); } |