feat(Core/SAI): Add pet variable to SMART_TARGET_INVOKER_PARTY (#20804)

* feat(Core/SAI): Add pet variable to SMART_TARGET_INVOKER_PARTY

* closes https://github.com/azerothcore/azerothcore-wotlk/issues/15755

* mb
This commit is contained in:
Kitzunu
2024-12-01 17:57:39 +01:00
committed by GitHub
parent 9ff887d001
commit 490c90bdd7
3 changed files with 14 additions and 2 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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;
};
};