Browse Source

Apply suggested changes next part

SoundSSGood 2 years ago
parent
commit
6e5932c016
4 changed files with 16 additions and 21 deletions
  1. 2 1
      client/CPlayerInterface.cpp
  2. 7 14
      client/NetPacksClient.cpp
  3. 6 5
      lib/NetPacks.h
  4. 1 1
      lib/NetPacksLib.cpp

+ 2 - 1
client/CPlayerInterface.cpp

@@ -2591,7 +2591,8 @@ void CPlayerInterface::artifactMoved(const ArtifactLocation &src, const Artifact
 		if (artWin)
 			artWin->artifactMoved(src, dst);
 	}
-	GH.objsToBlit.back()->redraw();
+	if(!GH.objsToBlit.empty())
+		GH.objsToBlit.back()->redraw();
 }
 
 void CPlayerInterface::artifactPossibleAssembling(const ArtifactLocation & dst)

+ 7 - 14
client/NetPacksClient.cpp

@@ -285,20 +285,9 @@ void MoveArtifact::applyCl(CClient *cl)
 
 void BulkMoveArtifacts::applyCl(CClient * cl)
 {
-	auto & movingArts = artsPack0;
-	for(auto & slotToMove : movingArts)
+	auto applyMove = [this, cl](std::vector<LinkedSlots> & artsPack) -> void
 	{
-		auto srcLoc = ArtifactLocation(srcArtHolder, slotToMove.srcPos);
-		auto dstLoc = ArtifactLocation(dstArtHolder, slotToMove.dstPos);
-		callInterfaceIfPresent(cl, srcLoc.owningPlayer(), &IGameEventsReceiver::artifactMoved, srcLoc, dstLoc);
-		if (srcLoc.owningPlayer() != dstLoc.owningPlayer())
-			callInterfaceIfPresent(cl, dstLoc.owningPlayer(), &IGameEventsReceiver::artifactMoved, srcLoc, dstLoc);
-	}
-
-	if(swap)
-	{
-		movingArts = artsPack1;
-		for(auto & slotToMove : movingArts)
+		for(auto & slotToMove : artsPack)
 		{
 			auto srcLoc = ArtifactLocation(srcArtHolder, slotToMove.srcPos);
 			auto dstLoc = ArtifactLocation(dstArtHolder, slotToMove.dstPos);
@@ -306,7 +295,11 @@ void BulkMoveArtifacts::applyCl(CClient * cl)
 			if(srcLoc.owningPlayer() != dstLoc.owningPlayer())
 				callInterfaceIfPresent(cl, dstLoc.owningPlayer(), &IGameEventsReceiver::artifactMoved, srcLoc, dstLoc);
 		}
-	}
+	};
+
+	applyMove(artsPack0);
+	if(swap)
+		applyMove(artsPack1);
 }
 
 void AssembledArtifact::applyCl(CClient *cl)

+ 6 - 5
lib/NetPacks.h

@@ -1029,8 +1029,9 @@ struct BulkMoveArtifacts : CArtifactOperationPack
 	TArtHolder srcArtHolder;
 	TArtHolder dstArtHolder;
 
-	BulkMoveArtifacts() {}
-	BulkMoveArtifacts(TArtHolder srcArtHolder, TArtHolder dstArtHolder, bool swap) 
+	BulkMoveArtifacts()
+		: swap(false) {}
+	BulkMoveArtifacts(TArtHolder srcArtHolder, TArtHolder dstArtHolder, bool swap)
 		: srcArtHolder(srcArtHolder), dstArtHolder(dstArtHolder), swap(swap) {}
 
 	void applyCl(CClient * cl);
@@ -2248,10 +2249,10 @@ struct BulkExchangeArtifacts : public CPackForServer
 	ObjectInstanceID dstHero;
 	bool swap;
 
-	BulkExchangeArtifacts() = default;
+	BulkExchangeArtifacts() 
+		: swap(false) {}
 	BulkExchangeArtifacts(ObjectInstanceID srcHero, ObjectInstanceID dstHero, bool swap)
-		: srcHero(srcHero), dstHero(dstHero), swap(swap)
-	{}
+		: srcHero(srcHero), dstHero(dstHero), swap(swap) {}
 
 	bool applyGh(CGameHandler * gh);
 	template <typename Handler> void serialize(Handler & h, const int version)

+ 1 - 1
lib/NetPacksLib.cpp

@@ -1097,7 +1097,6 @@ DLL_LINKAGE void MoveArtifact::applyGs(CGameState * gs)
 
 DLL_LINKAGE void BulkMoveArtifacts::applyGs(CGameState * gs)
 {
-	int numBackpackArtifactsMoved = 0;
 	if(swap)
 	{
 		// Swap
@@ -1144,6 +1143,7 @@ DLL_LINKAGE void BulkMoveArtifacts::applyGs(CGameState * gs)
 	else
 	{
 		// Move
+		int numBackpackArtifactsMoved = 0;
 		for(auto & slot : artsPack0)
 		{
 			// When an object gets removed from the backpack, the backpack shrinks