Core/Objects: Added grid searchers for SceneObject and Conversation

This commit is contained in:
Shauren
2025-06-29 00:58:59 +02:00
parent 5334467f49
commit 1e7725c15b
3 changed files with 84 additions and 3 deletions

View File

@@ -704,7 +704,6 @@ namespace Trinity
: AreaTriggerSearcher(searcher->GetPhaseShift(), result, check) { }
};
// Last accepted by Check GO if any (Check can change requirements at each call)
template<class Check>
struct AreaTriggerLastSearcher : AreaTriggerSearcherBase<Check, SearcherLastObjectResult<AreaTrigger*>>
{
@@ -727,6 +726,88 @@ namespace Trinity
: AreaTriggerListSearcher(searcher->GetPhaseShift(), container, check) { }
};
// SceneObject searchers
template<class Check, class Result>
struct SceneObjectSearcherBase : WorldObjectSearcherBase<Check, Result, StaticGridMapTypeMaskCheck<GRID_MAP_TYPE_MASK_SCENEOBJECT>>
{
template<typename Container>
SceneObjectSearcherBase(PhaseShift const& phaseShift, Container& result, Check& check)
: WorldObjectSearcherBase<Check, Result, StaticGridMapTypeMaskCheck<GRID_MAP_TYPE_MASK_SCENEOBJECT>>(phaseShift, result, check) { }
};
template<class Check>
struct SceneObjectSearcher : SceneObjectSearcherBase<Check, SearcherFirstObjectResult<SceneObject*>>
{
SceneObjectSearcher(PhaseShift const& phaseShift, SceneObject*& result, Check& check)
: SceneObjectSearcherBase<Check, SearcherFirstObjectResult<SceneObject*>>(phaseShift, result, check) { }
SceneObjectSearcher(WorldObject const* searcher, SceneObject*& result, Check& check)
: SceneObjectSearcher(searcher->GetPhaseShift(), result, check) { }
};
template<class Check>
struct SceneObjectLastSearcher : SceneObjectSearcherBase<Check, SearcherLastObjectResult<SceneObject*>>
{
SceneObjectLastSearcher(PhaseShift const& phaseShift, SceneObject*& result, Check& check)
: SceneObjectSearcherBase<Check, SearcherLastObjectResult<SceneObject*>>(phaseShift, result, check) { }
SceneObjectLastSearcher(WorldObject const* searcher, SceneObject*& result, Check& check)
: SceneObjectLastSearcher(searcher->GetPhaseShift(), result, check) { }
};
template<class Check>
struct SceneObjectListSearcher : SceneObjectSearcherBase<Check, SearcherContainerResult<SceneObject*>>
{
template<typename Container>
SceneObjectListSearcher(PhaseShift const& phaseShift, Container& container, Check& check)
: SceneObjectSearcherBase<Check, SearcherContainerResult<SceneObject*>>(phaseShift, container, check) { }
template<typename Container>
SceneObjectListSearcher(WorldObject const* searcher, Container& container, Check& check)
: SceneObjectListSearcher(searcher->GetPhaseShift(), container, check) { }
};
// Conversation searchers
template<class Check, class Result>
struct ConversationSearcherBase : WorldObjectSearcherBase<Check, Result, StaticGridMapTypeMaskCheck<GRID_MAP_TYPE_MASK_CONVERSATION>>
{
template<typename Container>
ConversationSearcherBase(PhaseShift const& phaseShift, Container& result, Check& check)
: WorldObjectSearcherBase<Check, Result, StaticGridMapTypeMaskCheck<GRID_MAP_TYPE_MASK_CONVERSATION>>(phaseShift, result, check) { }
};
template<class Check>
struct ConversationSearcher : ConversationSearcherBase<Check, SearcherFirstObjectResult<Conversation*>>
{
ConversationSearcher(PhaseShift const& phaseShift, Conversation*& result, Check& check)
: ConversationSearcherBase<Check, SearcherFirstObjectResult<Conversation*>>(phaseShift, result, check) { }
ConversationSearcher(WorldObject const* searcher, Conversation*& result, Check& check)
: ConversationSearcher(searcher->GetPhaseShift(), result, check) { }
};
template<class Check>
struct ConversationLastSearcher : ConversationSearcherBase<Check, SearcherLastObjectResult<Conversation*>>
{
ConversationLastSearcher(PhaseShift const& phaseShift, Conversation*& result, Check& check)
: ConversationSearcherBase<Check, SearcherLastObjectResult<Conversation*>>(phaseShift, result, check) { }
ConversationLastSearcher(WorldObject const* searcher, Conversation*& result, Check& check)
: ConversationLastSearcher(searcher->GetPhaseShift(), result, check) { }
};
template<class Check>
struct ConversationListSearcher : ConversationSearcherBase<Check, SearcherContainerResult<Conversation*>>
{
template<typename Container>
ConversationListSearcher(PhaseShift const& phaseShift, Container& container, Check& check)
: ConversationSearcherBase<Check, SearcherContainerResult<Conversation*>>(phaseShift, container, check) { }
template<typename Container>
ConversationListSearcher(WorldObject const* searcher, Container& container, Check& check)
: ConversationListSearcher(searcher->GetPhaseShift(), container, check) { }
};
// CHECKS && DO classes
// CHECK modifiers

View File

@@ -5467,7 +5467,7 @@ void Spell::EffectCancelConversation()
std::vector<WorldObject*> objs;
Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck check(unitTarget->GetGUID(), effectInfo->MiscValue);
Trinity::WorldObjectListSearcher<Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck> checker(unitTarget, objs, check, GRID_MAP_TYPE_MASK_CONVERSATION);
Trinity::ConversationListSearcher checker(unitTarget, objs, check);
Cell::VisitGridObjects(unitTarget, checker, 100.0f);
for (WorldObject* obj : objs)

View File

@@ -4647,7 +4647,7 @@ struct at_briarpatch_to_plains : AreaTriggerAI
std::vector<WorldObject*> objs;
Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck check(player->GetGUID(), conversationId);
Trinity::WorldObjectListSearcher searcher(PhasingHandler::GetAlwaysVisiblePhaseShift(), objs, check, GRID_MAP_TYPE_MASK_CONVERSATION);
Trinity::ConversationListSearcher searcher(PhasingHandler::GetAlwaysVisiblePhaseShift(), objs, check);
Cell::VisitGridObjects(player, searcher, 100.0f);
if (objs.empty())