Browse Source

Merge pull request #1183 from IvanSavenko/artifact_fix

Fixed access violation in artifacts code and potentially non-finisheable battles
Andrii Danylchenko 2 years ago
parent
commit
b50b86ca55
2 changed files with 8 additions and 2 deletions
  1. 6 2
      lib/CArtHandler.cpp
  2. 2 0
      server/CGameHandler.cpp

+ 6 - 2
lib/CArtHandler.cpp

@@ -1547,16 +1547,18 @@ DLL_LINKAGE ArtifactPosition ArtifactUtils::getArtifactDstPosition(	const CArtif
 
 
 DLL_LINKAGE const std::vector<ArtifactPosition::EArtifactPosition> & ArtifactUtils::unmovableSlots()
 DLL_LINKAGE const std::vector<ArtifactPosition::EArtifactPosition> & ArtifactUtils::unmovableSlots()
 {
 {
-	return
+	static const std::vector<ArtifactPosition::EArtifactPosition> positions =
 	{
 	{
 		ArtifactPosition::SPELLBOOK,
 		ArtifactPosition::SPELLBOOK,
 		ArtifactPosition::MACH4
 		ArtifactPosition::MACH4
 	};
 	};
+
+	return positions;
 }
 }
 
 
 DLL_LINKAGE const std::vector<ArtifactPosition::EArtifactPosition> & ArtifactUtils::constituentWornSlots()
 DLL_LINKAGE const std::vector<ArtifactPosition::EArtifactPosition> & ArtifactUtils::constituentWornSlots()
 {
 {
-	return
+	static const std::vector<ArtifactPosition::EArtifactPosition> positions =
 	{
 	{
 		ArtifactPosition::HEAD,
 		ArtifactPosition::HEAD,
 		ArtifactPosition::SHOULDERS,
 		ArtifactPosition::SHOULDERS,
@@ -1573,6 +1575,8 @@ DLL_LINKAGE const std::vector<ArtifactPosition::EArtifactPosition> & ArtifactUti
 		ArtifactPosition::MISC4,
 		ArtifactPosition::MISC4,
 		ArtifactPosition::MISC5,
 		ArtifactPosition::MISC5,
 	};
 	};
+
+	return positions;
 }
 }
 
 
 DLL_LINKAGE bool ArtifactUtils::isArtRemovable(const std::pair<ArtifactPosition, ArtSlotInfo> & slot)
 DLL_LINKAGE bool ArtifactUtils::isArtRemovable(const std::pair<ArtifactPosition, ArtSlotInfo> & slot)

+ 2 - 0
server/CGameHandler.cpp

@@ -6642,6 +6642,8 @@ void CGameHandler::runBattle()
 			}
 			}
 		}
 		}
 	}
 	}
+	// it is possible that due to opening spells one side was eliminated -> check for end of battle
+	checkBattleStateChanges();
 
 
 	bool firstRound = true;//FIXME: why first round is -1?
 	bool firstRound = true;//FIXME: why first round is -1?