aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSubv <s.v.h21@hotmail.com>2012-09-26 12:10:23 -0500
committerSubv <s.v.h21@hotmail.com>2012-09-26 12:10:23 -0500
commit1bb39edd02993f490ae1985ff126a89f1bf235ee (patch)
treecbaf51e4cdeb2cbffa2c910b122252537cdf8cb2
parent0d8a8e94863734dada1bf66e316f6491482ed6b8 (diff)
Core/Maps: Use DBC value to determine the maximum depth that a player can reach in an area before being teleported back up.
-rw-r--r--src/server/game/DataStores/DBCStructure.h2
-rwxr-xr-xsrc/server/game/DataStores/DBCfmt.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp4
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp6
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)))
{