private static byte[] CreateExpectedBytes(IMapFileProperties props)
        {
            var numberEncoderService    = new NumberEncoderService();
            var mapStringEncoderService = new MapStringEncoderService();
            var ret = new List <byte>();

            ret.AddRange(Encoding.ASCII.GetBytes(props.FileType));
            ret.AddRange(props.Checksum);

            var fullName    = Enumerable.Repeat((byte)0xFF, 24).ToArray();
            var encodedName = mapStringEncoderService.EncodeMapString(props.Name);

            Array.Copy(encodedName, 0, fullName, fullName.Length - encodedName.Length, encodedName.Length);
            ret.AddRange(fullName);

            ret.AddRange(numberEncoderService.EncodeNumber(props.PKAvailable ? 3 : 0, 1));
            ret.AddRange(numberEncoderService.EncodeNumber((byte)props.Effect, 1));
            ret.AddRange(numberEncoderService.EncodeNumber(props.Music, 1));
            ret.AddRange(numberEncoderService.EncodeNumber(props.MusicExtra, 1));
            ret.AddRange(numberEncoderService.EncodeNumber(props.AmbientNoise, 2));
            ret.AddRange(numberEncoderService.EncodeNumber(props.Width, 1));
            ret.AddRange(numberEncoderService.EncodeNumber(props.Height, 1));
            ret.AddRange(numberEncoderService.EncodeNumber(props.FillTile, 2));
            ret.AddRange(numberEncoderService.EncodeNumber(props.MapAvailable ? 1 : 0, 1));
            ret.AddRange(numberEncoderService.EncodeNumber(props.CanScroll ? 1 : 0, 1));
            ret.AddRange(numberEncoderService.EncodeNumber(props.RelogX, 1));
            ret.AddRange(numberEncoderService.EncodeNumber(props.RelogY, 1));
            ret.AddRange(numberEncoderService.EncodeNumber(props.Unknown2, 1));

            return(ret.ToArray());
        }
Beispiel #2
0
        public void HeaderFormat_IsCorrect()
        {
            var nes = new NumberEncoderService();

            var actualBytes = _npcFile.SerializeToByteArray(nes);

            CollectionAssert.AreEqual(Encoding.ASCII.GetBytes(_npcFile.FileType), actualBytes.Take(3).ToArray());
            CollectionAssert.AreEqual(nes.EncodeNumber(_npcFile.CheckSum, 4), actualBytes.Skip(3).Take(4).ToArray());
            CollectionAssert.AreEqual(nes.EncodeNumber(_npcFile.Length, 2), actualBytes.Skip(7).Take(2).ToArray());
            CollectionAssert.AreEqual(nes.EncodeNumber(1, 1), actualBytes.Skip(9).Take(1).ToArray());
        }
        public void ENFRecord_SerializeToByteArray_WritesExpectedFormat()
        {
            var numberEncoderService = new NumberEncoderService();
            var record = CreateRecordWithSomeGoodTestData();

            var actualBytes = record.SerializeToByteArray(numberEncoderService);

            var expectedBytes = GetExpectedBytes(record, numberEncoderService);

            CollectionAssert.AreEqual(expectedBytes, actualBytes);
        }
        private byte[] MakeDummyFile(params DummyRecord[] records)
        {
            var numberEncoderService = new NumberEncoderService();

            var bytes = new List <byte>();

            bytes.Add((byte)records.Length);
            foreach (var record in records)
            {
                bytes.AddRange(record.SerializeToByteArray(numberEncoderService));
            }

            return(bytes.ToArray());
        }
Beispiel #5
0
        private byte[] MakeENFFileWithWrongLength(int checksum, int length, params ENFRecord[] records)
        {
            var numberEncoderService = new NumberEncoderService();

            var bytes = new List <byte>();

            bytes.AddRange(Encoding.ASCII.GetBytes("ENF"));
            bytes.AddRange(numberEncoderService.EncodeNumber(checksum, 4));
            bytes.AddRange(numberEncoderService.EncodeNumber(length, 2));
            bytes.Add(numberEncoderService.EncodeNumber(1, 1)[0]);
            foreach (var record in records)
            {
                bytes.AddRange(record.SerializeToByteArray(numberEncoderService));
            }

            return(bytes.ToArray());
        }
        public void ENFRecord_DeserializeFromByteArray_HasCorrectData()
        {
            var numberEncoderService = new NumberEncoderService();
            var sourceRecord         = CreateRecordWithSomeGoodTestData();
            var sourceRecordBytes    = GetExpectedBytesWithoutName(sourceRecord, numberEncoderService);

            var record = new ENFRecord {
                ID = sourceRecord.ID, Name = sourceRecord.Name
            };

            record.DeserializeFromByteArray(sourceRecordBytes, numberEncoderService);

            var properties = record.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

            Assert.IsTrue(properties.Length > 0);

            foreach (var property in properties)
            {
                var expectedValue = property.GetValue(sourceRecord);
                var actualValue   = property.GetValue(record);

                Assert.AreEqual(expectedValue, actualValue, "Property: {0}", property.Name);
            }
        }
 public EOPacketManager(EOMarketPlugin plugin)
 {
     _packetEncoderRepository = new PacketEncoderRepository();
     _packetProcessActions    = new PacketProcessActions(new SequenceRepository(), _packetEncoderRepository, new PacketEncoderService(), new PacketSequenceService());
     _numberEncoderService    = new NumberEncoderService();
 }
Beispiel #8
0
        private static byte[] CreateFilePacket(InitFileType type)
        {
            IPacketBuilder packetBuilder = new PacketBuilder();

            var nes = new NumberEncoderService();

            switch (type)
            {
            case InitFileType.Item:
                packetBuilder = packetBuilder
                                .AddChar((byte)InitReply.ItemFile).AddChar(1) //spacer
                                .AddString("EIF").AddInt(1)                   //RID
                                .AddShort(2)                                  //Len
                                .AddByte(1)                                   //filler byte
                                .AddBytes(new EIFRecord {
                    ID = 1, Name = "Test1"
                }.SerializeToByteArray(nes))
                                .AddBytes(new EIFRecord {
                    ID = 2, Name = "eof"
                }.SerializeToByteArray(nes));
                break;

            case InitFileType.Npc:
                packetBuilder = packetBuilder
                                .AddChar((byte)InitReply.NpcFile).AddChar(1) //spacer
                                .AddString("ENF").AddInt(1)                  //RID
                                .AddShort(2)                                 //Len
                                .AddByte(1)                                  //filler byte
                                .AddBytes(new ENFRecord {
                    ID = 1, Name = "Test1"
                }.SerializeToByteArray(nes))
                                .AddBytes(new ENFRecord {
                    ID = 2, Name = "eof"
                }.SerializeToByteArray(nes));
                break;

            case InitFileType.Spell:
                packetBuilder = packetBuilder
                                .AddChar((byte)InitReply.SpellFile).AddChar(1) //spacer
                                .AddString("ESF").AddInt(1)                    //RID
                                .AddShort(2)                                   //Len
                                .AddByte(1)                                    //filler byte
                                .AddBytes(new ESFRecord {
                    ID = 1, Name = "Test1", Shout = ""
                }.SerializeToByteArray(nes))
                                .AddBytes(new ESFRecord {
                    ID = 2, Name = "eof", Shout = ""
                }.SerializeToByteArray(nes));
                break;

            case InitFileType.Class:
                packetBuilder = packetBuilder
                                .AddChar((byte)InitReply.ClassFile).AddChar(1) //spacer
                                .AddString("ECF").AddInt(1)                    //RID
                                .AddShort(2)                                   //Len
                                .AddByte(1)                                    //filler byte
                                .AddBytes(new ECFRecord {
                    ID = 1, Name = "Test1"
                }.SerializeToByteArray(nes))
                                .AddBytes(new ECFRecord {
                    ID = 2, Name = "eof"
                }.SerializeToByteArray(nes));
                break;
            }

            return(packetBuilder.Build().RawData.ToArray());
        }