aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Grids
diff options
context:
space:
mode:
authorTraesh <Traesh@users.noreply.github.com>2017-05-14 11:40:55 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-05-14 11:40:55 +0200
commitc73ce93f4cf84667d23c2ec7e425f40a845eaf4f (patch)
tree255a3af04144a58e3156491bffd1aa743fb06bfa /src/server/game/Grids
parent3e18fcb8fd4ac8e9700f10eb3b6a1292c0f8beb8 (diff)
Core/Entities : Basic Conversation Implementation (#18010)
Diffstat (limited to 'src/server/game/Grids')
-rw-r--r--src/server/game/Grids/GridDefines.h9
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.cpp2
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h14
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiersImpl.h50
-rw-r--r--src/server/game/Grids/ObjectGridLoader.cpp3
-rw-r--r--src/server/game/Grids/ObjectGridLoader.h1
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);