瀏覽代碼

Possibly fixed #1583 and other issues concerning players capturing towns.

DjWarmonger 10 年之前
父節點
當前提交
61692ba168
共有 1 個文件被更改,包括 17 次插入9 次删除
  1. 17 9
      server/CGameHandler.cpp

+ 17 - 9
server/CGameHandler.cpp

@@ -1937,18 +1937,26 @@ void CGameHandler::setOwner(const CGObjectInstance * obj, PlayerColor owner)
 	std::set<PlayerColor> playerColors = {owner, oldOwner};
 	checkVictoryLossConditions(playerColors);
 
-	if(owner < PlayerColor::PLAYER_LIMIT && dynamic_cast<const CGTownInstance *>(obj)) //town captured
+	if(dynamic_cast<const CGTownInstance *>(obj)) //town captured
 	{
-		const CGTownInstance * town = dynamic_cast<const CGTownInstance *>(obj);
-		if (town->hasBuilt(BuildingID::PORTAL_OF_SUMMON, ETownType::DUNGEON))
-			setPortalDwelling(town, true, false);
+		if (owner < PlayerColor::PLAYER_LIMIT) //new owner is real player
+		{
+			const CGTownInstance * town = dynamic_cast<const CGTownInstance *>(obj);
+			if (town->hasBuilt(BuildingID::PORTAL_OF_SUMMON, ETownType::DUNGEON))
+				setPortalDwelling(town, true, false);
+
+			gs->getPlayer(owner)->daysWithoutCastle = boost::none; // reset counter
+		}
 
-		if (!gs->getPlayer(owner)->towns.size())//player lost last town
+		if (oldOwner < PlayerColor::PLAYER_LIMIT) //old owner is real player
 		{
-			InfoWindow iw;
-			iw.player = oldOwner;
-			iw.text.addTxt(MetaString::GENERAL_TXT, 6); //%s, you have lost your last town.  If you do not conquer another town in the next week, you will be eliminated.
-			sendAndApply(&iw);
+			if (gs->getPlayer(oldOwner)->towns.empty())//previous player lost last last town
+			{
+				InfoWindow iw;
+				iw.player = oldOwner;
+				iw.text.addTxt (MetaString::GENERAL_TXT, 6); //%s, you have lost your last town.  If you do not conquer another town in the next week, you will be eliminated.
+				sendAndApply(&iw);
+			}
 		}
 	}