1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

Likely fixed duplicated random heroes

This commit is contained in:
Ivan Savenko 2015-12-05 01:40:23 +02:00
parent 8a3feb1e48
commit 89bf3592e3
2 changed files with 16 additions and 12 deletions

View File

@ -1383,7 +1383,8 @@ void CGameState::placeStartingHeroes()
}
int heroTypeId = pickNextHeroType(playerColor);
if(playerSettingPair.second.hero == -1) playerSettingPair.second.hero = heroTypeId;
if(playerSettingPair.second.hero == -1)
playerSettingPair.second.hero = heroTypeId;
placeStartingHero(playerColor, HeroTypeID(heroTypeId), playerInfo.posOfMainTown);
}
@ -2770,7 +2771,7 @@ CGHeroInstance * CGameState::getUsedHero(HeroTypeID hid) const
{
for(auto hero : map->heroesOnMap) //heroes instances initialization
{
if(hero->subID == hid.getNum())
if(hero->type && hero->type->ID == hid)
{
return hero;
}
@ -2778,9 +2779,12 @@ CGHeroInstance * CGameState::getUsedHero(HeroTypeID hid) const
for(auto obj : map->objects) //prisons
{
if(obj && obj->ID == Obj::PRISON && obj->subID == hid.getNum())
if(obj && obj->ID == Obj::PRISON )
{
return dynamic_cast<CGHeroInstance *>(obj.get());
auto hero = dynamic_cast<CGHeroInstance *>(obj.get());
assert(hero);
if ( hero->type && hero->type->ID == hid )
return hero;
}
}

View File

@ -31,7 +31,7 @@ struct PlayerSettings
Ebonus bonus;
si16 castle;
si32 hero,
heroPortrait; //-1 if default, else ID
heroPortrait; //-1 if default, else ID
std::string heroName;
PlayerColor color; //from 0 -
@ -70,13 +70,13 @@ struct StartInfo
{
enum EMode {NEW_GAME, LOAD_GAME, CAMPAIGN, DUEL, INVALID = 255};
EMode mode;
ui8 difficulty; //0=easy; 4=impossible
typedef std::map<PlayerColor, PlayerSettings> TPlayerInfos;
TPlayerInfos playerInfos; //color indexed
ui32 seedToBeUsed; //0 if not sure (client requests server to decide, will be send in reply pack)
EMode mode;
ui8 difficulty; //0=easy; 4=impossible
typedef std::map<PlayerColor, PlayerSettings> TPlayerInfos;
TPlayerInfos playerInfos; //color indexed
ui32 seedToBeUsed; //0 if not sure (client requests server to decide, will be send in reply pack)
ui32 seedPostInit; //so we know that game is correctly synced at the start; 0 if not known yet
ui32 mapfileChecksum; //0 if not relevant
ui8 turnTime; //in minutes, 0=unlimited