aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-03-16 23:39:37 +0100
committerShauren <shauren.trinity@gmail.com>2018-03-25 19:28:36 +0300
commit52fd0f43fa34f0625870b6d32fae3ac3009eeb7a (patch)
treee9db479886898e3099a2463fbe7c154dc11110cd /src
parent8f53ba385474e51b4e2ebf29e33d7661a2848669 (diff)
Core/Players: Include graveyards from terrain swap maps
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index dc8604fa2e8..e7ce10fceef 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -6252,7 +6252,7 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(WorldLocation const& lo
uint32 MapId = location.GetMapId();
// search for zone associated closest graveyard
- uint32 zoneId = sMapMgr->GetZoneId(PhasingHandler::GetEmptyPhaseShift(), MapId, x, y, z);
+ uint32 zoneId = sMapMgr->GetZoneId(conditionObject ? conditionObject->GetPhaseShift() : PhasingHandler::GetEmptyPhaseShift(), MapId, x, y, z);
if (!zoneId)
{
@@ -6302,23 +6302,24 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(WorldLocation const& lo
{
GraveYardData const& data = range.first->second;
- WorldSafeLocsEntry const* entry = sWorldSafeLocsStore.LookupEntry(data.safeLocId);
- if (!entry)
- {
- TC_LOG_ERROR("sql.sql", "Table `graveyard_zone` has record for non-existing graveyard (WorldSafeLocsID: %u), skipped.", data.safeLocId);
- continue;
- }
+ WorldSafeLocsEntry const* entry = sWorldSafeLocsStore.AssertEntry(data.safeLocId);
// skip enemy faction graveyard
// team == 0 case can be at call from .neargrave
if (data.team != 0 && team != 0 && data.team != team)
continue;
- if (conditionObject && !sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_GRAVEYARD, data.safeLocId, conditionSource))
- continue;
+ if (conditionObject)
+ {
+ if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_GRAVEYARD, data.safeLocId, conditionSource))
+ continue;
+
+ if (int16(entry->MapID) == mapEntry->ParentMapID && !conditionObject->GetPhaseShift().HasVisibleMapId(entry->MapID))
+ continue;
+ }
// find now nearest graveyard at other map
- if (MapId != entry->MapID)
+ if (MapId != entry->MapID && int16(entry->MapID) != mapEntry->ParentMapID)
{
// if find graveyard at different map from where entrance placed (or no entrance data), use any first
if (!mapEntry