예제 #1
0
        public void TestVendorBuyList()
        {
            var vendor = new Mobile(0x1);

            vendor.DefaultMobileInit();

            var cont = new Container(World.NewItem);

            var buyStates = new List <BuyItemState>
            {
                new("First Item", cont.Serial, World.NewItem, 10, 1, 0x01, 0),
                new("Second Item", cont.Serial, World.NewItem, 20, 2, 0x0A, 0),
                new("Third Item", cont.Serial, World.NewItem, 30, 10, 0x0F, 0)
            };

            var expected = new VendorBuyList(vendor, buyStates).Compile();

            var ns = PacketTestUtilities.CreateTestNetState();

            ns.SendVendorBuyList(vendor, buyStates);

            var result = ns.SendPipe.Reader.TryRead();

            AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
        }
예제 #2
0
        public void TestVendorBuyList()
        {
            var vendor = new Mobile(0x1);

            vendor.DefaultMobileInit();

            var cont = new Container(Serial.LastItem + 1);

            var buyStates = new List <BuyItemState>
            {
                new BuyItemState("First Item", cont.Serial, Serial.NewItem, 10, 1, 0x01, 0),
                new BuyItemState("Second Item", cont.Serial, Serial.NewItem, 20, 2, 0x0A, 0),
                new BuyItemState("Third Item", cont.Serial, Serial.NewItem, 30, 10, 0x0F, 0)
            };

            Span <byte> data = new VendorBuyList(vendor, buyStates).Compile();

            int length = 8 + 5 * 3 + buyStates.Sum(state => state.Description.Length + 1);

            Span <byte> expectedData = stackalloc byte[length];

            int pos = 0;

            expectedData[pos++] = 0x74;                                  // Packet ID
            ((ushort)expectedData.Length).CopyTo(ref pos, expectedData); // Length
            Serial.MinusOne.CopyTo(ref pos, expectedData);               // Vendor Buy Pack Serial or -1
            expectedData[pos++] = (byte)buyStates.Count;

            for (int i = 0; i < buyStates.Count; i++)
            {
                BuyItemState state = buyStates[i];
                state.Price.CopyTo(ref pos, expectedData);
                string desc = state.Description ?? "";
                expectedData[pos++] = (byte)(desc.Length + 1);
                desc.CopyASCIITo(ref pos, expectedData);
                pos++;
            }

            AssertThat.Equal(data, expectedData);
        }
예제 #3
0
        public void TestVendorBuyList()
        {
            var vendor = new Mobile(0x1);

            vendor.DefaultMobileInit();

            var cont = new Container(Serial.LastItem + 1);

            var buyStates = new List <BuyItemState>
            {
                new BuyItemState("First Item", cont.Serial, Serial.NewItem, 10, 1, 0x01, 0),
                new BuyItemState("Second Item", cont.Serial, Serial.NewItem, 20, 2, 0x0A, 0),
                new BuyItemState("Third Item", cont.Serial, Serial.NewItem, 30, 10, 0x0F, 0)
            };

            var data = new VendorBuyList(vendor, buyStates).Compile();

            var length = 8 + buyStates.Sum(state => 6 + state.Description.Length);

            Span <byte> expectedData = stackalloc byte[length];

            var pos = 0;

            expectedData.Write(ref pos, (byte)0x74);                  // Packet ID
            expectedData.Write(ref pos, (ushort)expectedData.Length); // Length
            expectedData.Write(ref pos, Serial.MinusOne);             // Vendor Buy Pack Serial or -1
            expectedData.Write(ref pos, (byte)buyStates.Count);

            for (var i = 0; i < buyStates.Count; i++)
            {
                var state = buyStates[i];
                expectedData.Write(ref pos, state.Price);
                var description = state.Description ?? "";
                expectedData.Write(ref pos, (byte)Math.Min(255, description.Length + 1));
                expectedData.WriteAsciiNull(ref pos, description, 255);
            }

            AssertThat.Equal(data, expectedData);
        }