AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
M2Stores.h File Reference
#include "Define.h"
#include "Position.h"
#include <vector>

Go to the source code of this file.

Classes

struct  FlyByCamera
 

Functions

AC_GAME_API void LoadM2Cameras (std::string const &dataPath)
 
AC_GAME_API std::vector< FlyByCamera > const * GetFlyByCameras (uint32 cinematicCameraId)
 

Function Documentation

◆ GetFlyByCameras()

AC_GAME_API std::vector< FlyByCamera > const * GetFlyByCameras ( uint32  cinematicCameraId)
256{
257 return Acore::Containers::MapGetValuePtr(sFlyByCameraStore, cinematicCameraId);
258}
std::unordered_map< uint32, FlyByCameraCollection > sFlyByCameraStore
Definition: M2Stores.cpp:29
auto MapGetValuePtr(M &map, typename M::key_type const &key) -> decltype(AddressOrSelf(map.find(key) ->second))
Definition: Containers.h:208

References Acore::Containers::MapGetValuePtr(), and sFlyByCameraStore.

Referenced by CinematicMgr::BeginCinematic(), and debug_commandscript::HandleDebugPlayCinematicCommand().

◆ LoadM2Cameras()

AC_GAME_API void LoadM2Cameras ( std::string const &  dataPath)
175{
176 sFlyByCameraStore.clear();
177 LOG_INFO("server.loading", ">> Loading Cinematic Camera files");
178
179 uint32 oldMSTime = getMSTime();
180 for (CinematicCameraEntry const* dbcentry : sCinematicCameraStore)
181 {
182 std::string filenameWork = dataPath;
183 filenameWork.append(dbcentry->Model);
184
185 // Replace slashes (always to forward slash, because boost!)
186 std::replace(filenameWork.begin(), filenameWork.end(), '\\', '/');
187
188 boost::filesystem::path filename = filenameWork;
189
190 // Convert to native format
191 filename.make_preferred();
192
193 // Replace mdx to .m2
194 filename.replace_extension("m2");
195
196 std::ifstream m2file(filename.string().c_str(), std::ios::in | std::ios::binary);
197 if (!m2file.is_open())
198 continue;
199
200 // Get file size
201 m2file.seekg(0, std::ios::end);
202 std::streamoff fileSize = m2file.tellg();
203
204 // Reject if not at least the size of the header
205 if (static_cast<uint32>(fileSize) < sizeof(M2Header))
206 {
207 LOG_ERROR("server.loading", "Camera file {} is damaged. File is smaller than header size", filename.string());
208 m2file.close();
209 continue;
210 }
211
212 // Read 4 bytes (signature)
213 m2file.seekg(0, std::ios::beg);
214 char fileCheck[5];
215 m2file.read(fileCheck, 4);
216 fileCheck[4] = 0;
217
218 // Check file has correct magic (MD20)
219 if (strcmp(fileCheck, "MD20"))
220 {
221 LOG_ERROR("server.loading", "Camera file {} is damaged. File identifier not found", filename.string());
222 m2file.close();
223 continue;
224 }
225
226 // Now we have a good file, read it all into a vector of char's, then close the file.
227 std::vector<char> buffer(fileSize);
228 m2file.seekg(0, std::ios::beg);
229 if (!m2file.read(buffer.data(), fileSize))
230 {
231 m2file.close();
232 continue;
233 }
234 m2file.close();
235
236 // Read header
237 M2Header const* header = reinterpret_cast<M2Header const*>(buffer.data());
238
239 if (header->ofsCameras + sizeof(M2Camera) > static_cast<uint32>(fileSize))
240 {
241 LOG_ERROR("server.loading", "Camera file {} is damaged. Camera references position beyond file end", filename.string());
242 continue;
243 }
244
245 // Get camera(s) - Main header, then dump them.
246 M2Camera const* cam = reinterpret_cast<M2Camera const*>(buffer.data() + header->ofsCameras);
247 if (!readCamera(cam, fileSize, header, dbcentry))
248 LOG_ERROR("server.loading", "Camera file {} is damaged. Camera references position beyond file end", filename.string());
249 }
250
251 LOG_INFO("server.loading", ">> Loaded {} Cinematic Waypoint Sets in {} ms", (uint32)sFlyByCameraStore.size(), GetMSTimeDiffToNow(oldMSTime));
252 LOG_INFO("server.loading", " ");
253}
std::uint32_t uint32
Definition: Define.h:108
#define LOG_INFO(filterType__,...)
Definition: Log.h:165
#define LOG_ERROR(filterType__,...)
Definition: Log.h:157
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition: Timer.h:131
uint32 getMSTime()
Definition: Timer.h:103
DBCStorage< CinematicCameraEntry > sCinematicCameraStore(CinematicCameraEntryfmt)
bool readCamera(M2Camera const *cam, uint32 buffSize, M2Header const *header, CinematicCameraEntry const *dbcentry)
Definition: M2Stores.cpp:51
Definition: M2Structure.h:35
uint32 ofsCameras
Definition: M2Structure.h:95
Definition: M2Structure.h:120
Definition: DBCStructure.h:704

References getMSTime(), GetMSTimeDiffToNow(), LOG_ERROR, LOG_INFO, M2Header::ofsCameras, readCamera(), sCinematicCameraStore, and sFlyByCameraStore.

Referenced by World::SetInitialWorldSettings().