[Crash] Fix dangling Group member pointers for Bots. (#3134)

* [Crash] Fix dangling Group member pointers for Bots.

* fixes for edge cases
This commit is contained in:
Aeadoin
2023-03-21 11:57:04 -04:00
committed by GitHub
parent 4fe44f4cb6
commit fe2dcb6544
5 changed files with 100 additions and 58 deletions
+12 -6
View File
@@ -547,11 +547,13 @@ bool Group::UpdatePlayer(Mob* update) {
void Group::MemberZoned(Mob* removemob) {
uint32 i;
if (removemob == nullptr)
if (!removemob) {
return;
}
if(removemob == GetLeader())
if (removemob == GetLeader()) {
SetLeader(nullptr);
}
//should NOT clear the name, it is used for world communication.
for (auto & m : members) {
@@ -560,17 +562,21 @@ void Group::MemberZoned(Mob* removemob) {
}
}
if(removemob->IsClient() && HasRole(removemob, RoleAssist))
if (removemob->IsClient() && HasRole(removemob, RoleAssist)) {
SetGroupAssistTarget(0);
}
if(removemob->IsClient() && HasRole(removemob, RoleTank))
if (removemob->IsClient() && HasRole(removemob, RoleTank)) {
SetGroupTankTarget(0);
}
if(removemob->IsClient() && HasRole(removemob, RolePuller))
if (removemob->IsClient() && HasRole(removemob, RolePuller)) {
SetGroupPullerTarget(0);
}
if (removemob->IsClient() && removemob == mentoree)
if (removemob->IsClient() && removemob == mentoree) {
mentoree = nullptr;
}
if (RuleB(Bots, Enabled)) {
Bot::UpdateGroupCastingRoles(this);