From 676a6cf84a13c0fe0138012546318a7ec5e907a1 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Mon, 19 Aug 2024 11:41:31 -0400 Subject: [PATCH] Core/Objects: implement internal heartbeat timer for WorldObjects Port From (https://github.com/TrinityCore/TrinityCore/commit/bf9cd88cebf752ce8614fbac8a7c6d1f0de7fee8) --- Source/Framework/Constants/SharedConst.cs | 1 + Source/Game/Entities/Object/WorldObject.cs | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 47aeabaff..9a0569a0c 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -245,6 +245,7 @@ namespace Framework.Constants public const float DefaultVisibilityInstance = 170.0f; // default visible distance in instances, 170 yards public const float DefaultVisibilityBGAreans = 533.0f; // default visible distance in BG/Arenas, roughly 533 yards public const int DefaultVisibilityNotifyPeriod = 1000; + public static TimeSpan HeartbeatInterval = TimeSpan.FromSeconds(5.2); public const int WorldTrigger = 12999; diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index 3976891d9..1336bdf08 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -41,6 +41,8 @@ namespace Game.Entities m_objectData = new ObjectFieldData(); m_staticFloorZ = MapConst.VMAPInvalidHeightValue; + + _heartbeatTimer = SharedConst.HeartbeatInterval; } public virtual void Dispose() @@ -992,8 +994,17 @@ namespace Game.Entities public virtual void Update(uint diff) { m_Events.Update(diff); + + _heartbeatTimer -= TimeSpan.FromMilliseconds(diff); + while (_heartbeatTimer <= TimeSpan.Zero) + { + _heartbeatTimer += SharedConst.HeartbeatInterval; + Heartbeat(); + } } + public virtual void Heartbeat() { } + public void SetIsStoredInWorldObjectGridContainer(bool on) { if (!IsInWorld) @@ -3859,6 +3870,8 @@ namespace Game.Entities SmoothPhasing _smoothPhasing; + TimeSpan _heartbeatTimer; + public FlaggedArray32 m_stealth = new(2); public FlaggedArray32 m_stealthDetect = new(2);