Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
ScriptSystem.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "DatabaseEnv.h"
7#include "ObjectMgr.h"
8#include "ScriptMgr.h"
9#include "ScriptSystem.h"
10
12
14{
15 uint32 oldMSTime = getMSTime();
16
17 // Drop Existing Waypoint list
18 m_mPointMoveMap.clear();
19
20 uint64 uiCreatureCount = 0;
21
22 // Load Waypoints
23 QueryResult result = WorldDatabase.Query("SELECT COUNT(entry) FROM script_waypoint GROUP BY entry");
24 if (result)
25 uiCreatureCount = result->GetRowCount();
26
27 SF_LOG_INFO("server.loading", "Loading Script Waypoints for " UI64FMTD " creature(s)...", uiCreatureCount);
28
29 // 0 1 2 3 4 5
30 result = WorldDatabase.Query("SELECT entry, pointid, location_x, location_y, location_z, waittime FROM script_waypoint ORDER BY pointid");
31
32 if (!result)
33 {
34 SF_LOG_INFO("server.loading", ">> Loaded 0 Script Waypoints. DB table `script_waypoint` is empty.");
35 return;
36 }
37
38 uint32 count = 0;
39
40 do
41 {
42 Field* pFields = result->Fetch();
43 ScriptPointMove temp;
44
45 temp.uiCreatureEntry = pFields[0].GetUInt32();
46 uint32 uiEntry = temp.uiCreatureEntry;
47 temp.uiPointId = pFields[1].GetUInt32();
48 temp.fX = pFields[2].GetFloat();
49 temp.fY = pFields[3].GetFloat();
50 temp.fZ = pFields[4].GetFloat();
51 temp.uiWaitTime = pFields[5].GetUInt32();
52
53 CreatureTemplate const* pCInfo = sObjectMgr->GetCreatureTemplate(temp.uiCreatureEntry);
54
55 if (!pCInfo)
56 {
57 SF_LOG_ERROR("sql.sql", "TSCR: DB table script_waypoint has waypoint for non-existant creature entry %u", temp.uiCreatureEntry);
58 continue;
59 }
60
61 if (!pCInfo->ScriptID)
62 SF_LOG_ERROR("sql.sql", "TSCR: DB table script_waypoint has waypoint for creature entry %u, but creature does not have ScriptName defined and then useless.", temp.uiCreatureEntry);
63
64 m_mPointMoveMap[uiEntry].push_back(temp);
65 ++count;
66 } while (result->NextRow());
67
68 SF_LOG_INFO("server.loading", ">> Loaded %u Script Waypoint nodes in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
69}
#define UI64FMTD
Definition Define.h:64
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
#define SF_LOG_INFO(filterType__,...)
Definition Log.h:137
#define sObjectMgr
Definition ObjectMgr.h:1617
Skyfire::AutoPtr< ResultSet, Skyfire::Mutex > QueryResult
Definition QueryResult.h:48
std::vector< ScriptPointMove > ScriptPointVector
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:22
uint32 getMSTime()
Definition Timer.h:12
Definition Field.h:16
float GetFloat() const
Definition Field.h:177
uint32 GetUInt32() const
Definition Field.h:105
PointMoveMap m_mPointMoveMap
static ScriptPointVector const _empty
void LoadScriptWaypoints()
WorldDatabaseWorkerPool WorldDatabase
Accessor to the world database.
Definition Main.cpp:40
uint32 uiCreatureEntry