changeset 13006:5bdfd15096d6 draft

(svn r17500) -Fix (r16502): The wrong value was restored to SetAllowDoCommand possible resulting in an AI that wasn't allowed to do any actions
author yexo <yexo@openttd.org>
date Fri, 11 Sep 2009 17:18:06 +0000
parents ccce2b3aba85
children 060e4e103e86
files src/ai/api/ai_controller.cpp src/ai/api/ai_object.cpp src/ai/api/ai_object.hpp
diffstat 3 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/ai/api/ai_controller.cpp
+++ b/src/ai/api/ai_controller.cpp
@@ -30,7 +30,7 @@
 
 /* static */ void AIController::Sleep(int ticks)
 {
-	if (!AIObject::GetAllowDoCommand()) {
+	if (!AIObject::CanSuspend()) {
 		throw AI_FatalError("You are not allowed to call Sleep in your constructor, Save(), Load(), and any valuator.");
 	}
 
--- a/src/ai/api/ai_object.cpp
+++ b/src/ai/api/ai_object.cpp
@@ -170,6 +170,11 @@
 
 bool AIObject::GetAllowDoCommand()
 {
+	return GetStorage()->allow_do_command;
+}
+
+bool AIObject::CanSuspend()
+{
 	Squirrel *squirrel = Company::Get(_current_company)->ai_instance->engine;
 	return GetStorage()->allow_do_command && squirrel->CanSuspend();
 }
@@ -197,7 +202,7 @@
 
 bool AIObject::DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint cmd, const char *text, AISuspendCallbackProc *callback)
 {
-	if (AIObject::GetAllowDoCommand() == false) {
+	if (!AIObject::CanSuspend()) {
 		throw AI_FatalError("You are not allowed to execute any DoCommand (even indirect) in your constructor, Save(), Load(), and any valuator.");
 	}
 
--- a/src/ai/api/ai_object.hpp
+++ b/src/ai/api/ai_object.hpp
@@ -140,8 +140,15 @@
 	static GroupID GetNewGroupID();
 
 	/**
-	 * Get the latest stored allow_do_command.
-	 *  If this is false, you are not allowed to do any DoCommands.
+	 * Can we suspend the AI at this moment?
+	 */
+	static bool CanSuspend();
+
+	/**
+	 * Get the internal value of allow_do_command. This can differ
+	 * from CanSuspend() if the reason we are not allowed
+	 * to execute a DoCommand is in squirrel and not the API.
+	 * In that case use this function to restore the previous value.
 	 */
 	static bool GetAllowDoCommand();