From cef873f7934bfb3047ddde5c462b215e1e20f2a4 Mon Sep 17 00:00:00 2001 From: Paul Coene Date: Thu, 14 Oct 2021 10:52:29 -0400 Subject: [PATCH] [BugFix] Remove detection of client pets from Sense[Summoned|Undead|Animal] spells (#1601) * Remove detection of client pets from Sense[Summoned|Undead|Animal] * Use IsPetOwnerClient() function instead of individual checks * Add option to exclude client pets from GetClosestMobByBodyType * Add parameter Co-authored-by: Noudess --- zone/entity.cpp | 6 +++++- zone/entity.h | 2 +- zone/spell_effects.cpp | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/zone/entity.cpp b/zone/entity.cpp index b506ca01a..c80d13ba8 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -5146,7 +5146,7 @@ void EntityList::ExpeditionWarning(uint32 minutes_left) safe_delete(outapp); } -Mob *EntityList::GetClosestMobByBodyType(Mob *sender, bodyType BodyType) +Mob *EntityList::GetClosestMobByBodyType(Mob *sender, bodyType BodyType, bool skip_client_pets) { if (!sender) @@ -5163,6 +5163,10 @@ Mob *EntityList::GetClosestMobByBodyType(Mob *sender, bodyType BodyType) if (CurrentMob->GetBodyType() != BodyType) continue; + // Do not detect client pets + if (skip_client_pets && CurrentMob->IsPet() && CurrentMob->IsPetOwnerClient()) + continue; + CurrentDistance = ((CurrentMob->GetY() - sender->GetY()) * (CurrentMob->GetY() - sender->GetY())) + ((CurrentMob->GetX() - sender->GetX()) * (CurrentMob->GetX() - sender->GetX())); diff --git a/zone/entity.h b/zone/entity.h index 2890c18f5..20c5be842 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -479,7 +479,7 @@ public: Corpse* GetClosestCorpse(Mob* sender, const char *Name); NPC* GetClosestBanker(Mob* sender, uint32 &distance); void CameraEffect(uint32 duration, uint32 intensity); - Mob* GetClosestMobByBodyType(Mob* sender, bodyType BodyType); + Mob* GetClosestMobByBodyType(Mob* sender, bodyType BodyType, bool skip_client_pets=false); void ForceGroupUpdate(uint32 gid); void SendGroupLeave(uint32 gid, const char *name); void SendGroupJoin(uint32 gid, const char *name); diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 5caab6d0d..f5ca54794 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -854,7 +854,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove MessageID = SENSE_ANIMAL; } - Mob *ClosestMob = entity_list.GetClosestMobByBodyType(this, bt); + Mob *ClosestMob = entity_list.GetClosestMobByBodyType(this, bt, true); if(ClosestMob) {