mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/MMaps: use DisableMgr to disable pathfinding on a specific map
This commit is contained in:
4
sql/updates/world/2012_12_30_00_world_commands.sql
Normal file
4
sql/updates/world/2012_12_30_00_world_commands.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
DELETE FROM `command` WHERE `name` LIKE 'disable add mmap' OR `name` LIKE 'disable remove mmap';
|
||||
INSERT INTO `command` (`name`, `security`, `help`) VALUES
|
||||
('disable add mmap', '3', 'Syntax: .disable add mmap $entry $flag $comment'),
|
||||
('disable remove mmap', '3', 'Syntax: .disable remove mmap $entry');
|
||||
@@ -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;
|
||||
|
||||
@@ -42,7 +42,6 @@ namespace MMAP
|
||||
public:
|
||||
static MMapManager* createOrGetMMapManager();
|
||||
static void clear();
|
||||
static void preventPathfindingOnMaps(const char* ignoreMapIds);
|
||||
static bool IsPathfindingEnabled(uint32 mapId);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -276,13 +276,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
|
||||
|
||||
Reference in New Issue
Block a user