diff options
| author | ForesterDev <forester.manv@gmail.com> | 2017-10-29 13:15:22 +0400 |
|---|---|---|
| committer | Aokromes <Aokromes@users.noreply.github.com> | 2017-10-29 10:15:22 +0100 |
| commit | a64d1ec51eb11fd01a26d08a09de3d8d7dd89675 (patch) | |
| tree | d596fc0956ea1ff59493d5f41d9a789a73be733f /src/server/game/Globals/ObjectMgr.cpp | |
| parent | bbd339370ed2eea5f12e79a977fd9e0e93543101 (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.cpp | 128 |
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(); |
