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. */