From 73bd2b446ca40744db41e9c76537428e32a81596 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Tue, 21 Jun 2022 18:18:03 +0200 Subject: [PATCH] fix(Core/Groups): Level restriction on allowing raid groups (#12110) --- src/server/apps/worldserver/worldserver.conf.dist | 10 ++++++++++ src/server/game/Groups/Group.cpp | 11 +++++++++++ src/server/game/Groups/Group.h | 1 + src/server/game/Handlers/GroupHandler.cpp | 6 ++++++ 4 files changed, 28 insertions(+) diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index 66e5b0636..f39c5925a 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -3588,6 +3588,16 @@ Calculate.Creature.Zone.Area.Data = 0 Calculate.Gameoject.Zone.Area.Data = 0 +# +# Group.Raid.LevelRestriction +# +# The Group members need to the same, or higher level than the specified value. +# Minimum level is 10. +# Default: 10 +# + +Group.Raid.LevelRestriction = 10 + # # LFG.Location.All # diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 6fa4ff077..9a4d2a4d3 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -18,6 +18,7 @@ #include "Group.h" #include "Battleground.h" #include "BattlegroundMgr.h" +#include "Config.h" #include "DatabaseEnv.h" #include "GameTime.h" #include "GroupMgr.h" @@ -278,6 +279,16 @@ void Group::ConvertToLFG(bool restricted /*= true*/) SendUpdate(); } +bool Group::CheckLevelForRaid() +{ + for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr) + if (Player* player = ObjectAccessor::FindPlayer(citr->guid)) + if (player->getLevel() < sConfigMgr->GetOption("Group.Raid.LevelRestriction", 10)) + return true; + + return false; +} + void Group::ConvertToRaid() { m_groupType = GroupType(m_groupType | GROUPTYPE_RAID); diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 8a03d6f38..ad7c2ddda 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -245,6 +245,7 @@ public: uint8 GetMemberGroup(ObjectGuid guid) const; void ConvertToLFG(bool restricted = true); + bool CheckLevelForRaid(); void ConvertToRaid(); void SetBattlegroundGroup(Battleground* bg); diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 7b0194802..5bb8eb4b1 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -621,6 +621,12 @@ void WorldSession::HandleGroupRaidConvertOpcode(WorldPacket& /*recvData*/) return; /** error handling **/ + if (group->CheckLevelForRaid()) + { + SendPartyResult(PARTY_OP_INVITE, "", ERR_RAID_DISALLOWED_BY_LEVEL); + return; + } + if (!group->IsLeader(GetPlayer()->GetGUID()) || group->GetMembersCount() < 2 || group->isLFGGroup()) // pussywizard: not allowed for lfg groups, it is either raid from the beginning or not! return; /********************/