1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

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)
This commit is contained in:
Michał W. Urbańczyk
2013-02-27 03:11:45 +00:00
parent 9cc7a28222
commit a9fd7b806c
4 changed files with 11 additions and 3 deletions

View File

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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;