aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOvah <dreadkiller@gmx.de>2019-05-27 21:37:47 +0200
committerKeader <keader.android@gmail.com>2019-05-27 16:37:47 -0300
commit635cefc67e25c4318d67bf557b66958081c02ac4 (patch)
treee5891ae451c7471e3172144e47fd7e0dd5cdf66f /src
parentbfffa5d45e9d07636930e89916986edf7c086c1e (diff)
Core/Players: out of range group updates will now get sent every 5 seconds instead of as soon as they are available to reflect retail behaivior. (#23323)
* according to sniffs the group update packet for out of range members has a fixed 5 seconds interval instead of spaming packets like crazy for example when updating positions. On 4.x and above this will fix a very nasty and ugly fps drop * validated with 4.3.4 and 3.3.5 sniffs
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp9
-rw-r--r--src/server/game/Entities/Player/Player.h2
2 files changed, 10 insertions, 1 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 4adba3de85e..68c474be9cb 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -401,6 +401,8 @@ Player::Player(WorldSession* session): Unit(true)
m_achievementMgr = new AchievementMgr(this);
m_reputationMgr = new ReputationMgr(this);
+
+ m_groupUpdateTimer.Reset(5000);
}
Player::~Player()
@@ -1329,7 +1331,12 @@ void Player::Update(uint32 p_time)
}
// group update
- SendUpdateToOutOfRangeGroupMembers();
+ m_groupUpdateTimer.Update(p_time);
+ if (m_groupUpdateTimer.Passed())
+ {
+ SendUpdateToOutOfRangeGroupMembers();
+ m_groupUpdateTimer.Reset(5000);
+ }
Pet* pet = GetPet();
if (pet && !pet->IsWithinDistInMap(this, GetMap()->GetVisibilityRange()) && !pet->isPossessed())
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 798c1684978..cff92cd66a7 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2399,6 +2399,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
bool m_needsZoneUpdate;
+ TimeTrackerSmall m_groupUpdateTimer;
+
private:
// internal common parts for CanStore/StoreItem functions
InventoryResult CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool swap, Item* pSrcItem) const;