Quellcode durchsuchen

Fix serialization of rewardable objects

Ivan Savenko vor 2 Jahren
Ursprung
Commit
0c847c85cc

+ 13 - 0
lib/mapObjects/CRewardableConstructor.h

@@ -46,6 +46,11 @@ public:
 	void configureObject(CRewardableObject * object, CRandomGenerator & rng) const;
 
 	void init(const JsonNode & objectConfig);
+
+	template <typename Handler> void serialize(Handler &h, const int version)
+	{
+		h & parameters;
+	}
 };
 
 class DLL_LINKAGE CRewardableConstructor : public AObjectTypeHandler
@@ -60,6 +65,14 @@ public:
 	void configureObject(CGObjectInstance * object, CRandomGenerator & rng) const override;
 
 	std::unique_ptr<IObjectInfo> getObjectInfo(std::shared_ptr<const ObjectTemplate> tmpl) const override;
+
+	template <typename Handler> void serialize(Handler &h, const int version)
+	{
+		AObjectTypeHandler::serialize(h, version);
+
+		if (version >= 816)
+			h & objectInfo;
+	}
 };
 
 VCMI_LIB_NAMESPACE_END

+ 1 - 0
lib/mapObjects/CRewardableObject.cpp

@@ -544,6 +544,7 @@ void CRewardableObject::newTurn(CRandomGenerator & rand) const
 void CRewardableObject::initObj(CRandomGenerator & rand)
 {
 	VLC->objtypeh->getHandlerFor(ID, subID)->configureObject(this, rand);
+	assert(!info.empty());
 }
 
 CRewardableObject::CRewardableObject():

+ 1 - 1
lib/serializer/CSerializer.h

@@ -14,7 +14,7 @@
 
 VCMI_LIB_NAMESPACE_BEGIN
 
-const ui32 SERIALIZATION_VERSION = 815;
+const ui32 SERIALIZATION_VERSION = 816;
 const ui32 MINIMAL_SERIALIZATION_VERSION = 813;
 const std::string SAVEGAME_MAGIC = "VCMISVG";