1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Better fix for allowed heroes in h3m - allow all heroes from mods

This commit is contained in:
Ivan Savenko
2023-11-22 17:09:42 +02:00
parent f643fff5eb
commit e979fb7056
4 changed files with 11 additions and 6 deletions

View File

@@ -166,7 +166,7 @@ CMap::CMap()
, grailRadius(0) , grailRadius(0)
, uidCounter(0) , uidCounter(0)
{ {
allHeroes.resize(allowedHeroes.size()); allHeroes.resize(VLC->heroh->objects.size());
allowedAbilities = VLC->skillh->getDefaultAllowed(); allowedAbilities = VLC->skillh->getDefaultAllowed();
allowedArtifact = VLC->arth->getDefaultAllowed(); allowedArtifact = VLC->arth->getDefaultAllowed();
allowedSpells = VLC->spellh->getDefaultAllowed(); allowedSpells = VLC->spellh->getDefaultAllowed();

View File

@@ -108,8 +108,6 @@ void CMapLoaderH3M::init()
inputStream->seek(0); inputStream->seek(0);
readHeader(); readHeader();
map->allHeroes.resize(map->allowedHeroes.size());
readDisposedHeroes(); readDisposedHeroes();
readMapOptions(); readMapOptions();
readAllowedArtifacts(); readAllowedArtifacts();
@@ -678,6 +676,8 @@ void CMapLoaderH3M::readTeamInfo()
void CMapLoaderH3M::readAllowedHeroes() void CMapLoaderH3M::readAllowedHeroes()
{ {
mapHeader->allowedHeroes = VLC->heroh->getDefaultAllowed();
if(features.levelHOTA0) if(features.levelHOTA0)
reader->readBitmaskHeroesSized(mapHeader->allowedHeroes, false); reader->readBitmaskHeroesSized(mapHeader->allowedHeroes, false);
else else
@@ -747,6 +747,8 @@ void CMapLoaderH3M::readMapOptions()
void CMapLoaderH3M::readAllowedArtifacts() void CMapLoaderH3M::readAllowedArtifacts()
{ {
map->allowedArtifact = VLC->arth->getDefaultAllowed();
if(features.levelAB) if(features.levelAB)
{ {
if(features.levelHOTA0) if(features.levelHOTA0)

View File

@@ -325,8 +325,6 @@ void MapReaderH3M::readBitmaskSkills(std::set<SecondarySkill> & dest, bool inver
template<class Identifier> template<class Identifier>
void MapReaderH3M::readBitmask(std::set<Identifier> & dest, int bytesToRead, int objectsToRead, bool invert) void MapReaderH3M::readBitmask(std::set<Identifier> & dest, int bytesToRead, int objectsToRead, bool invert)
{ {
dest.clear();
for(int byte = 0; byte < bytesToRead; ++byte) for(int byte = 0; byte < bytesToRead; ++byte)
{ {
const ui8 mask = reader->readUInt8(); const ui8 mask = reader->readUInt8();
@@ -343,6 +341,8 @@ void MapReaderH3M::readBitmask(std::set<Identifier> & dest, int bytesToRead, int
if (result) if (result)
dest.insert(vcmiID); dest.insert(vcmiID);
else
dest.erase(vcmiID);
} }
} }
} }

View File

@@ -548,7 +548,10 @@ void CGameHandler::init(StartInfo *si, Load::ProgressAccumulator & progressTrack
turnOrder->addPlayer(elem.first); turnOrder->addPlayer(elem.first);
for (auto & elem : gs->map->allHeroes) for (auto & elem : gs->map->allHeroes)
{
if(elem)
heroPool->getHeroSkillsRandomGenerator(elem->getHeroType()); // init RMG seed heroPool->getHeroSkillsRandomGenerator(elem->getHeroType()); // init RMG seed
}
reinitScripting(); reinitScripting();
} }