示例#1
0
        private void ReadTurfDeltasSection(PacketStream stream)
        {
            UInt32 turfDeltasCount = stream.ReadUInt32();

            for (int i = 0; i < turfDeltasCount; i++)
            {
                UInt16 x          = stream.ReadUInt16();
                UInt16 y          = stream.ReadUInt16();
                UInt32 turfAtomID = stream.ReadUInt32();

                DeltaState.TurfDeltas[(x, y)] = turfAtomID;
示例#2
0
        private void ReadAtomDeltasSection(PacketStream stream)
        {
            UInt16 atomDeltasCount = stream.ReadUInt16();

            for (int i = 0; i < atomDeltasCount; i++)
            {
                UInt32 atomID = stream.ReadUInt32();
                DreamDeltaState.AtomDelta atomDelta = new DreamDeltaState.AtomDelta();

                AtomDeltaValueID valueID;
                do
                {
                    valueID = (AtomDeltaValueID)stream.ReadByte();

                    if (valueID == AtomDeltaValueID.ScreenLocation)
                    {
                        atomDelta.ScreenLocation = stream.ReadScreenLocation();
                    }
                    else if (valueID == AtomDeltaValueID.IconAppearance)
                    {
                        atomDelta.NewIconAppearanceID = (int)stream.ReadUInt32();
                    }
                    else if (valueID != AtomDeltaValueID.End)
                    {
                        throw new Exception("Invalid atom delta value ID in delta game state packet (" + valueID.ToString() + ")");
                    }
                } while (valueID != AtomDeltaValueID.End);

                DeltaState.AtomDeltas.Add(atomID, atomDelta);
            }
        }
示例#3
0
        public void ReadFromStream(PacketStream stream)
        {
            PromptId = stream.ReadUInt16();

            Type = (DMValueType)stream.ReadUInt16();
            switch (Type)
            {
            case DMValueType.Null: Value = null; break;

            case DMValueType.Text: Value = stream.ReadString(); break;

            case DMValueType.Num: Value = stream.ReadInt32(); break;

            case DMValueType.Message: Value = stream.ReadString(); break;

            default: throw new Exception("Invalid prompt response type '" + Type + "'");
            }
        }
示例#4
0
        private void ReadAtomDeletionsSection(PacketStream stream)
        {
            UInt16 atomDeletionsCount = stream.ReadUInt16();

            for (int i = 0; i < atomDeletionsCount; i++)
            {
                DeltaState.AtomDeletions.Add(stream.ReadUInt32());
            }
        }
示例#5
0
        public void ReadFromStream(PacketStream stream)
        {
            File = stream.ReadString();
            if (File == String.Empty)
            {
                File = null;
            }

            Channel = stream.ReadUInt16();
            Volume  = (File != null) ? stream.ReadByte() : 100;
        }
示例#6
0
        private void ReadMapSection(PacketStream stream)
        {
            UInt16 mapWidth  = stream.ReadUInt16();
            UInt16 mapHeight = stream.ReadUInt16();
            UInt16 levels    = stream.ReadUInt16();

            FullState.Levels = new List <DreamFullState.Level>(levels);
            for (int z = 0; z < levels; z++)
            {
                FullState.Levels.Add(new DreamFullState.Level(mapWidth, mapHeight));

                for (int x = 0; x < mapWidth; x++)
                {
                    for (int y = 0; y < mapHeight; y++)
                    {
                        FullState.Levels[z].Turfs[x, y] = stream.ReadUInt32();
                    }
                }
            }
        }
示例#7
0
        public void ReadFromStream(PacketStream stream)
        {
            Window = stream.ReadString();
            if (Window == String.Empty)
            {
                Window = null;
            }

            bool hasHtmlSource = stream.ReadBool();

            if (hasHtmlSource)
            {
                HtmlSource = stream.ReadString();
            }
            else
            {
                HtmlSource = null;
            }

            Size = new Size(stream.ReadUInt16(), stream.ReadUInt16());
        }
示例#8
0
        private void ReadAtomCreationsSection(PacketStream stream)
        {
            UInt16 atomCreationsCount = stream.ReadUInt16();

            for (int i = 0; i < atomCreationsCount; i++)
            {
                UInt32 atomID = stream.ReadUInt32();
                DreamDeltaState.AtomCreation atomCreation = new DreamDeltaState.AtomCreation((AtomType)stream.ReadByte(), (int)stream.ReadUInt32());

                atomCreation.LocationID = stream.ReadUInt32();
                if (atomCreation.Type == AtomType.Movable)
                {
                    atomCreation.ScreenLocation = stream.ReadScreenLocation();
                }

                DeltaState.AtomCreations.Add(atomID, atomCreation);
            }
        }
示例#9
0
 public void ReadFromStream(PacketStream stream)
 {
     PromptId = stream.ReadUInt16();
     Types    = (DMValueType)stream.ReadUInt16();
     Message  = stream.ReadString();
 }
        public void ReadFromStream(PacketStream stream)
        {
            List <WindowDescriptor> windowDescriptors = new List <WindowDescriptor>();

            int windowCount = stream.ReadByte();

            for (int i = 0; i < windowCount; i++)
            {
                string windowName = stream.ReadString();
                List <ElementDescriptor> elementDescriptors = new List <ElementDescriptor>();

                int elementCount = stream.ReadByte();
                for (int j = 0; j < elementCount; j++)
                {
                    string            elementName = stream.ReadString();
                    DescriptorType    elementType = (DescriptorType)stream.ReadByte();
                    ElementDescriptor elementDescriptor;

                    switch (elementType)
                    {
                    case DescriptorType.Main: elementDescriptor = new ElementDescriptorMain(elementName); break;

                    case DescriptorType.Input: elementDescriptor = new ElementDescriptorInput(elementName); break;

                    case DescriptorType.Button: elementDescriptor = new ElementDescriptorButton(elementName); break;

                    case DescriptorType.Child: elementDescriptor = new ElementDescriptorChild(elementName); break;

                    case DescriptorType.Output: elementDescriptor = new ElementDescriptorOutput(elementName); break;

                    case DescriptorType.Info: elementDescriptor = new ElementDescriptorInfo(elementName); break;

                    case DescriptorType.Map: elementDescriptor = new ElementDescriptorMap(elementName); break;

                    case DescriptorType.Browser: elementDescriptor = new ElementDescriptorBrowser(elementName); break;

                    default: throw new Exception("Invalid descriptor type '" + elementType + "'");
                    }

                    elementDescriptors.Add(elementDescriptor);

                    AttributeType valueType;
                    do
                    {
                        valueType = (AttributeType)stream.ReadByte();
                        switch (valueType)
                        {
                        case AttributeType.Pos: elementDescriptor.Pos = new Point(stream.ReadUInt16(), stream.ReadUInt16()); break;

                        case AttributeType.Size: elementDescriptor.Size = new Size(stream.ReadUInt16(), stream.ReadUInt16()); break;

                        case AttributeType.Anchor1: elementDescriptor.Anchor1 = new Point(stream.ReadUInt16(), stream.ReadUInt16()); break;

                        case AttributeType.Anchor2: elementDescriptor.Anchor2 = new Point(stream.ReadUInt16(), stream.ReadUInt16()); break;

                        case AttributeType.BackgroundColor: elementDescriptor.BackgroundColor = Color.FromArgb(stream.ReadByte(), stream.ReadByte(), stream.ReadByte()); break;

                        case AttributeType.IsVisible: elementDescriptor.IsVisible = stream.ReadBool(); break;

                        case AttributeType.IsDefault: elementDescriptor.IsDefault = stream.ReadBool(); break;

                        case AttributeType.IsPane: ((ElementDescriptorMain)elementDescriptor).IsPane = stream.ReadBool(); break;

                        case AttributeType.Left: ((ElementDescriptorChild)elementDescriptor).Left = stream.ReadString(); break;

                        case AttributeType.Right: ((ElementDescriptorChild)elementDescriptor).Right = stream.ReadString(); break;

                        case AttributeType.IsVert: ((ElementDescriptorChild)elementDescriptor).IsVert = stream.ReadBool(); break;

                        case AttributeType.Text:
                            if (elementDescriptor is ElementDescriptorButton)
                            {
                                ((ElementDescriptorButton)elementDescriptor).Text = stream.ReadString();
                            }
                            break;


                        case AttributeType.End: break;

                        default: throw new Exception("Invalid attribute type '" + valueType + "'");
                        }
                    } while (valueType != AttributeType.End);
                }

                WindowDescriptor windowDescriptor = new WindowDescriptor(windowName, elementDescriptors);
                windowDescriptors.Add(windowDescriptor);
            }

            InterfaceDescriptor = new InterfaceDescriptor(windowDescriptors);
        }