diff options
| author | Traesh <Traesh@users.noreply.github.com> | 2017-05-14 11:40:55 +0200 |
|---|---|---|
| committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-05-14 11:40:55 +0200 |
| commit | c73ce93f4cf84667d23c2ec7e425f40a845eaf4f (patch) | |
| tree | 255a3af04144a58e3156491bffd1aa743fb06bfa /src/server/game/Grids | |
| parent | 3e18fcb8fd4ac8e9700f10eb3b6a1292c0f8beb8 (diff) | |
Core/Entities : Basic Conversation Implementation (#18010)
Diffstat (limited to 'src/server/game/Grids')
| -rw-r--r-- | src/server/game/Grids/GridDefines.h | 9 | ||||
| -rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.cpp | 2 | ||||
| -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 | 3 | ||||
| -rw-r--r-- | src/server/game/Grids/ObjectGridLoader.h | 1 |
6 files changed, 75 insertions, 4 deletions
diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h index 4c89e90b66e..55e6ae1ab24 100644 --- a/src/server/game/Grids/GridDefines.h +++ b/src/server/game/Grids/GridDefines.h @@ -31,6 +31,7 @@ class GameObject; class Pet; class Player; class AreaTrigger; +class Conversation; #define MAX_NUMBER_OF_CELLS 8 @@ -58,8 +59,8 @@ class AreaTrigger; // 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_5(GameObject, Creature/*except pets*/, DynamicObject, Corpse/*Bones*/, AreaTrigger) AllGridObjectTypes; -typedef TYPELIST_6(Creature, GameObject, DynamicObject, Pet, Corpse, AreaTrigger) AllMapStoredObjectTypes; +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 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<Conversation> ConversationMapType; enum GridMapTypeMask { @@ -76,7 +78,8 @@ enum GridMapTypeMask GRID_MAP_TYPE_MASK_GAMEOBJECT = 0x08, GRID_MAP_TYPE_MASK_PLAYER = 0x10, GRID_MAP_TYPE_MASK_AREATRIGGER = 0x20, - GRID_MAP_TYPE_MASK_ALL = 0x3F + GRID_MAP_TYPE_MASK_CONVERSATION = 0x40, + GRID_MAP_TYPE_MASK_ALL = 0x7F }; 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 ebf94bbbc5c..3892db055ec 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -372,4 +372,4 @@ 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<Conversation>(ConversationMapType &); diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index ce1e81468ab..35bf4942af2 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -26,6 +26,7 @@ #include "Corpse.h" #include "Object.h" #include "AreaTrigger.h" +#include "Conversation.h" #include "DynamicObject.h" #include "GameObject.h" #include "Player.h" @@ -121,6 +122,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(ConversationMapType &m) { updateObjects<Conversation>(m); } }; struct TC_GAME_API MessageDistDeliverer @@ -189,6 +191,7 @@ namespace Trinity void Visit(CorpseMapType &m); void Visit(DynamicObjectMapType &m); void Visit(AreaTriggerMapType &m); + void Visit(ConversationMapType &m); template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } }; @@ -210,6 +213,7 @@ namespace Trinity void Visit(CorpseMapType &m); void Visit(DynamicObjectMapType &m); void Visit(AreaTriggerMapType &m); + void Visit(ConversationMapType &m); template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } }; @@ -231,6 +235,7 @@ namespace Trinity void Visit(GameObjectMapType &m); void Visit(DynamicObjectMapType &m); void Visit(AreaTriggerMapType &m); + void Visit(ConversationMapType &m); template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } }; @@ -298,6 +303,15 @@ namespace Trinity i_do(itr->GetSource()); } + void Visit(ConversationMapType &m) + { + if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CONVERSATION)) + return; + for (ConversationMapType::iterator itr = m.begin(); itr != m.end(); ++itr) + if (itr->GetSource()->IsInPhase(_searcher)) + i_do(itr->GetSource()); + } + template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } }; diff --git a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h index 0ab703caade..68a1c17bdb3 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h +++ b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h @@ -181,6 +181,29 @@ void Trinity::WorldObjectSearcher<Check>::Visit(AreaTriggerMapType &m) } template<class Check> +void Trinity::WorldObjectSearcher<Check>::Visit(ConversationMapType &m) +{ + if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CONVERSATION)) + return; + + // already found + if (i_object) + return; + + for (ConversationMapType::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::WorldObjectLastSearcher<Check>::Visit(GameObjectMapType &m) { if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_GAMEOBJECT)) @@ -277,6 +300,22 @@ void Trinity::WorldObjectLastSearcher<Check>::Visit(AreaTriggerMapType &m) } template<class Check> +void Trinity::WorldObjectLastSearcher<Check>::Visit(ConversationMapType &m) +{ + if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CONVERSATION)) + return; + + for (ConversationMapType::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::WorldObjectListSearcher<Check>::Visit(PlayerMapType &m) { if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_PLAYER)) @@ -342,6 +381,17 @@ void Trinity::WorldObjectListSearcher<Check>::Visit(AreaTriggerMapType &m) i_objects.push_back(itr->GetSource()); } +template<class Check> +void Trinity::WorldObjectListSearcher<Check>::Visit(ConversationMapType &m) +{ + if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CONVERSATION)) + return; + + for (ConversationMapType::iterator itr = m.begin(); itr != m.end(); ++itr) + if (i_check(itr->GetSource())) + i_objects.push_back(itr->GetSource()); +} + // Gameobject searchers template<class Check> diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index eab7573f552..5534dff3e38 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -24,6 +24,7 @@ #include "DynamicObject.h" #include "Corpse.h" #include "AreaTrigger.h" +#include "Conversation.h" #include "World.h" #include "CellImpl.h" #include "CreatureAI.h" @@ -238,6 +239,7 @@ 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 ObjectGridCleaner::Visit(CreatureMapType &); @@ -245,3 +247,4 @@ 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<Conversation>(ConversationMapType &); diff --git a/src/server/game/Grids/ObjectGridLoader.h b/src/server/game/Grids/ObjectGridLoader.h index c83a6e7a2d1..71f81f96bf3 100644 --- a/src/server/game/Grids/ObjectGridLoader.h +++ b/src/server/game/Grids/ObjectGridLoader.h @@ -41,6 +41,7 @@ class TC_GAME_API ObjectGridLoader void Visit(CorpseMapType &) const { } void Visit(DynamicObjectMapType&) const { } void Visit(AreaTriggerMapType &) const { } + void Visit(ConversationMapType &) const { } void LoadN(void); |
