aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent-Michael <vincent_michael@gmx.de>2016-08-23 16:57:07 +0200
committerVincent-Michael <vincent_michael@gmx.de>2016-08-23 16:58:48 +0200
commit3c6c78da1ce1753bbd9f8ae32d6ddc4c87edb778 (patch)
treefedda909fed8c51267ebd6ae775c9a1f6515de1e /src
parent4a13ec2fcb82f3618f47843901efb8b75162b5ec (diff)
Core/Objects: Added check (error log) for possible invalid position for creatures / game objects
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp33
-rw-r--r--src/server/game/World/World.cpp4
-rw-r--r--src/server/game/World/World.h2
-rw-r--r--src/server/worldserver/worldserver.conf.dist14
4 files changed, 53 insertions, 0 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index a3a292c27e0..53e9b116317 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -46,6 +46,7 @@
#include "Util.h"
#include "Vehicle.h"
#include "World.h"
+#include "VMapFactory.h"
ScriptMapMap sSpellScripts;
ScriptMapMap sEventScripts;
@@ -1834,6 +1835,22 @@ void ObjectMgr::LoadCreatures()
continue;
}
+ if (sWorld->getBoolConfig(CONFIG_CREATURE_CHECK_INVALID_POSITION))
+ if (VMAP::IVMapManager* vmgr = VMAP::VMapFactory::createOrGetVMapManager())
+ {
+ if (vmgr->isMapLoadingEnabled() && !IsTransportMap(data.mapid))
+ {
+ GridCoord gridCoord = Trinity::ComputeGridCoord(data.posX, data.posY);
+ int gx = (MAX_NUMBER_OF_GRIDS - 1) - gridCoord.x_coord;
+ int gy = (MAX_NUMBER_OF_GRIDS - 1) - gridCoord.y_coord;
+
+ bool exists = vmgr->existsMap((sWorld->GetDataPath() + "vmaps").c_str(), data.mapid, gx, gy);
+ if (!exists)
+ TC_LOG_ERROR("sql.sql", "Table `creature` has creature (GUID: " UI64FMTD " Entry: %u MapID: %u) spawned on a possible invalid position (X: %f Y: %f Z: %f)",
+ guid, data.id, data.mapid, data.posX, data.posY, data.posZ);
+ }
+ }
+
// Skip spawnMask check for transport maps
if (!IsTransportMap(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid])
TC_LOG_ERROR("sql.sql", "Table `creature` has creature (GUID: " UI64FMTD ") that have wrong spawn mask %u including unsupported difficulty modes for map (Id: %u).", guid, data.spawnMask, data.mapid);
@@ -2154,6 +2171,22 @@ void ObjectMgr::LoadGameobjects()
continue;
}
+ if (sWorld->getBoolConfig(CONFIG_GAME_OBJECT_CHECK_INVALID_POSITION))
+ if (VMAP::IVMapManager* vmgr = VMAP::VMapFactory::createOrGetVMapManager())
+ {
+ if (vmgr->isMapLoadingEnabled() && !IsTransportMap(data.mapid))
+ {
+ GridCoord gridCoord = Trinity::ComputeGridCoord(data.posX, data.posY);
+ int gx = (MAX_NUMBER_OF_GRIDS - 1) - gridCoord.x_coord;
+ int gy = (MAX_NUMBER_OF_GRIDS - 1) - gridCoord.y_coord;
+
+ bool exists = vmgr->existsMap((sWorld->GetDataPath() + "vmaps").c_str(), data.mapid, gx, gy);
+ if (!exists)
+ TC_LOG_ERROR("sql.sql", "Table `gameobject` has gameobject (GUID: " UI64FMTD " Entry: %u MapID: %u) spawned on a possible invalid position (X: %f Y: %f Z: %f)",
+ guid, data.id, data.mapid, data.posX, data.posY, data.posZ);
+ }
+ }
+
if (data.spawntimesecs == 0 && gInfo->IsDespawnAtAction())
{
TC_LOG_ERROR("sql.sql", "Table `gameobject` has gameobject (GUID: " UI64FMTD " Entry: %u) with `spawntimesecs` (0) value, but the gameobejct is marked as despawnable at action.", guid, data.id);
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 68498d117bd..6da49d10c9f 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1484,6 +1484,10 @@ void World::LoadConfigSettings(bool reload)
m_bool_configs[CONFIG_HOTSWAP_INSTALL_ENABLED] = sConfigMgr->GetBoolDefault("HotSwap.EnableInstall", true);
m_bool_configs[CONFIG_HOTSWAP_PREFIX_CORRECTION_ENABLED] = sConfigMgr->GetBoolDefault("HotSwap.EnablePrefixCorrection", true);
+ // Check Invalid Position
+ m_bool_configs[CONFIG_CREATURE_CHECK_INVALID_POSITION] = sConfigMgr->GetBoolDefault("Creature.CheckInvalidPosition", false);
+ m_bool_configs[CONFIG_GAME_OBJECT_CHECK_INVALID_POSITION] = sConfigMgr->GetBoolDefault("GameObject.CheckInvalidPosition", false);
+
// call ScriptMgr if we're reloading the configuration
if (reload)
sScriptMgr->OnConfigLoad(reload);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 8cc75a6e669..37687f0eef0 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -189,6 +189,8 @@ enum WorldBoolConfigs
CONFIG_HOTSWAP_BUILD_FILE_RECREATION_ENABLED,
CONFIG_HOTSWAP_INSTALL_ENABLED,
CONFIG_HOTSWAP_PREFIX_CORRECTION_ENABLED,
+ CONFIG_CREATURE_CHECK_INVALID_POSITION,
+ CONFIG_GAME_OBJECT_CHECK_INVALID_POSITION,
BOOL_CONFIG_VALUE_COUNT
};
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index af8aeae4c91..69a88755d42 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -3138,6 +3138,20 @@ NoGrayAggro.Above = 0
NoGrayAggro.Below = 0
#
+# Creature.CheckInvalidPosition
+# Description: Check possible invalid position for creatures at startup (WARNING: SLOW WORLD SERVER STARTUP)
+# Default: 0 - (Do not show)
+
+Creature.CheckInvalidPosition = 0
+
+#
+# GameObject.CheckInvalidPosition
+# Description: Check possible invalid position for game objects at startup (WARNING: SLOW WORLD SERVER STARTUP)
+# Default: 0 - (Do not show)
+
+GameObject.CheckInvalidPosition = 0
+
+#
###################################################################################################
###################################################################################################