From f8d000d660cdcbfc04a89057ec3bfb8d02c0fb8e Mon Sep 17 00:00:00 2001 From: E Spause Date: Wed, 15 Mar 2017 06:52:16 -0400 Subject: [PATCH] Don't allow disbanding mercs that have their owner in combat if the rule is set. --- zone/client_packet.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 20c5ede1a..858ff55e0 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -6582,8 +6582,7 @@ void Client::Handle_OP_GroupDisband(const EQApplicationPacket *app) if (group->IsLeader(this)) { // the group leader can kick other members out of the group... - if (memberToDisband->IsClient()) - { + if (memberToDisband->IsClient()) { group->DelMember(memberToDisband, false); Client* memberClient = memberToDisband->CastToClient(); Merc* memberMerc = memberToDisband->CastToClient()->GetMerc(); @@ -6592,9 +6591,19 @@ void Client::Handle_OP_GroupDisband(const EQApplicationPacket *app) memberMerc->MercJoinClientGroup(); } } - else if (memberToDisband->IsMerc()) - { - memberToDisband->CastToMerc()->Suspend(); + else if (memberToDisband->IsMerc()) { + //Can only remove mercs that aren't in combat if the rule is set. + if (!RuleB(Mercs, AllowMercSuspendInCombat)) { + Mob* mercOwner = memberToDisband->CastToMerc()->GetOwner(); + if (mercOwner && mercOwner->IsClient()) { + if (mercOwner->CastToClient()->CheckCanSpawnMerc(mercOwner->CastToClient()->GetMercInfo().MercTemplateID)) { + memberToDisband->CastToMerc()->Suspend(); + } + } + } + else { + memberToDisband->CastToMerc()->Suspend(); + } } } else