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

Merge pull request #513 from dydzio0614/AiFoWCrash

Allow AI to be aware of invisible heroes deletion
This commit is contained in:
Alexander Shishkin
2018-11-03 11:07:38 +03:00
committed by GitHub
2 changed files with 5 additions and 1 deletions

View File

@@ -404,6 +404,8 @@ void VCAI::newObject(const CGObjectInstance * obj)
ah->resetPaths();
}
//to prevent AI from accessing objects that got deleted while they became invisible (Cover of Darkness, enemy hero moved etc.) below code allows AI to know deletion of objects out of sight
//see: RemoveObject::applyFirstCl, to keep AI "not cheating" do not use advantage of this and use this function just to prevent crashes
void VCAI::objectRemoved(const CGObjectInstance * obj)
{
LOG_TRACE(logAi);

View File

@@ -368,7 +368,9 @@ void RemoveObject::applyFirstCl(CClient *cl)
//notify interfaces about removal
for(auto i=cl->playerint.begin(); i!=cl->playerint.end(); i++)
{
if(GS(cl)->isVisible(o, i->first))
//below line contains little cheat for AI so it will be aware of deletion of enemy heroes that moved or got re-covered by FoW
//TODO: loose requirements as next AI related crashes appear, for example another player collects object that got re-covered by FoW, unsure if AI code workarounds this
if(GS(cl)->isVisible(o, i->first) || (!cl->getPlayer(i->first)->human && o->ID == Obj::HERO && o->tempOwner != i->first))
i->second->objectRemoved(o);
}
}