aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_11_06_00_world_creature_formations.sql2
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.cpp12
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.h2
3 files changed, 15 insertions, 1 deletions
diff --git a/sql/updates/world/2013_11_06_00_world_creature_formations.sql b/sql/updates/world/2013_11_06_00_world_creature_formations.sql
new file mode 100644
index 00000000000..2e4795fcc90
--- /dev/null
+++ b/sql/updates/world/2013_11_06_00_world_creature_formations.sql
@@ -0,0 +1,2 @@
+ALTER TABLE creature_formations ADD point_1 MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
+ALTER TABLE creature_formations ADD point_2 MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp
index 2a3829b7aeb..588b10d60ff 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.cpp
+++ b/src/server/game/Entities/Creature/CreatureGroups.cpp
@@ -80,7 +80,7 @@ void FormationMgr::LoadCreatureFormations()
CreatureGroupMap.clear();
//Get group data
- QueryResult result = WorldDatabase.Query("SELECT leaderGUID, memberGUID, dist, angle, groupAI FROM creature_formations ORDER BY leaderGUID");
+ QueryResult result = WorldDatabase.Query("SELECT leaderGUID, memberGUID, dist, angle, groupAI, point_1, point_2 FROM creature_formations ORDER BY leaderGUID");
if (!result)
{
@@ -101,6 +101,8 @@ void FormationMgr::LoadCreatureFormations()
group_member->leaderGUID = fields[0].GetUInt32();
uint32 memberGUID = fields[1].GetUInt32();
group_member->groupAI = fields[4].GetUInt32();
+ group_member->point_1 = fields[5].GetUInt16();
+ group_member->point_2 = fields[6].GetUInt16();
//If creature is group leader we may skip loading of dist/angle
if (group_member->leaderGUID != memberGUID)
{
@@ -224,6 +226,14 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z)
if (member == m_leader || !member->IsAlive() || member->GetVictim())
continue;
+ if (itr->second->point_1)
+ {
+ if (m_leader->GetCurrentWaypointID() == itr->second->point_1)
+ itr->second->follow_angle = itr->second->follow_angle + M_PI;
+ if (m_leader->GetCurrentWaypointID() == itr->second->point_2)
+ itr->second->follow_angle = itr->second->follow_angle - M_PI;
+ }
+
float angle = itr->second->follow_angle;
float dist = itr->second->follow_dist;
diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h
index 91a7ac7ff5e..ea115bd2efd 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.h
+++ b/src/server/game/Entities/Creature/CreatureGroups.h
@@ -32,6 +32,8 @@ struct FormationInfo
float follow_dist;
float follow_angle;
uint8 groupAI;
+ uint16 point_1;
+ uint16 point_2;
};
typedef UNORDERED_MAP<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType;