浏览代码

Fix rare crash on merging two stacks in town garrison with stack
artifacts equipped

Ivan Savenko 8 月之前
父节点
当前提交
dcbf12ef26
共有 1 个文件被更改,包括 11 次插入5 次删除
  1. 11 5
      lib/networkPacks/NetPacksLib.cpp

+ 11 - 5
lib/networkPacks/NetPacksLib.cpp

@@ -1639,13 +1639,19 @@ void RebalanceStacks::applyGs(CGameState *gs)
 			{
 				if(auto dstArt = dstStack->getArt(ArtifactPosition::CREATURE_SLOT))
 				{
-					auto dstSlot = ArtifactUtils::getArtBackpackPosition(srcHero, dstArt->getTypeId());
-					if(srcHero && dstSlot != ArtifactPosition::PRE_FIRST)
+					bool artifactIsLost = true;
+
+					if(srcHero)
 					{
-						gs->map->moveArtifactInstance(*dstStack, ArtifactPosition::CREATURE_SLOT, *srcHero, dstSlot);
+						auto dstSlot = ArtifactUtils::getArtBackpackPosition(srcHero, dstArt->getTypeId());
+						if (dstSlot != ArtifactPosition::PRE_FIRST)
+						{
+							gs->map->moveArtifactInstance(*dstStack, ArtifactPosition::CREATURE_SLOT, *srcHero, dstSlot);
+							artifactIsLost = false;
+						}
 					}
-					//else - artifact can be lost :/
-					else
+
+					if (artifactIsLost)
 					{
 						BulkEraseArtifacts ea;
 						ea.artHolder = dstHero->id;