87{
91
92
93 QueryResult result =
WorldDatabase.Query(
"SELECT leaderGUID, memberGUID, dist, angle, groupAI, point_1, point_2 FROM creature_formations ORDER BY leaderGUID");
94 if (!result)
95 {
96 LOG_WARN(
"server.loading",
">> Loaded 0 creatures in formations. DB table `creature_formations` is empty!");
98 return;
99 }
100
102 do
103 {
104 Field const* fields = result->Fetch();
105
106
110 float const follow_dist = fields[2].
Get<
float>();
111 float const follow_angle = fields[3].
Get<
float>() * (
static_cast<float>(M_PI) / 180);
115
116
118 {
120 {
121 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);
122 continue;
123 }
124
126 {
127 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);
130 }
131 else
132 {
135 }
136 }
137 else
138 {
139
141 {
142 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);
143 continue;
144 }
145
148 if (follow_dist > 0.0f || follow_angle > 0.0f)
149 {
150 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);
151 }
152 }
153
155 {
156 LOG_ERROR(
"sql.sql",
"creature_formations table leader guid {} incorrect (does not exist). Skipped", group_member.
leaderGUID);
157 continue;
158 }
159
161 {
162 LOG_ERROR(
"sql.sql",
"creature_formations table member guid {} incorrect (does not exist). Skipped", memberGUID);
163 continue;
164 }
165
168 ++count;
169 } while (result->NextRow());
170
173}
@ 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:153
#define LOG_ERROR(filterType__,...)
Definition Log.h:145
#define LOG_WARN(filterType__,...)
Definition Log.h:149
#define sObjectMgr
Definition ObjectMgr.h:1731
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:99
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:113
uint32 LowType
Definition ObjectGuid.h:125