Esempio n. 1
0
        public static void AsciiSpeechChat3(NetState state, PacketReader pvSrc)
        {
            Mobile from = state.Mobile;

            MessageType type = (MessageType)pvSrc.ReadByte();
            int         hue  = pvSrc.ReadInt16();

            pvSrc.ReadInt16(); // font
            string text = pvSrc.ReadStringSafe().Trim();

            if (text.Length <= 0 || text.Length > 128)
            {
                return;
            }

            if (!Enum.IsDefined(typeof(MessageType), type))
            {
                type = MessageType.Regular;
            }

            Channel c = Channel.GetByType(typeof(Guild));

            if (RUOVersion.GuildChat(type) && c != null)
            {
                c.OnChat(from, text);
            }
            else
            {
                from.DoSpeech(text, c_EmptyInts, type, Utility.ClipDyedHue(hue));
            }
        }
Esempio n. 2
0
        public static void UnicodeSpeechChat3(NetState state, PacketReader pvSrc)
        {
            Mobile from = state.Mobile;

            MessageType type = (MessageType)pvSrc.ReadByte();
            int         hue  = pvSrc.ReadInt16();

            pvSrc.ReadInt16(); // font
            string lang = pvSrc.ReadString(4);
            string text;

            bool isEncoded = (type & MessageType.Encoded) != 0;

            int[] keywords;

            if (isEncoded)
            {
                int value = pvSrc.ReadInt16();
                int count = (value & 0xFFF0) >> 4;
                int hold  = value & 0xF;

                if (count < 0 || count > 50)
                {
                    return;
                }

                KeywordList keyList = c_KeywordList;

                for (int i = 0; i < count; ++i)
                {
                    int speechID;

                    if ((i & 1) == 0)
                    {
                        hold   <<= 8;
                        hold    |= pvSrc.ReadByte();
                        speechID = hold;
                        hold     = 0;
                    }
                    else
                    {
                        value    = pvSrc.ReadInt16();
                        speechID = (value & 0xFFF0) >> 4;
                        hold     = value & 0xF;
                    }

                    if (!keyList.Contains(speechID))
                    {
                        keyList.Add(speechID);
                    }
                }

                text = pvSrc.ReadUTF8StringSafe();

                keywords = keyList.ToArray();
            }
            else
            {
                text = pvSrc.ReadUnicodeStringSafe();

                keywords = c_EmptyInts;
            }

            text = text.Trim();

            if (text.Length <= 0 || text.Length > 128)
            {
                return;
            }

            type &= ~MessageType.Encoded;

            if (!Enum.IsDefined(typeof(MessageType), type))
            {
                type = MessageType.Regular;
            }

            from.Language = lang;

            Channel c = Channel.GetByType(typeof(Guild));

            if (RUOVersion.GuildChat(type) && c != null)
            {
                if (c.CanChat(from, true))
                {
                    c.OnChat(from, text);
                }
            }
            else
            {
                from.DoSpeech(text, keywords, type, Utility.ClipDyedHue(hue));
            }
        }