aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-11-15 00:01:36 +0100
committerShauren <shauren.trinity@gmail.com>2016-11-15 00:01:36 +0100
commitf66f49f9b9d36ac33f80fdcecb1cf5a6f7371687 (patch)
tree1980338667c5f155aa98492f04ccd1758b99343a /src
parentf23c6c4d7e4a448400d6fb6dc48a0f5b936620dc (diff)
Core/Groups: Fixed converting to raid and named more group flags and types
Closes #18198
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Groups/Group.cpp67
-rw-r--r--src/server/game/Groups/Group.h30
2 files changed, 57 insertions, 40 deletions
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 09d5616a13b..479bd6d2da9 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -55,7 +55,7 @@ Loot* Roll::getLoot()
return getTarget();
}
-Group::Group() : m_leaderGuid(), m_leaderName(""), m_groupType(GROUPTYPE_NORMAL),
+Group::Group() : m_leaderGuid(), m_leaderName(""), m_groupFlags(GROUP_FLAG_NONE),
m_dungeonDifficulty(DIFFICULTY_NORMAL), m_raidDifficulty(DIFFICULTY_NORMAL_RAID), m_legacyRaidDifficulty(DIFFICULTY_10_N),
m_bgGroup(nullptr), m_bfGroup(nullptr), m_lootMethod(FREE_FOR_ALL), m_lootThreshold(ITEM_QUALITY_UNCOMMON), m_looterGuid(),
m_masterLooterGuid(), m_subGroupsCounts(nullptr), m_guid(), m_counter(0), m_maxEnchantingLevel(0), m_dbStoreId(0),
@@ -105,9 +105,9 @@ bool Group::Create(Player* leader)
leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER);
if (isBGGroup() || isBFGroup())
- m_groupType = GROUPTYPE_BGRAID;
+ m_groupFlags = GROUP_MASK_BGRAID;
- if (m_groupType & GROUPTYPE_RAID)
+ if (m_groupFlags & GROUP_FLAG_RAID)
_initRaidSubGroupsCounter();
if (!isLFGGroup())
@@ -149,7 +149,7 @@ bool Group::Create(Player* leader)
stmt->setBinary(index++, m_targetIcons[5].GetRawValue());
stmt->setBinary(index++, m_targetIcons[6].GetRawValue());
stmt->setBinary(index++, m_targetIcons[7].GetRawValue());
- stmt->setUInt8(index++, uint8(m_groupType));
+ stmt->setUInt8(index++, uint8(m_groupFlags));
stmt->setUInt32(index++, uint8(m_dungeonDifficulty));
stmt->setUInt32(index++, uint8(m_raidDifficulty));
stmt->setUInt32(index++, uint8(m_legacyRaidDifficulty));
@@ -184,8 +184,8 @@ void Group::LoadGroupFromDB(Field* fields)
for (uint8 i = 0; i < TARGET_ICONS_COUNT; ++i)
m_targetIcons[i].SetRawValue(fields[4 + i].GetBinary());
- m_groupType = GroupType(fields[12].GetUInt8());
- if (m_groupType & GROUPTYPE_RAID)
+ m_groupFlags = GroupFlags(fields[12].GetUInt8());
+ if (m_groupFlags & GROUP_FLAG_RAID)
_initRaidSubGroupsCounter();
m_dungeonDifficulty = Player::CheckLoadedDungeonDifficultyID(Difficulty(fields[13].GetUInt8()));
@@ -194,7 +194,7 @@ void Group::LoadGroupFromDB(Field* fields)
m_masterLooterGuid = ObjectGuid::Create<HighGuid::Player>(fields[16].GetUInt64());
- if (m_groupType & GROUPTYPE_LFG)
+ if (m_groupFlags & GROUP_FLAG_LFG)
sLFGMgr->_LoadFromDB(fields, GetGUID());
}
@@ -226,13 +226,13 @@ void Group::LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uin
void Group::ConvertToLFG()
{
- m_groupType = GroupType(m_groupType | GROUPTYPE_LFG | GROUPTYPE_LFG_RESTRICTED);
+ m_groupFlags = GroupFlags(m_groupFlags | GROUP_FLAG_LFG | GROUP_FLAG_LFG_RESTRICTED);
m_lootMethod = GROUP_LOOT;
if (!isBGGroup() && !isBFGroup())
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_TYPE);
- stmt->setUInt8(0, uint8(m_groupType));
+ stmt->setUInt8(0, uint8(m_groupFlags));
stmt->setUInt32(1, m_dbStoreId);
CharacterDatabase.Execute(stmt);
@@ -243,7 +243,7 @@ void Group::ConvertToLFG()
void Group::ConvertToRaid()
{
- m_groupType = GroupType(m_groupType | GROUPTYPE_RAID);
+ m_groupFlags = GroupFlags(m_groupFlags | GROUP_FLAG_RAID);
_initRaidSubGroupsCounter();
@@ -251,7 +251,7 @@ void Group::ConvertToRaid()
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_TYPE);
- stmt->setUInt8(0, uint8(m_groupType));
+ stmt->setUInt8(0, uint8(m_groupFlags));
stmt->setUInt32(1, m_dbStoreId);
CharacterDatabase.Execute(stmt);
@@ -270,7 +270,7 @@ void Group::ConvertToGroup()
if (m_memberSlots.size() > 5)
return; // What message error should we send?
- m_groupType = GroupType(GROUPTYPE_NORMAL);
+ m_groupFlags = GroupFlags(GROUP_FLAG_NONE);
if (m_subGroupsCounts)
{
@@ -282,7 +282,7 @@ void Group::ConvertToGroup()
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_TYPE);
- stmt->setUInt8(0, uint8(m_groupType));
+ stmt->setUInt8(0, uint8(m_groupFlags));
stmt->setUInt32(1, m_dbStoreId);
CharacterDatabase.Execute(stmt);
@@ -1438,9 +1438,9 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot)
WorldPackets::Party::PartyUpdate partyUpdate;
- partyUpdate.PartyType = m_groupType;
- partyUpdate.PartyIndex = 0;
- partyUpdate.PartyFlags = uint8(IsCreated());
+ partyUpdate.PartyFlags = m_groupFlags;
+ partyUpdate.PartyIndex = (player->GetOriginalGroup() && player->GetOriginalGroup() != this) ? 1 : 0; // 0 = original group, 1 = instance/bg group
+ partyUpdate.PartyType = IsCreated() ? GROUP_TYPE_NORMAL : GROUP_TYPE_NONE;
partyUpdate.PartyGUID = m_guid;
partyUpdate.LeaderGUID = m_leaderGuid;
@@ -1494,18 +1494,27 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot)
partyUpdate.LfgInfos = boost::in_place();
partyUpdate.LfgInfos->Slot = sLFGMgr->GetDungeon(m_guid);
- partyUpdate.LfgInfos->BootCount = 0; // new 6.x
- partyUpdate.LfgInfos->Aborted = false; // new 6.x
+ partyUpdate.LfgInfos->BootCount = 0;
+ partyUpdate.LfgInfos->Aborted = false;
- partyUpdate.LfgInfos->MyFlags = 0; // new 6.x
- partyUpdate.LfgInfos->MyRandomSlot = 0; // new 6.x
+ partyUpdate.LfgInfos->MyFlags = sLFGMgr->GetState(m_guid) == lfg::LFG_STATE_FINISHED_DUNGEON ? 2 : 0;
+ partyUpdate.LfgInfos->MyRandomSlot = [player]() -> uint32
+ {
+ lfg::LfgDungeonSet const& selectedDungeons = sLFGMgr->GetSelectedDungeons(player->GetGUID());
+ if (selectedDungeons.size() == 1)
+ if (LfgDungeonsEntry const* dungeon = sLfgDungeonsStore.LookupEntry(*selectedDungeons.begin()))
+ if (dungeon->Type == lfg::LFG_TYPE_RANDOM)
+ return dungeon->ID;
+
+ return 0;
+ }();
- partyUpdate.LfgInfos->MyPartialClear = sLFGMgr->GetState(m_guid) == lfg::LFG_STATE_FINISHED_DUNGEON ? 2 : 0; // FIXME - Dungeon save status? 2 = done
- partyUpdate.LfgInfos->MyGearDiff = 0.f; // new 6.x
- partyUpdate.LfgInfos->MyFirstReward = false; // new 6.x
+ partyUpdate.LfgInfos->MyPartialClear = 0;
+ partyUpdate.LfgInfos->MyGearDiff = 0.0f;
+ partyUpdate.LfgInfos->MyFirstReward = false;
- partyUpdate.LfgInfos->MyStrangerCount = 0; // new 6.x
- partyUpdate.LfgInfos->MyKickVoteCount = 0; // new 6.x
+ partyUpdate.LfgInfos->MyStrangerCount = 0;
+ partyUpdate.LfgInfos->MyKickVoteCount = 0;
}
player->GetSession()->SendPacket(partyUpdate.Write());
@@ -2351,12 +2360,12 @@ bool Group::IsFull() const
bool Group::isLFGGroup() const
{
- return (m_groupType & GROUPTYPE_LFG) != 0;
+ return (m_groupFlags & GROUP_FLAG_LFG) != 0;
}
bool Group::isRaidGroup() const
{
- return (m_groupType & GROUPTYPE_RAID) != 0;
+ return (m_groupFlags & GROUP_FLAG_RAID) != 0;
}
bool Group::isBGGroup() const
@@ -2608,9 +2617,9 @@ void Group::ToggleGroupMemberFlag(member_witerator slot, uint8 flag, bool apply)
void Group::SetEveryoneIsAssistant(bool apply)
{
if (apply)
- m_groupType = GroupType(m_groupType | GROUPTYPE_EVERYONE_ASSISTANT);
+ m_groupFlags = GroupFlags(m_groupFlags | GROUP_FLAG_EVERYONE_ASSISTANT);
else
- m_groupType = GroupType(m_groupType & ~GROUPTYPE_EVERYONE_ASSISTANT);
+ m_groupFlags = GroupFlags(m_groupFlags & ~GROUP_FLAG_EVERYONE_ASSISTANT);
for (member_witerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr)
ToggleGroupMemberFlag(itr, MEMBER_FLAG_ASSISTANT, apply);
diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h
index 1f0515c8d8f..093d0d3d215 100644
--- a/src/server/game/Groups/Group.h
+++ b/src/server/game/Groups/Group.h
@@ -88,15 +88,23 @@ enum GroupMemberAssignment
enum GroupType
{
- GROUPTYPE_NORMAL = 0x00,
- GROUPTYPE_BG = 0x01,
- GROUPTYPE_RAID = 0x02,
- GROUPTYPE_BGRAID = GROUPTYPE_BG | GROUPTYPE_RAID, // mask
- GROUPTYPE_LFG_RESTRICTED = 0x04, // Script_HasLFGRestrictions()
- GROUPTYPE_LFG = 0x08,
- GROUPTYPE_EVERYONE_ASSISTANT = 0x40, // Script_IsEveryoneAssistant() (4.x)
- // 0x10, leave/change group?, I saw this flag when leaving group and after leaving BG while in group
- // GROUPTYPE_ONE_PERSON_PARTY = 0x20, 4.x Script_IsOnePersonParty()
+ GROUP_TYPE_NONE = 0,
+ GROUP_TYPE_NORMAL = 1,
+ GROUP_TYPE_WORLD_PVP = 4
+};
+
+enum GroupFlags
+{
+ GROUP_FLAG_NONE = 0x000,
+ GROUP_FLAG_FAKE_RAID = 0x001,
+ GROUP_FLAG_RAID = 0x002,
+ GROUP_FLAG_LFG_RESTRICTED = 0x004, // Script_HasLFGRestrictions()
+ GROUP_FLAG_LFG = 0x008,
+ GROUP_FLAG_ONE_PERSON_PARTY = 0x020, // Script_IsOnePersonParty()
+ GROUP_FLAG_EVERYONE_ASSISTANT = 0x040, // Script_IsEveryoneAssistant()
+ GROUP_FLAG_GUILD_GROUP = 0x100,
+
+ GROUP_MASK_BGRAID = GROUP_FLAG_FAKE_RAID | GROUP_FLAG_RAID,
};
enum GroupUpdateFlags
@@ -297,7 +305,7 @@ class TC_GAME_API Group
GroupReference* GetFirstMember() { return m_memberMgr.getFirst(); }
GroupReference const* GetFirstMember() const { return m_memberMgr.getFirst(); }
uint32 GetMembersCount() const { return uint32(m_memberSlots.size()); }
- GroupType GetGroupType() const { return m_groupType; }
+ GroupFlags GetGroupFlags() const { return m_groupFlags; }
uint8 GetMemberGroup(ObjectGuid guid) const;
@@ -399,7 +407,7 @@ class TC_GAME_API Group
InvitesList m_invitees;
ObjectGuid m_leaderGuid;
std::string m_leaderName;
- GroupType m_groupType;
+ GroupFlags m_groupFlags;
Difficulty m_dungeonDifficulty;
Difficulty m_raidDifficulty;
Difficulty m_legacyRaidDifficulty;