diff options
author | AlcDenat <alcdenat@hotmail.com> | 2017-03-21 17:45:07 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-03-21 17:45:07 +0100 |
commit | 024ae15681736db1adea3ac82f666d725d931e6c (patch) | |
tree | edc67f589f7249b104381fd23d38e1a9e09713be | |
parent | 76dd3ae36849bc44cb77cad497575be446172d53 (diff) |
Core/Quests: Implement quest_request_items_locale
Closes #19331
-rw-r--r-- | sql/updates/world/master/2017_03_21_01_world.sql | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/GossipDef.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 9 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.h | 6 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 1 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_reload.cpp | 2 |
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; } |