diff --git a/zone/bot.cpp b/zone/bot.cpp index 21066bb60..325168d3b 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -7684,15 +7684,15 @@ void EntityList::ShowSpawnWindow(Client* client, int Distance, bool NamedOnly) { } uint8 Bot::GetNumberNeedingHealedInGroup(Mob* tar, uint16 spell_type, uint16 spell_id, float range) { - if (!tar->IsBot()) { + if (!tar) { return 0; } uint8 count = 0; - auto target_list = tar->IsClient() ? tar->CastToBot()->GatherSpellTargets() : tar->CastToBot()->GetSpellTargetList(); + auto target_list = tar->IsClient() ? GatherSpellTargets(false, tar) : tar->CastToBot()->GetSpellTargetList(); for (Mob* m : target_list) { - if (tar->CalculateDistance(m) < range && CastChecks(spell_id, m, spell_type, true, IsGroupBotSpellType(spell_type))) { + if (m && tar->CalculateDistance(m) < range && CastChecks(spell_id, m, spell_type, true, IsGroupBotSpellType(spell_type))) { ++count; } } @@ -11146,11 +11146,14 @@ bool Bot::GetUltimateSpellTypeHold(uint16 spell_type, Mob* tar) { return GetSpellTypeHold(spell_type); } - if (tar->IsPet() && tar->GetOwner() && tar->IsPetOwnerBot()) { - return tar->GetOwner()->CastToBot()->GetSpellTypeHold(GetPetBotSpellType(spell_type)); - } + Mob* owner = tar->IsPet() ? tar->GetOwner() : nullptr; + Bot* bot_owner = (owner && owner->IsBot()) + ? owner->CastToBot() + : nullptr; - return GetSpellTypeHold(spell_type); + return bot_owner + ? bot_owner->GetSpellTypeHold(GetPetBotSpellType(spell_type)) + : GetSpellTypeHold(spell_type); } void Bot::SetSpellTypePriority(uint16 spell_type, uint8 priority_type, uint16 priority) { diff --git a/zone/botspellsai.cpp b/zone/botspellsai.cpp index 56db39352..1013a36c3 100644 --- a/zone/botspellsai.cpp +++ b/zone/botspellsai.cpp @@ -1294,7 +1294,7 @@ BotSpell Bot::GetBestBotSpellForGroupHeal(Bot* caster, Mob* tar, uint16 spell_ty for (std::list::iterator bot_spell_list_itr = bot_spell_list.begin(); bot_spell_list_itr != bot_spell_list.end(); ++bot_spell_list_itr) { // Assuming all the spells have been loaded into this list by level and in descending order - if (IsGroupHealOverTimeSpell(bot_spell_list_itr->SpellId)) { + if (IsRegularGroupHealSpell(bot_spell_list_itr->SpellId)) { uint16 spell_id = bot_spell_list_itr->SpellId; if (!caster->IsCommandedSpell() && caster->IsValidSpellRange(spell_id, tar)) { @@ -1368,7 +1368,7 @@ BotSpell Bot::GetBestBotSpellForGroupCompleteHeal(Bot* caster, Mob* tar, uint16 for (std::list::iterator bot_spell_list_itr = bot_spell_list.begin(); bot_spell_list_itr != bot_spell_list.end(); ++bot_spell_list_itr) { // Assuming all the spells have been loaded into this list by level and in descending order - if (IsGroupHealOverTimeSpell(bot_spell_list_itr->SpellId)) { + if (IsGroupCompleteHealSpell(bot_spell_list_itr->SpellId)) { uint16 spell_id = bot_spell_list_itr->SpellId; if (!caster->IsCommandedSpell() && caster->IsValidSpellRange(spell_id, tar)) {