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");
|
logGlobal->debug("\tReplace placeholders with heroes");
|
||||||
replaceHeroesPlaceholders(campaignHeroReplacements);
|
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
|
// now add removed heroes again with unused type ID
|
||||||
for(auto hero : removedHeroes)
|
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)
|
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)
|
for(auto &&i : heroToPlace->artifactsInBackpack)
|
||||||
fixArtifact(i.artifact);
|
fixArtifact(i.artifact);
|
||||||
|
|
||||||
|
map->removeBlockVisTiles(heroPlaceholder, true);
|
||||||
|
map->objects[heroPlaceholder->id.getNum()] = nullptr;
|
||||||
|
map->instanceNames.erase(heroPlaceholder->instanceName);
|
||||||
|
|
||||||
map->heroesOnMap.push_back(heroToPlace);
|
map->heroesOnMap.push_back(heroToPlace);
|
||||||
map->objects[heroToPlace->id.getNum()] = heroToPlace;
|
map->objects[heroToPlace->id.getNum()] = heroToPlace;
|
||||||
map->addBlockVisTiles(heroToPlace);
|
map->addBlockVisTiles(heroToPlace);
|
||||||
|
map->instanceNames[heroToPlace->instanceName] = heroToPlace;
|
||||||
|
|
||||||
|
delete heroPlaceholder;
|
||||||
|
|
||||||
scenarioOps->campState->getCurrentScenario().placedCrossoverHeroes.push_back(CCampaignState::crossoverSerialize(heroToPlace));
|
scenarioOps->campState->getCurrentScenario().placedCrossoverHeroes.push_back(CCampaignState::crossoverSerialize(heroToPlace));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user