aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Groups
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
committerShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
commite59eef5432c7b70679d33f4911c88d0f7d75fd39 (patch)
treefe9bce9c82496589facec3719b3f2943d8295e76 /src/server/game/Groups
parent7fb9168d57f378075b0f6692ea7ad822c1d8e43d (diff)
Core/PacketIO: Updated to 11.0.0
Diffstat (limited to 'src/server/game/Groups')
-rw-r--r--src/server/game/Groups/Group.cpp20
-rw-r--r--src/server/game/Groups/Group.h16
-rw-r--r--src/server/game/Groups/GroupMgr.cpp4
3 files changed, 26 insertions, 14 deletions
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 289c4dc39ea..14d94305ba6 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -198,6 +198,7 @@ bool Group::Create(Player* leader)
stmt->setUInt32(index++, uint8(m_raidDifficulty));
stmt->setUInt32(index++, uint8(m_legacyRaidDifficulty));
stmt->setUInt64(index++, m_masterLooterGuid.GetCounter());
+ stmt->setInt8(index++, int8(m_pingRestriction));
CharacterDatabase.Execute(stmt);
@@ -243,6 +244,8 @@ void Group::LoadGroupFromDB(Field* fields)
m_masterLooterGuid = ObjectGuid::Create<HighGuid::Player>(fields[16].GetUInt64());
+ m_pingRestriction = RestrictPingsTo(fields[18].GetInt8());
+
if (m_groupFlags & GROUP_FLAG_LFG)
sLFGMgr->_LoadFromDB(fields, GetGUID());
}
@@ -867,6 +870,8 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot const* slot) co
partyUpdate.SequenceNum = player->NextGroupUpdateSequenceNumber(m_groupCategory);
+ partyUpdate.PingRestriction = m_pingRestriction;
+
partyUpdate.MyIndex = -1;
uint8 index = 0;
for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr, ++index)
@@ -1899,23 +1904,20 @@ void Group::SetEveryoneIsAssistant(bool apply)
SendUpdate();
}
-bool Group::IsRestrictPingsToAssistants() const
+RestrictPingsTo Group::GetRestrictPings() const
{
- return (m_groupFlags & GROUP_FLAG_RESTRICT_PINGS) != 0;
+ return m_pingRestriction;
}
-void Group::SetRestrictPingsToAssistants(bool restrictPingsToAssistants)
+void Group::SetRestrictPingsTo(RestrictPingsTo restrictTo)
{
- if (restrictPingsToAssistants)
- m_groupFlags = GroupFlags(m_groupFlags | GROUP_FLAG_RESTRICT_PINGS);
- else
- m_groupFlags = GroupFlags(m_groupFlags & ~GROUP_FLAG_RESTRICT_PINGS);
+ m_pingRestriction = restrictTo;
if (!isBGGroup() && !isBFGroup())
{
- CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_TYPE);
+ CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_PING_RESTRICTION);
- stmt->setUInt16(0, m_groupFlags);
+ stmt->setInt8(0, int8(m_pingRestriction));
stmt->setUInt32(1, m_dbStoreId);
CharacterDatabase.Execute(stmt);
diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h
index 8ba2f36e3c3..98f22523d2f 100644
--- a/src/server/game/Groups/Group.h
+++ b/src/server/game/Groups/Group.h
@@ -103,7 +103,7 @@ enum GroupFlags : uint16
GROUP_FLAG_EVERYONE_ASSISTANT = 0x040, // Script_IsEveryoneAssistant()
GROUP_FLAG_GUILD_GROUP = 0x100,
GROUP_FLAG_CROSS_FACTION = 0x200,
- GROUP_FLAG_RESTRICT_PINGS = 0x400, // C_PartyInfo::Script_GetRestrictPings()
+ GROUP_FLAG_RESTRICT_PINGS = 0x400, // deprecated
GROUP_MASK_BGRAID = GROUP_FLAG_FAKE_RAID | GROUP_FLAG_RAID,
};
@@ -191,6 +191,14 @@ enum class PingSubjectType : uint8
Max
};
+enum class RestrictPingsTo : int32
+{
+ None = 0,
+ Lead = 1,
+ Assist = 2,
+ TankHealer = 3,
+};
+
/** request member stats checken **/
/// @todo uninvite people that not accepted invite
class TC_GAME_API Group
@@ -260,8 +268,8 @@ class TC_GAME_API Group
void SetLfgRoles(ObjectGuid guid, uint8 roles);
uint8 GetLfgRoles(ObjectGuid guid) const;
void SetEveryoneIsAssistant(bool apply);
- bool IsRestrictPingsToAssistants() const;
- void SetRestrictPingsToAssistants(bool restrictPingsToAssistants);
+ RestrictPingsTo GetRestrictPings() const;
+ void SetRestrictPingsTo(RestrictPingsTo restrictTo);
// Update
void UpdateReadyCheck(uint32 diff);
@@ -451,6 +459,8 @@ class TC_GAME_API Group
std::array<std::unique_ptr<CountdownInfo>, 3> m_countdowns;
+ RestrictPingsTo m_pingRestriction;
+
struct NoopGroupDeleter { void operator()(Group*) const { /*noop - not managed*/ } };
Trinity::unique_trackable_ptr<Group> m_scriptRef;
};
diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp
index d36e7f64a6c..2e4d018c0c7 100644
--- a/src/server/game/Groups/GroupMgr.cpp
+++ b/src/server/game/Groups/GroupMgr.cpp
@@ -140,8 +140,8 @@ void GroupMgr::LoadGroups()
// 0 1 2 3 4 5 6 7 8 9
QueryResult result = CharacterDatabase.Query("SELECT g.leaderGuid, g.lootMethod, g.looterGuid, g.lootThreshold, g.icon1, g.icon2, g.icon3, g.icon4, g.icon5, g.icon6"
- // 10 11 12 13 14 15 16 17 18 19
- ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC");
+ // 10 11 12 13 14 15 16 17 18 19 20
+ ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, g.pingRestriction, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC");
if (!result)
{
TC_LOG_INFO("server.loading", ">> Loaded 0 group definitions. DB table `groups` is empty!");