Browse Source

CPlayerInterface: don't stop hero movement on embark / disembark

When hero have free boarding bonus there no reason to stop movement.
Arseniy Shestakov 8 years ago
parent
commit
ae13123129
3 changed files with 8 additions and 1 deletions
  1. 1 1
      client/CPlayerInterface.cpp
  2. 5 0
      client/NetPacksClient.cpp
  3. 2 0
      lib/NetPacks.h

+ 1 - 1
client/CPlayerInterface.cpp

@@ -308,7 +308,7 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details)
 		}
 	}
 
-	if (details.result != TryMoveHero::SUCCESS) //hero failed to move
+	if(details.stopMovement()) //hero failed to move
 	{
 		hero->isStanding = true;
 		stillMoveHero.setn(STOP_MOVE);

+ 5 - 0
client/NetPacksClient.cpp

@@ -420,6 +420,11 @@ void TryMoveHero::applyCl(CClient *cl)
 		CGI->mh->printObject(h);
 }
 
+bool TryMoveHero::stopMovement() const
+{
+	return result != SUCCESS && result != EMBARK && result != DISEMBARK && result != TELEPORTATION;
+}
+
 void NewStructures::applyCl(CClient *cl)
 {
 	CGTownInstance *town = GS(cl)->getTown(tid);

+ 2 - 0
lib/NetPacks.h

@@ -634,6 +634,8 @@ struct TryMoveHero : public CPackForClient
 
 	bool humanKnows; //used locally during applying to client
 
+	bool stopMovement() const;
+
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		h & id;