diff options
author | glx22 <glx22@users.noreply.github.com> | 2019-09-07 18:37:01 +0200 |
---|---|---|
committer | Charles Pigott <charlespigott@googlemail.com> | 2019-09-07 17:37:01 +0100 |
commit | b3fd7879596defeb6af78acb4ea45e4418821bdf (patch) | |
tree | 08b94b2cd65012e573b0e8c94196daab5aab12ba /src/script/script_instance.cpp | |
parent | 381c2a45875206afe43241d0c76619638cf613fc (diff) | |
download | openttd-b3fd7879596defeb6af78acb4ea45e4418821bdf.tar.xz |
Fix #7188: check the validity of command callback for scripts (#7701)
Diffstat (limited to 'src/script/script_instance.cpp')
-rw-r--r-- | src/script/script_instance.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index 5734c2c83..64ae51cf3 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -680,10 +680,12 @@ SQInteger ScriptInstance::GetOpsTillSuspend() return this->engine->GetOpsTillSuspend(); } -void ScriptInstance::DoCommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) +bool ScriptInstance::DoCommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd) { ScriptObject::ActiveInstance active(this); + if (!ScriptObject::CheckLastCommand(tile, p1, p2, cmd)) return false; + ScriptObject::SetLastCommandRes(result.Succeeded()); if (result.Failed()) { @@ -692,6 +694,10 @@ void ScriptInstance::DoCommandCallback(const CommandCost &result, TileIndex tile ScriptObject::IncreaseDoCommandCosts(result.GetCost()); ScriptObject::SetLastCost(result.GetCost()); } + + ScriptObject::SetLastCommand(INVALID_TILE, 0, 0, CMD_END); + + return true; } void ScriptInstance::InsertEvent(class ScriptEvent *event) |