aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp85
-rw-r--r--src/server/game/Quests/QuestDef.cpp64
-rw-r--r--src/server/game/Quests/QuestDef.h3
3 files changed, 116 insertions, 36 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index d67d7446d41..d9753433235 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -3983,18 +3983,16 @@ void ObjectMgr::LoadQuests()
"RewardFactionOverride1, RewardFactionOverride2, RewardFactionOverride3, RewardFactionOverride4, RewardFactionOverride5, "
// 62 63 64 65
"PointMapId, PointX, PointY, PointOption, "
- // 66 67 68 69 70 71 72
- "LogTitle, LogDescription, QuestDescription, EndText, OfferRewardText, RequestItemsText, QuestCompletionLog, "
- // 73 74 75 76 77 78 79 80
+ // 66 67 68 69 70
+ "LogTitle, LogDescription, QuestDescription, EndText, QuestCompletionLog, "
+ // 71 72 73 74 75 76 77 78
"RequiredNpcOrGo1, RequiredNpcOrGo2, RequiredNpcOrGo3, RequiredNpcOrGo4, RequiredNpcOrGoCount1, RequiredNpcOrGoCount2, RequiredNpcOrGoCount3, RequiredNpcOrGoCount4, "
- // 81 82 83 84 85 86 87 88
+ // 79 80 81 82 83 84 85 86
"RequiredSourceItemId1, RequiredSourceItemId2, RequiredSourceItemId3, RequiredSourceItemId4, RequiredSourceItemCount1, RequiredSourceItemCount2, RequiredSourceItemCount3, RequiredSourceItemCount4, "
- // 89 90 91 92 93 94 95 96 97 98 99 100
+ // 87 88 89 90 91 92 93 94 95 96 97 98
"RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, "
- // 101 102 103 104 105 106 107 108 109 110 111 112 113
- "Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4, DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4, "
- // 114 115 116 117 118 119 120 121 122 123
- "EmoteOnIncomplete, EmoteOnComplete, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4"
+ // 99 100 101 102 103
+ "Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4"
" FROM quest_template");
if (!result)
{
@@ -4014,6 +4012,75 @@ void ObjectMgr::LoadQuests()
} while (result->NextRow());
std::map<uint32, uint32> usedMailTemplates;
+
+ // Load `quest_details`
+ // 0 1 2 3 4 5 6 7 8
+ result = WorldDatabase.Query("SELECT ID, Emote1, Emote2, Emote3, Emote4, EmoteDelay1, EmoteDelay2, EmoteDelay3, EmoteDelay4 FROM quest_details");
+
+ if (!result)
+ {
+ TC_LOG_ERROR("server.loading", ">> Loaded 0 quest details. DB table `quest_details` is empty.");
+ }
+ else
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 questId = fields[0].GetUInt32();
+
+ auto itr = _questTemplates.find(questId);
+ if (itr != _questTemplates.end())
+ itr->second->LoadQuestDetails(fields);
+ else
+ TC_LOG_ERROR("server.loading", "Table `quest_details` has data for quest %u but such quest does not exist", questId);
+ } while (result->NextRow());
+ }
+
+ // Load `quest_request_items`
+ // 0 1 2 3
+ result = WorldDatabase.Query("SELECT ID, EmoteOnComplete, EmoteOnIncomplete, CompletionText FROM quest_request_items");
+
+ if (!result)
+ {
+ TC_LOG_ERROR("server.loading", ">> Loaded 0 quest request items. DB table `quest_request_items` is empty.");
+ }
+ else
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 questId = fields[0].GetUInt32();
+
+ auto itr = _questTemplates.find(questId);
+ if (itr != _questTemplates.end())
+ itr->second->LoadQuestRequestItems(fields);
+ else
+ TC_LOG_ERROR("server.loading", "Table `quest_request_items` has data for quest %u but such quest does not exist", questId);
+ } while (result->NextRow());
+ }
+
+ // Load `quest_offer_reward`
+ // 0 1 2 3 4 5 6 7 8 9
+ result = WorldDatabase.Query("SELECT ID, Emote1, Emote2, Emote3, Emote4, EmoteDelay1, EmoteDelay2, EmoteDelay3, EmoteDelay4, RewardText FROM quest_offer_reward");
+
+ if (!result)
+ {
+ TC_LOG_ERROR("server.loading", ">> Loaded 0 quest reward emotes. DB table `quest_offer_reward` is empty.");
+ }
+ else
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 questId = fields[0].GetUInt32();
+
+ auto itr = _questTemplates.find(questId);
+ if (itr != _questTemplates.end())
+ itr->second->LoadQuestOfferReward(fields);
+ else
+ TC_LOG_ERROR("server.loading", "Table `quest_offer_reward` has data for quest %u but such quest does not exist", questId);
+ } while (result->NextRow());
+ }
// Load `quest_template_addon`
// 0 1 2 3 4 5 6 7 8
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index d1dcfd0f693..ac9759d31cd 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -79,49 +79,32 @@ Quest::Quest(Field* questRecord)
Objectives = questRecord[67].GetString();
Details = questRecord[68].GetString();
EndText = questRecord[69].GetString();
- OfferRewardText = questRecord[70].GetString();
- RequestItemsText = questRecord[71].GetString();
- CompletedText = questRecord[72].GetString();
+ CompletedText = questRecord[70].GetString();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- RequiredNpcOrGo[i] = questRecord[73+i].GetInt32();
+ RequiredNpcOrGo[i] = questRecord[71+i].GetInt32();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- RequiredNpcOrGoCount[i] = questRecord[77+i].GetUInt16();
+ RequiredNpcOrGoCount[i] = questRecord[75+i].GetUInt16();
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
- RequiredSourceItemId[i] = questRecord[81+i].GetUInt32();
+ RequiredSourceItemId[i] = questRecord[79+i].GetUInt32();
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
- RequiredSourceItemCount[i] = questRecord[85+i].GetUInt16();
+ RequiredSourceItemCount[i] = questRecord[83+i].GetUInt16();
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
- RequiredItemId[i] = questRecord[89+i].GetUInt32();
+ RequiredItemId[i] = questRecord[87+i].GetUInt32();
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
- RequiredItemCount[i] = questRecord[95+i].GetUInt16();
+ RequiredItemCount[i] = questRecord[93+i].GetUInt16();
- // int8 Unknown0 = questRecord[101].GetUInt8();
+ // int8 Unknown0 = questRecord[99].GetUInt8();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- ObjectiveText[i] = questRecord[102+i].GetString();
+ ObjectiveText[i] = questRecord[100+i].GetString();
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- DetailsEmote[i] = questRecord[106+i].GetUInt16();
-
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- DetailsEmoteDelay[i] = questRecord[110+i].GetUInt32();
-
- EmoteOnIncomplete = questRecord[114].GetUInt16();
- EmoteOnComplete = questRecord[115].GetUInt16();
-
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- OfferRewardEmote[i] = questRecord[116+i].GetInt16();
-
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- OfferRewardEmoteDelay[i] = questRecord[120+i].GetInt32();
-
- //int32 VerifiedBuild = questRecord[124].GetInt32();
+ //int32 VerifiedBuild = questRecord[104].GetInt32();
_reqItemsCount = 0;
_reqCreatureOrGOcount = 0;
@@ -145,6 +128,33 @@ Quest::Quest(Field* questRecord)
++_rewChoiceItemsCount;
}
+void Quest::LoadQuestDetails(Field* fields)
+{
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ DetailsEmote[i] = fields[1+i].GetUInt16();
+
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ DetailsEmoteDelay[i] = fields[5+i].GetUInt32();
+}
+
+void Quest::LoadQuestRequestItems(Field* fields)
+{
+ EmoteOnComplete = fields[1].GetUInt16();
+ EmoteOnIncomplete = fields[2].GetUInt16();
+ RequestItemsText = fields[3].GetString();
+}
+
+void Quest::LoadQuestOfferReward(Field* fields)
+{
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ OfferRewardEmote[i] = fields[1+i].GetUInt16();
+
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ OfferRewardEmoteDelay[i] = fields[5+i].GetUInt32();
+
+ OfferRewardText = fields[9].GetString();
+}
+
void Quest::LoadQuestTemplateAddon(Field* fields)
{
MaxLevel = fields[1].GetUInt8();
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index fdfb2a8e8b9..78fd065e9bd 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -195,6 +195,9 @@ class Quest
friend class ObjectMgr;
public:
Quest(Field* questRecord);
+ void LoadQuestDetails(Field* fields);
+ void LoadQuestRequestItems(Field* fields);
+ void LoadQuestOfferReward(Field* fields);
void LoadQuestTemplateAddon(Field* fields);
uint32 XPValue(Player* player) const;