remove out of group spell (for perfermance)

This commit is contained in:
Yunfan Li
2023-07-15 00:00:56 +08:00
parent d183d285b6
commit 6ff7ebec02

View File

@@ -24,9 +24,9 @@ Unit* PartyMemberValue::FindPartyMember(std::vector<Player*>* party, FindPlayerP
Unit* PartyMemberValue::FindPartyMember(FindPlayerPredicate& predicate, bool ignoreOutOfGroup) Unit* PartyMemberValue::FindPartyMember(FindPlayerPredicate& predicate, bool ignoreOutOfGroup)
{ {
Player* master = GetMaster(); Player* master = GetMaster();
GuidVector nearestPlayers; // GuidVector nearestPlayers;
if (botAI->AllowActivity(OUT_OF_PARTY_ACTIVITY)) // if (botAI->AllowActivity(OUT_OF_PARTY_ACTIVITY))
nearestPlayers = AI_VALUE(GuidVector, "nearest friendly players"); // nearestPlayers = AI_VALUE(GuidVector, "nearest friendly players");
GuidList nearestGroupPlayers; GuidList nearestGroupPlayers;
if (Group* group = bot->GetGroup()) if (Group* group = bot->GetGroup())
@@ -51,8 +51,8 @@ Unit* PartyMemberValue::FindPartyMember(FindPlayerPredicate& predicate, bool ign
return NULL; return NULL;
} }
if (!ignoreOutOfGroup && !nearestPlayers.empty() && nearestPlayers.size() < 100) // if (!ignoreOutOfGroup && !nearestPlayers.empty() && nearestPlayers.size() < 100)
nearestGroupPlayers.insert(nearestGroupPlayers.end(), nearestPlayers.begin(), nearestPlayers.end()); // nearestGroupPlayers.insert(nearestGroupPlayers.end(), nearestPlayers.begin(), nearestPlayers.end());
// nearestPlayers.insert(nearestP layers.end(), nearestGroupPlayers.begin(), nearestGroupPlayers.end()); // nearestPlayers.insert(nearestP layers.end(), nearestGroupPlayers.begin(), nearestGroupPlayers.end());
@@ -105,14 +105,18 @@ bool PartyMemberValue::Check(Unit* player)
bool PartyMemberValue::IsTargetOfSpellCast(Player* target, SpellEntryPredicate &predicate) bool PartyMemberValue::IsTargetOfSpellCast(Player* target, SpellEntryPredicate &predicate)
{ {
GuidVector nearestPlayers = AI_VALUE(GuidVector, "nearest friendly players"); // GuidVector nearestPlayers = AI_VALUE(GuidVector, "nearest friendly players");
ObjectGuid targetGuid = target ? target->GetGUID() : bot->GetGUID(); ObjectGuid targetGuid = target ? target->GetGUID() : bot->GetGUID();
ObjectGuid corpseGuid = target && target->GetCorpse() ? target->GetCorpse()->GetGUID() : ObjectGuid::Empty; ObjectGuid corpseGuid = target && target->GetCorpse() ? target->GetCorpse()->GetGUID() : ObjectGuid::Empty;
for (ObjectGuid const guid : nearestPlayers) Group* group = bot->GetGroup();
if (!group) {
return false;
}
for (GroupReference *gref = group->GetFirstMember(); gref; gref = gref->next())
{ {
Player* player = botAI->GetPlayer(guid); Player* player = gref->GetSource();
if (!player) if (!player || player == bot)
continue; continue;
if (player->IsNonMeleeSpellCast(true)) if (player->IsNonMeleeSpellCast(true))