diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 122c640d0..7f4b8e996 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -3511,8 +3511,15 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, { for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next()) if (Player* member = groupRef->GetSource()) + { if (member->IsInMap(player)) targets.push_back(member); + + if (e.target.invokerParty.includePets) + if (Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*member, member->GetPetGUID())) + if (pet->IsPet() && pet->IsInMap(player)) + targets.push_back(pet); + } } // We still add the player to the list if there is no group. If we do // this even if there is a group (thus the else-check), it will add the diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 4d4a35416..4544f73c8 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -908,7 +908,7 @@ bool SmartAIMgr::CheckUnusedTargetParams(SmartScriptHolder const& e) case SMART_TARGET_GAMEOBJECT_RANGE: return sizeof(SmartTarget::goRange); case SMART_TARGET_GAMEOBJECT_GUID: return sizeof(SmartTarget::goGUID); case SMART_TARGET_GAMEOBJECT_DISTANCE: return sizeof(SmartTarget::goDistance); - case SMART_TARGET_INVOKER_PARTY: return NO_PARAMS; + case SMART_TARGET_INVOKER_PARTY: return sizeof(SmartTarget::invokerParty); case SMART_TARGET_PLAYER_RANGE: return sizeof(SmartTarget::playerRange); case SMART_TARGET_PLAYER_DISTANCE: return sizeof(SmartTarget::playerDistance); case SMART_TARGET_CLOSEST_CREATURE: return sizeof(SmartTarget::unitClosest); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index bf414f532..3a31acbcf 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1533,7 +1533,7 @@ enum SMARTAI_TARGETS SMART_TARGET_GAMEOBJECT_RANGE = 13, // entry(0any), min, max SMART_TARGET_GAMEOBJECT_GUID = 14, // guid, entry SMART_TARGET_GAMEOBJECT_DISTANCE = 15, // entry(0any), maxDist - SMART_TARGET_INVOKER_PARTY = 16, // invoker's party members + SMART_TARGET_INVOKER_PARTY = 16, // includePets(0 - false, 1 - true) SMART_TARGET_PLAYER_RANGE = 17, // min, max, maxCount (maxCount by pussywizard), set target.o to 1 if u want to search for all in range if min, max fails SMART_TARGET_PLAYER_DISTANCE = 18, // maxDist SMART_TARGET_CLOSEST_CREATURE = 19, // CreatureEntry(0any), maxDist, dead? @@ -1736,6 +1736,11 @@ struct SmartTarget uint32 index; uint32 type; } instanceStorage; + + struct + { + SAIBool includePets; + } invokerParty; }; };