aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Groups/Group.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Groups/Group.cpp')
-rw-r--r--src/server/game/Groups/Group.cpp34
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);