瀏覽代碼

Fixed battles for network MP.

Michał W. Urbańczyk 15 年之前
父節點
當前提交
e83b9fa8fa
共有 2 個文件被更改,包括 9 次插入4 次删除
  1. 4 1
      client/CBattleInterface.cpp
  2. 5 3
      server/NetPacksServer.cpp

+ 4 - 1
client/CBattleInterface.cpp

@@ -1102,6 +1102,8 @@ CBattleInterface::CBattleInterface(const CCreatureSet * army1, const CCreatureSe
 {
 	ObjectConstruction h__l__p(this);
 
+	if(!curInt) curInt = LOCPLINT; //may happen when we are defending during network MP game
+
 	animsAreDisplayed.setn(false);
 	pos = myRect;
 	strongInterest = true;
@@ -2916,7 +2918,8 @@ void CBattleInterface::activateStack()
 	stackToActivate = -1;
 
 	myTurn = true;
-	curInt = attackerInt->playerID == LOCPLINT->cb->battleGetStackByID(activeStack)->owner ? attackerInt : defenderInt;
+	if(attackerInt && defenderInt) //hotseat -> need to pick which interface "takes over" as active
+		curInt = attackerInt->playerID == LOCPLINT->cb->battleGetStackByID(activeStack)->owner ? attackerInt : defenderInt;
 
 	queue->update();
 	redrawBackgroundWithHexes(activeStack);

+ 5 - 3
server/NetPacksServer.cpp

@@ -6,11 +6,11 @@
 
 
 #define PLAYER_OWNS(id) (gh->getPlayerAt(c)==gh->getOwner(id))
-#define ERROR_AND_RETURN	{if(c) *c << &SystemMessage("You are not allowed to perform this action!");	\
+#define ERROR_AND_RETURN	do {if(c) *c << &SystemMessage("You are not allowed to perform this action!");	\
 							tlog1<<"Player is not allowed to perform this action!\n";	\
-							return false;}
+							return false;} while(0)
 #define ERROR_IF_NOT_OWNS(id)	if(!PLAYER_OWNS(id)) ERROR_AND_RETURN
-#define COMPLAIN_AND_RETURN(txt)	{ gh->complain(txt); ERROR_AND_RETURN }
+#define COMPLAIN_AND_RETURN(txt)	{ gh->complain(txt); ERROR_AND_RETURN; }
 
 /*
  * NetPacksServer.cpp, part of VCMI engine
@@ -43,6 +43,8 @@ bool CloseServer::applyGh( CGameHandler *gh )
 
 bool EndTurn::applyGh( CGameHandler *gh )
 {
+	if(gh->getPlayerAt(c) != GS(gh)->currentPlayer)
+		ERROR_AND_RETURN;
 	gh->states.setFlag(GS(gh)->currentPlayer,&PlayerStatus::makingTurn,false);
 	return true;
 }