From 2d7911f1553a2511c144460e37a45447a32e69d3 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Tue, 23 May 2017 20:19:47 +0200 Subject: [PATCH] Fix delete() in CBot not destroying PowerCells properly --- src/graphics/engine/pyro.cpp | 3 +++ src/script/scriptfunc.cpp | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/graphics/engine/pyro.cpp b/src/graphics/engine/pyro.cpp index 6f3961af..5bc9f76d 100644 --- a/src/graphics/engine/pyro.cpp +++ b/src/graphics/engine/pyro.cpp @@ -2157,6 +2157,9 @@ bool CPyro::BurnIsKeepPart(int part) void CPyro::BurnTerminate() { + if (m_object == nullptr) + return; + if (m_type == PT_BURNO) // organic object is burning? { DeleteObject(true, true); // removes the insect diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index c0b639de..5fc97564 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -682,6 +682,16 @@ bool CScriptFunctions::rDelete(CBotVar* var, CBotVar* result, int& exception, vo } else { + if (obj->Implements(ObjectInterfaceType::Old)) + { + COldObject* oldobj = dynamic_cast(obj); + if (oldobj->GetPower() != nullptr) + CObjectManager::GetInstancePointer()->DeleteObject(oldobj->GetPower()); + if (oldobj->GetCargo() != nullptr) + CObjectManager::GetInstancePointer()->DeleteObject(oldobj->GetCargo()); + oldobj->SetPower(nullptr); + oldobj->SetCargo(nullptr); + } CObjectManager::GetInstancePointer()->DeleteObject(obj); } }