Browse Source

Fixed crash on the new month when there are no creatures that can get double growth. (#1219, possibly #1217)
The list of double growth creatures will be serialized.
Bumped format.
MSVC: silenced that stupid C4275 warning. (senseless when using STL)

Michał W. Urbańczyk 12 years ago
parent
commit
a9fd7b806c
4 changed files with 11 additions and 3 deletions
  1. 3 0
      VCMI_global.props
  2. 1 1
      lib/CCreatureHandler.h
  3. 1 1
      lib/Connection.h
  4. 6 1
      server/CGameHandler.cpp

+ 3 - 0
VCMI_global.props

@@ -12,6 +12,9 @@
     <Link>
       <SubSystem>Console</SubSystem>
     </Link>
+    <ClCompile>
+      <DisableSpecificWarnings>4275</DisableSpecificWarnings>
+    </ClCompile>
   </ItemDefinitionGroup>
   <ItemGroup />
 </Project>

+ 1 - 1
lib/CCreatureHandler.h

@@ -176,7 +176,7 @@ public:
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		//TODO: should be optimized, not all these informations needs to be serialized (same for ccreature)
-		h & notUsedMonsters & creatures;
+		h & notUsedMonsters & doubledCreatures & creatures;
 		h & stackBonuses & expRanks & maxExpPerBattle & expAfterUpgrade;
 		h & skillLevels & skillRequirements & commanderLevelPremy;
 		h & allCreatures;

+ 1 - 1
lib/Connection.h

@@ -26,7 +26,7 @@
 #include "CObjectHandler.h" //for CArmedInstance
 #include "Mapping/CCampaignHandler.h" //for CCampaignState
 
-const ui32 version = 738;
+const ui32 version = 739;
 
 class CConnection;
 class CGObjectInstance;

+ 6 - 1
server/CGameHandler.cpp

@@ -1209,12 +1209,17 @@ void CGameHandler::newTurn()
 						std::pair<int,CreatureID> newMonster(54, VLC->creh->pickRandomMonster(boost::ref(rand)));
 						n.creatureid = newMonster.second;
 					}
-					else
+					else if(VLC->creh->doubledCreatures.size())
 					{
 						auto it = VLC->creh->doubledCreatures.cbegin();
 						std::advance (it, rand() % VLC->creh->doubledCreatures.size()); //picking random element of set is tiring
 						n.creatureid = *it;
 					}
+					else
+					{
+						complain("Cannot find creature that can be spawned!");
+						n.specialWeek = NewTurn::NORMAL;
+					}
 				}
 				else if (monthType < 50)
 					n.specialWeek = NewTurn::PLAGUE;