aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h83
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
-rw-r--r--src/server/scripts/ExilesReach/zone_exiles_reach.cpp2
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())