Ejemplo n.º 1
0
        public static string[] DecodePropertyList(this ObjectPropertyList list, ClilocLNG lng)
        {
            if (lng == ClilocLNG.NULL)
            {
                lng = DefaultLanguage;
            }

            int length;
            var data = list.Compile(false, out length);
            var msgs = new List <string>();

            var reader = new PacketReader(data, length, false);

            reader.Seek(15, SeekOrigin.Begin);

            for (int i = 15; i < data.Length - 4;)
            {
                int index       = reader.ReadInt32();
                int paramLength = reader.ReadInt16() / 2;

                string param = String.Empty;

                if (paramLength > 0)
                {
                    param = reader.ReadUnicodeStringLE(paramLength);
                }

                msgs.Add(GetString(lng, index, param));

                i += (6 + paramLength);
            }

            return(msgs.ToArray());
        }
Ejemplo n.º 2
0
        private static void OnEncode0xD6(NetState state, PacketReader reader, ref byte[] buffer, ref int length)
        {
            if (state == null || reader == null || buffer == null || length < 0)
            {
                return;
            }

            int pos = reader.Seek(0, SeekOrigin.Current);

            reader.Seek(5, SeekOrigin.Begin);
            Serial serial = reader.ReadInt32();

            reader.Seek(pos, SeekOrigin.Begin);

            if (serial.IsItem)
            {
                Item item = World.FindItem(serial);

                if (item == null || item.Deleted)
                {
                    return;
                }

                var list = new ObjectPropertyList(item);

                item.GetProperties(list);
                item.AppendChildProperties(list);

                InvokeItemOPLRequest(item, state.Mobile, list);

                list.Terminate();
                list.SetStatic();

                buffer = list.Compile(state.CompressionEnabled, out length);
            }
            else if (serial.IsMobile)
            {
                Mobile mobile = World.FindMobile(serial);

                if (mobile == null || mobile.Deleted)
                {
                    return;
                }

                var list = new ObjectPropertyList(mobile);

                mobile.GetProperties(list);

                InvokeMobileOPLRequest(mobile, state.Mobile, list);

                list.Terminate();
                list.SetStatic();

                buffer = list.Compile(state.CompressionEnabled, out length);
            }
        }
Ejemplo n.º 3
0
        private static void OnEncode0xD6(NetState state, PacketReader reader, ref byte[] buffer, ref int length)
        {
            if (state == null || reader == null || buffer == null || length < 0)
            {
                return;
            }

            int pos = reader.Seek(0, SeekOrigin.Current);

            reader.Seek(5, SeekOrigin.Begin);
            Serial serial = reader.ReadInt32();

            reader.Seek(pos, SeekOrigin.Begin);

            var e = World.FindEntity(serial);

            if (e == null || e.Deleted)
            {
                return;
            }

            var opl = new ObjectPropertyList(e);

            if (e is Item)
            {
                var item = (Item)e;

                item.GetProperties(opl);
                item.AppendChildProperties(opl);
            }
            else if (e is Mobile)
            {
                var mob = (Mobile)e;

                mob.GetProperties(opl);
            }

            var eopl = new ExtendedOPL(opl);

            InvokeOPLRequest(e, state.Mobile, eopl);

            eopl.Apply();

            opl.Terminate();
            opl.SetStatic();

            buffer = opl.Compile(state.CompressionEnabled, out length);

            Cache.Remove(opl);
        }
Ejemplo n.º 4
0
        private static void OnEncode0xD6(NetState state, PacketReader reader, ref byte[] buffer, ref int length)
        {
            if (state == null || reader == null || buffer == null || length < 0)
            {
                return;
            }

            var pos = reader.Seek(0, SeekOrigin.Current);

            reader.Seek(5, SeekOrigin.Begin);

            var serial = reader.ReadInt32();

            reader.Seek(pos, SeekOrigin.Begin);

            var ent = World.FindEntity(serial);

            if (ent == null)
            {
                return;
            }

            ObjectPropertyList opl = null;

            try
            {
                opl = ent.GetOPL(state.Mobile);

                if (opl != null)
                {
                    buffer = opl.Compile(state.CompressionEnabled, out length);
                }
            }
            finally
            {
                if (opl != null)
                {
                    opl.Release();
                }
            }
        }