diff options
Diffstat (limited to 'src/server/game/Groups/Group.cpp')
-rw-r--r-- | src/server/game/Groups/Group.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 6fda33ee124..5c2c8b84c1e 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -48,6 +48,9 @@ Group::Group() m_guid = 0; m_counter = 0; m_maxEnchantingLevel= 0; + m_LfgQueued = false; + m_LfgStatus = 1; + m_LfgDungeonEntry = 0; for (uint8 i = 0; i < TARGETICONCOUNT; ++i) m_targetIcons[i] = 0; @@ -199,6 +202,7 @@ bool Group::LoadMemberFromDB(uint32 guidLow, uint8 memberFlags, uint8 subgroup) member.group = subgroup; member.flags = memberFlags; + member.roles = 0; m_memberSlots.push_back(member); @@ -207,6 +211,15 @@ bool Group::LoadMemberFromDB(uint32 guidLow, uint8 memberFlags, uint8 subgroup) return true; } +void Group::ConvertToLFG() +{ + m_groupType = GroupType(m_groupType | GROUPTYPE_LFG | GROUPTYPE_UNK1); + m_lootMethod = NEED_BEFORE_GREED; + if (!isBGGroup()) + CharacterDatabase.PExecute("UPDATE groups SET groupType='%u' WHERE guid='%u'", uint8(m_groupType), GUID_LOPART(m_guid)); + SendUpdate(); +} + void Group::ConvertToRaid() { m_groupType = GroupType(m_groupType | GROUPTYPE_RAID); @@ -290,8 +303,12 @@ Player* Group::GetInvited(const std::string& name) const bool Group::AddMember(const uint64 &guid, const char* name) { + if (isLfgQueued()) + sLFGMgr.Leave(NULL, this); + if (!_addMember(guid, name)) return false; + SendUpdate(); Player *player = sObjectMgr.GetPlayer(guid); @@ -336,7 +353,7 @@ uint32 Group::RemoveMember(const uint64 &guid, const uint8 &method) { BroadcastGroupUpdate(); - if (!isBGGroup()) + if (isLfgQueued()) sLFGMgr.Leave(NULL, this); // remove member and change leader (if need) only if strong more 2 members _before_ member remove @@ -1081,12 +1098,16 @@ void Group::SendUpdate() data << uint8(m_groupType); // group type (flags in 3.3) data << uint8(citr->group); data << uint8(citr->flags); - data << uint8(isBGGroup() ? 1 : 0); // 2.0.x, isBattlegroundGroup? - if (m_groupType & GROUPTYPE_LFD) + if (isLFGGroup()) { - data << uint8(0); - data << uint32(0); + uint32 lowguid = GetLowGUID(); + data << uint8(1); + data << uint8(m_LfgStatus); + data << uint32(m_LfgDungeonEntry); } + else + data << uint8(isBGGroup() ? 1 : 0); // 2.0.x, isBattlegroundGroup? + data << uint64(m_guid); data << uint32(m_counter++); // 3.3, value increases every time this packet gets sent data << uint32(GetMembersCount()-1); @@ -1104,7 +1125,7 @@ void Group::SendUpdate() data << uint8(onlineState); // online-state data << uint8(citr2->group); // groupid data << uint8(citr2->flags); // See enum GroupMemberFlags - data << uint8(0); // 3.3 + data << uint8(citr2->roles); // Lfg Roles } data << uint64(m_leaderGuid); // leader guid if (GetMembersCount()-1) @@ -1214,6 +1235,7 @@ bool Group::_addMember(const uint64 &guid, const char* name, uint8 group) member.name = name; member.group = group; member.flags = 0; + member.roles = 0; m_memberSlots.push_back(member); SubGroupCounterIncrease(group); |