mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-21 21:17:49 +02:00
Fix crash on replaced hero placeholder mouseover
This commit is contained in:
parent
8c52cbcd00
commit
37baec1d24
@ -1090,19 +1090,6 @@ void CGameState::placeCampaignHeroes()
|
||||
logGlobal->debug("\tReplace placeholders with heroes");
|
||||
replaceHeroesPlaceholders(campaignHeroReplacements);
|
||||
|
||||
// remove hero placeholders on map
|
||||
for(auto obj : map->objects)
|
||||
{
|
||||
if(obj && obj->ID == Obj::HERO_PLACEHOLDER)
|
||||
{
|
||||
auto heroPlaceholder = dynamic_cast<CGHeroPlaceholder *>(obj.get());
|
||||
map->removeBlockVisTiles(heroPlaceholder, true);
|
||||
map->instanceNames.erase(obj->instanceName);
|
||||
map->objects[heroPlaceholder->id.getNum()] = nullptr;
|
||||
delete heroPlaceholder;
|
||||
}
|
||||
}
|
||||
|
||||
// now add removed heroes again with unused type ID
|
||||
for(auto hero : removedHeroes)
|
||||
{
|
||||
@ -1135,6 +1122,19 @@ void CGameState::placeCampaignHeroes()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// remove hero placeholders on map
|
||||
for(auto obj : map->objects)
|
||||
{
|
||||
if(obj && obj->ID == Obj::HERO_PLACEHOLDER)
|
||||
{
|
||||
auto heroPlaceholder = dynamic_cast<CGHeroPlaceholder *>(obj.get());
|
||||
map->removeBlockVisTiles(heroPlaceholder, true);
|
||||
map->instanceNames.erase(obj->instanceName);
|
||||
map->objects[heroPlaceholder->id.getNum()] = nullptr;
|
||||
delete heroPlaceholder;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CGameState::placeStartingHero(PlayerColor playerColor, HeroTypeID heroTypeId, int3 townPos)
|
||||
@ -2905,9 +2905,16 @@ void CGameState::replaceHeroesPlaceholders(const std::vector<CGameState::Campaig
|
||||
for(auto &&i : heroToPlace->artifactsInBackpack)
|
||||
fixArtifact(i.artifact);
|
||||
|
||||
map->removeBlockVisTiles(heroPlaceholder, true);
|
||||
map->objects[heroPlaceholder->id.getNum()] = nullptr;
|
||||
map->instanceNames.erase(heroPlaceholder->instanceName);
|
||||
|
||||
map->heroesOnMap.push_back(heroToPlace);
|
||||
map->objects[heroToPlace->id.getNum()] = heroToPlace;
|
||||
map->addBlockVisTiles(heroToPlace);
|
||||
map->instanceNames[heroToPlace->instanceName] = heroToPlace;
|
||||
|
||||
delete heroPlaceholder;
|
||||
|
||||
scenarioOps->campState->getCurrentScenario().placedCrossoverHeroes.push_back(CCampaignState::crossoverSerialize(heroToPlace));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user