Mercurial > hg > openttd
changeset 19997:83dea2f3cf0d draft
(svn r24929) -Fix [FS#5415]: Don't try to pause or unpause crashed scripts.
author | frosch <frosch@openttd.org> |
---|---|
date | Sun, 20 Jan 2013 18:43:49 +0000 |
parents | f36a8cc913d3 |
children | 0f6e6f81f30e |
files | src/ai/ai_gui.cpp |
diffstat | 1 files changed, 27 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -988,6 +988,19 @@ } /** + * Check whether the currently selected AI/GS is dead. + * @return true if dead. + */ + bool IsDead() const + { + if (ai_debug_company == OWNER_DEITY) { + GameInstance *game = Game::GetInstance(); + return game == NULL || game->IsDead(); + } + return !Company::IsValidAiID(ai_debug_company) || Company::Get(ai_debug_company)->ai_instance->IsDead(); + } + + /** * Constructor for the window. * @param desc The description of the window. * @param number The window number (actually unused). @@ -1286,12 +1299,14 @@ case WID_AID_CONTINUE_BTN: /* Unpause current AI / game script and mark the corresponding script button dirty. */ - if (ai_debug_company == OWNER_DEITY) { - Game::Unpause(); - this->SetWidgetDirty(WID_AID_SCRIPT_GAME); - } else { - AI::Unpause(ai_debug_company); - this->SetWidgetDirty(WID_AID_COMPANY_BUTTON_START + ai_debug_company); + if (!IsDead()) { + if (ai_debug_company == OWNER_DEITY) { + Game::Unpause(); + this->SetWidgetDirty(WID_AID_SCRIPT_GAME); + } else { + AI::Unpause(ai_debug_company); + this->SetWidgetDirty(WID_AID_COMPANY_BUTTON_START + ai_debug_company); + } } /* If the last AI/Game Script is unpaused, unpause the game too. */ @@ -1365,10 +1380,12 @@ this->break_string_filter.AddLine(log->lines[log->pos]); if (this->break_string_filter.GetState()) { /* Pause execution of script. */ - if (ai_debug_company == OWNER_DEITY) { - Game::Pause(); - } else { - AI::Pause(ai_debug_company); + if (!IsDead()) { + if (ai_debug_company == OWNER_DEITY) { + Game::Pause(); + } else { + AI::Pause(ai_debug_company); + } } /* Pause the game. */