aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlcDenat <alcdenat@hotmail.com>2017-03-21 17:45:07 +0100
committerShauren <shauren.trinity@gmail.com>2017-03-21 17:45:07 +0100
commit024ae15681736db1adea3ac82f666d725d931e6c (patch)
treeedc67f589f7249b104381fd23d38e1a9e09713be
parent76dd3ae36849bc44cb77cad497575be446172d53 (diff)
Core/Quests: Implement quest_request_items_locale
Closes #19331
-rw-r--r--sql/updates/world/master/2017_03_21_01_world.sql8
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp16
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp30
-rw-r--r--src/server/game/Globals/ObjectMgr.h9
-rw-r--r--src/server/game/Quests/QuestDef.h6
-rw-r--r--src/server/game/World/World.cpp1
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp2
7 files changed, 62 insertions, 10 deletions
diff --git a/sql/updates/world/master/2017_03_21_01_world.sql b/sql/updates/world/master/2017_03_21_01_world.sql
new file mode 100644
index 00000000000..4128164a127
--- /dev/null
+++ b/sql/updates/world/master/2017_03_21_01_world.sql
@@ -0,0 +1,8 @@
+DROP TABLE IF EXISTS `quest_request_items_locale`;
+CREATE TABLE `quest_request_items_locale` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `CompletionText` text,
+ `VerifiedBuild` smallint(6) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`)
+);
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 8c0c75f42ed..93d2f070127 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -613,7 +613,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUID, bool enableNext) const
{
std::string questTitle = quest->GetLogTitle();
- std::string rewardText = quest->GetOfferRewardText();
+ std::string rewardText = quest->GetOfferRewardText();
std::string portraitGiverText = quest->GetPortraitGiverText();
std::string portraitGiverName = quest->GetPortraitGiverName();
std::string portraitTurnInText = quest->GetPortraitTurnInText();
@@ -678,16 +678,16 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU
// items. Otherwise, we'll skip straight to the OfferReward
std::string questTitle = quest->GetLogTitle();
- std::string requestItemsText = quest->GetRequestItemsText();
+ std::string completionText = quest->GetRequestItemsText();
LocaleConstant locale = _session->GetSessionDbLocaleIndex();
if (locale >= LOCALE_enUS)
{
if (QuestTemplateLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
- {
ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, locale, questTitle);
- ObjectMgr::GetLocaleString(questTemplateLocale->RequestItemsText, locale, requestItemsText);
- }
+
+ if (QuestRequestItemsLocale const* questRequestItemsLocale = sObjectMgr->GetQuestRequestItemsLocale(quest->GetQuestId()))
+ ObjectMgr::GetLocaleString(questRequestItemsLocale->CompletionText, locale, completionText);
}
if (!quest->HasSpecialFlag(QUEST_SPECIAL_FLAGS_DELIVER) && canComplete)
@@ -730,10 +730,10 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU
switch (obj.Type)
{
case QUEST_OBJECTIVE_ITEM:
- packet.Collect.push_back(WorldPackets::Quest::QuestObjectiveCollect(obj.ObjectID, obj.Amount, obj.Flags));
+ packet.Collect.emplace_back(obj.ObjectID, obj.Amount, obj.Flags);
break;
case QUEST_OBJECTIVE_CURRENCY:
- packet.Currency.push_back(WorldPackets::Quest::QuestCurrency(obj.ObjectID, obj.Amount));
+ packet.Currency.emplace_back(obj.ObjectID, obj.Amount);
break;
case QUEST_OBJECTIVE_MONEY:
packet.MoneyToGet += obj.Amount;
@@ -745,7 +745,7 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU
packet.AutoLaunched = closeOnCancel;
packet.QuestTitle = questTitle;
- packet.CompletionText = requestItemsText;
+ packet.CompletionText = completionText;
_session->SendPacket(packet.Write());
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPC=%s, questid=%u", npcGUID.ToString().c_str(), quest->GetQuestId());
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 5dde20e57f7..2fac5c9e630 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -4826,6 +4826,36 @@ void ObjectMgr::LoadQuestOfferRewardLocale()
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " Quest Offer Reward locale strings in %u ms", _questOfferRewardLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
+void ObjectMgr::LoadQuestRequestItemsLocale()
+{
+ uint32 oldMSTime = getMSTime();
+
+ _questRequestItemsLocaleStore.clear(); // need for reload case
+ // 0 1 2
+ QueryResult result = WorldDatabase.Query("SELECT Id, locale, CompletionText FROM quest_request_items_locale");
+ if (!result)
+ return;
+
+ do
+ {
+ Field* fields = result->Fetch();
+
+ uint32 id = fields[0].GetUInt32();
+ std::string localeName = fields[1].GetString();
+
+ std::string completionText = fields[2].GetString();
+
+ QuestRequestItemsLocale& data = _questRequestItemsLocaleStore[id];
+ LocaleConstant locale = GetLocaleByName(localeName);
+ if (locale == LOCALE_enUS)
+ continue;
+
+ AddLocaleString(completionText, locale, data.CompletionText);
+ } while (result->NextRow());
+
+ TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " Quest Request Items locale strings in %u ms", _questRequestItemsLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
+}
+
void ObjectMgr::LoadScripts(ScriptsType type)
{
uint32 oldMSTime = getMSTime();
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 50744091984..3def419fb82 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -442,6 +442,7 @@ typedef std::unordered_map<uint32, GameObjectLocale> GameObjectLocaleContainer;
typedef std::unordered_map<uint32, QuestTemplateLocale> QuestTemplateLocaleContainer;
typedef std::unordered_map<uint32, QuestObjectivesLocale> QuestObjectivesLocaleContainer;
typedef std::unordered_map<uint32, QuestOfferRewardLocale> QuestOfferRewardLocaleContainer;
+typedef std::unordered_map<uint32, QuestRequestItemsLocale> QuestRequestItemsLocaleContainer;
typedef std::unordered_map<uint32, PageTextLocale> PageTextLocaleContainer;
typedef std::unordered_map<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer;
typedef std::unordered_map<uint32, PointOfInterestLocale> PointOfInterestLocaleContainer;
@@ -1023,6 +1024,7 @@ class TC_GAME_API ObjectMgr
void LoadQuestTemplateLocale();
void LoadQuestObjectivesLocale();
void LoadQuestOfferRewardLocale();
+ void LoadQuestRequestItemsLocale();
void LoadPageTextLocales();
void LoadGossipMenuItemsLocales();
void LoadPointOfInterestLocales();
@@ -1199,6 +1201,12 @@ class TC_GAME_API ObjectMgr
if (itr == _questOfferRewardLocaleStore.end()) return nullptr;
return &itr->second;
}
+ QuestRequestItemsLocale const* GetQuestRequestItemsLocale(uint32 entry) const
+ {
+ auto itr = _questRequestItemsLocaleStore.find(entry);
+ if (itr == _questRequestItemsLocaleStore.end()) return nullptr;
+ return &itr->second;
+ }
QuestObjectivesLocale const* GetQuestObjectivesLocale(uint32 entry) const
{
QuestObjectivesLocaleContainer::const_iterator itr = _questObjectivesLocaleStore.find(entry);
@@ -1554,6 +1562,7 @@ class TC_GAME_API ObjectMgr
QuestTemplateLocaleContainer _questTemplateLocaleStore;
QuestObjectivesLocaleContainer _questObjectivesLocaleStore;
QuestOfferRewardLocaleContainer _questOfferRewardLocaleStore;
+ QuestRequestItemsLocaleContainer _questRequestItemsLocaleStore;
PageTextLocaleContainer _pageTextLocaleStore;
GossipMenuItemsLocaleContainer _gossipMenuItemsLocaleStore;
PointOfInterestLocaleContainer _pointOfInterestLocaleStore;
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 024dc7976f2..2fa92f6fa4f 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -253,9 +253,11 @@ struct QuestTemplateLocale
StringVector PortraitTurnInText;
StringVector PortraitTurnInName;
StringVector QuestCompletionLog;
+};
- /// @todo: implemente this in new tables
- StringVector RequestItemsText;
+struct QuestRequestItemsLocale
+{
+ StringVector CompletionText;
};
struct QuestObjectivesLocale
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 1a7e4de6261..6560f3c1d92 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1607,6 +1607,7 @@ void World::SetInitialWorldSettings()
sObjectMgr->LoadGameObjectLocales();
sObjectMgr->LoadQuestTemplateLocale();
sObjectMgr->LoadQuestOfferRewardLocale();
+ sObjectMgr->LoadQuestRequestItemsLocale();
sObjectMgr->LoadQuestObjectivesLocale();
sObjectMgr->LoadPageTextLocales();
sObjectMgr->LoadGossipMenuItemsLocales();
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index d67c1e6059a..1b54aa4f03e 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -1060,9 +1060,11 @@ public:
sObjectMgr->LoadQuestTemplateLocale();
sObjectMgr->LoadQuestObjectivesLocale();
sObjectMgr->LoadQuestOfferRewardLocale();
+ sObjectMgr->LoadQuestRequestItemsLocale();
handler->SendGlobalGMSysMessage("DB table `quest_template_locale` reloaded.");
handler->SendGlobalGMSysMessage("DB table `quest_objectives_locale` reloaded.");
handler->SendGlobalGMSysMessage("DB table `quest_offer_reward_locale` reloaded.");
+ handler->SendGlobalGMSysMessage("DB table `quest_request_items_locale` reloaded.");
return true;
}