84{
87
88
89 QueryResult result =
WorldDatabase.Query(
"SELECT leaderGUID, memberGUID, dist, angle, groupAI, point_1, point_2 FROM creature_formations ORDER BY leaderGUID");
90 if (!result)
91 {
92 LOG_WARN(
"server.loading",
">> Loaded 0 creatures in formations. DB table `creature_formations` is empty!");
94 return;
95 }
96
98 do
99 {
100 Field const* fields = result->Fetch();
101
102
106 float const follow_dist = fields[2].
Get<
float>();
107 float const follow_angle = fields[3].
Get<
float>() * (
static_cast<float>(M_PI) / 180);
111
112
114 {
116 {
117 LOG_ERROR(
"sql.sql",
"creature_formations table leader guid {} and member guid {} has unsupported GroupAI flag value ({}). Skipped", group_member.
leaderGUID, memberGUID, group_member.
groupAI);
118 continue;
119 }
120
122 {
123 LOG_ERROR(
"sql.sql",
"creature_formations table member guid {} and leader guid {} cannot have follow distance or follow angle because don't have GROUP_AI_FLAG_FOLLOW_LEADER flag. Values are not gonna be used", memberGUID, group_member.
leaderGUID);
126 }
127 else
128 {
131 }
132 }
133 else
134 {
135
137 {
138 LOG_ERROR(
"sql.sql",
"creature_formations table leader guid {} and member guid {} has unsupported GroupAI flag value ({}). Skipped", group_member.
leaderGUID, memberGUID, group_member.
groupAI);
139 continue;
140 }
141
144 if (follow_dist > 0.0f || follow_angle > 0.0f)
145 {
146 LOG_ERROR(
"sql.sql",
"creature_formations table member guid {} and leader guid {} cannot have follow distance or follow angle. Values are not gonna be used", memberGUID, group_member.
leaderGUID);
147 }
148 }
149
151 {
152 LOG_ERROR(
"sql.sql",
"creature_formations table leader guid {} incorrect (does not exist). Skipped", group_member.
leaderGUID);
153 continue;
154 }
155
157 {
158 LOG_ERROR(
"sql.sql",
"creature_formations table member guid {} incorrect (does not exist). Skipped", memberGUID);
159 continue;
160 }
161
163 ++count;
164 } while (result->NextRow());
165
168}
@ GROUP_AI_FLAG_SUPPORTED
@ GROUP_AI_FLAG_FOLLOW_LEADER
std::shared_ptr< ResultSet > QueryResult
Definition DatabaseEnvFwd.h:27
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition DatabaseEnv.cpp:20
std::uint32_t uint32
Definition Define.h:107
std::uint16_t uint16
Definition Define.h:108
#define LOG_INFO(filterType__,...)
Definition Log.h:165
#define LOG_ERROR(filterType__,...)
Definition Log.h:157
#define LOG_WARN(filterType__,...)
Definition Log.h:161
#define sObjectMgr
Definition ObjectMgr.h:1636
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:131
uint32 getMSTime()
Definition Timer.h:103
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
uint32 LowType
Definition ObjectGuid.h:122