diff options
-rwxr-xr-x | src/server/game/Groups/Group.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/GroupHandler.cpp | 11 | ||||
-rw-r--r-- | src/server/scripts/World/dungeon_finder.cpp | 24 |
3 files changed, 22 insertions, 17 deletions
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index d8c3fce87ad..9d9ab269b3f 100755 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -360,6 +360,10 @@ uint32 Group::RemoveMember(const uint64 &guid, const RemoveMethod &method /* = G sScriptMgr.OnGroupRemoveMember(this, guid, method, kicker, reason); + // Lfg group vote kick handled in scripts + if (isLFGGroup() && method == GROUP_REMOVEMETHOD_KICK) + return m_memberSlots.size(); + // remove member and change leader (if need) only if strong more 2 members _before_ member remove (BG allow 1 member group) if (GetMembersCount() > (isBGGroup() ? 1u : 2u)) { diff --git a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp index 42b2dd2092d..cbc361bc5b2 100755 --- a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp @@ -30,7 +30,6 @@ #include "Util.h" #include "SpellAuras.h" #include "Vehicle.h" -#include "LFGMgr.h" class Aura; @@ -278,10 +277,7 @@ void WorldSession::HandleGroupUninviteGuidOpcode(WorldPacket & recv_data) if (grp->IsMember(guid)) { - if (grp->isLFGGroup()) - sLFGMgr.InitBoot(grp, GUID_LOPART(GetPlayer()->GetGUID()), GUID_LOPART(guid), reason); - else - Player::RemoveFromGroup(grp, guid, GROUP_REMOVEMETHOD_KICK, GetPlayer()->GetGUID(), reason.c_str()); + Player::RemoveFromGroup(grp, guid, GROUP_REMOVEMETHOD_KICK, GetPlayer()->GetGUID(), reason.c_str()); return; } @@ -323,10 +319,7 @@ void WorldSession::HandleGroupUninviteOpcode(WorldPacket & recv_data) if (uint64 guid = grp->GetMemberGUID(membername)) { - if (grp->isLFGGroup()) - sLFGMgr.InitBoot(grp, GUID_LOPART(GetPlayer()->GetGUID()), GUID_LOPART(guid), ""); - else - Player::RemoveFromGroup(grp, guid, GROUP_REMOVEMETHOD_KICK, GetPlayer()->GetGUID()); + Player::RemoveFromGroup(grp, guid, GROUP_REMOVEMETHOD_KICK, GetPlayer()->GetGUID()); return; } diff --git a/src/server/scripts/World/dungeon_finder.cpp b/src/server/scripts/World/dungeon_finder.cpp index 805d32539d5..b770ae2fed8 100644 --- a/src/server/scripts/World/dungeon_finder.cpp +++ b/src/server/scripts/World/dungeon_finder.cpp @@ -67,24 +67,32 @@ public: if (!group->isLFGGroup()) return; - if (!group->isLfgDungeonComplete()) // Need more players to finish the dungeon - sLFGMgr.OfferContinue(group); - if (method == GROUP_REMOVEMETHOD_KICK) // Player have been kicked { - // TODO - Update internal kick cooldown - } - else - { - // Deserter flag + // TODO - Update internal kick cooldown of kicker + std::string str_reason = ""; + if (reason) + str_reason = std::string(reason); + sLFGMgr.InitBoot(group, GUID_LOPART(kicker), GUID_LOPART(guid), str_reason); + return; } if (Player *plr = sObjectMgr.GetPlayer(guid)) { + /* + if (method == GROUP_REMOVEMETHOD_LEAVE) + // Add deserter flag + else if (group->isLfgKickActive()) + // Update internal kick cooldown of kicked + */ + plr->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_LEADER); if (plr->GetMap()->IsDungeon()) // Teleport player out the dungeon sLFGMgr.TeleportPlayer(plr, true); } + + if (!group->isLfgDungeonComplete()) // Need more players to finish the dungeon + sLFGMgr.OfferContinue(group); } void OnDisband(Group* group) |