Bläddra i källkod

Fixes crash on dropping an artifact on an empty garrison slot;

Fay 10 år sedan
förälder
incheckning
72f34a7799
1 ändrade filer med 13 tillägg och 10 borttagningar
  1. 13 10
      client/widgets/CGarrisonInt.cpp

+ 13 - 10
client/widgets/CGarrisonInt.cpp

@@ -239,17 +239,20 @@ void CGarrisonSlot::clickLeft(tribool down, bool previousState)
 				{
 					const CGHeroInstance *srcHero = commonInfo->src.AOH->getHero();
 					artSelected = true;
-					ArtifactLocation src(srcHero, commonInfo->src.slotID);
-					ArtifactLocation dst(myStack, ArtifactPosition::CREATURE_SLOT);
-					if (art->canBePutAt(dst, true))
-					{	//equip clicked stack
-						if(dst.getArt())
-						{
-							//creature can wear only one active artifact
-							//if we are placing a new one, the old one will be returned to the hero's backpack
-							LOCPLINT->cb->swapArtifacts(dst, ArtifactLocation(srcHero, dst.getArt()->firstBackpackSlot(srcHero)));
+					if (myStack) // try dropping the artifact only if the slot isn't empty
+					{
+						ArtifactLocation src(srcHero, commonInfo->src.slotID);
+						ArtifactLocation dst(myStack, ArtifactPosition::CREATURE_SLOT);
+						if (art->canBePutAt(dst, true))
+						{	//equip clicked stack
+							if(dst.getArt())
+							{
+								//creature can wear only one active artifact
+								//if we are placing a new one, the old one will be returned to the hero's backpack
+								LOCPLINT->cb->swapArtifacts(dst, ArtifactLocation(srcHero, dst.getArt()->firstBackpackSlot(srcHero)));
+							}
+							LOCPLINT->cb->swapArtifacts(src, dst);
 						}
-						LOCPLINT->cb->swapArtifacts(src, dst);
 					}
 				}
 			}