aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Globals/ObjectMgr.cpp
diff options
context:
space:
mode:
authorForesterDev <forester.manv@gmail.com>2017-10-29 13:15:22 +0400
committerAokromes <Aokromes@users.noreply.github.com>2017-10-29 10:15:22 +0100
commita64d1ec51eb11fd01a26d08a09de3d8d7dd89675 (patch)
treed596fc0956ea1ff59493d5f41d9a789a73be733f /src/server/game/Globals/ObjectMgr.cpp
parentbbd339370ed2eea5f12e79a977fd9e0e93543101 (diff)
Core/Quests: implement Quest Greeting (DB table quest_greeting)
* Core/Quests: implement Quest Greetings. Partial port https://github.com/TrinityCore/TrinityCore/commit/22e230ecec1c7ce4eb4daeb60adfa03098271f34
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp128
1 files changed, 128 insertions, 0 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 974916a66fe..c7e083a66ee 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -5982,6 +5982,134 @@ void ObjectMgr::LoadQuestAreaTriggers()
TC_LOG_INFO("server.loading", ">> Loaded %u quest trigger points in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
+QuestGreeting const* ObjectMgr::GetQuestGreeting(ObjectGuid guid) const
+{
+ auto itr = _questGreetingStore.find(guid.GetTypeId());
+ if (itr == _questGreetingStore.end())
+ return nullptr;
+
+ auto questItr = itr->second.find(guid.GetEntry());
+ if (questItr == itr->second.end())
+ return nullptr;
+
+ return questItr->second;
+}
+
+void ObjectMgr::LoadQuestGreetings()
+{
+ uint32 oldMSTime = getMSTime();
+
+ _questGreetingStore.clear(); // need for reload case
+
+ // 0 1 2 3 4
+ QueryResult result = WorldDatabase.Query("SELECT ID, Type, GreetEmoteType, GreetEmoteDelay, Greeting FROM quest_greeting");
+ if (!result)
+ {
+ TC_LOG_INFO("server.loading", ">> Loaded 0 quest greetings. DB table `quest_greeting` is empty.");
+ return;
+ }
+
+ _questGreetingStore.rehash(result->GetRowCount());
+
+ uint32 count = 0;
+
+ do
+ {
+ Field* fields = result->Fetch();
+
+ uint32 id = fields[0].GetUInt32();
+ uint8 type = fields[1].GetUInt8();
+ // overwrite
+ switch (type)
+ {
+ case 0: // Creature
+ type = TYPEID_UNIT;
+ if (!sObjectMgr->GetCreatureTemplate(id))
+ {
+ TC_LOG_ERROR("sql.sql", "Table `quest_greeting`: creature template (entry: %u) does not exist.", id);
+ continue;
+ }
+ break;
+ case 1: // GameObject
+ type = TYPEID_GAMEOBJECT;
+ if (!sObjectMgr->GetGameObjectTemplate(id))
+ {
+ TC_LOG_ERROR("sql.sql", "Table `quest_greeting`: gameobject template (entry: %u) does not exist.", id);
+ continue;
+ }
+ break;
+ default:
+ TC_LOG_ERROR("sql.sql", "Table `quest_greeting`: unknown type = %u for entry = %u. Skipped.", type, id);
+ continue;
+ }
+
+ uint16 greetEmoteType = fields[2].GetUInt16();
+
+ if (greetEmoteType > 0 && !sEmotesStore.LookupEntry(greetEmoteType))
+ {
+ TC_LOG_DEBUG("sql.sql", "Table `quest_greeting`: entry %u has greetEmoteType = %u but emote does not exist. Set to 0.", id, greetEmoteType);
+ greetEmoteType = 0;
+ }
+
+ uint32 greetEmoteDelay = fields[3].GetUInt32();
+ std::string greeting = fields[4].GetString();
+
+ _questGreetingStore[type][id] = new QuestGreeting(greetEmoteType, greetEmoteDelay, greeting);
+
+ ++count;
+ }
+ while (result->NextRow());
+
+ TC_LOG_INFO("server.loading", ">> Loaded %u quest_greeting in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+}
+
+void ObjectMgr::LoadQuestGreetingsLocales()
+{
+ uint32 oldMSTime = getMSTime();
+
+ _questGreetingLocaleStore.clear(); // need for reload case
+
+ // 0 1 2 3
+ QueryResult result = WorldDatabase.Query("SELECT ID, Type, Locale, Greeting FROM quest_greeting_locale");
+ if (!result)
+ {
+ TC_LOG_INFO("server.loading", ">> Loaded 0 quest_greeting locales. DB table `quest_greeting_locale` is empty.");
+ return;
+ }
+
+ do
+ {
+ Field* fields = result->Fetch();
+
+ uint32 id = fields[0].GetUInt32();
+ uint8 type = fields[1].GetUInt8();
+ // overwrite
+ switch (type)
+ {
+ case 0: // Creature
+ type = TYPEID_UNIT;
+ break;
+ case 1: // GameObject
+ type = TYPEID_GAMEOBJECT;
+ break;
+ default:
+ break;
+ }
+
+ std::string localeName = fields[2].GetString();
+ std::string greeting = fields[3].GetString();
+
+ QuestGreetingLocale& data = _questGreetingLocaleStore[MAKE_PAIR32(id, type)];
+ LocaleConstant locale = GetLocaleByName(localeName);
+ if (locale == LOCALE_enUS)
+ continue;
+
+ AddLocaleString(greeting, locale, data.greeting);
+ } while (result->NextRow());
+
+ TC_LOG_INFO("server.loading", ">> Loaded %u quest greeting locale strings in %u ms", uint32(_questGreetingLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
+}
+
void ObjectMgr::LoadTavernAreaTriggers()
{
uint32 oldMSTime = getMSTime();