示例#1
0
 /// <summary>
 /// Writes the data element into the given buffer (at its current position).
 /// </summary>
 /// <param name="buffer">The buffer where the data element should be deserialized into.</param>
 public void WriteData(RAMBuffer buffer)
 {
     buffer.WriteInteger(Title.Length);
     buffer.WriteString(Title);
     buffer.WriteInteger(Content.Length);
     buffer.WriteString(Content);
 }
示例#2
0
            /// <summary>
            /// Writes the data element into the given buffer (at its current position).
            /// </summary>
            /// <param name="buffer">The buffer where the data element should be deserialized into.</param>
            public void WriteData(RAMBuffer buffer)
            {
                buffer.WriteUInteger(Enabled);
                buffer.WriteUInteger(Looping);

                buffer.WriteByte(State);
                buffer.WriteByte(ShowAsObjective);
                buffer.WriteInteger(ObjectiveDescriptionIndex);
                buffer.WriteUInteger(Unknown);

                if (Description.Length == 0 || Description.Last() != '\0')
                {
                    Description += '\0';
                }
                buffer.WriteInteger(Description.Length);
                buffer.WriteString(Description);

                if (Name.Length == 0 || Name.Last() != '\0')
                {
                    Name += '\0';
                }
                buffer.WriteInteger(Name.Length);
                buffer.WriteString(Name);

                ScenarioDataElementTools.AssertTrue(Effects.Count == EffectDisplayIndices.Count);
                buffer.WriteInteger(Effects.Count);
                Effects.ForEach(t => t.WriteData(buffer));
                EffectDisplayIndices.ForEach(t => buffer.WriteInteger(t));

                ScenarioDataElementTools.AssertTrue(Conditions.Count == ConditionDisplayIndices.Count);
                buffer.WriteInteger(Conditions.Count);
                Conditions.ForEach(t => t.WriteData(buffer));
                ConditionDisplayIndices.ForEach(t => buffer.WriteInteger(t));
            }
示例#3
0
            public void WriteData(RAMBuffer buffer)
            {
                buffer.WriteByte(Enabled);
                buffer.WriteByte(Random);

                buffer.WriteString(Name, 13);
                buffer.WriteString(Name2, 13);

                buffer.WriteInteger(SLP);
                buffer.WriteInteger(ShapePtr);
                buffer.WriteInteger(SoundID);

                buffer.WriteInteger(BlendPriority);
                buffer.WriteInteger(BlendType);

                AssertListLength(Colors, 3);
                Colors.ForEach(col => buffer.WriteByte(col));

                buffer.WriteByte(CliffColors.Item1);
                buffer.WriteByte(CliffColors.Item2);

                buffer.WriteByte(PassableTerrain);
                buffer.WriteByte(ImpassableTerrain);

                buffer.WriteByte(IsAnimated);
                buffer.WriteShort(AnimationFrames);
                buffer.WriteShort(PauseFames);
                buffer.WriteFloat(Interval);
                buffer.WriteFloat(PauseBetweenLoops);
                buffer.WriteShort(Frame);
                buffer.WriteShort(DrawFrame);
                buffer.WriteFloat(AnimateLast);
                buffer.WriteByte(FrameChanged);
                buffer.WriteByte(Drawn);

                AssertListLength(ElevationGraphics, 19);
                ElevationGraphics.ForEach(eg => eg.WriteData(buffer));

                buffer.WriteShort(TerrainToDraw);
                buffer.WriteShort(TerrainDimensions.Item1);
                buffer.WriteShort(TerrainDimensions.Item2);

                Borders.ForEach(b => buffer.WriteShort(b));

                AssertListLength(TerrainUnitID, 30);
                TerrainUnitID.ForEach(tu => buffer.WriteShort(tu));

                AssertListLength(TerrainUnitDensity, 30);
                TerrainUnitDensity.ForEach(tu => buffer.WriteShort(tu));

                AssertListLength(TerrainUnitCentering, 30);
                TerrainUnitCentering.ForEach(tu => buffer.WriteByte(tu));

                buffer.WriteShort(NumberOfTerrainUnitsUsed);

                buffer.WriteShort(Phantom);
            }
示例#4
0
        /// <summary>
        /// Writes the data element into the given buffer (at its current position).
        /// </summary>
        /// <param name="buffer">The buffer where the data element should be deserialized into.</param>
        public void WriteData(RAMBuffer buffer)
        {
            buffer.WriteUInteger(InstructionsStringDllId);
            buffer.WriteUInteger(HintsStringDllId);
            buffer.WriteUInteger(VictoryStringDllId);
            buffer.WriteUInteger(LossStringDllId);
            buffer.WriteUInteger(HistoryStringDllId);
            buffer.WriteUInteger(ScoutsStringDllId);

            buffer.WriteShort((short)InstructionsString.Length);
            buffer.WriteString(InstructionsString);

            buffer.WriteShort((short)HintsString.Length);
            buffer.WriteString(HintsString);

            buffer.WriteShort((short)VictoryString.Length);
            buffer.WriteString(VictoryString);

            buffer.WriteShort((short)LossString.Length);
            buffer.WriteString(LossString);

            buffer.WriteShort((short)HistoryString.Length);
            buffer.WriteString(HistoryString);

            buffer.WriteShort((short)ScoutsString.Length);
            buffer.WriteString(ScoutsString);

            buffer.WriteShort((short)PregameCinematicFileName.Length);
            buffer.WriteString(PregameCinematicFileName);

            buffer.WriteShort((short)VictoryCinematicFileName.Length);
            buffer.WriteString(VictoryCinematicFileName);

            buffer.WriteShort((short)LossCinematicFileName.Length);
            buffer.WriteString(LossCinematicFileName);

            buffer.WriteShort((short)BackgroundFileName.Length);
            buffer.WriteString(BackgroundFileName);

            if (Bitmap == null)
            {
                buffer.WriteUInteger(0);
                buffer.WriteInteger(0);
                buffer.WriteInteger(0);
                buffer.WriteShort(1);
            }
            else
            {
                buffer.WriteUInteger(1);
                buffer.WriteInteger(Bitmap.Width);
                buffer.WriteInteger(Bitmap.Height);
                buffer.WriteShort(-1);
                Bitmap.SaveToBuffer(buffer, false);
            }
        }
示例#5
0
        /// <summary>
        /// Serializes the data elements into the internal buffer.
        /// </summary>
        /// <remarks></remarks>
        private void WriteData()
        {
            // Initialize buffer
            if (_buffer == null)
            {
                _buffer = new RAMBuffer();
            }
            else if (_buffer.Length != 0)
            {
                _buffer.Clear();
            }

            // Write header
            _buffer.WriteString("1.21", 4);
            _buffer.WriteUInteger(4 + 4 + 4 + (uint)ScenarioInstructions.Length + 4 + 4);
            _buffer.WriteInteger(2);
            _buffer.WriteUInteger(LastSaveTimestamp);
            _buffer.WriteInteger(ScenarioInstructions.Length);
            _buffer.WriteString(ScenarioInstructions);
            _buffer.WriteUInteger(0);
            _buffer.WriteUInteger(PlayerCount);

            // Create buffer for compressed data elements
            RAMBuffer comprBuffer = new RAMBuffer();

            Header.WriteData(comprBuffer);
            MessagesCinematics.WriteData(comprBuffer);
            PlayerAiResources.WriteData(comprBuffer);
            GlobalVictory.WriteData(comprBuffer);
            Diplomacy.WriteData(comprBuffer);
            Disables.WriteData(comprBuffer);
            Map.WriteData(comprBuffer);
            Units.WriteData(comprBuffer);
            PlayerDiplomacyVarious.WriteData(comprBuffer);
            Triggers.WriteData(comprBuffer);
            IncludedFiles.WriteData(comprBuffer);

            // Compress data and copy to main buffer
            using (MemoryStream output = new MemoryStream())
                using (MemoryStream input = comprBuffer.ToMemoryStream())
                {
                    // Create compressor stream
                    using (DeflateStream compressor = new DeflateStream(output, CompressionMode.Compress))
                    {
                        // Compress
                        input.CopyTo(compressor);
                        input.Close();
                    }

                    // Save compressed data into main buffer
                    _buffer.Write(output.ToArray());
                }
        }
示例#6
0
            /// <summary>
            /// Writes the data element into the given buffer (at its current position).
            /// </summary>
            /// <param name="buffer">The buffer where the data element should be deserialized into.</param>
            public void WriteData(RAMBuffer buffer)
            {
                buffer.WriteUInteger((uint)Type);

                buffer.WriteUInteger(0x00000017);

                buffer.WriteInteger(AiGoal);
                buffer.WriteInteger(Amount);
                buffer.WriteInteger(ResourceId);
                buffer.WriteInteger(Diplomacy);

                buffer.WriteInteger(SelectedUnitInstanceIds.Count);

                buffer.WriteInteger(LocationUnitInstanceId);
                buffer.WriteInteger(UnitType);
                buffer.WriteInteger(PlayerSource);
                buffer.WriteInteger(PlayerTarget);
                buffer.WriteInteger(ResearchId);
                buffer.WriteInteger(StringId);
                buffer.WriteInteger(SoundId);
                buffer.WriteInteger(DisplayTime);
                buffer.WriteInteger(TriggerIndex);
                buffer.WriteInteger(LocationX);
                buffer.WriteInteger(LocationY);
                buffer.WriteInteger(AreaBottomLeftX);
                buffer.WriteInteger(AreaBottomLeftY);
                buffer.WriteInteger(AreaTopRightX);
                buffer.WriteInteger(AreaTopRightY);
                buffer.WriteInteger(UnitClass);
                buffer.WriteInteger(UnitType2);
                buffer.WriteInteger(InstructionPanel);

                if (Text.Length == 0 || Text.Last() != '\0')
                {
                    Text += '\0';
                }
                buffer.WriteInteger(Text.Length);
                buffer.WriteString(Text);

                if (SoundFileName.Length == 0 || SoundFileName.Last() != '\0')
                {
                    SoundFileName += '\0';
                }
                buffer.WriteInteger(SoundFileName.Length);
                buffer.WriteString(SoundFileName);

                SelectedUnitInstanceIds.ForEach(u => buffer.WriteUInteger(u));
            }
示例#7
0
 /// <summary>
 /// Writes the data element into the given buffer (at its current position).
 /// </summary>
 /// <param name="buffer">The buffer where the data element should be deserialized into.</param>
 public void WriteData(RAMBuffer buffer)
 {
     buffer.WriteUInteger(Unknown1);
     buffer.WriteUInteger(Unknown2);
     buffer.WriteInteger(AiPerFileContent.Length);
     buffer.WriteString(AiPerFileContent);
 }
示例#8
0
 public void WriteData(RAMBuffer buffer)
 {
     buffer.WriteInteger(Name.Length);
     buffer.WriteString(Name);
     buffer.WriteInteger(FrameIndex);
     buffer.WriteInteger(LegendLabelDllId);
 }
示例#9
0
            /// <summary>
            /// Writes the data element into the given buffer (at its current position).
            /// </summary>
            /// <param name="buffer">The buffer where the data element should be deserialized into.</param>
            public void WriteData(RAMBuffer buffer)
            {
                buffer.WriteUShort((ushort)PlayerName.Length);
                buffer.WriteString(PlayerName);
                buffer.WriteFloat(InitialCameraX);
                buffer.WriteFloat(InitialCameraY);
                buffer.WriteShort(UnknownX);
                buffer.WriteShort(UnknownY);
                buffer.WriteByte(AlliedVictory);

                ScenarioDataElementTools.AssertTrue(Diplomacy1.Count == Diplomacy2.Count);
                buffer.WriteUShort((ushort)Diplomacy1.Count);
                Diplomacy1.ForEach(d => buffer.WriteByte((byte)d));
                Diplomacy2.ForEach(d => buffer.WriteUInteger((uint)d));

                buffer.WriteUInteger(Color);
                buffer.WriteFloat(Unknown1);
                buffer.WriteUShort(Unknown3Count);

                if (Unknown1 == 2)
                {
                    ScenarioDataElementTools.AssertListLength(Unknown2, 8);
                    Unknown2.ForEach(b => buffer.WriteByte(b));
                }

                ScenarioDataElementTools.AssertListLength(Unknown3, Unknown3Count * 44);
                Unknown3.ForEach(b => buffer.WriteByte(b));

                ScenarioDataElementTools.AssertListLength(Unknown4, 7);
                Unknown4.ForEach(b => buffer.WriteByte(b));

                buffer.WriteInteger(Unknown5);
            }
示例#10
0
        public void WriteData(RAMBuffer buffer)
        {
            AssertListLength(RequiredTechs, 6);
            RequiredTechs.ForEach(e => buffer.WriteShort(e));

            AssertListLength(ResourceCosts, 3);
            ResourceCosts.ForEach(e =>
            {
                buffer.WriteShort(e.Type);
                buffer.WriteShort(e.Amount);
                buffer.WriteByte(e.Mode);
            });

            buffer.WriteShort(RequiredTechCount);
            buffer.WriteShort(Civ);
            buffer.WriteShort(FullTechMode);
            buffer.WriteShort(ResearchLocation);
            buffer.WriteUShort(LanguageDLLName1);
            buffer.WriteUShort(LanguageDLLDescription);
            buffer.WriteShort(ResearchTime);
            buffer.WriteShort(TechageID);
            buffer.WriteShort(Type);
            buffer.WriteShort(IconID);
            buffer.WriteByte(ButtonID);
            buffer.WriteInteger(LanguageDLLHelp);
            buffer.WriteInteger(LanguageDLLName2);
            buffer.WriteInteger(Unknown1);

            buffer.WriteUShort((ushort)Name.Length);
            buffer.WriteString(Name);
        }
示例#11
0
 public void WriteData(RAMBuffer buffer)
 {
     buffer.WriteString(FileName, 13);
     buffer.WriteInteger(ResourceID);
     buffer.WriteShort(Probability);
     buffer.WriteShort(Civ);
     buffer.WriteShort(Unknown1);
 }
示例#12
0
        /// <summary>
        /// Writes the data element into the given buffer (at its current position).
        /// </summary>
        /// <param name="buffer">The buffer where the data element should be deserialized into.</param>
        public void WriteData(RAMBuffer buffer)
        {
            ScenarioDataElementTools.AssertListLength(UnknownStrings, 32);
            UnknownStrings.ForEach(s => { buffer.WriteShort((short)s.Length); buffer.WriteString(s); });

            ScenarioDataElementTools.AssertListLength(AiNames, 16);
            AiNames.ForEach(s => { buffer.WriteShort((short)s.Length); buffer.WriteString(s); });

            ScenarioDataElementTools.AssertListLength(AiFiles, 16);
            AiFiles.ForEach(f => f.WriteData(buffer));

            ScenarioDataElementTools.AssertListLength(AiTypes, 16);
            AiTypes.ForEach(t => buffer.WriteByte(t));

            buffer.WriteUInteger(0xFFFFFF9D);

            ScenarioDataElementTools.AssertListLength(ResourceEntries, 16);
            ResourceEntries.ForEach(e => e.WriteData(buffer));
        }
示例#13
0
        /*void func(Sail.SailType type, Civ civ, byte[] data)
         * {
         *      SLPFile s = new SLPFile(new RAMBuffer(data));
         *      for(int f = 0; f < 90; ++f)
         *      {
         *              s._frameInformationHeaders[f].AnchorX = Sails[type].SailSlps[civ]._frameInformationHeaders[10 * ((f / 10) / 2) + (f % 10)].AnchorX;
         *              s._frameInformationHeaders[f].AnchorY = Sails[type].SailSlps[civ]._frameInformationHeaders[10 * ((f / 10) / 2) + (f % 10)].AnchorY;
         *      }
         *      Sails[type].SailSlps[civ] = s;
         * }*/

        /// <summary>
        /// Speichert die Schiffsdaten in der angegebenen Datei.
        /// </summary>
        /// <param name="filename">Die Zieldatei.</param>
        public void Save(string filename)
        {
            // Puffer erstellen
            RAMBuffer buffer = new RAMBuffer();

            // Name schreiben
            buffer.WriteInteger(Name.Length);
            buffer.WriteString(Name);

            // Rumpf-SLP schreiben
            if (BaseSlp != null)
            {
                // SLP schreiben
                buffer.WriteByte(1);
                BaseSlp.writeData();
                buffer.Write((RAMBuffer)BaseSlp.DataBuffer);
            }
            else
            {
                buffer.WriteByte(0);
            }

            // Schatten-SLP schreiben
            if (ShadowSlp != null)
            {
                // SLP schreiben
                buffer.WriteByte(1);
                ShadowSlp.writeData();
                buffer.Write((RAMBuffer)ShadowSlp.DataBuffer);
            }
            else
            {
                buffer.WriteByte(0);
            }

            // Segel schreiben
            buffer.WriteByte((byte)Sails.Count);
            foreach (var currSail in Sails)
            {
                // Schreiben
                buffer.WriteByte((byte)currSail.Key);
                currSail.Value.WriteData(buffer);
            }

            // Invertierte Segel schreiben
            buffer.WriteByte((byte)InvertedSails.Count);
            foreach (var invSail in InvertedSails)
            {
                buffer.WriteByte((byte)invSail);
            }

            // Speichern
            buffer.Save(filename);
        }
示例#14
0
        /// <summary>
        /// Writes the data element into the given buffer (at its current position).
        /// </summary>
        /// <param name="buffer">The buffer where the data element should be deserialized into.</param>
        public void WriteData(RAMBuffer buffer)
        {
            buffer.WriteUInteger(NextUnitIdToPlace);

            buffer.WriteFloat(1.22f);

            ScenarioDataElementTools.AssertListLength(PlayerNames, 16);
            PlayerNames.ForEach(p => buffer.WriteString(p, 256));

            ScenarioDataElementTools.AssertListLength(PlayerNameDllIds, 16);
            PlayerNameDllIds.ForEach(p => buffer.WriteUInteger(p));

            ScenarioDataElementTools.AssertListLength(PlayerData, 16);
            PlayerData.ForEach(p => p.WriteData(buffer));

            buffer.WriteUInteger(Unknown1);
            buffer.WriteByte(0);
            buffer.WriteFloat(Unknown2);

            buffer.WriteShort((short)OriginalFileName.Length);
            buffer.WriteString(OriginalFileName);
        }
示例#15
0
            /// <summary>
            /// Wandelt die Struktur in ein exportierbares Binärformat um.
            /// </summary>
            /// <returns></returns>
            public RAMBuffer ToBinary()
            {
                // Puffer erstellen
                RAMBuffer buff = new RAMBuffer();

                // DRS-Dateiname
                buff.WriteUInteger((uint)DRSFile.Length);
                buff.WriteString(DRSFile);

                // Datei-ID
                buff.WriteUInteger(FileID);

                // Ressourcen-Typ
                buff.WriteUInteger((uint)ResourceType.Length);
                buff.WriteString(ResourceType);

                // Data
                buff.WriteUInteger((uint)Data.Length);
                buff.Write(Data);

                // Fertig
                return(buff);
            }
示例#16
0
            public void WriteData(RAMBuffer buffer)
            {
                buffer.WriteByte(Enabled);
                buffer.WriteByte(Random);

                buffer.WriteString(Name, 13);
                buffer.WriteString(Name2, 13);

                buffer.WriteInteger(SLP);
                buffer.WriteInteger(ShapePtr);
                buffer.WriteInteger(SoundID);

                AssertListLength(Colors, 3);
                Colors.ForEach(col => buffer.WriteByte(col));

                buffer.WriteByte(IsAnimated);
                buffer.WriteShort(AnimationFrames);
                buffer.WriteShort(PauseFames);
                buffer.WriteFloat(Interval);
                buffer.WriteFloat(PauseBetweenLoops);
                buffer.WriteShort(Frame);
                buffer.WriteShort(DrawFrame);
                buffer.WriteFloat(AnimateLast);
                buffer.WriteByte(FrameChanged);
                buffer.WriteByte(Drawn);

                AssertListLength(Borders, 19);
                Borders.ForEach(b =>
                {
                    AssertListLength(b, 12);
                    b.ForEach(fd => fd.WriteData(buffer));
                });

                buffer.WriteShort(DrawTerrain);
                buffer.WriteShort(UnderlayTerrain);
                buffer.WriteShort(BorderStyle);
            }
示例#17
0
        public void WriteData(RAMBuffer buffer)
        {
            buffer.WriteString(Name1, 21);
            buffer.WriteString(Name2, 13);

            buffer.WriteInteger(SLP);
            buffer.WriteByte(Unknown1);
            buffer.WriteByte(Unknown2);
            buffer.WriteByte(Layer);
            buffer.WriteByte(PlayerColor);
            buffer.WriteByte(Rainbow);
            buffer.WriteByte(Replay);

            AssertListLength(Coordinates, 4);
            Coordinates.ForEach(e => buffer.WriteShort(e));

            buffer.WriteUShort((ushort)Deltas.Count);
            buffer.WriteShort(SoundID);
            buffer.WriteByte(AttackSoundUsed);
            buffer.WriteUShort(FrameCount);
            buffer.WriteUShort(AngleCount);
            buffer.WriteFloat(NewSpeed);
            buffer.WriteFloat(FrameRate);
            buffer.WriteFloat(ReplayDelay);
            buffer.WriteByte(SequenceType);
            buffer.WriteShort(ID);
            buffer.WriteByte(MirroringMode);
            buffer.WriteByte(Unknown3);

            Deltas.ForEach(e => e.WriteData(buffer));
            if (AttackSoundUsed != 0)
            {
                AssertListLength(AttackSounds, AngleCount);
                AttackSounds.ForEach(e => e.WriteData(buffer));
            }
        }
示例#18
0
        public void WriteData(RAMBuffer buffer)
        {
            buffer.WriteByte(One);
            buffer.WriteString(Name, 20);
            buffer.WriteUShort((ushort)Resources.Count);
            buffer.WriteShort(TechTreeID);
            buffer.WriteShort(TeamBonusID);
            Resources.ForEach(e => buffer.WriteFloat(e));
            buffer.WriteByte(IconSet);
            buffer.WriteUShort((ushort)UnitPointers.Count);
            UnitPointers.ForEach(e => buffer.WriteInteger(e));

            // Sicherstellen, dass genau jede definierte Einheit einen entsprechenden Pointer hat; hier nur über die Listenlänge, sollte aber die meisten auftretenden Fehler abdecken
            AssertListLength(Units, UnitPointers.Count(p => p != 0));
            foreach (var u in Units)
            {
                u.Value.WriteData(buffer);
            }
        }
示例#19
0
            public void WriteData(RAMBuffer buffer)
            {
                buffer.WriteByte((byte)Type);
                buffer.WriteUShort((ushort)Name1.Length);
                buffer.WriteShort(ID1);
                buffer.WriteUShort(LanguageDLLName);
                buffer.WriteUShort(LanguageDLLCreation);
                buffer.WriteShort(Class);
                buffer.WriteShort(StandingGraphic1);
                buffer.WriteShort(StandingGraphic2);
                buffer.WriteShort(DyingGraphic1);
                buffer.WriteShort(DyingGraphic2);
                buffer.WriteByte(DeathMode);
                buffer.WriteShort(HitPoints);
                buffer.WriteFloat(LineOfSight);
                buffer.WriteByte(GarrisonCapacity);
                buffer.WriteFloat(SizeRadius1);
                buffer.WriteFloat(SizeRadius2);
                buffer.WriteFloat(HPBarHeight1);
                buffer.WriteShort(TrainSound1);
                buffer.WriteShort(TrainSound2);
                buffer.WriteShort(DeadUnitID);
                buffer.WriteByte(PlacementMode);
                buffer.WriteByte(AirMode);
                buffer.WriteShort(IconID);
                buffer.WriteByte(HideInEditor);
                buffer.WriteShort(Unknown1);
                buffer.WriteByte(Enabled);
                buffer.WriteByte(Disabled);
                buffer.WriteShort(PlacementBypassTerrain1);
                buffer.WriteShort(PlacementBypassTerrain2);
                buffer.WriteShort(PlacementTerrain1);
                buffer.WriteShort(PlacementTerrain2);
                buffer.WriteFloat(EditorRadius1);
                buffer.WriteFloat(EditorRadius2);
                buffer.WriteByte(HillMode);
                buffer.WriteByte(VisibleInFog);
                buffer.WriteShort(TerrainRestriction);
                buffer.WriteByte(FlyMode);
                buffer.WriteShort(ResourceCapacity);
                buffer.WriteFloat(ResourceDecay);
                buffer.WriteByte(BlastType);
                buffer.WriteByte(Unknown2);
                buffer.WriteByte(InteractionMode);
                buffer.WriteByte(MinimapMode);
                buffer.WriteByte(CommandAttribute);
                buffer.WriteFloat(Unknown3A);
                buffer.WriteByte(MinimapColor);
                buffer.WriteInteger(LanguageDLLHelp);
                buffer.WriteInteger(LanguageDLLHotKeyText);
                buffer.WriteInteger(HotKey);
                buffer.WriteByte(Unselectable);
                buffer.WriteByte(Unknown6);
                buffer.WriteByte(UnknownSelectionMode);
                buffer.WriteByte(Unknown8);
                buffer.WriteByte(SelectionMask);
                buffer.WriteByte(SelectionShapeType);
                buffer.WriteByte(SelectionShape);
                buffer.WriteByte(Attribute);
                buffer.WriteByte(Civilization);
                buffer.WriteShort(Nothing);
                buffer.WriteByte(SelectionEffect);
                buffer.WriteByte(EditorSelectionColor);
                buffer.WriteFloat(SelectionRadius1);
                buffer.WriteFloat(SelectionRadius2);
                buffer.WriteFloat(HPBarHeight2);

                AssertListLength(ResourceStorages, 3);
                ResourceStorages.ForEach(e =>
                {
                    buffer.WriteShort(e.Type);
                    buffer.WriteFloat(e.Amount);
                    buffer.WriteByte(e.Mode);
                });

                buffer.WriteByte((byte)DamageGraphics.Count);
                DamageGraphics.ForEach(e => e.WriteData(buffer));

                buffer.WriteShort(SelectionSound);
                buffer.WriteShort(DyingSound);
                buffer.WriteByte(AttackMode);
                buffer.WriteByte(EdibleMeat);
                buffer.WriteString(Name1);
                buffer.WriteShort(ID2);
                buffer.WriteShort(ID3);

                if (Type >= UnitType.Flag)
                {
                    buffer.WriteFloat(Speed);
                }
                if (Type >= UnitType.DeadFish)
                {
                    DeadFish.WriteData(buffer);
                }
                if (Type >= UnitType.Bird)
                {
                    Bird.WriteData(buffer);
                }
                if (Type >= UnitType.Type50)
                {
                    Type50.WriteData(buffer);
                }
                if (Type == UnitType.Projectile)
                {
                    Projectile.WriteData(buffer);
                }
                if (Type >= UnitType.Creatable)
                {
                    Creatable.WriteData(buffer);
                }
                if (Type == UnitType.Building)
                {
                    Building.WriteData(buffer);
                }
            }
示例#20
0
            public void WriteData(RAMBuffer buffer)
            {
                // Version schreiben
                buffer.WriteByte(NEW_TECH_TREE_DESIGN_VERSION);

                // SLP-Daten
                buffer.WriteInteger(NodeSlpFileName.Length);
                buffer.WriteString(NodeSlpFileName);
                buffer.WriteInteger(NodeSlpId);
                buffer.WriteInteger(ScrollSlpFileName.Length);
                buffer.WriteString(ScrollSlpFileName);
                buffer.WriteInteger(ScrollSlpId);
                buffer.WriteInteger(TileSlpFileName.Length);
                buffer.WriteString(TileSlpFileName);
                buffer.WriteInteger(TileSlpId);
                buffer.WriteInteger(LegendAgesSlpFileName.Length);
                buffer.WriteString(LegendAgesSlpFileName);
                buffer.WriteInteger(LegendAgesSlpId);
                buffer.WriteInteger(LegendDisableSlpFileName.Length);
                buffer.WriteString(LegendDisableSlpFileName);
                buffer.WriteInteger(LegendDisableSlpId);

                // Scroll-Daten
                buffer.WriteInteger(MouseScrollArea);
                buffer.WriteInteger(MouseScrollDelay);
                buffer.WriteInteger(MouseScrollOffset);
                buffer.WriteInteger(KeyScrollOffset);

                // Button-Rechtecke
                WriteRectangle(CloseButtonRelativeRectangle, buffer);
                WriteRectangle(ScrollLeftButtonRelativeRectangle, buffer);
                WriteRectangle(ScrollRightButtonRelativeRectangle, buffer);

                // Auflösungsdaten
                buffer.WriteInteger(ResolutionData.Count);
                foreach (var rd in ResolutionData)
                {
                    // Daten schreiben
                    buffer.WriteInteger(rd.Key);
                    rd.Value.WriteData(buffer);
                }
                ;

                // Popup-Label-Daten
                buffer.WriteInteger(PopupLabelDelay);
                buffer.WriteInteger(PopupLabelWidth);
                buffer.WriteInteger(PopupInnerPadding);
                IGenieDataElement.AssertListLength(PopupBoxBevelColorIndices, 6);
                for (int i = 0; i < 6; ++i)
                {
                    buffer.WriteByte(PopupBoxBevelColorIndices[i]);
                }

                // Node-Daten
                buffer.WriteByte(NodeFontIndex);
                IGenieDataElement.AssertTrue(NodeTypes.Count >= 3);
                buffer.WriteInteger(NodeTypes.Count);
                NodeTypes.ForEach(n => n.WriteData(buffer));

                // Age-Labels
                buffer.WriteInteger(FirstLineBaseDllId);
                buffer.WriteInteger(SecondLineDllId);
                buffer.WriteByte(IncrementSecondLineDllId ? (byte)1 : (byte)0);
            }
示例#21
0
 public void WriteData(RAMBuffer buffer)
 {
     buffer.WriteString(Name, 31);
     buffer.WriteUShort((ushort)Effects.Count);
     Effects.ForEach(e => e.WriteData(buffer));
 }
示例#22
0
        /// <summary>
        /// Schreibt die enthaltenen Daten in das interne RAMBuffer-Objekt.
        /// </summary>
        /// <remarks></remarks>
        private void WriteData()
        {
            // Puffer initialisieren
            if (_buffer == null)
            {
                _buffer = new RAMBuffer();
            }
            else if (_buffer.Length != 0)
            {
                _buffer.Clear();
            }

            // Dateiversion schreiben
            _buffer.WriteString("VER 5.7", 8);

            // Anzahlen schreiben
            IGenieDataElement.AssertTrue(TerrainRestrictionPointers1.Count == TerrainRestrictionPointers2.Count);
            _buffer.WriteUShort((ushort)TerrainRestrictionPointers1.Count);
            _buffer.WriteUShort((ushort)DataElements.TerrainRestriction.TerrainCount);

            // Terrain-Pointer schreiben
            TerrainRestrictionPointers1.ForEach(e => _buffer.WriteInteger(e));
            TerrainRestrictionPointers2.ForEach(e => _buffer.WriteInteger(e));

            // Terrain-Beschränkungen schreiben
            TerrainRestrictions.ForEach(e => e.WriteData(_buffer));

            // Anzahl schreiben
            _buffer.WriteUShort((ushort)PlayerColors.Count);

            // Spielerfarben schreiben
            PlayerColors.ForEach(e => e.WriteData(_buffer));

            // Anzahl schreiben
            _buffer.WriteUShort((ushort)Sounds.Count);

            // Sounds schreiben
            Sounds.ForEach(e => e.WriteData(_buffer));

            // Anzahl schreiben
            _buffer.WriteUShort((ushort)GraphicPointers.Count);

            // Grafik-Pointer schreiben
            GraphicPointers.ForEach(e => _buffer.WriteInteger(e));

            // Grafiken schreiben Sicherstellen, dass genau jede definierte Grafik einen entsprechenden Pointer hat; hier nur über die Listenlänge, sollte aber die meisten auftretenden Fehler abdecken
            IGenieDataElement.AssertListLength(Graphics, GraphicPointers.Count(p => p != 0));
            foreach (var e in Graphics)
            {
                e.Value.WriteData(_buffer);
            }

            // Terrain-Daten schreiben
            TerrainBlock.WriteData(_buffer);

            // RandomMap-Daten schreiben
            RandomMaps.WriteData(_buffer);

            // Anzahl schreiben
            _buffer.WriteInteger(Techages.Count);

            // Technologie-Effekte schreiben
            Techages.ForEach(e => e.WriteData(_buffer));

            // Anzahl schreiben
            _buffer.WriteInteger(UnitHeaders.Count);

            // Einheiten-Header schreiben
            UnitHeaders.ForEach(e => e.WriteData(_buffer));

            // Anzahl schreiben
            _buffer.WriteUShort((ushort)Civs.Count);

            // Kulturen schreiben
            Civs.ForEach(e => e.WriteData(_buffer));

            // Anzahl schreiben
            _buffer.WriteUShort((ushort)Researches.Count);

            // Technologien schreiben
            Researches.ForEach(e => e.WriteData(_buffer));

            // Unbekannte Technologiebaum-Daten schreiben
            IGenieDataElement.AssertListLength(TechTreeUnknown, 7);
            TechTreeUnknown.ForEach(e => _buffer.WriteInteger(e));

            // Technologiebaum schreiben
            TechTree.WriteData(_buffer);
            if (_newTechTree)
            {
                // Marker und neuen TechTree schreiben
                _buffer.WriteString(NEW_TECH_TREE_MARKER);
                TechTreeNew.WriteData(_buffer);
            }

            // Fertig
        }