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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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);
            }
        }
Example #6
0
        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);
        }