From 1e7725c15b149baaf96731231239769e482ec2ed Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 29 Jun 2025 00:58:59 +0200 Subject: Core/Objects: Added grid searchers for SceneObject and Conversation --- src/server/game/Grids/Notifiers/GridNotifiers.h | 83 +++++++++++++++++++++- src/server/game/Spells/SpellEffects.cpp | 2 +- .../scripts/ExilesReach/zone_exiles_reach.cpp | 2 +- 3 files changed, 84 insertions(+), 3 deletions(-) (limited to 'src') 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 struct AreaTriggerLastSearcher : AreaTriggerSearcherBase> { @@ -727,6 +726,88 @@ namespace Trinity : AreaTriggerListSearcher(searcher->GetPhaseShift(), container, check) { } }; + // SceneObject searchers + template + struct SceneObjectSearcherBase : WorldObjectSearcherBase> + { + template + SceneObjectSearcherBase(PhaseShift const& phaseShift, Container& result, Check& check) + : WorldObjectSearcherBase>(phaseShift, result, check) { } + }; + + template + struct SceneObjectSearcher : SceneObjectSearcherBase> + { + SceneObjectSearcher(PhaseShift const& phaseShift, SceneObject*& result, Check& check) + : SceneObjectSearcherBase>(phaseShift, result, check) { } + + SceneObjectSearcher(WorldObject const* searcher, SceneObject*& result, Check& check) + : SceneObjectSearcher(searcher->GetPhaseShift(), result, check) { } + }; + + template + struct SceneObjectLastSearcher : SceneObjectSearcherBase> + { + SceneObjectLastSearcher(PhaseShift const& phaseShift, SceneObject*& result, Check& check) + : SceneObjectSearcherBase>(phaseShift, result, check) { } + + SceneObjectLastSearcher(WorldObject const* searcher, SceneObject*& result, Check& check) + : SceneObjectLastSearcher(searcher->GetPhaseShift(), result, check) { } + }; + + template + struct SceneObjectListSearcher : SceneObjectSearcherBase> + { + template + SceneObjectListSearcher(PhaseShift const& phaseShift, Container& container, Check& check) + : SceneObjectSearcherBase>(phaseShift, container, check) { } + + template + SceneObjectListSearcher(WorldObject const* searcher, Container& container, Check& check) + : SceneObjectListSearcher(searcher->GetPhaseShift(), container, check) { } + }; + + // Conversation searchers + template + struct ConversationSearcherBase : WorldObjectSearcherBase> + { + template + ConversationSearcherBase(PhaseShift const& phaseShift, Container& result, Check& check) + : WorldObjectSearcherBase>(phaseShift, result, check) { } + }; + + template + struct ConversationSearcher : ConversationSearcherBase> + { + ConversationSearcher(PhaseShift const& phaseShift, Conversation*& result, Check& check) + : ConversationSearcherBase>(phaseShift, result, check) { } + + ConversationSearcher(WorldObject const* searcher, Conversation*& result, Check& check) + : ConversationSearcher(searcher->GetPhaseShift(), result, check) { } + }; + + template + struct ConversationLastSearcher : ConversationSearcherBase> + { + ConversationLastSearcher(PhaseShift const& phaseShift, Conversation*& result, Check& check) + : ConversationSearcherBase>(phaseShift, result, check) { } + + ConversationLastSearcher(WorldObject const* searcher, Conversation*& result, Check& check) + : ConversationLastSearcher(searcher->GetPhaseShift(), result, check) { } + }; + + template + struct ConversationListSearcher : ConversationSearcherBase> + { + template + ConversationListSearcher(PhaseShift const& phaseShift, Container& container, Check& check) + : ConversationSearcherBase>(phaseShift, container, check) { } + + template + 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 objs; Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck check(unitTarget->GetGUID(), effectInfo->MiscValue); - Trinity::WorldObjectListSearcher 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 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()) -- cgit v1.2.3