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

Allow AI to be aware of invisible heroes deletion

This commit is contained in:
Dydzio
2018-11-02 16:35:25 +01:00
parent 845f0fbf5c
commit 9f3d718e3b
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);
}
}