diff options
-rw-r--r-- | sql/updates/world/2013_11_06_00_world_creature_formations.sql | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/CreatureGroups.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/CreatureGroups.h | 2 |
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; |