public string GetLocalizedChatString(uint entry, Gender gender, byte textGroup, uint id, Locale locale = Locale.enUS) { var multiMap = mTextMap.LookupByKey(entry); if (multiMap == null) { return(""); } var creatureTextEntryList = multiMap.LookupByKey(textGroup); if (creatureTextEntryList.Empty()) { return(""); } CreatureTextEntry creatureTextEntry = null; for (var i = 0; i != creatureTextEntryList.Count; ++i) { creatureTextEntry = creatureTextEntryList[i]; if (creatureTextEntry.id == id) { break; } } if (creatureTextEntry == null) { return(""); } if (locale >= Locale.Total) { locale = Locale.enUS; } string baseText = ""; BroadcastTextRecord bct = CliDB.BroadcastTextStorage.LookupByKey(creatureTextEntry.BroadcastTextId); if (bct != null) { baseText = Global.DB2Mgr.GetBroadcastTextValue(bct, locale, gender); } else { baseText = creatureTextEntry.text; } if (locale != Locale.enUS && bct == null) { var creatureTextLocale = mLocaleTextMap.LookupByKey(new CreatureTextId(entry, textGroup, id)); if (creatureTextLocale != null) { ObjectManager.GetLocaleString(creatureTextLocale.Text, locale, ref baseText); } } return(baseText); }
void HandleGameObjectQuery(QueryGameObject packet) { QueryGameObjectResponse response = new QueryGameObjectResponse(); response.GameObjectID = packet.GameObjectID; GameObjectTemplate gameObjectInfo = Global.ObjectMgr.GetGameObjectTemplate(packet.GameObjectID); if (gameObjectInfo != null) { response.Allow = true; GameObjectStats stats = new GameObjectStats(); stats.Type = (uint)gameObjectInfo.type; stats.DisplayID = gameObjectInfo.displayId; stats.Name[0] = gameObjectInfo.name; stats.IconName = gameObjectInfo.IconName; stats.CastBarCaption = gameObjectInfo.castBarCaption; stats.UnkString = gameObjectInfo.unk1; LocaleConstant localeConstant = GetSessionDbLocaleIndex(); if (localeConstant != LocaleConstant.enUS) { GameObjectLocale gameObjectLocale = Global.ObjectMgr.GetGameObjectLocale(packet.GameObjectID); if (gameObjectLocale != null) { ObjectManager.GetLocaleString(gameObjectLocale.Name, localeConstant, ref stats.Name[0]); ObjectManager.GetLocaleString(gameObjectLocale.CastBarCaption, localeConstant, ref stats.CastBarCaption); ObjectManager.GetLocaleString(gameObjectLocale.Unk1, localeConstant, ref stats.UnkString); } } var items = Global.ObjectMgr.GetGameObjectQuestItemList(packet.GameObjectID); foreach (uint item in items) { stats.QuestItems.Add(item); } unsafe { fixed(int *ptr = gameObjectInfo.Raw.data) { for (int i = 0; i < SharedConst.MaxGOData; i++) { stats.Data[i] = ptr[i]; } } } stats.RequiredLevel = (uint)gameObjectInfo.RequiredLevel; response.Stats = stats; } SendPacket(response); }
void HandleCreatureQuery(QueryCreature packet) { CreatureTemplate ci = Global.ObjectMgr.GetCreatureTemplate(packet.CreatureID); if (ci != null) { if (!WorldConfig.GetBoolValue(WorldCfg.CacheDataQueries)) { ci.InitializeQueryData(); } QueryCreatureResponse queryCreatureResponse = ci.QueryData; LocaleConstant loc = GetSessionDbLocaleIndex(); if (loc != LocaleConstant.enUS) { CreatureLocale creatureLocale = Global.ObjectMgr.GetCreatureLocale(ci.Entry); if (creatureLocale != null) { string name = queryCreatureResponse.Stats.Name[0]; string nameAlt = queryCreatureResponse.Stats.NameAlt[0]; ObjectManager.GetLocaleString(creatureLocale.Name, loc, ref name); ObjectManager.GetLocaleString(creatureLocale.NameAlt, loc, ref nameAlt); ObjectManager.GetLocaleString(creatureLocale.Title, loc, ref queryCreatureResponse.Stats.Title); ObjectManager.GetLocaleString(creatureLocale.TitleAlt, loc, ref queryCreatureResponse.Stats.TitleAlt); queryCreatureResponse.Stats.Name[0] = name; queryCreatureResponse.Stats.NameAlt[0] = nameAlt; } } SendPacket(queryCreatureResponse); } else { Log.outDebug(LogFilter.Network, $"WORLD: CMSG_QUERY_CREATURE - NO CREATURE INFO! (ENTRY: {packet.CreatureID})"); QueryCreatureResponse response = new QueryCreatureResponse(); response.CreatureID = packet.CreatureID; SendPacket(response); } }
void HandleQueryPageText(QueryPageText packet) { QueryPageTextResponse response = new QueryPageTextResponse(); response.PageTextID = packet.PageTextID; uint pageID = packet.PageTextID; while (pageID != 0) { PageText pageText = Global.ObjectMgr.GetPageText(pageID); if (pageText == null) { break; } QueryPageTextResponse.PageTextInfo page; page.ID = pageID; page.NextPageID = pageText.NextPageID; page.Text = pageText.Text; page.PlayerConditionID = pageText.PlayerConditionID; page.Flags = pageText.Flags; LocaleConstant locale = GetSessionDbLocaleIndex(); if (locale != LocaleConstant.enUS) { PageTextLocale pageLocale = Global.ObjectMgr.GetPageTextLocale(pageID); if (pageLocale != null) { ObjectManager.GetLocaleString(pageLocale.Text, locale, ref page.Text); } } response.Pages.Add(page); pageID = pageText.NextPageID; } response.Allow = !response.Pages.Empty(); SendPacket(response); }
void HandleGameObjectQuery(QueryGameObject packet) { GameObjectTemplate info = Global.ObjectMgr.GetGameObjectTemplate(packet.GameObjectID); if (info != null) { if (!WorldConfig.GetBoolValue(WorldCfg.CacheDataQueries)) { info.InitializeQueryData(); } QueryGameObjectResponse queryGameObjectResponse = info.QueryData; LocaleConstant loc = GetSessionDbLocaleIndex(); if (loc != LocaleConstant.enUS) { GameObjectLocale gameObjectLocale = Global.ObjectMgr.GetGameObjectLocale(queryGameObjectResponse.GameObjectID); if (gameObjectLocale != null) { ObjectManager.GetLocaleString(gameObjectLocale.Name, loc, ref queryGameObjectResponse.Stats.Name[0]); ObjectManager.GetLocaleString(gameObjectLocale.CastBarCaption, loc, ref queryGameObjectResponse.Stats.CastBarCaption); ObjectManager.GetLocaleString(gameObjectLocale.Unk1, loc, ref queryGameObjectResponse.Stats.UnkString); } } SendPacket(queryGameObjectResponse); } else { Log.outDebug(LogFilter.Network, $"WORLD: CMSG_GAMEOBJECT_QUERY - Missing gameobject info for (ENTRY: {packet.GameObjectID})"); QueryGameObjectResponse response = new QueryGameObjectResponse(); response.GameObjectID = packet.GameObjectID; response.Guid = packet.Guid; SendPacket(response); } }
void HandleCreatureQuery(QueryCreature packet) { QueryCreatureResponse response = new QueryCreatureResponse(); response.CreatureID = packet.CreatureID; CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(packet.CreatureID); if (creatureInfo != null) { response.Allow = true; CreatureStats stats = new CreatureStats(); stats.Leader = creatureInfo.RacialLeader; string name = creatureInfo.Name; string nameAlt = creatureInfo.FemaleName; stats.Flags[0] = (uint)creatureInfo.TypeFlags; stats.Flags[1] = creatureInfo.TypeFlags2; stats.CreatureType = (int)creatureInfo.CreatureType; stats.CreatureFamily = (int)creatureInfo.Family; stats.Classification = (int)creatureInfo.Rank; for (uint i = 0; i < SharedConst.MaxCreatureKillCredit; ++i) { stats.ProxyCreatureID[i] = creatureInfo.KillCredit[i]; } stats.CreatureDisplayID[0] = creatureInfo.ModelId1; stats.CreatureDisplayID[1] = creatureInfo.ModelId2; stats.CreatureDisplayID[2] = creatureInfo.ModelId3; stats.CreatureDisplayID[3] = creatureInfo.ModelId4; stats.HpMulti = creatureInfo.ModHealth; stats.EnergyMulti = creatureInfo.ModMana; stats.CreatureMovementInfoID = creatureInfo.MovementId; stats.RequiredExpansion = creatureInfo.RequiredExpansion; stats.HealthScalingExpansion = creatureInfo.HealthScalingExpansion; stats.VignetteID = creatureInfo.VignetteID; stats.Title = creatureInfo.SubName; stats.TitleAlt = creatureInfo.TitleAlt; stats.CursorName = creatureInfo.IconName; var items = Global.ObjectMgr.GetCreatureQuestItemList(packet.CreatureID); foreach (uint item in items) { stats.QuestItems.Add(item); } LocaleConstant localeConstant = GetSessionDbLocaleIndex(); if (localeConstant != LocaleConstant.enUS) { CreatureLocale creatureLocale = Global.ObjectMgr.GetCreatureLocale(packet.CreatureID); if (creatureLocale != null) { ObjectManager.GetLocaleString(creatureLocale.Name, localeConstant, ref name); ObjectManager.GetLocaleString(creatureLocale.NameAlt, localeConstant, ref nameAlt); ObjectManager.GetLocaleString(creatureLocale.Title, localeConstant, ref stats.Title); ObjectManager.GetLocaleString(creatureLocale.TitleAlt, localeConstant, ref stats.TitleAlt); } } stats.Name[0] = name; stats.NameAlt[0] = nameAlt; response.Stats = stats; } SendPacket(response); }