diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-06-29 00:58:59 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-06-29 00:58:59 +0200 |
commit | 1e7725c15b149baaf96731231239769e482ec2ed (patch) | |
tree | c832d58ca617fe2baa085bdebea1a5daa694f10a /src | |
parent | 5334467f493eb16141f4ad0bce956bc3e19244a0 (diff) |
Core/Objects: Added grid searchers for SceneObject and Conversation
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.h | 83 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/ExilesReach/zone_exiles_reach.cpp | 2 |
3 files changed, 84 insertions, 3 deletions
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index ae28d6e6fbe..342afe3ea67 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -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 diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 6baa049f831..97abfb4fa26 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -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) diff --git a/src/server/scripts/ExilesReach/zone_exiles_reach.cpp b/src/server/scripts/ExilesReach/zone_exiles_reach.cpp index 7eb00fabbb8..14518d79a32 100644 --- a/src/server/scripts/ExilesReach/zone_exiles_reach.cpp +++ b/src/server/scripts/ExilesReach/zone_exiles_reach.cpp @@ -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()) |