aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2012-03-07 18:57:47 +0100
committerShauren <shauren.trinity@gmail.com>2012-03-07 18:57:47 +0100
commita1a7a2d7c06e9a8d1cbf3a8901d8d134dcd1ee6a (patch)
tree13faefd56d6d21732b93a4c0c9595c59026d92f4 /src
parent2e58d7b515a74944f4c4caca9fa29186e8f56586 (diff)
Core/Players
* Add liquid special aura only if player is in it (not when above) * Use CastSpell instead of AddAura - checks all dbc conditions on spell
Diffstat (limited to 'src')
-rw-r--r--src/server/collision/Management/VMapManager2.cpp3
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.cpp8
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.h2
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp7
4 files changed, 18 insertions, 2 deletions
diff --git a/src/server/collision/Management/VMapManager2.cpp b/src/server/collision/Management/VMapManager2.cpp
index 6139a27fb52..b9f0f25c2f9 100644
--- a/src/server/collision/Management/VMapManager2.cpp
+++ b/src/server/collision/Management/VMapManager2.cpp
@@ -30,6 +30,7 @@
#include <ace/Null_Mutex.h>
#include <ace/Singleton.h>
#include "DisableMgr.h"
+#include "DBCStores.h"
using G3D::Vector3;
@@ -234,7 +235,7 @@ namespace VMAP
floor = info.ground_Z;
ASSERT(floor < std::numeric_limits<float>::max());
type = info.hitModel->GetLiquidType(); // entry from LiquidType.dbc
- if (reqLiquidType && !(type & reqLiquidType))
+ if (reqLiquidType && !(GetLiquidFlags(type) & reqLiquidType))
return false;
if (info.hitInstance->GetLiquidLevel(pos, info, level))
return true;
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index 4fa8e09cead..acc130dcddf 100755
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -864,6 +864,14 @@ uint32 const* GetTalentTabPages(uint8 cls)
return sTalentTabPages[cls];
}
+uint32 GetLiquidFlags(uint32 liquidType)
+{
+ if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(liquidType))
+ return 1 << liq->Type;
+
+ return 0;
+}
+
// script support functions
DBCStorage <SoundEntriesEntry> const* GetSoundEntriesStore() { return &sSoundEntriesStore; }
DBCStorage <SpellRangeEntry> const* GetSpellRangeStore() { return &sSpellRangeStore; }
diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h
index 0bbf06c5311..3f8d19c1f5e 100755
--- a/src/server/game/DataStores/DBCStores.h
+++ b/src/server/game/DataStores/DBCStores.h
@@ -60,6 +60,8 @@ MapDifficulty const* GetDownscaledMapDifficultyData(uint32 mapId, Difficulty &di
uint32 const* /*[MAX_TALENT_TABS]*/ GetTalentTabPages(uint8 cls);
+uint32 GetLiquidFlags(uint32 liquidType);
+
PvPDifficultyEntry const* GetBattlegroundBracketByLevel(uint32 mapid, uint32 level);
PvPDifficultyEntry const* GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id);
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 729a2fe0b00..54178cd6720 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -23075,7 +23075,12 @@ void Player::UpdateUnderwaterState(Map* m, float x, float y, float z)
RemoveAurasDueToSpell(_lastLiquid->SpellId);
if (liquid && liquid->SpellId)
- AddAura(liquid->SpellId, this);
+ {
+ if (res & (LIQUID_MAP_UNDER_WATER | LIQUID_MAP_IN_WATER | LIQUID_MAP_WATER_WALK))
+ CastSpell(this, liquid->SpellId, this);
+ else
+ RemoveAurasDueToSpell(liquid->SpellId);
+ }
_lastLiquid = liquid;
}