12#define MAX_DESYNC 5.0f
32 itr->second->AddMember(member);
37 SF_LOG_DEBUG(
"entities.unit",
"Group not found: %u. Creating new group.", groupId);
70 QueryResult result =
WorldDatabase.Query(
"SELECT leaderGUID, memberGUID, dist, angle, groupAI, point_1, point_2 FROM creature_formations ORDER BY leaderGUID");
74 SF_LOG_ERROR(
"server.loading",
">> Loaded 0 creatures in formations. DB table `creature_formations` is empty!");
84 fields = result->Fetch();
109 SF_LOG_ERROR(
"sql.sql",
"creature_formations table leader guid %u incorrect (not exist)", group_member->
leaderGUID);
116 SF_LOG_ERROR(
"sql.sql",
"creature_formations table member guid %u incorrect (not exist)", memberGUID);
124 }
while (result->NextRow());
159 if (groupAI == 1 && member !=
m_leader)
162 for (CreatureGroupMemberType::iterator itr =
m_members.begin(); itr !=
m_members.end(); ++itr)
186 for (CreatureGroupMemberType::iterator itr =
m_members.begin(); itr !=
m_members.end(); ++itr)
188 if (itr->first !=
m_leader && itr->first->IsAlive())
191 itr->first->GetMotionMaster()->Initialize();
193 itr->first->GetMotionMaster()->MoveIdle();
194 SF_LOG_DEBUG(
"entities.unit",
"Set %s movement for member GUID: %u", dismiss ?
"default" :
"idle", itr->first->GetGUIDLow());
207 float pathangle = atan2(
m_leader->GetPositionY() - y,
m_leader->GetPositionX() - x);
209 for (CreatureGroupMemberType::iterator itr =
m_members.begin(); itr !=
m_members.end(); ++itr)
215 if (itr->second->point_1)
217 if (
m_leader->GetCurrentWaypointID() == itr->second->point_1)
218 itr->second->follow_angle = (2 *
M_PI) - itr->second->follow_angle;
219 if (
m_leader->GetCurrentWaypointID() == itr->second->point_2)
220 itr->second->follow_angle = (2 *
M_PI) + itr->second->follow_angle;
223 float angle = itr->second->follow_angle;
224 float dist = itr->second->follow_dist;
226 float dx = x + std::cos(angle + pathangle) * dist;
227 float dy = y + std::sin(angle + pathangle) * dist;
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
#define SF_LOG_INFO(filterType__,...)
Skyfire::AutoPtr< ResultSet, Skyfire::Mutex > QueryResult
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
void FormationReset(bool dismiss)
CreatureGroupMemberType m_members
void RemoveMember(Creature *member)
void MemberAttackStart(Creature *member, Unit *target)
void LeaderMoveTo(float x, float y, float z)
void AddMember(Creature *member)
void SetHomePosition(float x, float y, float z, float o)
uint32 GetDBTableGUIDLow() const
void SetFormation(CreatureGroup *formation)
CreatureGroupHolderType CreatureGroupHolder
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
uint32 GetGUIDLow() const
virtual void AttackStart(Unit *)
bool IsValidAttackTarget(Unit const *target) const
MotionMaster * GetMotionMaster()
void SetUnitMovementFlags(uint32 f)
bool SetWalk(bool enable)
uint32 GetInstanceId() const
void UpdateGroundPositionZ(float x, float y, float &z) const
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true) const
WorldDatabaseWorkerPool WorldDatabase
Accessor to the world database.
void NormalizeMapCoord(float &c)