AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
WaypointMgr Class Reference

#include "WaypointMgr.h"

Public Member Functions

void ReloadPath (uint32 id)
 
void Load ()
 
WaypointPath const * GetPath (uint32 id) const
 

Static Public Member Functions

static WaypointMgrinstance ()
 

Private Member Functions

 WaypointMgr ()
 
 ~WaypointMgr ()
 

Private Attributes

WaypointPathContainer _waypointStore
 

Detailed Description

Constructor & Destructor Documentation

◆ WaypointMgr()

WaypointMgr::WaypointMgr ( )
private
26{
27}

◆ ~WaypointMgr()

WaypointMgr::~WaypointMgr ( )
private
30{
31 for (WaypointPathContainer::iterator itr = _waypointStore.begin(); itr != _waypointStore.end(); ++itr)
32 {
33 itr->second.clear();
34 }
35
36 _waypointStore.clear();
37}
WaypointPathContainer _waypointStore
Definition WaypointMgr.h:76

References _waypointStore.

Member Function Documentation

◆ GetPath()

WaypointPath const * WaypointMgr::GetPath ( uint32  id) const
inline
64 {
65 WaypointPathContainer::const_iterator itr = _waypointStore.find(id);
66 if (itr != _waypointStore.end())
67 return &itr->second;
68
69 return nullptr;
70 }

References _waypointStore.

◆ instance()

WaypointMgr * WaypointMgr::instance ( )
static
40{
41 static WaypointMgr instance;
42 return &instance;
43}
Definition WaypointMgr.h:52
static WaypointMgr * instance()
Definition WaypointMgr.cpp:39

References instance().

Referenced by instance().

◆ Load()

void WaypointMgr::Load ( )
46{
47 uint32 oldMSTime = getMSTime();
48
49 // 0 1 2 3 4 5 6 7 8 9
50 QueryResult result = WorldDatabase.Query("SELECT id, point, position_x, position_y, position_z, orientation, move_type, delay, action, action_chance FROM waypoint_data ORDER BY id, point");
51
52 if (!result)
53 {
54 LOG_WARN("server.loading", ">> Loaded 0 waypoints. DB table `waypoint_data` is empty!");
55 LOG_INFO("server.loading", " ");
56 return;
57 }
58
59 uint32 count = 0;
60
61 do
62 {
63 Field* fields = result->Fetch();
64 WaypointData data;
65
66 uint32 pathId = fields[0].Get<uint32>();
67 WaypointPath& path = _waypointStore[pathId];
68
69 float x = fields[2].Get<float>();
70 float y = fields[3].Get<float>();
71 float z = fields[4].Get<float>();
72 std::optional<float > o;
73 if (!fields[5].IsNull())
74 o = fields[5].Get<float>();
75
78
79 data.id = fields[1].Get<uint32>();
80 data.x = x;
81 data.y = y;
82 data.z = z;
83 data.orientation = o;
84 data.move_type = fields[6].Get<uint32>();
85
87 {
88 //LOG_ERROR("sql.sql", "Waypoint {} in waypoint_data has invalid move_type, ignoring", wp->id);
89 continue;
90 }
91
92 data.delay = fields[7].Get<uint32>();
93 data.event_id = fields[8].Get<uint32>();
94 data.event_chance = fields[9].Get<int16>();
95
96 path.emplace(data.id, data);
97 ++count;
98 } while (result->NextRow());
99
100 for (auto itr = _waypointStore.begin(); itr != _waypointStore.end(); )
101 {
102 uint32 first = itr->second.begin()->first;
103 uint32 last = itr->second.rbegin()->first;
104 if (last - first + 1 != itr->second.size())
105 {
106 LOG_ERROR("sql.sql", "Waypoint {} in waypoint_data has non-contiguous pointids, skipping", itr->first);
107 itr = _waypointStore.erase(itr);
108 }
109 else
110 ++itr;
111 }
112
113 LOG_INFO("server.loading", ">> Loaded {} waypoints in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
114 LOG_INFO("server.loading", " ");
115}
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::int16_t int16
Definition Define.h:104
#define LOG_INFO(filterType__,...)
Definition Log.h:166
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define LOG_WARN(filterType__,...)
Definition Log.h:162
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:131
uint32 getMSTime()
Definition Timer.h:103
@ WAYPOINT_MOVE_TYPE_MAX
Definition WaypointMgr.h:34
std::map< uint32, WaypointData > WaypointPath
Definition WaypointMgr.h:48
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
void NormalizeMapCoord(float &c)
Definition GridDefines.h:202
Definition WaypointMgr.h:38
float z
Definition WaypointMgr.h:40
uint32 event_id
Definition WaypointMgr.h:43
float x
Definition WaypointMgr.h:40
float y
Definition WaypointMgr.h:40
std::optional< float > orientation
Definition WaypointMgr.h:41
uint32 delay
Definition WaypointMgr.h:42
uint8 event_chance
Definition WaypointMgr.h:45
uint32 id
Definition WaypointMgr.h:39
uint32 move_type
Definition WaypointMgr.h:44

References _waypointStore, WaypointData::delay, WaypointData::event_chance, WaypointData::event_id, Field::Get(), getMSTime(), GetMSTimeDiffToNow(), WaypointData::id, LOG_ERROR, LOG_INFO, LOG_WARN, WaypointData::move_type, Acore::NormalizeMapCoord(), WaypointData::orientation, WAYPOINT_MOVE_TYPE_MAX, WorldDatabase, WaypointData::x, WaypointData::y, and WaypointData::z.

◆ ReloadPath()

void WaypointMgr::ReloadPath ( uint32  id)
118{
119 WaypointPathContainer::iterator itr = _waypointStore.find(id);
120 if (itr != _waypointStore.end())
121 {
122 _waypointStore.erase(itr);
123 }
124
126
127 stmt->SetData(0, id);
128
129 PreparedQueryResult result = WorldDatabase.Query(stmt);
130
131 if (!result)
132 return;
133
134 WaypointPath& path = _waypointStore[id];
135
136 do
137 {
138 Field* fields = result->Fetch();
139 WaypointData data;
140
141 float x = fields[1].Get<float>();
142 float y = fields[2].Get<float>();
143 float z = fields[3].Get<float>();
144 std::optional<float> o;
145 if (!fields[4].IsNull())
146 o = fields[4].Get<float>();
147
150
151 data.id = fields[0].Get<uint32>();
152 data.x = x;
153 data.y = y;
154 data.z = z;
155 data.orientation = o;
156 data.move_type = fields[5].Get<uint32>();
157
159 {
160 //LOG_ERROR("sql.sql", "Waypoint {} in waypoint_data has invalid move_type, ignoring", wp->id);
161 continue;
162 }
163
164 data.delay = fields[6].Get<uint32>();
165 data.event_id = fields[7].Get<uint32>();
166 data.event_chance = fields[8].Get<uint8>();
167
168 path.emplace(data.id, data);
169 } while (result->NextRow());
170}
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
std::uint8_t uint8
Definition Define.h:109
@ WORLD_SEL_WAYPOINT_DATA_BY_ID
Definition WorldDatabase.h:60
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157

References _waypointStore, WaypointData::delay, WaypointData::event_chance, WaypointData::event_id, Field::Get(), WaypointData::id, WaypointData::move_type, Acore::NormalizeMapCoord(), WaypointData::orientation, PreparedStatementBase::SetData(), WAYPOINT_MOVE_TYPE_MAX, WORLD_SEL_WAYPOINT_DATA_BY_ID, WorldDatabase, WaypointData::x, WaypointData::y, and WaypointData::z.

Member Data Documentation

◆ _waypointStore

WaypointPathContainer WaypointMgr::_waypointStore
private

The documentation for this class was generated from the following files: