diff options
author | truebrain <truebrain@openttd.org> | 2011-12-19 20:56:50 +0000 |
---|---|---|
committer | truebrain <truebrain@openttd.org> | 2011-12-19 20:56:50 +0000 |
commit | 83f2785f54de1c31267c5586464c97fb39f95b5a (patch) | |
tree | de073b47921321433fc0945bd63bc9c07d4a1f33 /src/script | |
parent | cbe43abe5db481568ccf988dbe994f43a985efbd (diff) | |
download | openttd-83f2785f54de1c31267c5586464c97fb39f95b5a.tar.xz |
(svn r23611) -Add: run the begin of the script already while generating, and don't sleep on DoCommand while doing so
Diffstat (limited to 'src/script')
-rw-r--r-- | src/script/api/script_object.cpp | 9 | ||||
-rw-r--r-- | src/script/script_instance.hpp | 6 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/script/api/script_object.cpp b/src/script/api/script_object.cpp index 1dd431d80..d9a432b44 100644 --- a/src/script/api/script_object.cpp +++ b/src/script/api/script_object.cpp @@ -15,6 +15,7 @@ #include "../../company_func.h" #include "../../network/network.h" #include "../../tunnelbridge.h" +#include "../../genworld.h" #include "../script_storage.hpp" #include "../script_instance.hpp" @@ -233,7 +234,7 @@ ScriptObject::ActiveInstance::~ActiveInstance() #endif /* Try to perform the command. */ - CommandCost res = ::DoCommandPInternal(tile, p1, p2, cmd, _networking ? ScriptObject::GetActiveInstance()->GetDoCommandCallback() : NULL, text, false, estimate_only); + CommandCost res = ::DoCommandPInternal(tile, p1, p2, cmd, (_networking && !_generating_world) ? ScriptObject::GetActiveInstance()->GetDoCommandCallback() : NULL, text, false, estimate_only); /* We failed; set the error and bail out */ if (res.Failed()) { @@ -254,7 +255,11 @@ ScriptObject::ActiveInstance::~ActiveInstance() SetLastCost(res.GetCost()); SetLastCommandRes(true); - if (_networking) { + if (_generating_world) { + IncreaseDoCommandCosts(res.GetCost()); + if (callback != NULL) callback(GetActiveInstance()); + return true; + } else if (_networking) { /* Suspend the AI till the command is really executed. */ throw Script_Suspend(-(int)GetDoCommandDelay(), callback); } else { diff --git a/src/script/script_instance.hpp b/src/script/script_instance.hpp index 8aa85744c..e7a23ccd9 100644 --- a/src/script/script_instance.hpp +++ b/src/script/script_instance.hpp @@ -159,6 +159,12 @@ public: */ void InsertEvent(class ScriptEvent *event); + /** + * Check if the instance is sleeping, which either happened because the + * script executed a DoCommand, or executed this.Sleep(). + */ + bool IsSleeping() { return this->suspend != 0; } + protected: class Squirrel *engine; ///< A wrapper around the squirrel vm. |