diff options
Diffstat (limited to 'src/server/game/Grids')
| -rw-r--r-- | src/server/game/Grids/GridDefines.h | 11 | ||||
| -rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.h | 14 | ||||
| -rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiersImpl.h | 50 | ||||
| -rw-r--r-- | src/server/game/Grids/ObjectGridLoader.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Grids/ObjectGridLoader.h | 3 |
6 files changed, 79 insertions, 7 deletions
diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h index e01f6d25e5c..81248a93102 100644 --- a/src/server/game/Grids/GridDefines.h +++ b/src/server/game/Grids/GridDefines.h @@ -30,6 +30,7 @@ class GameObject; class Pet; class Player; class AreaTrigger; +class SceneObject; class Conversation; #define MAX_NUMBER_OF_CELLS 8 @@ -58,8 +59,8 @@ class Conversation; // Creature used instead pet to simplify *::Visit templates (not required duplicate code for Creature->Pet case) typedef TYPELIST_4(Player, Creature/*pets*/, Corpse/*resurrectable*/, DynamicObject/*farsight target*/) AllWorldObjectTypes; -typedef TYPELIST_6(GameObject, Creature/*except pets*/, DynamicObject, Corpse/*Bones*/, AreaTrigger, Conversation) AllGridObjectTypes; -typedef TYPELIST_7(Creature, GameObject, DynamicObject, Pet, Corpse, AreaTrigger, Conversation) AllMapStoredObjectTypes; +typedef TYPELIST_7(GameObject, Creature/*except pets*/, DynamicObject, Corpse/*Bones*/, AreaTrigger, SceneObject, Conversation) AllGridObjectTypes; +typedef TYPELIST_8(Creature, GameObject, DynamicObject, Pet, Corpse, AreaTrigger, SceneObject, Conversation) AllMapStoredObjectTypes; typedef GridRefManager<Corpse> CorpseMapType; typedef GridRefManager<Creature> CreatureMapType; @@ -67,6 +68,7 @@ typedef GridRefManager<DynamicObject> DynamicObjectMapType; typedef GridRefManager<GameObject> GameObjectMapType; typedef GridRefManager<Player> PlayerMapType; typedef GridRefManager<AreaTrigger> AreaTriggerMapType; +typedef GridRefManager<SceneObject> SceneObjectMapType; typedef GridRefManager<Conversation> ConversationMapType; enum GridMapTypeMask @@ -77,8 +79,9 @@ enum GridMapTypeMask GRID_MAP_TYPE_MASK_GAMEOBJECT = 0x08, GRID_MAP_TYPE_MASK_PLAYER = 0x10, GRID_MAP_TYPE_MASK_AREATRIGGER = 0x20, - GRID_MAP_TYPE_MASK_CONVERSATION = 0x40, - GRID_MAP_TYPE_MASK_ALL = 0x7F + GRID_MAP_TYPE_MASK_SCENEOBJECT = 0x40, + GRID_MAP_TYPE_MASK_CONVERSATION = 0x80, + GRID_MAP_TYPE_MASK_ALL = 0xFF }; typedef Grid<Player, AllWorldObjectTypes, AllGridObjectTypes> GridType; diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index 287976bf774..b68d366dbfb 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -303,4 +303,5 @@ template void ObjectUpdater::Visit<Creature>(CreatureMapType&); template void ObjectUpdater::Visit<GameObject>(GameObjectMapType&); template void ObjectUpdater::Visit<DynamicObject>(DynamicObjectMapType&); template void ObjectUpdater::Visit<AreaTrigger>(AreaTriggerMapType &); +template void ObjectUpdater::Visit<SceneObject>(SceneObjectMapType &); template void ObjectUpdater::Visit<Conversation>(ConversationMapType &); diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index 09ee2936b0d..a0c31f76348 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -26,6 +26,7 @@ #include "GameObject.h" #include "Packet.h" #include "Player.h" +#include "SceneObject.h" #include "Spell.h" #include "SpellInfo.h" #include "TemporarySummon.h" @@ -115,6 +116,7 @@ namespace Trinity void Visit(DynamicObjectMapType &m) { updateObjects<DynamicObject>(m); } void Visit(CorpseMapType &m) { updateObjects<Corpse>(m); } void Visit(AreaTriggerMapType &m) { updateObjects<AreaTrigger>(m); } + void Visit(SceneObjectMapType &m) { updateObjects<SceneObject>(m); } void Visit(ConversationMapType &m) { updateObjects<Conversation>(m); } }; @@ -259,6 +261,7 @@ namespace Trinity void Visit(CorpseMapType &m); void Visit(DynamicObjectMapType &m); void Visit(AreaTriggerMapType &m); + void Visit(SceneObjectMapType &m); void Visit(ConversationMapType &m); template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } @@ -281,6 +284,7 @@ namespace Trinity void Visit(CorpseMapType &m); void Visit(DynamicObjectMapType &m); void Visit(AreaTriggerMapType &m); + void Visit(SceneObjectMapType &m); void Visit(ConversationMapType &m); template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } @@ -304,6 +308,7 @@ namespace Trinity void Visit(GameObjectMapType &m); void Visit(DynamicObjectMapType &m); void Visit(AreaTriggerMapType &m); + void Visit(SceneObjectMapType &m); void Visit(ConversationMapType &m); template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } @@ -372,6 +377,15 @@ namespace Trinity i_do(itr->GetSource()); } + void Visit(SceneObjectMapType& m) + { + if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_SCENEOBJECT)) + return; + for (SceneObjectMapType::iterator itr = m.begin(); itr != m.end(); ++itr) + if (itr->GetSource()->IsInPhase(_searcher)) + i_do(itr->GetSource()); + } + void Visit(ConversationMapType &m) { if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CONVERSATION)) diff --git a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h index 63daf6b6482..f09de34e4c9 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h +++ b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h @@ -322,6 +322,29 @@ void Trinity::WorldObjectSearcher<Check>::Visit(AreaTriggerMapType &m) } template<class Check> +void Trinity::WorldObjectSearcher<Check>::Visit(SceneObjectMapType &m) +{ + if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_SCENEOBJECT)) + return; + + // already found + if (i_object) + return; + + for (SceneObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) + { + if (!itr->GetSource()->IsInPhase(_searcher)) + continue; + + if (i_check(itr->GetSource())) + { + i_object = itr->GetSource(); + return; + } + } +} + +template<class Check> void Trinity::WorldObjectSearcher<Check>::Visit(ConversationMapType &m) { if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CONVERSATION)) @@ -441,6 +464,22 @@ void Trinity::WorldObjectLastSearcher<Check>::Visit(AreaTriggerMapType &m) } template<class Check> +void Trinity::WorldObjectLastSearcher<Check>::Visit(SceneObjectMapType &m) +{ + if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_SCENEOBJECT)) + return; + + for (SceneObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) + { + if (!itr->GetSource()->IsInPhase(_searcher)) + continue; + + if (i_check(itr->GetSource())) + i_object = itr->GetSource(); + } +} + +template<class Check> void Trinity::WorldObjectLastSearcher<Check>::Visit(ConversationMapType &m) { if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CONVERSATION)) @@ -523,6 +562,17 @@ void Trinity::WorldObjectListSearcher<Check>::Visit(AreaTriggerMapType &m) } template<class Check> +void Trinity::WorldObjectListSearcher<Check>::Visit(SceneObjectMapType &m) +{ + if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_SCENEOBJECT)) + return; + + for (SceneObjectMapType::iterator itr = m.begin(); itr != m.end(); ++itr) + if (i_check(itr->GetSource())) + Insert(itr->GetSource()); +} + +template<class Check> void Trinity::WorldObjectListSearcher<Check>::Visit(ConversationMapType &m) { if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CONVERSATION)) diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index 39f3bf9dc47..237d7196284 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -30,6 +30,7 @@ #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "PhasingHandler.h" +#include "SceneObject.h" #include "World.h" #include "ScriptMgr.h" @@ -285,12 +286,14 @@ void ObjectGridCleaner::Visit(GridRefManager<T> &m) template void ObjectGridUnloader::Visit(CreatureMapType &); template void ObjectGridUnloader::Visit(GameObjectMapType &); template void ObjectGridUnloader::Visit(DynamicObjectMapType &); -template void ObjectGridUnloader::Visit(ConversationMapType &); +template void ObjectGridUnloader::Visit(AreaTriggerMapType&); +template void ObjectGridUnloader::Visit(SceneObjectMapType&); +template void ObjectGridUnloader::Visit(ConversationMapType&); -template void ObjectGridUnloader::Visit(AreaTriggerMapType &); template void ObjectGridCleaner::Visit(CreatureMapType &); template void ObjectGridCleaner::Visit<GameObject>(GameObjectMapType &); template void ObjectGridCleaner::Visit<DynamicObject>(DynamicObjectMapType &); template void ObjectGridCleaner::Visit<Corpse>(CorpseMapType &); template void ObjectGridCleaner::Visit<AreaTrigger>(AreaTriggerMapType &); +template void ObjectGridCleaner::Visit<SceneObject>(SceneObjectMapType &); template void ObjectGridCleaner::Visit<Conversation>(ConversationMapType &); diff --git a/src/server/game/Grids/ObjectGridLoader.h b/src/server/game/Grids/ObjectGridLoader.h index e88a2813d93..dfd02011001 100644 --- a/src/server/game/Grids/ObjectGridLoader.h +++ b/src/server/game/Grids/ObjectGridLoader.h @@ -40,7 +40,8 @@ class TC_GAME_API ObjectGridLoader void Visit(AreaTriggerMapType &m); void Visit(CorpseMapType &) const { } void Visit(DynamicObjectMapType&) const { } - void Visit(ConversationMapType &) const { } + void Visit(SceneObjectMapType&) const { } + void Visit(ConversationMapType&) const { } void LoadN(void); |
