diff options
-rw-r--r-- | src/server/game/DataStores/DBCStructure.h | 2 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCfmt.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 6 |
4 files changed, 8 insertions, 6 deletions
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index d210347cc2a..704f252c625 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -547,7 +547,7 @@ struct AreaTableEntry char* area_name; // 11 uint32 team; // 12 uint32 LiquidTypeOverride[4]; // 13-16 liquid override by type - //float unk13; // 17, + float MaxDepth; // 17, //float unk13; // 18, //uint32 unk19; // 19, All zeros (4.2.2) //uint32 unk20; // 20 4.0.0 diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index 41c4bc58a1d..bffe9263549 100755 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -26,7 +26,7 @@ const char Achievementfmt[]="niixsxiixixxii"; //const std::string CustomAchievementfmt="pppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapaaaaaaaaaaaaaaaaaapp"; //const std::string CustomAchievementIndex = "ID"; const char AchievementCriteriafmt[]="niiiiiiiisiiiiixxiiiiii"; -const char AreaTableEntryfmt[]="iiinixxxxxisiiiiixxxxxxxxx"; +const char AreaTableEntryfmt[]="iiinixxxxxisiiiiifxxxxxxxx"; const char AreaGroupEntryfmt[]="niiiiiii"; const char AreaPOIEntryfmt[]="niiiiiiiiiiiffixixxixx"; const char AreaTriggerEntryfmt[]="nifffxxxfffff"; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4c9df5f0ed4..f577a51e468 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5524,7 +5524,7 @@ void Player::RepopAtGraveyard() AreaTableEntry const* zone = GetAreaEntryByAreaID(GetAreaId()); // Such zones are considered unreachable as a ghost and the player must be automatically revived - if ((!isAlive() && zone && zone->flags & AREA_FLAG_NEED_FLY) || GetTransport() || GetPositionZ() < -500.0f) + if ((!isAlive() && zone && zone->flags & AREA_FLAG_NEED_FLY) || GetTransport() || GetPositionZ() < zone->MaxDepth) { ResurrectPlayer(0.5f); SpawnCorpseBones(); @@ -5566,7 +5566,7 @@ void Player::RepopAtGraveyard() GetSession()->SendPacket(&data); } } - else if (GetPositionZ() < -500.0f) + else if (GetPositionZ() < zone->MaxDepth) TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, GetOrientation()); } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 0cc9263bfbd..43da34fa451 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -397,8 +397,10 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvPacket) if (plrMover) // nothing is charmed, or player charmed { plrMover->UpdateFallInformationIfNeed(movementInfo, opcode); - - if (movementInfo.pos.GetPositionZ() < -500.0f) + + AreaTableEntry const* zone = GetAreaEntryByAreaID(plrMover->GetAreaId()); + float depth = zone ? zone->MaxDepth : -500.0f; + if (movementInfo.pos.GetPositionZ() < depth) { if (!(plrMover->GetBattleground() && plrMover->GetBattleground()->HandlePlayerUnderMap(_player))) { |