Browse Source

Better solution for rmg crash fix

Ivan Savenko 1 year ago
parent
commit
aa02d5787a
3 changed files with 5 additions and 2 deletions
  1. 3 0
      lib/rmg/RmgObject.cpp
  2. 1 0
      lib/rmg/RmgObject.h
  3. 1 2
      lib/rmg/modificators/TreasurePlacer.cpp

+ 3 - 0
lib/rmg/RmgObject.cpp

@@ -138,6 +138,9 @@ void Object::Instance::setTemplate(TerrainId terrain, CRandomGenerator & rng)
 
 void Object::Instance::clear()
 {
+	if (onCleared)
+		onCleared(&dObject);
+
 	delete &dObject;
 	dBlockedAreaCache.clear();
 	dAccessibleAreaCache.clear();

+ 1 - 0
lib/rmg/RmgObject.h

@@ -51,6 +51,7 @@ public:
 		void finalize(RmgMap & map, CRandomGenerator &); //cache invalidation
 		void clear();
 		
+		std::function<void(CGObjectInstance *)> onCleared;
 	private:
 		mutable Area dBlockedAreaCache;
 		int3 dPosition;

+ 1 - 2
lib/rmg/modificators/TreasurePlacer.cpp

@@ -672,7 +672,6 @@ rmg::Object TreasurePlacer::constructTreasurePile(const std::vector<ObjectInfo*>
 		}
 		
 		auto * object = oi->generateObject();
-
 		if(oi->templates.empty())
 		{
 			logGlobal->warn("Deleting randomized object with no templates: %s", object->getObjectName());
@@ -701,6 +700,7 @@ rmg::Object TreasurePlacer::constructTreasurePile(const std::vector<ObjectInfo*>
 		}
 
 		auto & instance = rmgObject.addInstance(*object);
+		instance.onCleared = oi->destroyObject;
 
 		do
 		{
@@ -837,7 +837,6 @@ void TreasurePlacer::createTreasures(ObjectManager& manager)
 	{
 		for (auto* oi : treasurePile)
 		{
-			//oi->destroyObject();
 			oi->maxPerZone++;
 		}
 	};