2
0
Эх сурвалжийг харах

Fix stackinstance deserialization

nordsoft 3 жил өмнө
parent
commit
9fb5d0e726

+ 0 - 3
lib/CCreatureSet.cpp

@@ -859,9 +859,6 @@ PlayerColor CStackInstance::getOwner() const
 
 void CStackInstance::deserializationFix()
 {
-	const CCreature *backup = type;
-	type = nullptr;
-		setType(backup);
 	const CArmedInstance *armyBackup = _armyObj;
 	_armyObj = nullptr;
 	setArmyObj(armyBackup);

+ 15 - 1
lib/CCreatureSet.h

@@ -12,6 +12,7 @@
 #include "HeroBonus.h"
 #include "GameConstants.h"
 #include "CArtHandler.h"
+#include "CCreatureHandler.h"
 
 VCMI_LIB_NAMESPACE_BEGIN
 
@@ -40,7 +41,20 @@ public:
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
-		h & type;
+		if(h.saving)
+		{
+			CreatureID idNumber = type ? type->idNumber : CreatureID(CreatureID::NONE);
+			h & idNumber;
+		}
+		else
+		{
+			CreatureID idNumber;
+			h & idNumber;
+			if(idNumber != CreatureID::NONE)
+				setType(VLC->creh->objects[idNumber]);
+			else
+				type = nullptr;
+		}
 		h & count;
 	}