aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Accounts/RBAC.h2
-rw-r--r--src/server/game/Chat/ChatLink.cpp2
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp94
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp112
-rw-r--r--src/server/game/Globals/ObjectMgr.h21
-rw-r--r--src/server/game/Quests/QuestDef.cpp2
-rw-r--r--src/server/game/Quests/QuestDef.h17
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp31
-rw-r--r--src/server/game/World/World.cpp3
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp2
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp14
-rw-r--r--src/server/shared/Common.cpp10
-rw-r--r--src/server/shared/Common.h11
14 files changed, 183 insertions, 140 deletions
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index edd63404543..bcd20af30ae 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -571,7 +571,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT = 664,
RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT = 665,
RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST = 666,
- RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST = 667,
+ RBAC_PERM_COMMAND_RELOAD_QUEST_LOCALE = 667,
RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD = 668,
RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE = 669,
RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE = 670,
diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp
index ea12ff91a1d..89a7d64c432 100644
--- a/src/server/game/Chat/ChatLink.cpp
+++ b/src/server/game/Chat/ChatLink.cpp
@@ -242,7 +242,7 @@ bool QuestChatLink::ValidateName(char* buffer, const char* context)
bool res = (_quest->GetLogTitle() == buffer);
if (!res)
- if (QuestLocale const* ql = sObjectMgr->GetQuestLocale(_quest->GetQuestId()))
+ if (QuestTemplateLocale const* ql = sObjectMgr->GetQuestLocale(_quest->GetQuestId()))
for (uint8 i = 0; i < ql->LogTitle.size(); i++)
if (ql->LogTitle[i] == buffer)
{
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 2e52ad10641..23fc857e2d1 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -237,7 +237,7 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID)
std::string title = quest->GetLogTitle();
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
- if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(questID))
+ if (QuestTemplateLocale const* localeData = sObjectMgr->GetQuestLocale(questID))
ObjectMgr::GetLocaleString(localeData->LogTitle, locale, title);
if (questLevelInTitle)
@@ -355,7 +355,7 @@ void PlayerMenu::SendQuestGiverQuestList(QEmote const& eEmote, const std::string
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
- if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(questID))
+ if (QuestTemplateLocale const* localeData = sObjectMgr->GetQuestLocale(questID))
ObjectMgr::GetLocaleString(localeData->LogTitle, locale, title);
if (questLevelInTitle)
@@ -394,7 +394,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
{
- if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
+ if (QuestTemplateLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
{
ObjectMgr::GetLocaleString(localeData->LogTitle, locale, questLogTitle);
ObjectMgr::GetLocaleString(localeData->LogDescription, locale, questLogDescription);
@@ -456,6 +456,8 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
{
+ LocaleConstant locale = _session->GetSessionDbLocaleIndex();
+
std::string questLogTitle = quest->GetLogTitle();
std::string questLogDescription = quest->GetLogDescription();
std::string questDescription = quest->GetQuestDescription();
@@ -466,29 +468,19 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
std::string portraitTurnInText = quest->GetPortraitTurnInText();
std::string portraitTurnInName = quest->GetPortraitTurnInName();
- QuestObjectives const& objectives = quest->GetObjectives();
-
- std::vector<std::string> questObjectiveDescription(objectives.size());
- for (uint8 i = 0; i < objectives.size(); ++i)
- questObjectiveDescription[i] = objectives[i].Description;
-
- int32 locale = _session->GetSessionDbLocaleIndex();
- if (locale >= 0)
+ if (locale >= LOCALE_enUS)
{
- if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
+ if (QuestTemplateLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
{
- ObjectMgr::GetLocaleString(localeData->LogTitle, locale, questLogTitle);
- ObjectMgr::GetLocaleString(localeData->LogDescription, locale, questLogDescription);
- ObjectMgr::GetLocaleString(localeData->QuestDescription, locale, questDescription);
- ObjectMgr::GetLocaleString(localeData->AreaDescription, locale, areaDescription);
- ObjectMgr::GetLocaleString(localeData->QuestCompletionLog, locale, questCompletionLog);
- ObjectMgr::GetLocaleString(localeData->PortraitGiverText, locale, portraitGiverText);
- ObjectMgr::GetLocaleString(localeData->PortraitGiverName, locale, portraitGiverName);
- ObjectMgr::GetLocaleString(localeData->PortraitTurnInText, locale, portraitTurnInText);
- ObjectMgr::GetLocaleString(localeData->PortraitTurnInName, locale, portraitTurnInName);
-
- for (uint8 i = 0; i < objectives.size(); ++i)
- ObjectMgr::GetLocaleString(localeData->ObjectiveDescription[i], locale, questObjectiveDescription[i]);
+ ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, locale, questLogTitle);
+ ObjectMgr::GetLocaleString(questTemplateLocale->LogDescription, locale, questLogDescription);
+ ObjectMgr::GetLocaleString(questTemplateLocale->QuestDescription, locale, questDescription);
+ ObjectMgr::GetLocaleString(questTemplateLocale->AreaDescription, locale, areaDescription);
+ ObjectMgr::GetLocaleString(questTemplateLocale->QuestCompletionLog, locale, questCompletionLog);
+ ObjectMgr::GetLocaleString(questTemplateLocale->PortraitGiverText, locale, portraitGiverText);
+ ObjectMgr::GetLocaleString(questTemplateLocale->PortraitGiverName, locale, portraitGiverName);
+ ObjectMgr::GetLocaleString(questTemplateLocale->PortraitTurnInText, locale, portraitTurnInText);
+ ObjectMgr::GetLocaleString(questTemplateLocale->PortraitTurnInName, locale, portraitTurnInName);
}
}
@@ -575,11 +567,15 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
packet.Info.QuestCompletionLog = questCompletionLog;
packet.Info.AllowableRaces = quest->GetAllowableRaces();
- for (QuestObjective const& obj : quest->Objectives)
+ for (QuestObjective const& questObjective : quest->GetObjectives())
{
- packet.Info.Objectives.push_back(obj);
- // @todo update quets objective locales
- //packet.Info.Objectives.back().Description = questObjectiveDescription[i];
+ packet.Info.Objectives.push_back(questObjective);
+
+ if (locale >= LOCALE_enUS)
+ {
+ if (QuestObjectivesLocale const* questObjectivesLocaleData = sObjectMgr->GetQuestObjectivesLocale(questObjective.ID))
+ ObjectMgr::GetLocaleString(questObjectivesLocaleData->Description, locale, packet.Info.Objectives.back().Description);
+ }
}
for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
@@ -605,24 +601,24 @@ 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 questOfferRewardText = quest->GetOfferRewardText();
- std::string portraitGiverText = quest->GetPortraitGiverText();
- std::string portraitGiverName = quest->GetPortraitGiverName();
- std::string portraitTurnInText = quest->GetPortraitTurnInText();
- std::string portraitTurnInName = quest->GetPortraitTurnInName();
-
- int32 locale = _session->GetSessionDbLocaleIndex();
- if (locale >= 0)
+ std::string questTitle = quest->GetLogTitle();
+ std::string questOfferRewardText = quest->GetOfferRewardText();
+ std::string portraitGiverText = quest->GetPortraitGiverText();
+ std::string portraitGiverName = quest->GetPortraitGiverName();
+ std::string portraitTurnInText = quest->GetPortraitTurnInText();
+ std::string portraitTurnInName = quest->GetPortraitTurnInName();
+
+ LocaleConstant locale = _session->GetSessionDbLocaleIndex();
+ if (locale >= LOCALE_enUS)
{
- if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
+ if (QuestTemplateLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
{
- ObjectMgr::GetLocaleString(localeData->LogTitle, locale, questTitle);
- ObjectMgr::GetLocaleString(localeData->OfferRewardText, locale, questOfferRewardText);
- ObjectMgr::GetLocaleString(localeData->PortraitGiverText, locale, portraitGiverText);
- ObjectMgr::GetLocaleString(localeData->PortraitGiverName, locale, portraitGiverName);
- ObjectMgr::GetLocaleString(localeData->PortraitTurnInText, locale, portraitTurnInText);
- ObjectMgr::GetLocaleString(localeData->PortraitTurnInName, locale, portraitTurnInName);
+ ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, locale, questTitle);
+ ObjectMgr::GetLocaleString(questTemplateLocale->OfferRewardText, locale, questOfferRewardText);
+ ObjectMgr::GetLocaleString(questTemplateLocale->PortraitGiverText, locale, portraitGiverText);
+ ObjectMgr::GetLocaleString(questTemplateLocale->PortraitGiverName, locale, portraitGiverName);
+ ObjectMgr::GetLocaleString(questTemplateLocale->PortraitTurnInText, locale, portraitTurnInText);
+ ObjectMgr::GetLocaleString(questTemplateLocale->PortraitTurnInName, locale, portraitTurnInName);
}
}
@@ -671,13 +667,13 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU
std::string questTitle = quest->GetLogTitle();
std::string requestItemsText = quest->GetRequestItemsText();
- int32 locale = _session->GetSessionDbLocaleIndex();
- if (locale >= 0)
+ LocaleConstant locale = _session->GetSessionDbLocaleIndex();
+ if (locale >= LOCALE_enUS)
{
- if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
+ if (QuestTemplateLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
{
- ObjectMgr::GetLocaleString(localeData->LogTitle, locale, questTitle);
- ObjectMgr::GetLocaleString(localeData->RequestItemsText, locale, requestItemsText);
+ ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, locale, questTitle);
+ ObjectMgr::GetLocaleString(questTemplateLocale->RequestItemsText, locale, requestItemsText);
}
}
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 9d5c40b4601..c1a58ad5669 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -16306,7 +16306,7 @@ void Player::SendQuestConfirmAccept(const Quest* quest, Player* pReceiver)
int loc_idx = pReceiver->GetSession()->GetSessionDbLocaleIndex();
if (loc_idx >= 0)
- if (const QuestLocale* pLocale = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
+ if (const QuestTemplateLocale* pLocale = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
ObjectMgr::GetLocaleString(pLocale->LogTitle, loc_idx, strTitle);
WorldPacket data(SMSG_QUEST_CONFIRM_ACCEPT, (4 + strTitle.size() + 8));
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index da1529a5730..daf48ac5fda 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -341,7 +341,7 @@ void ObjectMgr::LoadCreatureLocales()
CreatureLocale& data = _creatureLocaleStore[entry];
- for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
+ for (uint8 i = OLD_TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = (LocaleConstant) i;
AddLocaleString(fields[1 + 3 * (i - 1)].GetString(), locale, data.Name);
@@ -378,7 +378,7 @@ void ObjectMgr::LoadGossipMenuItemsLocales()
GossipMenuItemsLocale& data = _gossipMenuItemsLocaleStore[MAKE_PAIR32(menuId, id)];
- for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
+ for (uint8 i = OLD_TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = (LocaleConstant) i;
AddLocaleString(fields[2 + 2 * (i - 1)].GetString(), locale, data.OptionText);
@@ -409,7 +409,7 @@ void ObjectMgr::LoadPointOfInterestLocales()
PointOfInterestLocale& data = _pointOfInterestLocaleStore[entry];
- for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
+ for (uint8 i = OLD_TOTAL_LOCALES - 1; i > 0; --i)
AddLocaleString(fields[i].GetString(), LocaleConstant(i), data.IconName);
} while (result->NextRow());
@@ -4223,23 +4223,16 @@ void ObjectMgr::LoadQuests()
TC_LOG_INFO("server.loading", ">> Loaded %lu quests definitions in %u ms", (unsigned long)_questTemplates.size(), GetMSTimeDiffToNow(oldMSTime));
}
-void ObjectMgr::LoadQuestLocales()
+void ObjectMgr::LoadQuestTemplateLocale()
{
uint32 oldMSTime = getMSTime();
- _questLocaleStore.clear(); // need for reload case
-
- QueryResult result = WorldDatabase.Query("SELECT Id, "
- "Title_loc1, Details_loc1, Objectives_loc1, OfferRewardText_loc1, RequestItemsText_loc1, EndText_loc1, CompletedText_loc1, ObjectiveText1_loc1, ObjectiveText2_loc1, ObjectiveText3_loc1, ObjectiveText4_loc1, QuestGiverTextWindow_loc1, QuestGiverTargetName_loc1, QuestTurnTextWindow_loc1, QuestTurnTargetName_loc1,"
- "Title_loc2, Details_loc2, Objectives_loc2, OfferRewardText_loc2, RequestItemsText_loc2, EndText_loc2, CompletedText_loc2, ObjectiveText1_loc2, ObjectiveText2_loc2, ObjectiveText3_loc2, ObjectiveText4_loc2, QuestGiverTextWindow_loc2, QuestGiverTargetName_loc2, QuestTurnTextWindow_loc2, QuestTurnTargetName_loc2,"
- "Title_loc3, Details_loc3, Objectives_loc3, OfferRewardText_loc3, RequestItemsText_loc3, EndText_loc3, CompletedText_loc3, ObjectiveText1_loc3, ObjectiveText2_loc3, ObjectiveText3_loc3, ObjectiveText4_loc3, QuestGiverTextWindow_loc3, QuestGiverTargetName_loc3, QuestTurnTextWindow_loc3, QuestTurnTargetName_loc3,"
- "Title_loc4, Details_loc4, Objectives_loc4, OfferRewardText_loc4, RequestItemsText_loc4, EndText_loc4, CompletedText_loc4, ObjectiveText1_loc4, ObjectiveText2_loc4, ObjectiveText3_loc4, ObjectiveText4_loc4, QuestGiverTextWindow_loc4, QuestGiverTargetName_loc4, QuestTurnTextWindow_loc4, QuestTurnTargetName_loc4,"
- "Title_loc5, Details_loc5, Objectives_loc5, OfferRewardText_loc5, RequestItemsText_loc5, EndText_loc5, CompletedText_loc5, ObjectiveText1_loc5, ObjectiveText2_loc5, ObjectiveText3_loc5, ObjectiveText4_loc5, QuestGiverTextWindow_loc5, QuestGiverTargetName_loc5, QuestTurnTextWindow_loc5, QuestTurnTargetName_loc5,"
- "Title_loc6, Details_loc6, Objectives_loc6, OfferRewardText_loc6, RequestItemsText_loc6, EndText_loc6, CompletedText_loc6, ObjectiveText1_loc6, ObjectiveText2_loc6, ObjectiveText3_loc6, ObjectiveText4_loc6, QuestGiverTextWindow_loc6, QuestGiverTargetName_loc6, QuestTurnTextWindow_loc6, QuestTurnTargetName_loc6,"
- "Title_loc7, Details_loc7, Objectives_loc7, OfferRewardText_loc7, RequestItemsText_loc7, EndText_loc7, CompletedText_loc7, ObjectiveText1_loc7, ObjectiveText2_loc7, ObjectiveText3_loc7, ObjectiveText4_loc7, QuestGiverTextWindow_loc7, QuestGiverTargetName_loc7, QuestTurnTextWindow_loc7, QuestTurnTargetName_loc7,"
- "Title_loc8, Details_loc8, Objectives_loc8, OfferRewardText_loc8, RequestItemsText_loc8, EndText_loc8, CompletedText_loc8, ObjectiveText1_loc8, ObjectiveText2_loc8, ObjectiveText3_loc8, ObjectiveText4_loc8, QuestGiverTextWindow_loc8, QuestGiverTargetName_loc8, QuestTurnTextWindow_loc8, QuestTurnTargetName_loc8"
- " FROM locales_quest");
-
+ _questTemplateLocaleStore.clear(); // need for reload case
+ // 0 1
+ QueryResult result = WorldDatabase.Query("SELECT Id, locale, "
+ // 2 3 4 5 6 7 8 9 10
+ "LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog"
+ " FROM quest_template_locale");
if (!result)
return;
@@ -4247,34 +4240,63 @@ void ObjectMgr::LoadQuestLocales()
{
Field* fields = result->Fetch();
- uint32 entry = fields[0].GetUInt32();
+ uint32 id = fields[0].GetUInt32();
+ std::string localeName = fields[1].GetString();
+
+ std::string logTitle = fields[2].GetString();
+ std::string logDescription = fields[3].GetString();
+ std::string questDescription = fields[4].GetString();
+ std::string areaDescription = fields[5].GetString();
+ std::string portraitGiverText = fields[6].GetString();
+ std::string portraitGiverName = fields[7].GetString();
+ std::string portraitTurnInText = fields[8].GetString();
+ std::string portraitTurnInName = fields[9].GetString();
+ std::string questCompletionLog = fields[10].GetString();
+
+ QuestTemplateLocale& data = _questTemplateLocaleStore[id];
+ LocaleConstant locale = GetLocaleByName(localeName);
+
+ AddLocaleString(logTitle, locale, data.LogTitle);
+ AddLocaleString(logDescription, locale, data.LogDescription);
+ AddLocaleString(questDescription, locale, data.QuestDescription);
+ AddLocaleString(areaDescription, locale, data.AreaDescription);
+ AddLocaleString(portraitGiverText, locale, data.PortraitGiverText);
+ AddLocaleString(portraitGiverName, locale, data.PortraitGiverName);
+ AddLocaleString(portraitTurnInText, locale, data.PortraitTurnInText);
+ AddLocaleString(portraitTurnInName, locale, data.PortraitTurnInName);
+ AddLocaleString(questCompletionLog, locale, data.QuestCompletionLog);
+ } while (result->NextRow());
- QuestLocale& data = _questLocaleStore[entry];
+ TC_LOG_INFO("server.loading", ">> Loaded %u Quest Tempalate locale strings in %u ms", uint32(_questTemplateLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
+}
- for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
- {
- LocaleConstant locale = (LocaleConstant) i;
+void ObjectMgr::LoadQuestObjectivesLocale()
+{
+ uint32 oldMSTime = getMSTime();
- AddLocaleString(fields[1 + 15 * (i - 1)].GetString(), locale, data.LogTitle);
- AddLocaleString(fields[1 + 15 * (i - 1) + 1].GetString(), locale, data.LogDescription);
- AddLocaleString(fields[1 + 15 * (i - 1) + 2].GetString(), locale, data.QuestDescription);
- AddLocaleString(fields[1 + 15 * (i - 1) + 3].GetString(), locale, data.OfferRewardText);
- AddLocaleString(fields[1 + 15 * (i - 1) + 4].GetString(), locale, data.RequestItemsText);
- AddLocaleString(fields[1 + 15 * (i - 1) + 5].GetString(), locale, data.AreaDescription);
- AddLocaleString(fields[1 + 15 * (i - 1) + 6].GetString(), locale, data.QuestCompletionLog);
+ _questObjectivesLocaleStore.clear(); // need for reload case
+ // 0 1 2
+ QueryResult result = WorldDatabase.Query("SELECT Id, locale, Description FROM quest_objectives_locale");
+ if (!result)
+ return;
- data.ObjectiveDescription.resize(4);
- for (uint8 k = 0; k < 4; ++k)
- AddLocaleString(fields[1 + 15 * (i - 1) + 7 + k].GetString(), locale, data.ObjectiveDescription[k]);
+ do
+ {
+ Field* fields = result->Fetch();
- AddLocaleString(fields[1 + 15 * (i - 1) + 11].GetString(), locale, data.PortraitGiverText);
- AddLocaleString(fields[1 + 15 * (i - 1) + 12].GetString(), locale, data.PortraitGiverName);
- AddLocaleString(fields[1 + 15 * (i - 1) + 13].GetString(), locale, data.PortraitTurnInText);
- AddLocaleString(fields[1 + 15 * (i - 1) + 14].GetString(), locale, data.PortraitTurnInName);
- }
- } while (result->NextRow());
+ uint32 id = fields[0].GetUInt32();
+ std::string localeName = fields[1].GetString();
+
+ std::string Description = fields[2].GetString();
- TC_LOG_INFO("server.loading", ">> Loaded %u Quest locale strings in %u ms", uint32(_questLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
+ QuestObjectivesLocale& data = _questObjectivesLocaleStore[id];
+ LocaleConstant locale = GetLocaleByName(localeName);
+
+ AddLocaleString(Description, locale, data.Description);
+ }
+ while (result->NextRow());
+
+ TC_LOG_INFO("server.loading", ">> Loaded %u Quest Objectives locale strings in %u ms", uint32(_questObjectivesLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadScripts(ScriptsType type)
@@ -4880,7 +4902,7 @@ void ObjectMgr::LoadPageTextLocales()
PageTextLocale& data = _pageTextLocaleStore[entry];
- for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
+ for (uint8 i = OLD_TOTAL_LOCALES - 1; i > 0; --i)
AddLocaleString(fields[i].GetString(), LocaleConstant(i), data.Text);
} while (result->NextRow());
@@ -5143,7 +5165,7 @@ void ObjectMgr::LoadNpcTextLocales()
NpcTextLocale& data = _npcTextLocaleStore[entry];
- for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
+ for (uint8 i = OLD_TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = (LocaleConstant) i;
for (uint8 j = 0; j < MAX_GOSSIP_TEXT_OPTIONS; ++j)
@@ -6115,10 +6137,10 @@ void ObjectMgr::LoadGameObjectLocales()
GameObjectLocale& data = _gameObjectLocaleStore[entry];
- for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
+ for (uint8 i = OLD_TOTAL_LOCALES - 1; i > 0; --i)
{
AddLocaleString(fields[i].GetString(), LocaleConstant(i), data.Name);
- AddLocaleString(fields[i + (TOTAL_LOCALES - 1)].GetString(), LocaleConstant(i), data.CastBarCaption);
+ AddLocaleString(fields[i + (OLD_TOTAL_LOCALES - 1)].GetString(), LocaleConstant(i), data.CastBarCaption);
}
} while (result->NextRow());
@@ -6503,7 +6525,7 @@ void ObjectMgr::LoadCorpses()
Field* fields = phaseResult->Fetch();
uint32 guid = fields[0].GetUInt32();
uint32 phaseId = fields[1].GetUInt32();
-
+
phases[guid].push_back(phaseId);
} while (phaseResult->NextRow());
@@ -7403,7 +7425,7 @@ bool ObjectMgr::LoadTrinityStrings()
data.Content.resize(DEFAULT_LOCALE + 1);
- for (int8 i = TOTAL_LOCALES - 1; i >= 0; --i)
+ for (int8 i = OLD_TOTAL_LOCALES - 1; i >= 0; --i)
AddLocaleString(fields[i + 1].GetString(), LocaleConstant(i), data.Content);
}
while (result->NextRow());
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index b49b46cb555..738bff89397 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -433,7 +433,8 @@ typedef std::unordered_map<ObjectGuid::LowType, GameObjectData> GameObjectDataCo
typedef std::map<TempSummonGroupKey, std::vector<TempSummonData> > TempSummonDataContainer;
typedef std::unordered_map<uint32, CreatureLocale> CreatureLocaleContainer;
typedef std::unordered_map<uint32, GameObjectLocale> GameObjectLocaleContainer;
-typedef std::unordered_map<uint32, QuestLocale> QuestLocaleContainer;
+typedef std::unordered_map<uint32, QuestTemplateLocale> QuestTemplateLocaleContainer;
+typedef std::unordered_map<uint32, QuestObjectivesLocale> QuestObjectivesLocaleContainer;
typedef std::unordered_map<uint32, NpcTextLocale> NpcTextLocaleContainer;
typedef std::unordered_map<uint32, PageTextLocale> PageTextLocaleContainer;
typedef std::unordered_map<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer;
@@ -963,7 +964,8 @@ class ObjectMgr
void LoadItemTemplates();
void LoadItemTemplateAddon();
void LoadItemScriptNames();
- void LoadQuestLocales();
+ void LoadQuestTemplateLocale();
+ void LoadQuestObjectivesLocale();
void LoadNpcTextLocales();
void LoadPageTextLocales();
void LoadGossipMenuItemsLocales();
@@ -1112,10 +1114,16 @@ class ObjectMgr
if (itr == _gameObjectLocaleStore.end()) return NULL;
return &itr->second;
}
- QuestLocale const* GetQuestLocale(uint32 entry) const
+ QuestTemplateLocale const* GetQuestLocale(uint32 entry) const
{
- QuestLocaleContainer::const_iterator itr = _questLocaleStore.find(entry);
- if (itr == _questLocaleStore.end()) return NULL;
+ QuestTemplateLocaleContainer::const_iterator itr = _questTemplateLocaleStore.find(entry);
+ if (itr == _questTemplateLocaleStore.end()) return NULL;
+ return &itr->second;
+ }
+ QuestObjectivesLocale const* GetQuestObjectivesLocale(uint32 entry) const
+ {
+ QuestObjectivesLocaleContainer::const_iterator itr = _questObjectivesLocaleStore.find(entry);
+ if (itr == _questObjectivesLocaleStore.end()) return NULL;
return &itr->second;
}
NpcTextLocale const* GetNpcTextLocale(uint32 entry) const
@@ -1434,7 +1442,8 @@ class ObjectMgr
TempSummonDataContainer _tempSummonDataStore;
ItemTemplateContainer _itemTemplateStore;
- QuestLocaleContainer _questLocaleStore;
+ QuestTemplateLocaleContainer _questTemplateLocaleStore;
+ QuestObjectivesLocaleContainer _questObjectivesLocaleStore;
NpcTextLocaleContainer _npcTextLocaleStore;
PageTextLocaleContainer _pageTextLocaleStore;
GossipMenuItemsLocaleContainer _gossipMenuItemsLocaleStore;
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index da0830734e5..c878287b4ac 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -194,7 +194,7 @@ void Quest::LoadQuestObjective(Field* fields)
void Quest::LoadQuestObjectiveVisualEffect(Field* fields)
{
- uint8 objID = fields[1].GetUInt32();
+ uint32 objID = fields[1].GetUInt32();
for (QuestObjective& obj : Objectives)
{
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index d893784212e..3e62348a5c3 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -202,21 +202,26 @@ enum QuestObjectiveType
QUEST_OBJECTIVE_WINPVPPETBATTLES = 13
};
-struct QuestLocale
+struct QuestTemplateLocale
{
StringVector LogTitle;
StringVector LogDescription;
StringVector QuestDescription;
StringVector AreaDescription;
- StringVector OfferRewardText;
- StringVector RequestItemsText;
- StringVector QuestCompletionLog;
- std::vector< StringVector > ObjectiveDescription;
- // new on 4.x
StringVector PortraitGiverText;
StringVector PortraitGiverName;
StringVector PortraitTurnInText;
StringVector PortraitTurnInName;
+ StringVector QuestCompletionLog;
+
+ /// @todo: implemente this in new tables
+ StringVector OfferRewardText;
+ StringVector RequestItemsText;
+};
+
+struct QuestObjectivesLocale
+{
+ StringVector Description;
};
struct QuestObjective
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index ce3f9115772..2ea344f240f 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -138,22 +138,22 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.Objectives.size());
_worldPacket << int32(Info.AllowableRaces);
- for (uint32 i = 0; i < Info.Objectives.size(); ++i)
+ for (QuestObjective const& questObjective : Info.Objectives)
{
- _worldPacket << Info.Objectives[i].ID;
- _worldPacket << Info.Objectives[i].Type;
- _worldPacket << Info.Objectives[i].StorageIndex;
- _worldPacket << Info.Objectives[i].ObjectID;
- _worldPacket << Info.Objectives[i].Amount;
- _worldPacket << Info.Objectives[i].Flags;
- _worldPacket << Info.Objectives[i].UnkFloat;
-
- _worldPacket << int32(Info.Objectives[i].VisualEffects.size());
- for (uint32 j = 0; j < Info.Objectives[i].VisualEffects.size(); ++j)
- _worldPacket << Info.Objectives[i].VisualEffects[i];
-
- _worldPacket.WriteBits(Info.Objectives[i].Description.size(), 8);
- _worldPacket.WriteString(Info.Objectives[i].Description);
+ _worldPacket << questObjective.ID;
+ _worldPacket << questObjective.Type;
+ _worldPacket << questObjective.StorageIndex;
+ _worldPacket << questObjective.ObjectID;
+ _worldPacket << questObjective.Amount;
+ _worldPacket << questObjective.Flags;
+ _worldPacket << questObjective.UnkFloat;
+
+ _worldPacket << int32(questObjective.VisualEffects.size());
+ for (auto& visualEffect : questObjective.VisualEffects)
+ _worldPacket << visualEffect;
+
+ _worldPacket.WriteBits(questObjective.Description.size(), 8);
+ _worldPacket.WriteString(questObjective.Description);
}
_worldPacket.WriteBits(Info.LogTitle.size(), 9);
@@ -165,7 +165,6 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket.WriteBits(Info.PortraitTurnInText.size(), 10);
_worldPacket.WriteBits(Info.PortraitTurnInName.size(), 8);
_worldPacket.WriteBits(Info.QuestCompletionLog.size(), 11);
- _worldPacket.FlushBits();
_worldPacket.WriteString(Info.LogTitle);
_worldPacket.WriteString(Info.LogDescription);
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index c22bc214666..6398f5b0dcf 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1506,7 +1506,8 @@ void World::SetInitialWorldSettings()
uint32 oldMSTime = getMSTime();
sObjectMgr->LoadCreatureLocales();
sObjectMgr->LoadGameObjectLocales();
- sObjectMgr->LoadQuestLocales();
+ sObjectMgr->LoadQuestTemplateLocale();
+ sObjectMgr->LoadQuestObjectivesLocale();
sObjectMgr->LoadNpcTextLocales();
sObjectMgr->LoadPageTextLocales();
sObjectMgr->LoadGossipMenuItemsLocales();
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index 8666e38b84b..d8f98e90275 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -565,7 +565,7 @@ public:
if (localeIndex >= 0)
{
uint8 ulocaleIndex = uint8(localeIndex);
- if (QuestLocale const* questLocale = sObjectMgr->GetQuestLocale(qInfo->GetQuestId()))
+ if (QuestTemplateLocale const* questLocale = sObjectMgr->GetQuestLocale(qInfo->GetQuestId()))
{
if (questLocale->LogTitle.size() > ulocaleIndex && !questLocale->LogTitle[ulocaleIndex].empty())
{
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index 78f23ceab25..72f0744cd29 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -109,7 +109,6 @@ public:
{ "locales_npc_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL },
{ "locales_page_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL },
{ "locales_points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL },
- { "locales_quest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL },
{ "mail_level_reward", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL },
{ "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL },
{ "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL },
@@ -120,6 +119,7 @@ public:
{ "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL },
{ "points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL },
{ "prospecting_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL },
+ { "quest_locale", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_LOCALE, true, &HandleReloadQuestLocaleCommand, "", NULL },
{ "quest_poi", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL },
{ "quest_template", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL },
{ "rbac", rbac::RBAC_PERM_COMMAND_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL },
@@ -314,7 +314,7 @@ public:
HandleReloadLocalesNpcTextCommand(handler, "a");
HandleReloadLocalesPageTextCommand(handler, "a");
HandleReloadLocalesPointsOfInterestCommand(handler, "a");
- HandleReloadLocalesQuestCommand(handler, "a");
+ HandleReloadQuestLocaleCommand(handler, "a");
return true;
}
@@ -1035,11 +1035,13 @@ public:
return true;
}
- static bool HandleReloadLocalesQuestCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleReloadQuestLocaleCommand(ChatHandler* handler, const char* /*args*/)
{
- TC_LOG_INFO("misc", "Re-Loading Locales Quest ... ");
- sObjectMgr->LoadQuestLocales();
- handler->SendGlobalGMSysMessage("DB table `locales_quest` reloaded.");
+ TC_LOG_INFO("misc", "Re-Loading Quest Locale ... ");
+ sObjectMgr->LoadQuestTemplateLocale();
+ sObjectMgr->LoadQuestObjectivesLocale();
+ handler->SendGlobalGMSysMessage("DB table `quest_template_locale` reloaded.");
+ handler->SendGlobalGMSysMessage("DB table `quest_objectives_locale` reloaded.");
return true;
}
diff --git a/src/server/shared/Common.cpp b/src/server/shared/Common.cpp
index 56e3c4faaf5..22560012b49 100644
--- a/src/server/shared/Common.cpp
+++ b/src/server/shared/Common.cpp
@@ -18,7 +18,8 @@
#include "Common.h"
-char const* localeNames[TOTAL_LOCALES] = {
+char const* localeNames[TOTAL_LOCALES] =
+{
"enUS",
"koKR",
"frFR",
@@ -27,13 +28,16 @@ char const* localeNames[TOTAL_LOCALES] = {
"zhTW",
"esES",
"esMX",
- "ruRU"
+ "ruRU",
+ "none",
+ "ptBR",
+ "itIT"
};
LocaleConstant GetLocaleByName(const std::string& name)
{
for (uint32 i = 0; i < TOTAL_LOCALES; ++i)
- if (name==localeNames[i])
+ if (name == localeNames[i])
return LocaleConstant(i);
return LOCALE_enUS; // including enGB case
diff --git a/src/server/shared/Common.h b/src/server/shared/Common.h
index 4c5773d5eb5..11c9ad3b27f 100644
--- a/src/server/shared/Common.h
+++ b/src/server/shared/Common.h
@@ -114,13 +114,18 @@ enum LocaleConstant
LOCALE_zhTW = 5,
LOCALE_esES = 6,
LOCALE_esMX = 7,
- LOCALE_ruRU = 8
+ LOCALE_ruRU = 8,
+ LOCALE_none = 9,
+ LOCALE_ptBR = 10,
+ LOCALE_itIT = 11,
+
+ TOTAL_LOCALES
};
-const uint8 TOTAL_LOCALES = 9;
+const uint8 OLD_TOTAL_LOCALES = 9; /// @todo convert in simple system
#define DEFAULT_LOCALE LOCALE_enUS
-#define MAX_LOCALES 8
+#define MAX_LOCALES 11
extern char const* localeNames[TOTAL_LOCALES];