diff --git a/src/game/Group.cpp b/src/game/Group.cpp index 2a0a4a92f..774599e94 100644 --- a/src/game/Group.cpp +++ b/src/game/Group.cpp @@ -1251,12 +1251,14 @@ void Group::_setLeader(const uint64 &guid) CharacterDatabase.CommitTransaction(); } + uint32 old_guidlow = m_leaderGuid; + m_leaderGuid = slot->guid; m_leaderName = slot->name; // Non-BG groups stored in sObjectMgr with leader low-guids as keys if (IsCreated() && !isBGGroup()) - sObjectMgr.UpdateGroup(this); + sObjectMgr.UpdateGroup(old_guidlow,this); } diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 850b18624..a15243256 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -8415,6 +8415,12 @@ void ObjectMgr::RemoveGroup( Group* group ) mGroupMap.erase(GUID_LOPART(group->GetLeaderGUID())); } +void ObjectMgr::UpdateGroup( uint32 old_guidlow, Group* group ) +{ + mGroupMap.erase(old_guidlow); + AddGroup(group); +} + void ObjectMgr::AddArenaTeam( ArenaTeam* arenaTeam ) { mArenaTeamMap[arenaTeam->GetId()] = arenaTeam; diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index c09c42317..fb22e7cb4 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -411,11 +411,7 @@ class ObjectMgr Group * GetGroupByLeaderLowGUID(uint32 lowguid) const; void AddGroup(Group* group); void RemoveGroup(Group* group); - void UpdateGroup(Group* group) // when need update leader guid as group key - { - RemoveGroup(group); - AddGroup(group); - } + void UpdateGroup(uint32 old_guidlow, Group* group); // when need update leader guid as group key Guild* GetGuildByLeader(uint64 const&guid) const; Guild* GetGuildById(uint32 GuildId) const; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 3fa0fab6a..4198a0b51 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "9283" + #define REVISION_NR "9284" #endif // __REVISION_NR_H__