Browse Source

arts bulk move crash fixed

SoundSSGood 2 years ago
parent
commit
3126875e6a
1 changed files with 5 additions and 6 deletions
  1. 5 6
      client/NetPacksClient.cpp

+ 5 - 6
client/NetPacksClient.cpp

@@ -306,14 +306,13 @@ void ApplyClientNetPackVisitor::visitBulkMoveArtifacts(BulkMoveArtifacts & pack)
 		}
 		}
 	};
 	};
 
 
-	ArtifactLocation srcLoc(pack.srcArtHolder, pack.artsPack0.front().srcPos);
-	ArtifactLocation dstLoc(pack.dstArtHolder, pack.artsPack0.front().dstPos);
+	auto srcOwner = std::get<ConstTransitivePtr<CGHeroInstance>>(pack.srcArtHolder)->tempOwner;
+	auto dstOwner = std::get<ConstTransitivePtr<CGHeroInstance>>(pack.dstArtHolder)->tempOwner;
 
 
 	// Begin a session of bulk movement of arts. It is not necessary but useful for the client optimization.
 	// Begin a session of bulk movement of arts. It is not necessary but useful for the client optimization.
-	callInterfaceIfPresent(cl, srcLoc.owningPlayer(), &IGameEventsReceiver::bulkArtMovementStart, pack.artsPack0.size() + pack.artsPack1.size());
-
-	if (srcLoc.owningPlayer() != dstLoc.owningPlayer())
-		callInterfaceIfPresent(cl, dstLoc.owningPlayer(), &IGameEventsReceiver::bulkArtMovementStart, pack.artsPack0.size() + pack.artsPack1.size());
+	callInterfaceIfPresent(cl, srcOwner, &IGameEventsReceiver::bulkArtMovementStart, pack.artsPack0.size() + pack.artsPack1.size());
+	if(srcOwner != dstOwner)
+		callInterfaceIfPresent(cl, dstOwner, &IGameEventsReceiver::bulkArtMovementStart, pack.artsPack0.size() + pack.artsPack1.size());
 
 
 	applyMove(pack.artsPack0);
 	applyMove(pack.artsPack0);
 	if(pack.swap)
 	if(pack.swap)