aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/collision/Management/MMapFactory.cpp32
-rw-r--r--src/server/collision/Management/MMapFactory.h1
-rw-r--r--src/server/game/Conditions/DisableMgr.cpp31
-rw-r--r--src/server/game/Conditions/DisableMgr.h8
-rw-r--r--src/server/game/World/World.cpp1
-rw-r--r--src/server/scripts/Commands/cs_disable.cpp32
-rw-r--r--src/server/worldserver/worldserver.conf.dist7
7 files changed, 71 insertions, 41 deletions
diff --git a/src/server/collision/Management/MMapFactory.cpp b/src/server/collision/Management/MMapFactory.cpp
index f4b2f3d47e4..0b292b56dca 100644
--- a/src/server/collision/Management/MMapFactory.cpp
+++ b/src/server/collision/Management/MMapFactory.cpp
@@ -19,7 +19,7 @@
#include "MMapFactory.h"
#include "World.h"
#include "Config.h"
-#include <set>
+#include "DisableMgr.h"
namespace MMAP
{
@@ -27,9 +27,6 @@ namespace MMAP
// our global singleton copy
MMapManager *g_MMapManager = NULL;
- // stores list of mapids which do not use pathfinding
- std::set<uint32>* g_mmapDisabledIds = NULL;
-
MMapManager* MMapFactory::createOrGetMMapManager()
{
if (g_MMapManager == NULL)
@@ -38,39 +35,14 @@ namespace MMAP
return g_MMapManager;
}
- void MMapFactory::preventPathfindingOnMaps(const char* ignoreMapIds)
- {
- if (!g_mmapDisabledIds)
- g_mmapDisabledIds = new std::set<uint32>();
-
- uint32 strLenght = strlen(ignoreMapIds)+1;
- char* mapList = new char[strLenght];
- memcpy(mapList, ignoreMapIds, sizeof(char)*strLenght);
-
- char* idstr = strtok(mapList, ",");
- while (idstr)
- {
- g_mmapDisabledIds->insert(uint32(atoi(idstr)));
- idstr = strtok(NULL, ",");
- }
-
- delete[] mapList;
- }
-
bool MMapFactory::IsPathfindingEnabled(uint32 mapId)
{
return sWorld->getBoolConfig(CONFIG_ENABLE_MMAPS)
- && g_mmapDisabledIds->find(mapId) == g_mmapDisabledIds->end();
+ && !DisableMgr::IsDisabledFor(DISABLE_TYPE_MMAP, mapId, NULL, MMAP_DISABLE_PATHFINDING);
}
void MMapFactory::clear()
{
- if (g_mmapDisabledIds)
- {
- delete g_mmapDisabledIds;
- g_mmapDisabledIds = NULL;
- }
-
if (g_MMapManager)
{
delete g_MMapManager;
diff --git a/src/server/collision/Management/MMapFactory.h b/src/server/collision/Management/MMapFactory.h
index ab047333a19..a006aedfa6d 100644
--- a/src/server/collision/Management/MMapFactory.h
+++ b/src/server/collision/Management/MMapFactory.h
@@ -42,7 +42,6 @@ namespace MMAP
public:
static MMapManager* createOrGetMMapManager();
static void clear();
- static void preventPathfindingOnMaps(const char* ignoreMapIds);
static bool IsPathfindingEnabled(uint32 mapId);
};
}
diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp
index b544e966084..c9cef63907e 100644
--- a/src/server/game/Conditions/DisableMgr.cpp
+++ b/src/server/game/Conditions/DisableMgr.cpp
@@ -42,7 +42,7 @@ namespace
DisableMap m_DisableMap;
- uint8 MAX_DISABLE_TYPES = 7;
+ uint8 MAX_DISABLE_TYPES = 8;
}
void LoadDisables()
@@ -222,6 +222,34 @@ void LoadDisables()
}
break;
}
+ case DISABLE_TYPE_MMAP:
+ {
+ MapEntry const* mapEntry = sMapStore.LookupEntry(entry);
+ if (!mapEntry)
+ {
+ sLog->outError(LOG_FILTER_SQL, "Map entry %u from `disables` doesn't exist in dbc, skipped.", entry);
+ continue;
+ }
+ switch (mapEntry->map_type)
+ {
+ case MAP_COMMON:
+ sLog->outInfo(LOG_FILTER_GENERAL, "Pathfinding disabled for world map %u.", entry);
+ break;
+ case MAP_INSTANCE:
+ case MAP_RAID:
+ sLog->outInfo(LOG_FILTER_GENERAL, "Pathfinding disabled for instance map %u.", entry);
+ break;
+ case MAP_BATTLEGROUND:
+ sLog->outInfo(LOG_FILTER_GENERAL, "Pathfinding disabled for battleground map %u.", entry);
+ break;
+ case MAP_ARENA:
+ sLog->outInfo(LOG_FILTER_GENERAL, "Pathfinding disabled for arena map %u.", entry);
+ break;
+ default:
+ break;
+ }
+ break;
+ }
default:
break;
}
@@ -348,6 +376,7 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
case DISABLE_TYPE_BATTLEGROUND:
case DISABLE_TYPE_OUTDOORPVP:
case DISABLE_TYPE_ACHIEVEMENT_CRITERIA:
+ case DISABLE_TYPE_MMAP:
return true;
case DISABLE_TYPE_VMAP:
return flags & itr->second.flags;
diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h
index b1bb43315bd..379f0ac967b 100644
--- a/src/server/game/Conditions/DisableMgr.h
+++ b/src/server/game/Conditions/DisableMgr.h
@@ -31,7 +31,8 @@ enum DisableType
DISABLE_TYPE_BATTLEGROUND = 3,
DISABLE_TYPE_ACHIEVEMENT_CRITERIA = 4,
DISABLE_TYPE_OUTDOORPVP = 5,
- DISABLE_TYPE_VMAP = 6
+ DISABLE_TYPE_VMAP = 6,
+ DISABLE_TYPE_MMAP = 7
};
enum SpellDisableTypes
@@ -54,6 +55,11 @@ enum VmapDisableTypes
VMAP_DISABLE_LIQUIDSTATUS = 0x8
};
+enum MMapDisableTypes
+{
+ MMAP_DISABLE_PATHFINDING = 0x0
+};
+
namespace DisableMgr
{
void LoadDisables();
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 81261138957..d09bea8b9a6 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1134,7 +1134,6 @@ void World::LoadConfigSettings(bool reload)
m_bool_configs[CONFIG_ENABLE_MMAPS] = ConfigMgr::GetBoolDefault("mmap.enablePathFinding", true);
sLog->outInfo(LOG_FILTER_SERVER_LOADING, "WORLD: MMap data directory is: %smmaps", m_dataPath.c_str());
- MMAP::MMapFactory::preventPathfindingOnMaps(ConfigMgr::GetStringDefault("mmap.ignoreMapIds", "").c_str());
m_bool_configs[CONFIG_VMAP_INDOOR_CHECK] = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", 0);
bool enableIndoor = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", true);
diff --git a/src/server/scripts/Commands/cs_disable.cpp b/src/server/scripts/Commands/cs_disable.cpp
index cf0b1f08e53..e17cd35b329 100644
--- a/src/server/scripts/Commands/cs_disable.cpp
+++ b/src/server/scripts/Commands/cs_disable.cpp
@@ -48,6 +48,7 @@ public:
{ "achievement_criteria", SEC_ADMINISTRATOR, true, &HandleRemoveDisableAchievementCriteriaCommand, "", NULL },
{ "outdoorpvp", SEC_ADMINISTRATOR, true, &HandleRemoveDisableOutdoorPvPCommand, "", NULL },
{ "vmap", SEC_ADMINISTRATOR, true, &HandleRemoveDisableVmapCommand, "", NULL },
+ { "mmap", SEC_ADMINISTRATOR, true, &HandleRemoveDisableMMapCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand addDisableCommandTable[] =
@@ -59,6 +60,7 @@ public:
{ "achievement_criteria", SEC_ADMINISTRATOR, true, &HandleAddDisableAchievementCriteriaCommand, "", NULL },
{ "outdoorpvp", SEC_ADMINISTRATOR, true, &HandleAddDisableOutdoorPvPCommand, "", NULL },
{ "vmap", SEC_ADMINISTRATOR, true, &HandleAddDisableVmapCommand, "", NULL },
+ { "mmap", SEC_ADMINISTRATOR, true, &HandleAddDisableMMapCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand disableCommandTable[] =
@@ -172,6 +174,17 @@ public:
disableTypeStr = "vmap";
break;
}
+ case DISABLE_TYPE_MMAP:
+ {
+ if (!sMapStore.LookupEntry(entry))
+ {
+ handler->PSendSysMessage(LANG_COMMAND_NOMAPFOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+ disableTypeStr = "mmap";
+ break;
+ }
default:
break;
}
@@ -256,6 +269,14 @@ public:
return HandleAddDisables(handler, args, DISABLE_TYPE_VMAP);
}
+ static bool HandleAddDisableMMapCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ return HandleAddDisables(handler, args, DISABLE_TYPE_MMAP);
+ }
+
static bool HandleRemoveDisables(ChatHandler* handler, char const* args, uint8 disableType)
{
char* entryStr = strtok((char*)args, " ");
@@ -289,6 +310,9 @@ public:
case DISABLE_TYPE_VMAP:
disableTypeStr = "vmap";
break;
+ case DISABLE_TYPE_MMAP:
+ disableTypeStr = "mmap";
+ break;
}
PreparedStatement* stmt = NULL;
@@ -367,6 +391,14 @@ public:
return HandleRemoveDisables(handler, args, DISABLE_TYPE_VMAP);
}
+
+ static bool HandleRemoveDisableMMapCommand(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ return HandleRemoveDisables(handler, args, DISABLE_TYPE_MMAP);
+ }
};
void AddSC_disable_commandscript()
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 426d4ab2d55..81b4dad8b06 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -277,13 +277,6 @@ PlayerSave.Stats.SaveOnlyOnLogout = 1
mmap.enablePathFinding = 1
#
-# mmap.ignoreMapIds
-# Disable mmap pathfinding on the listed maps.
-# List of map ids with delimiter ','
-
-mmap.ignoreMapIds = ""
-
-#
# vmap.enableLOS
# vmap.enableHeight
# Description: VMmap support for line of sight and height calculation.