aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Events/GameEventMgr.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2012-01-05 13:27:17 +0100
committerShauren <shauren.trinity@gmail.com>2012-01-05 13:27:17 +0100
commit01900b5829af7970eee2bea2efe6e74a7830a84d (patch)
treea0110b7e81df404d8f06c2aac821c4a4e92282c9 /src/server/game/Events/GameEventMgr.cpp
parentfc987e9a2f948c7a68e352fe9a3024730e3ed839 (diff)
Core/Events
* Changed how quests are linked to events (no longer in Quest class) * Added quest validation when loading game_event_seasonal_questrelation * Renamed fields in new table to be consistent with game_event* tables * Corrected db data (some entries had -1 as event id)
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
-rwxr-xr-xsrc/server/game/Events/GameEventMgr.cpp35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp
index e1900c6c994..6f5dc0e511e 100755
--- a/src/server/game/Events/GameEventMgr.cpp
+++ b/src/server/game/Events/GameEventMgr.cpp
@@ -764,7 +764,7 @@ void GameEventMgr::LoadFromDB()
uint32 oldMSTime = getMSTime();
// 0 1
- QueryResult result = WorldDatabase.Query("SELECT quest, event FROM game_event_seasonal_questrelation");
+ QueryResult result = WorldDatabase.Query("SELECT questId, eventEntry FROM game_event_seasonal_questrelation");
if (!result)
{
@@ -778,19 +778,22 @@ void GameEventMgr::LoadFromDB()
{
Field* fields = result->Fetch();
- uint32 quest = fields[0].GetUInt32();
- uint16 event_id = fields[1].GetUInt16();
+ uint32 questId = fields[0].GetUInt32();
+ uint16 eventEntry = fields[1].GetUInt16();
- if (event_id >= mGameEvent.size())
+ if (!sObjectMgr->GetQuestTemplate(questId))
+ {
+ sLog->outErrorDb("`game_event_seasonal_questrelation` quest id (%u) does not exist in `quest_template`", questId);
+ continue;
+ }
+
+ if (eventEntry >= mGameEvent.size())
{
- sLog->outErrorDb("`game_event_seasonal_questrelation` event id (%u) is out of range compared to max event in `game_event`", event_id);
+ sLog->outErrorDb("`game_event_seasonal_questrelation` event id (%u) is out of range compared to max event in `game_event`", eventEntry);
continue;
}
-
- Quest * qInfo = sObjectMgr->GetQuestTemplate(quest);
- if (qInfo)
- qInfo->SetSeasonalQuestEvent(event_id);
+ _questToEventLinks[questId] = eventEntry;
++count;
}
while (result->NextRow());
@@ -1671,6 +1674,18 @@ void GameEventMgr::RunSmartAIScripts(uint16 event_id, bool activate)
}
}
+uint16 GameEventMgr::GetEventIdForQuest(Quest const* quest) const
+{
+ if (!quest)
+ return 0;
+
+ UNORDERED_MAP<uint32, uint16>::const_iterator itr = _questToEventLinks.find(quest->GetQuestId());
+ if (itr == _questToEventLinks.end())
+ return 0;
+
+ return itr->second;
+}
+
bool IsHolidayActive(HolidayIds id)
{
if (id == HOLIDAY_NONE)
@@ -1686,7 +1701,7 @@ bool IsHolidayActive(HolidayIds id)
return false;
}
- bool IsEventActive(uint16 event_id)
+bool IsEventActive(uint16 event_id)
{
GameEventMgr::ActiveEvents const& ae = sGameEventMgr->GetActiveEventList();
return ae.find(event_id) != ae.end();