aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Groups/Group.cpp4
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/GroupHandler.cpp11
-rw-r--r--src/server/scripts/World/dungeon_finder.cpp24
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)