[12210] Improve ObjectMgr::GetGoBackTrigger to get back to a trigger that actually ports into the map that could not be entered

This commit is contained in:
Schmoozerd 2012-09-09 23:03:14 +02:00 committed by Antz
parent 832f9b1a46
commit 9690f8d80d
3 changed files with 23 additions and 5 deletions

View file

@ -5714,12 +5714,16 @@ AreaTrigger const* ObjectMgr::GetGoBackTrigger(uint32 map_id) const
if (!mapEntry || mapEntry->ghost_entrance_map < 0)
return NULL;
// Try to find one that teleports to the map we want to enter
std::list<AreaTrigger const*> ghostTrigger;
AreaTrigger const* compareTrigger = NULL;
for (AreaTriggerMap::const_iterator itr = mAreaTriggers.begin(); itr != mAreaTriggers.end(); ++itr)
{
if (itr->second.target_mapId == uint32(mapEntry->ghost_entrance_map))
{
if (!compareTrigger || itr->second.IsLessOrEqualThan(compareTrigger))
ghostTrigger.push_back(&itr->second);
// First run, only consider AreaTrigger that teleport in the proper map
if ((!compareTrigger || itr->second.IsLessOrEqualThan(compareTrigger)) && sAreaTriggerStore.LookupEntry(itr->first)->mapid == map_id)
{
if (itr->second.IsMinimal())
return &itr->second;
@ -5728,6 +5732,20 @@ AreaTrigger const* ObjectMgr::GetGoBackTrigger(uint32 map_id) const
}
}
}
if (compareTrigger)
return compareTrigger;
// Second attempt: take one fitting
for (std::list<AreaTrigger const*>::const_iterator itr = ghostTrigger.begin(); itr != ghostTrigger.end(); ++itr)
{
if (!compareTrigger || (*itr)->IsLessOrEqualThan(compareTrigger))
{
if ((*itr)->IsMinimal())
return *itr;
compareTrigger = *itr;
}
}
return compareTrigger;
}

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "12209"
#define REVISION_NR "12210"
#endif // __REVISION_NR_H__