diff --git a/hch/CObjectHandler.cpp b/hch/CObjectHandler.cpp index 13c1d512b..f7579e4b9 100644 --- a/hch/CObjectHandler.cpp +++ b/hch/CObjectHandler.cpp @@ -3497,6 +3497,27 @@ void CGScholar::initObj() } } +void CGGarrison::onHeroVisit (const CGHeroInstance *h) const +{ + if (h->tempOwner != tempOwner && army) { + //TODO: Find a way to apply magic garrison effects in battle. + cb->startBattleI(h, this, false, boost::bind(&CGGarrison::fightOver, this, h, _1)); + return; + } + + //New owner. + if (h->tempOwner != tempOwner) + cb->setOwner(id, h->tempOwner); + + //TODO: Garrison visit screen. +} + +void CGGarrison::fightOver (const CGHeroInstance *h, BattleResult *result) const +{ + if (result->winner == 0) + onHeroVisit(h); +} + void CGOnceVisitable::onHeroVisit( const CGHeroInstance * h ) const { int sound = 0; diff --git a/hch/CObjectHandler.h b/hch/CObjectHandler.h index a67e456cb..b992ff02e 100644 --- a/hch/CObjectHandler.h +++ b/hch/CObjectHandler.h @@ -602,6 +602,9 @@ class DLL_EXPORT CGGarrison : public CArmedInstance public: ui8 removableUnits; + void onHeroVisit (const CGHeroInstance *h) const; + void fightOver (const CGHeroInstance *h, BattleResult *result) const; + template void serialize(Handler &h, const int version) { h & static_cast(*this);