std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 textGroup, uint32 id, LocaleConstant locale) const { CreatureTextMap::const_iterator mapitr = mTextMap.find(entry); if (mapitr == mTextMap.end()) return ""; CreatureTextHolder::const_iterator holderItr = mapitr->second.find(textGroup); if (holderItr == mapitr->second.end()) return ""; CreatureTextGroup::const_iterator groupItr = holderItr->second.begin(); for (; groupItr != holderItr->second.end(); ++groupItr) if (groupItr->id == id) break; if (groupItr == holderItr->second.end()) return ""; std::string baseText = groupItr->text; if (locale == DEFAULT_LOCALE) return baseText; if (locale > MAX_LOCALES) return baseText; LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id)); if (locItr == mLocaleTextMap.end()) return baseText; ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText); return baseText; }
void CreatureTextMgr::LoadCreatureTextLocales() { uint32 oldMSTime = getMSTime(); mLocaleTextMap.clear(); // for reload case QueryResult result = WorldDatabase.Query("SELECT entry, textGroup, id, text_loc1, text_loc2, text_loc3, text_loc4, text_loc5, text_loc6, text_loc7, text_loc8 FROM locales_creature_text"); if (!result) return; uint32 textCount = 0; do { Field* fields = result->Fetch(); CreatureTextLocale& loc = mLocaleTextMap[CreatureTextId(fields[0].GetUInt32(), uint32(fields[1].GetUInt8()), fields[2].GetUInt32())]; for (uint8 i = 1; i < TOTAL_LOCALES; ++i) { LocaleConstant locale = LocaleConstant(i); ObjectMgr::AddLocaleString(fields[3 + i - 1].GetString(), locale, loc.Text); } ++textCount; } while (result->NextRow()); sLog->outString(">> Loaded %u creature localized texts in %u ms", textCount, GetMSTimeDiffToNow(oldMSTime)); sLog->outString(); }
void CreatureTextMgr::LoadCreatureTextLocales() { uint32 oldMSTime = getMSTime(); mLocaleTextMap.clear(); // for reload case // 0 1 2 3 4 QueryResult result = WorldDatabase.Query("SELECT CreatureID, GroupID, ID, Locale, Text FROM creature_text_locale"); if (!result) return; do { Field* fields = result->Fetch(); uint32 creatureId = fields[0].GetUInt32(); uint32 groupId = fields[1].GetUInt8(); uint32 id = fields[2].GetUInt8(); std::string localeName = fields[3].GetString(); std::string text = fields[4].GetString(); CreatureTextLocale& data = mLocaleTextMap[CreatureTextId(creatureId, groupId, id)]; LocaleConstant locale = GetLocaleByName(localeName); if (locale == LOCALE_enUS) continue; ObjectMgr::AddLocaleString(text, locale, data.Text); } while (result->NextRow()); TC_LOG_INFO("server.loading", ">> Loaded %u creature localized texts in %u ms", uint32(mLocaleTextMap.size()), GetMSTimeDiffToNow(oldMSTime)); }
std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 gender, uint8 textGroup, uint32 id, LocaleConstant locale) const { CreatureTextMap::const_iterator mapitr = mTextMap.find(entry); if (mapitr == mTextMap.end()) return ""; CreatureTextHolder::const_iterator holderItr = mapitr->second.find(textGroup); if (holderItr == mapitr->second.end()) return ""; CreatureTextGroup::const_iterator groupItr = holderItr->second.begin(); for (; groupItr != holderItr->second.end(); ++groupItr) if (groupItr->id == id) break; if (groupItr == holderItr->second.end()) return ""; if (locale > MAX_LOCALES) locale = DEFAULT_LOCALE; std::string baseText = ""; BroadcastText const* bct = sObjectMgr->GetBroadcastText(groupItr->BroadcastTextId); if (bct) baseText = bct->GetText(locale, gender); else baseText = groupItr->text; if (locale != DEFAULT_LOCALE && !bct) { LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id)); if (locItr != mLocaleTextMap.end()) ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText); } return baseText; }