From 53e6f931c9cb944c55597b71c5203b1a86b21be8 Mon Sep 17 00:00:00 2001 From: Aeadoin <109764533+Aeadoin@users.noreply.github.com> Date: Sun, 19 Mar 2023 08:26:16 -0400 Subject: [PATCH] [Crash] Fixes Crash when Zoning with XTarget when Bots are in group. (#3126) --- zone/bot.cpp | 1 + zone/groups.cpp | 13 ++++++------- zone/raids.cpp | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/zone/bot.cpp b/zone/bot.cpp index 28d64d3c3..dc63a0028 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -5457,6 +5457,7 @@ void Bot::ProcessBotOwnerRefDelete(Mob* botOwner) { if (tempBot) { tempBot->SetTarget(nullptr); tempBot->SetBotOwner(nullptr); + tempBot->Zone(); } } } diff --git a/zone/groups.cpp b/zone/groups.cpp index a2b5bd3f3..7bb51bfb2 100644 --- a/zone/groups.cpp +++ b/zone/groups.cpp @@ -544,7 +544,6 @@ bool Group::UpdatePlayer(Mob* update) { return updateSuccess; } - void Group::MemberZoned(Mob* removemob) { uint32 i; @@ -554,11 +553,10 @@ void Group::MemberZoned(Mob* removemob) { if(removemob == GetLeader()) SetLeader(nullptr); - for (i = 0; i < MAX_GROUP_MEMBERS; i++) { - if (members[i] == removemob) { - members[i] = nullptr; - //should NOT clear the name, it is used for world communication. - break; + //should NOT clear the name, it is used for world communication. + for (auto & m : members) { + if (m && (m == removemob || m->IsBot() && m->CastToBot()->GetBotOwner() == removemob)) { + m = nullptr; } } @@ -924,6 +922,7 @@ void Group::DisbandGroup(bool joinraid) { { if (members[i] == nullptr) { + membername[i][0] = '\0'; continue; } @@ -1166,6 +1165,7 @@ bool Group::LearnMembers() { memberIndex++; } + VerifyGroup(); return true; } @@ -2321,7 +2321,6 @@ void Group::UpdateXTargetMarkedNPC(uint32 Number, Mob *m) members[i]->CastToClient()->UpdateXTargetType((Number == 1) ? GroupMarkTarget1 : ((Number == 2) ? GroupMarkTarget2 : GroupMarkTarget3), m); } } - } void Group::SetDirtyAutoHaters() diff --git a/zone/raids.cpp b/zone/raids.cpp index 7f0449279..91f44d962 100644 --- a/zone/raids.cpp +++ b/zone/raids.cpp @@ -1952,10 +1952,10 @@ void Raid::QueueClients(Mob *sender, const EQApplicationPacket *app, bool ack_re if (!members[i].member) { continue; } - if (!members[i].member->IsClient()) { + if (members[i].IsBot) { continue; } - if (members[i].IsBot) { + if (!members[i].member->IsClient()) { continue; } if (ignore_sender && members[i].member == sender) {