diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index a948c6bf5..647284322 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1504,7 +1504,6 @@ namespace lfg if (!gguid) return; - LfgRolesMap check_roles; LfgRoleCheckContainer::iterator itRoleCheck = RoleChecksStore.find(gguid); if (itRoleCheck == RoleChecksStore.end()) return; @@ -1527,9 +1526,7 @@ namespace lfg if (itRoles == roleCheck.roles.end()) { - // use temporal var to check roles, CheckGroupRoles modifies the roles - check_roles = roleCheck.roles; - roleCheck.state = CheckGroupRoles(check_roles) ? LFG_ROLECHECK_FINISHED : LFG_ROLECHECK_WRONG_ROLES; + roleCheck.state = CheckGroupRoles(roleCheck.roles) ? LFG_ROLECHECK_FINISHED : LFG_ROLECHECK_WRONG_ROLES; } } @@ -1798,14 +1795,17 @@ namespace lfg ObjectGuid gguid = grp->GetGUID(); SetState(gguid, LFG_STATE_PROPOSAL); sGroupMgr->AddGroup(grp); + grp->SetLfgRoles(pguid, proposal.players.find(pguid)->second.role); } else if (group != grp) { if (!grp->IsFull()) - grp->AddMember(player); + grp->AddMember(player, proposal.players.find(pguid)->second.role); + } + else + { + grp->SetLfgRoles(pguid, proposal.players.find(pguid)->second.role); } - - grp->SetLfgRoles(pguid, proposal.players.find(pguid)->second.role); } // pussywizard: crashfix, group wasn't created when iterating players (no player found by guid), proposal is deleted by the calling function diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index ee1b94fe9..f1c3010c6 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -421,7 +421,7 @@ Player* Group::GetInvited(const std::string& name) const return nullptr; } -bool Group::AddMember(Player* player) +bool Group::AddMember(Player* player, uint8 roles /* = 0 */) { if (!player) return false; @@ -449,7 +449,7 @@ bool Group::AddMember(Player* player) member.name = player->GetName(); member.group = subGroup; member.flags = 0; - member.roles = 0; + member.roles = roles; m_memberSlots.push_back(member); if (!isBGGroup() && !isBFGroup()) diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 3b1bec04b..23d6d6be8 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -204,7 +204,7 @@ public: void RemoveInvite(Player* player); void RemoveAllInvites(); bool AddLeaderInvite(Player* player); - bool AddMember(Player* player); + bool AddMember(Player* player, uint8 roles = 0); bool RemoveMember(ObjectGuid guid, const RemoveMethod& method = GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker = ObjectGuid::Empty, const char* reason = nullptr); void ChangeLeader(ObjectGuid guid); void SetLootMethod(LootMethod method);