summaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authoryexo <yexo@openttd.org>2009-06-01 22:00:47 +0000
committeryexo <yexo@openttd.org>2009-06-01 22:00:47 +0000
commit4ea3e511bd71559ab475f49292c8b50f1eace647 (patch)
tree0c088a58691406daaa43f51ebefe51a2337c4271 /src/script
parent9b15b8cd4a6e956e97a6c5f823f181d381684157 (diff)
downloadopenttd-4ea3e511bd71559ab475f49292c8b50f1eace647.tar.xz
(svn r16502) -Fix [FS#2935]: when an AI was suspended while in a function called (indirectly) via call/acall/pcall OpenTTD crashed. Fix this by disallowing AIs to be suspended while called via call/acall/pcall.
IMPORTANT FOR AI WRITERS: AIs can no longer call any DoCommand functions (change anything, build vehicles, etc.) in a function called (indirectly) via call/acall/pcall. Where possible, please rewrite your code so it doesn't use call/acall/pcall
Diffstat (limited to 'src/script')
-rw-r--r--src/script/squirrel.cpp5
-rw-r--r--src/script/squirrel.hpp5
2 files changed, 10 insertions, 0 deletions
diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp
index 6737fd3ef..6955d2d24 100644
--- a/src/script/squirrel.cpp
+++ b/src/script/squirrel.cpp
@@ -508,3 +508,8 @@ void Squirrel::ResetCrashed()
{
this->crashed = false;
}
+
+bool Squirrel::CanSuspend()
+{
+ return sq_can_suspend(this->vm);
+}
diff --git a/src/script/squirrel.hpp b/src/script/squirrel.hpp
index ee597f87a..b878c2b95 100644
--- a/src/script/squirrel.hpp
+++ b/src/script/squirrel.hpp
@@ -213,6 +213,11 @@ public:
* Reset the crashed status.
*/
void ResetCrashed();
+
+ /**
+ * Are we allowed to suspend the squirrel script at this moment?
+ */
+ bool CanSuspend();
};
#endif /* SQUIRREL_HPP */