diff options
-rw-r--r-- | sql/updates/world/master/2021_11_24_30_world_2019_03_09_01_world.sql | 2 | ||||
-rw-r--r-- | src/server/game/Conditions/DisableMgr.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Conditions/DisableMgr.h | 5 |
3 files changed, 20 insertions, 2 deletions
diff --git a/sql/updates/world/master/2021_11_24_30_world_2019_03_09_01_world.sql b/sql/updates/world/master/2021_11_24_30_world_2019_03_09_01_world.sql new file mode 100644 index 00000000000..9763c266edb --- /dev/null +++ b/sql/updates/world/master/2021_11_24_30_world_2019_03_09_01_world.sql @@ -0,0 +1,2 @@ +-- +ALTER TABLE `disables` CHANGE `flags` `flags` SMALLINT(5) NOT NULL; diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp index c0d4e9b8225..1fd71491fcb 100644 --- a/src/server/game/Conditions/DisableMgr.cpp +++ b/src/server/game/Conditions/DisableMgr.cpp @@ -20,6 +20,7 @@ #include "DatabaseEnv.h" #include "DB2Stores.h" #include "Log.h" +#include "Map.h" #include "ObjectMgr.h" #include "OutdoorPvP.h" #include "Player.h" @@ -84,7 +85,7 @@ void LoadDisables() } uint32 entry = fields[1].GetUInt32(); - uint8 flags = fields[2].GetUInt8(); + uint16 flags = fields[2].GetUInt16(); std::string params_0 = fields[3].GetString(); std::string params_1 = fields[4].GetString(); @@ -293,6 +294,18 @@ bool IsDisabledFor(DisableType type, uint32 entry, WorldObject const* ref, uint8 (ref->GetTypeId() == TYPEID_UNIT && ((spellFlags & SPELL_DISABLE_CREATURE) || (ref->ToUnit()->IsPet() && (spellFlags & SPELL_DISABLE_PET)))) || (ref->GetTypeId() == TYPEID_GAMEOBJECT && (spellFlags & SPELL_DISABLE_GAMEOBJECT))) { + if (spellFlags & (SPELL_DISABLE_ARENAS | SPELL_DISABLE_BATTLEGROUNDS)) + { + if (Map const* map = ref->GetMap()) + { + if (spellFlags & SPELL_DISABLE_ARENAS && map->IsBattleArena()) + return true; // Current map is Arena and this spell is disabled here + + if (spellFlags & SPELL_DISABLE_BATTLEGROUNDS && map->IsBattleground()) + return true; // Current map is a Battleground and this spell is disabled here + } + } + if (spellFlags & SPELL_DISABLE_MAP) { std::unordered_set<uint32> const& mapIds = itr->second.params[0]; diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h index 75681945e33..158579f988e 100644 --- a/src/server/game/Conditions/DisableMgr.h +++ b/src/server/game/Conditions/DisableMgr.h @@ -47,9 +47,12 @@ enum SpellDisableTypes SPELL_DISABLE_AREA = 0x20, SPELL_DISABLE_LOS = 0x40, SPELL_DISABLE_GAMEOBJECT = 0x80, + SPELL_DISABLE_ARENAS = 0x100, + SPELL_DISABLE_BATTLEGROUNDS = 0x200, MAX_SPELL_DISABLE_TYPE = ( SPELL_DISABLE_PLAYER | SPELL_DISABLE_CREATURE | SPELL_DISABLE_PET | SPELL_DISABLE_DEPRECATED_SPELL | SPELL_DISABLE_MAP | SPELL_DISABLE_AREA | - SPELL_DISABLE_LOS | SPELL_DISABLE_GAMEOBJECT ) + SPELL_DISABLE_LOS | SPELL_DISABLE_GAMEOBJECT | SPELL_DISABLE_ARENAS | + SPELL_DISABLE_BATTLEGROUNDS), }; enum MMapDisableTypes |