diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 8469887fd..2703390b7 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2217,7 +2217,11 @@ bool Creature::LoadCreaturesAddon(bool reload) //Load Path if (cainfo->path_id != 0) + { + if (sWorld->getBoolConfig(CONFIG_SET_ALL_CREATURES_WITH_WAYPOINT_MOVEMENT_ACTIVE)) + setActive(true); m_path_id = cainfo->path_id; + } if (!cainfo->auras.empty()) { diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 2e83ce973..10d26adc8 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1520,9 +1520,7 @@ float WorldObject::GetGridActivationRange() const float WorldObject::GetVisibilityRange() const { - if (isActiveObject() && !ToPlayer()) - return MAX_VISIBILITY_DISTANCE; - else if (IsVisibilityOverridden() && GetTypeId() == TYPEID_UNIT) + if (IsVisibilityOverridden() && GetTypeId() == TYPEID_UNIT) return MAX_VISIBILITY_DISTANCE; else if (GetTypeId() == TYPEID_GAMEOBJECT) { @@ -1545,9 +1543,7 @@ float WorldObject::GetSightRange(const WorldObject* target) const { if (target) { - if (target->isActiveObject() && !target->ToPlayer()) - return MAX_VISIBILITY_DISTANCE; - else if (target->IsVisibilityOverridden() && target->GetTypeId() == TYPEID_UNIT) + if (target->IsVisibilityOverridden() && target->GetTypeId() == TYPEID_UNIT) return MAX_VISIBILITY_DISTANCE; else if (target->GetTypeId() == TYPEID_GAMEOBJECT) { diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 175e5cd02..899e51108 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -977,7 +977,7 @@ class WorldObject : public Object, public WorldLocation bool isActiveObject() const { return m_isActive; } void setActive(bool isActiveObject); - bool IsVisibilityOverridden() const { return m_isVisibilityDistanceOverride || m_isActive; } + bool IsVisibilityOverridden() const { return m_isVisibilityDistanceOverride; } void SetVisibilityDistanceOverride(bool isVisibilityDistanceOverride); void SetWorldObject(bool apply); bool IsPermanentWorldObject() const { return m_isWorldObject; } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 7b0f464fa..e7467cfa8 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1349,6 +1349,8 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_ICC_BUFF_HORDE] = sConfigMgr->GetIntDefault("ICC.Buff.Horde", 73822); m_int_configs[CONFIG_ICC_BUFF_ALLIANCE] = sConfigMgr->GetIntDefault("ICC.Buff.Alliance", 73828); + m_bool_configs[CONFIG_SET_ALL_CREATURES_WITH_WAYPOINT_MOVEMENT_ACTIVE] = sConfigMgr->GetBoolDefault("SetAllCreaturesWithWaypointMovementActive", false); + // call ScriptMgr if we're reloading the configuration sScriptMgr->OnAfterConfigLoad(reload); } diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index db55b8e77..3b4178fbd 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -172,6 +172,7 @@ enum WorldBoolConfigs CONFIG_ALLOW_TWO_SIDE_INTERACTION_EMOTE, CONFIG_ITEMDELETE_METHOD, CONFIG_ITEMDELETE_VENDOR, + CONFIG_SET_ALL_CREATURES_WITH_WAYPOINT_MOVEMENT_ACTIVE, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 53a191884..58b5bfcfc 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -422,6 +422,18 @@ PersistentCharacterCleanFlags = 0 PreloadAllNonInstancedMapGrids = 0 +# +# SetAllCreaturesWithWaypointMovementActive +# Description: Set all creatures with waypoint movement active. This means that they will start +# movement once they are loaded (which happens on grid load) and keep moving even +# when no player is near. This will increase CPU usage significantly and can be +# used with enabled "PreloadAllNonInstancedMapGrids" to start waypoint movement on +# server startup. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +SetAllCreaturesWithWaypointMovementActive = 0 + # ###################################################################################################