diff --git a/src/game/CreatureLinkingMgr.cpp b/src/game/CreatureLinkingMgr.cpp index 093321c22..9b68dd463 100644 --- a/src/game/CreatureLinkingMgr.cpp +++ b/src/game/CreatureLinkingMgr.cpp @@ -644,16 +644,29 @@ bool CreatureLinkingHolder::TryFollowMaster(Creature* pCreature) if (!pInfo || !(pInfo->linkingFlag & FLAG_FOLLOW)) return false; - BossGuidMapBounds finds = m_masterGuid.equal_range(pInfo->masterId); - for (BossGuidMap::iterator itr = finds.first; itr != finds.second; ++itr) + Creature* pMaster = NULL; + if (pInfo->mapId != INVALID_MAP_ID) // entry case { - Creature* pMaster = pCreature->GetMap()->GetCreature(itr->second); - if (pMaster && pMaster->isAlive() && IsSlaveInRangeOfBoss(pCreature, pMaster, pInfo->searchRange)) + BossGuidMapBounds finds = m_masterGuid.equal_range(pInfo->masterId); + for (BossGuidMap::iterator itr = finds.first; itr != finds.second; ++itr) { - SetFollowing(pCreature, pMaster); - return true; + pMaster = pCreature->GetMap()->GetCreature(itr->second); + if (pMaster && IsSlaveInRangeOfBoss(pCreature, pMaster, pInfo->searchRange)) + break; } } + else // guid case + { + CreatureData const* masterData = sObjectMgr.GetCreatureData(pInfo->masterDBGuid); + CreatureInfo const* cInfo = ObjectMgr::GetCreatureTemplate(masterData->id); + pMaster = pCreature->GetMap()->GetCreature(ObjectGuid(cInfo->GetHighGuid(), cInfo->Entry, pInfo->masterDBGuid)); + } + + if (pMaster && pMaster->isAlive()) + { + SetFollowing(pCreature, pMaster); + return true; + } return false; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index b18aaad48..b2dbeeae4 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "11994" + #define REVISION_NR "11995" #endif // __REVISION_NR_H__