ui64 evaluateDanger(const CGObjectInstance *obj) { if(obj->tempOwner < PlayerColor::PLAYER_LIMIT && cb->getPlayerRelations(obj->tempOwner, ai->playerID) != PlayerRelations::ENEMIES) //owned or allied objects don't pose any threat return 0; switch(obj->ID) { case Obj::HERO: { InfoAboutHero iah; cb->getHeroInfo(obj, iah); return iah.army.getStrength(); } case Obj::TOWN: case Obj::GARRISON: case Obj::GARRISON2: //garrison { InfoAboutTown iat; cb->getTownInfo(obj, iat); return iat.army.getStrength(); } case Obj::MONSTER: { //TODO!!!!!!!! const CGCreature *cre = dynamic_cast<const CGCreature*>(obj); return cre->getArmyStrength(); } case Obj::CREATURE_GENERATOR1: { const CGDwelling *d = dynamic_cast<const CGDwelling*>(obj); return d->getArmyStrength(); } case Obj::MINE: case Obj::ABANDONED_MINE: { const CArmedInstance * a = dynamic_cast<const CArmedInstance*>(obj); return a->getArmyStrength(); } case Obj::CRYPT: //crypt case Obj::CREATURE_BANK: //crebank case Obj::DRAGON_UTOPIA: case Obj::SHIPWRECK: //shipwreck case Obj::DERELICT_SHIP: //derelict ship // case Obj::PYRAMID: return fh->estimateBankDanger (VLC->objh->bankObjToIndex(obj)); case Obj::PYRAMID: { if(obj->subID == 0) return fh->estimateBankDanger (VLC->objh->bankObjToIndex(obj)); else return 0; } default: return 0; } }