aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r--src/server/game/Maps/Map.cpp52
1 files changed, 25 insertions, 27 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 34f1b673d2d..f96ed6105e5 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -48,7 +48,7 @@
#include <vector>
u_map_magic MapMagic = { {'M','A','P','S'} };
-u_map_magic MapVersionMagic = { {'v','1','.','8'} };
+u_map_magic MapVersionMagic = { {'v','1','.','9'} };
u_map_magic MapAreaMagic = { {'A','R','E','A'} };
u_map_magic MapHeightMagic = { {'M','H','G','T'} };
u_map_magic MapLiquidMagic = { {'M','L','I','Q'} };
@@ -1754,7 +1754,8 @@ GridMap::GridMap()
_maxHeight = nullptr;
_minHeight = nullptr;
// Liquid data
- _liquidType = 0;
+ _liquidGlobalEntry = 0;
+ _liquidGlobalFlags = 0;
_liquidOffX = 0;
_liquidOffY = 0;
_liquidWidth = 0;
@@ -1933,7 +1934,8 @@ bool GridMap::loadLiquidData(FILE* in, uint32 offset, uint32 /*size*/)
if (fread(&header, sizeof(header), 1, in) != 1 || header.fourcc != MapLiquidMagic.asUInt)
return false;
- _liquidType = header.liquidType;
+ _liquidGlobalEntry = header.liquidType;
+ _liquidGlobalFlags = header.liquidFlags;
_liquidOffX = header.offsetX;
_liquidOffY = header.offsetY;
_liquidWidth = header.width;
@@ -2311,7 +2313,7 @@ float GridMap::getLiquidLevel(float x, float y) const
inline ZLiquidStatus GridMap::GetLiquidStatus(float x, float y, float z, uint8 ReqLiquidType, LiquidData* data, float collisionHeight)
{
// Check water type (if no water return)
- if (!_liquidType && !_liquidFlags)
+ if (!_liquidGlobalFlags && !_liquidFlags)
return LIQUID_MAP_NO_WATER;
// Get cell
@@ -2323,37 +2325,33 @@ inline ZLiquidStatus GridMap::GetLiquidStatus(float x, float y, float z, uint8 R
// Check water type in cell
int idx=(x_int>>3)*16 + (y_int>>3);
- uint8 type = _liquidFlags ? _liquidFlags[idx] : _liquidType;
- uint32 entry = 0;
- if (_liquidEntry)
+ uint8 type = _liquidFlags ? _liquidFlags[idx] : _liquidGlobalFlags;
+ uint32 entry = _liquidEntry ? _liquidEntry[idx] : _liquidGlobalEntry;
+ if (LiquidTypeEntry const* liquidEntry = sLiquidTypeStore.LookupEntry(entry))
{
- if (LiquidTypeEntry const* liquidEntry = sLiquidTypeStore.LookupEntry(_liquidEntry[idx]))
+ type &= MAP_LIQUID_TYPE_DARK_WATER;
+ uint32 liqTypeIdx = liquidEntry->Type;
+ if (entry < 21)
{
- entry = liquidEntry->Id;
- type &= MAP_LIQUID_TYPE_DARK_WATER;
- uint32 liqTypeIdx = liquidEntry->Type;
- if (entry < 21)
+ if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(getArea(x, y)))
{
- if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(getArea(x, y)))
+ uint32 overrideLiquid = area->LiquidTypeOverride[liquidEntry->Type];
+ if (!overrideLiquid && area->zone)
{
- uint32 overrideLiquid = area->LiquidTypeOverride[liquidEntry->Type];
- if (!overrideLiquid && area->zone)
- {
- area = sAreaTableStore.LookupEntry(area->zone);
- if (area)
- overrideLiquid = area->LiquidTypeOverride[liquidEntry->Type];
- }
+ area = sAreaTableStore.LookupEntry(area->zone);
+ if (area)
+ overrideLiquid = area->LiquidTypeOverride[liquidEntry->Type];
+ }
- if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(overrideLiquid))
- {
- entry = overrideLiquid;
- liqTypeIdx = liq->Type;
- }
+ if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(overrideLiquid))
+ {
+ entry = overrideLiquid;
+ liqTypeIdx = liq->Type;
}
}
-
- type |= 1 << liqTypeIdx;
}
+
+ type |= 1 << liqTypeIdx;
}
if (type == 0)