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); } }