public void TestCorpseEquipPacket() { var m = new Mobile(0x1); m.DefaultMobileInit(); var weapon = new VikingSword(); m.EquipItem(weapon); var c = new Corpse(m, m.Items); var expected = new CorpseEquip(m, c).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); ns.SendCorpseEquip(m, c); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestGumpPacketAdmin(ProtocolChanges changes) { var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.RawName = "Test Mobile"; m.AccessLevel = AccessLevel.Administrator; var gump = new AdminGump(m, AdminGumpPage.Clients); var ns = PacketTestUtilities.CreateTestNetState(); ns.ProtocolChanges = changes; var expected = gump.Compile(ns).Compile(); ns.SendDisplayGump(gump, out _, out _); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
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 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); }
public void TestMobileAttributesN() { var m = new Mobile(0x1); m.DefaultMobileInit(); m.Str = 50; m.Hits = 100; m.Int = 75; m.Mana = 100; m.Dex = 25; m.Stam = 100; var expected = new MobileAttributesN(m).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); ns.SendMobileAttributes(m, true); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestBookCover(string author, string title) { var m = new Mobile(0x1); m.DefaultMobileInit(); Serial serial = 0x1001; var book = new TestBook(serial) { Author = author, Title = title }; var expected = new BookHeader(m, book).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); ns.SendBookCover(m, book); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestDragEffect( uint srcSerial, int srcX, int srcY, int srcZ, uint trgSerial, int trgX, int trgY, int trgZ, int itemId, int hue, int amount ) { var src = new Entity(srcSerial, new Point3D(srcX, srcY, srcZ), null); var targ = new Entity(trgSerial, new Point3D(trgX, trgY, trgZ), null); var expected = new DragEffect(src, targ, itemId, hue, amount).Compile(); using var ns = PacketTestUtilities.CreateTestNetState(); ns.SendDragEffect( src.Serial, src.Location, targ.Serial, targ.Location, itemId, hue, amount ); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestUnicodeMessage() { Serial serial = 0x1; var graphic = 0x100; var messageType = MessageType.Label; var hue = 1024; var font = 3; var lang = "ENU"; var name = "Stuff"; var text = "Some Text"; var expected = new UnicodeMessage( serial, graphic, messageType, hue, font, lang, name, text ).Compile(); using var ns = PacketTestUtilities.CreateTestNetState(); ns.SendMessage( serial, graphic, messageType, hue, font, false, lang, name, text ); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestUnicodeMessage() { Serial serial = 0x1; var graphic = 0x100; var messageType = MessageType.Label; var hue = 1024; var font = 3; var lang = "ENU"; var name = "Stuff"; var text = "Some Text"; var data = new UnicodeMessage( serial, graphic, messageType, hue, font, lang, name, text ).Compile(); Span <byte> expectedData = stackalloc byte[50 + text.Length * 2]; var pos = 0; expectedData.Write(ref pos, (byte)0xAE); // Packet ID expectedData.Write(ref pos, (ushort)expectedData.Length); // Length expectedData.Write(ref pos, serial); expectedData.Write(ref pos, (ushort)graphic); expectedData.Write(ref pos, (byte)messageType); expectedData.Write(ref pos, (ushort)hue); expectedData.Write(ref pos, (ushort)font); expectedData.WriteAsciiFixed(ref pos, lang, 4); expectedData.WriteAsciiFixed(ref pos, name, 30); expectedData.WriteBigUniNull(ref pos, text); AssertThat.Equal(data, expectedData); }
public void TestMapPatches() { var data = new MapPatches().Compile(); Span <byte> expectedData = stackalloc byte[] { 0xBF, // Packet ID 0x00, 0x29, // Length 0x00, 0x18, // Sub-packet 0x00, 0x00, 0x00, 0x04, // 4 maps 0x00, 0x00, 0x00, 0x00, // Felucca 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Trammel 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Ilshenar 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Malas 0x00, 0x00, 0x00, 0x00 }; AssertThat.Equal(data, expectedData); }
public void TestSwing() { Serial attacker = 0x1000; Serial defender = 0x2000; var data = new Swing(attacker, defender).Compile(); Span <byte> expectedData = stackalloc byte[10]; var pos = 0; expectedData.Write(ref pos, (byte)0x2F); // Packet ID #if NO_LOCAL_INIT expectedData.Write(ref pos, (byte)0); #else pos++; #endif expectedData.Write(ref pos, attacker); expectedData.Write(ref pos, defender); AssertThat.Equal(data, expectedData); }
public void TestMessageLocalized() { Serial serial = 0x1; var graphic = 0x100; var messageType = MessageType.Label; var hue = 1024; var font = 3; var number = 150000; var name = "Stuff"; var args = "Arguments"; var data = new MessageLocalized( serial, graphic, messageType, hue, font, number, name, args ).Compile(); Span <byte> expectedData = stackalloc byte[50 + args.Length * 2]; var pos = 0; expectedData.Write(ref pos, (byte)0xC1); // Packet ID expectedData.Write(ref pos, (ushort)expectedData.Length); // Length expectedData.Write(ref pos, serial); expectedData.Write(ref pos, (ushort)graphic); expectedData.Write(ref pos, (byte)messageType); expectedData.Write(ref pos, (ushort)hue); expectedData.Write(ref pos, (ushort)font); expectedData.Write(ref pos, number); expectedData.WriteAsciiFixed(ref pos, name, 30); expectedData.WriteLittleUniNull(ref pos, args); AssertThat.Equal(data, expectedData); }
public void TestUnicodePrompt() { var prompt = new TestPrompt(); Span <byte> data = new UnicodePrompt(prompt).Compile(); Span <byte> expectedData = stackalloc byte[] { 0xC2, // Packet ID 0x00, 0x15, // Length 0x00, 0x00, 0x00, 0x00, // Serial 0x00, 0x00, 0x00, 0x00, // Prompt Serial 0x00, 0x00, 0x00, 0x00, // Unused 0x00, 0x00, 0x00, 0x00, // Unused 0x00, 0x00 // Unused }; prompt.Serial.CopyTo(expectedData.Slice(3, 4)); prompt.Serial.CopyTo(expectedData.Slice(7, 4)); AssertThat.Equal(data, expectedData); } }
public void TestVendorBuyContent6017() { 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 VendorBuyContent6017(buyStates).Compile(); Span <byte> expectedData = stackalloc byte[5 + buyStates.Count * 20]; int pos = 0; expectedData[pos++] = 0x3C; // Packet ID ((ushort)expectedData.Length).CopyTo(ref pos, expectedData); // Length ((ushort)buyStates.Count).CopyTo(ref pos, expectedData); // Count for (int i = buyStates.Count - 1; i >= 0; i--) { BuyItemState buyState = buyStates[i]; buyState.MySerial.CopyTo(ref pos, expectedData); ((ushort)buyState.ItemID).CopyTo(ref pos, expectedData); pos++; // ItemID Offset ((ushort)buyState.Amount).CopyTo(ref pos, expectedData); ((ushort)(i + 1)).CopyTo(ref pos, expectedData); // X expectedData[pos++] = 0; expectedData[pos++] = 1; // Y expectedData[pos++] = 0; // Grid Location buyState.ContainerSerial.CopyTo(ref pos, expectedData); ((ushort)buyState.Hue).CopyTo(ref pos, expectedData); } AssertThat.Equal(data, expectedData); }
public void TestVendorBuyContent(ProtocolChanges protocolChanges) { 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) }; using var ns = PacketTestUtilities.CreateTestNetState(); ns.ProtocolChanges = protocolChanges; var expected = new VendorBuyContent(buyStates, ns.ContainerGridLines).Compile(); ns.SendVendorBuyContent(buyStates); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestNullFastwalkStack() { var data = new NullFastwalkStack().Compile(); Span <byte> expectedData = stackalloc byte[29]; var pos = 0; expectedData.Write(ref pos, (byte)0xBF); // Packet ID expectedData.Write(ref pos, (ushort)29); // Length expectedData.Write(ref pos, (short)0x1); // Sub-packet #if NO_LOCAL_INIT expectedData.Write(ref pos, 0); // Key 1 expectedData.Write(ref pos, 0); // Key 2 expectedData.Write(ref pos, 0); // Key 3 expectedData.Write(ref pos, 0); // Key 4 expectedData.Write(ref pos, 0); // Key 5 expectedData.Write(ref pos, 0); // Key 6 #endif AssertThat.Equal(data, expectedData); }
public void TestMobileStatus(ProtocolChanges changes) { var beholder = new Mobile(0x1) { Name = "Random Mobile 1" }; beholder.DefaultMobileInit(); beholder.Str = 50; beholder.Hits = 100; beholder.Int = 75; beholder.Mana = 100; beholder.Dex = 25; beholder.Stam = 100; var beheld = new Mobile(0x2) { Name = "Random Mobile 2" }; beheld.DefaultMobileInit(); beheld.Str = 50; beheld.Hits = 100; beheld.Int = 75; beheld.Mana = 100; beheld.Dex = 25; beheld.Stam = 100; using var ns = PacketTestUtilities.CreateTestNetState(); ns.ProtocolChanges = changes; var expected = new MobileStatus(beholder, beheld, ns).Compile(); ns.SendMobileStatus(beholder, beheld); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestChangeCharacter() { var firstMobile = new Mobile(0x1); firstMobile.DefaultMobileInit(); firstMobile.RawName = "Test Mobile"; var secondMobile = new Mobile(0x2); secondMobile.DefaultMobileInit(); secondMobile.RawName = null; var account = new MockAccount(new[] { firstMobile, null, secondMobile }); var expected = new ChangeCharacter(account).Compile(); using var ns = PacketTestUtilities.CreateTestNetState(); ns.SendChangeCharacter(account); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestMahjongTilesInfo(bool spectatorVision) { var m = new Mobile(0x1); m.DefaultMobileInit(); var game = new MahjongGame { SpectatorVision = spectatorVision }; game.Players.Join(m); var expected = new MahjongTilesInfo(game, m).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); ns.SendMahjongTilesInfo(game, m); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestHealthbarPoison(string pName) { var p = Poison.GetPoison(pName); var m = new Mobile(0x1); m.DefaultMobileInit(); m.Poison = p; var data = new HealthbarPoison(m).Compile(); Span <byte> expectedData = stackalloc byte[12]; var pos = 0; expectedData.Write(ref pos, (byte)0x17); // Packet ID expectedData.Write(ref pos, (ushort)12); // Length expectedData.Write(ref pos, m.Serial); expectedData.Write(ref pos, 0x10001); // Show Bar?, Poison Bar expectedData.Write(ref pos, (byte)((p?.Level ?? -1) + 1)); AssertThat.Equal(data, expectedData); Assert.Equal(p?.Level, m.Poison?.Level); }
public void TestMovementRej() { var m = new Mobile(0x1); m.DefaultMobileInit(); const byte seq = 100; var data = new MovementRej(seq, m).Compile(); Span <byte> expectedData = stackalloc byte[8]; var pos = 0; expectedData.Write(ref pos, (byte)0x21); // Packet ID expectedData.Write(ref pos, seq); expectedData.Write(ref pos, (short)m.X); expectedData.Write(ref pos, (short)m.Y); expectedData.Write(ref pos, (byte)m.Direction); expectedData.Write(ref pos, (byte)m.Z); AssertThat.Equal(data, expectedData); }
public void TestParticleEffect() { var effectType = EffectType.Moving; Serial serial = (Serial)0x4000; Serial from = (Serial)0x1000; Serial to = (Serial)0x2000; var itemId = 0x100; var fromPoint = new Point3D(1000, 100, -10); var toPoint = new Point3D(1500, 500, 0); byte speed = 3; byte duration = 2; var direction = false; var explode = false; var hue = 0x1024; var renderMode = 1; ushort effect = 3; ushort explodeEffect = 0; ushort explodeSound = 0; byte layer = 9; ushort unknown = 0; var expected = new ParticleEffect( effectType, from, to, itemId, fromPoint, toPoint, speed, duration, direction, explode, hue, renderMode, effect, explodeEffect, explodeSound, serial, layer, unknown ).Compile(); Span <byte> actual = stackalloc byte[OutgoingEffectPackets.ParticleEffectLength]; OutgoingEffectPackets.CreateParticleEffect( actual, effectType, from, to, itemId, fromPoint, toPoint, speed, duration, direction, explode, hue, renderMode, effect, explodeEffect, explodeSound, serial, layer, unknown ); AssertThat.Equal(actual, expected); }
public void TestMessageLocalized() { Serial serial = 0x1; var graphic = 0x100; var messageType = MessageType.Label; var hue = 1024; var font = 3; var number = 150000; var name = "Stuff"; var args = "Arguments"; var expected = new MessageLocalized( serial, graphic, messageType, hue, font, number, name, args ).Compile(); using var ns = PacketTestUtilities.CreateTestNetState(); ns.SendMessageLocalized( serial, graphic, messageType, hue, font, number, name, args ); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestMultiTargetReqHS() { var multiID = 0x1024; var p = new Point3D(1000, 100, 10); MultiTarget t = new TestMultiTarget(multiID, p); var data = new MultiTargetReqHS(t).Compile(); Span <byte> expectedData = stackalloc byte[30]; var pos = 0; expectedData.Write(ref pos, (byte)0x99); // Packet ID expectedData.Write(ref pos, t.AllowGround); expectedData.Write(ref pos, t.TargetID); #if NO_LOCAL_INIT expectedData.Write(ref pos, 0); expectedData.Write(ref pos, (ushort)0); expectedData.Write(ref pos, (ushort)0); expectedData.Write(ref pos, (byte)0); expectedData.Write(ref pos, (byte)0); expectedData.Write(ref pos, (ushort)0); #else pos += 12; #endif expectedData.Write(ref pos, (short)t.MultiID); expectedData.Write(ref pos, (ushort)t.Offset.X); expectedData.Write(ref pos, (ushort)t.Offset.Y); expectedData.Write(ref pos, (short)t.Offset.Z); #if NO_LOCAL_INIT // Hue (4 bytes) expectedData.Write(ref pos, 0); #endif AssertThat.Equal(data, expectedData); }
public void TestSecureTradeEquip6017() { var m = new Mobile(0x1); m.DefaultMobileInit(); var cont = new Container(Serial.LastItem + 1); var itemInCont = new Item(Serial.LastItem + 2) { Parent = cont }; var data = new SecureTradeEquip6017(itemInCont, m).Compile(); Span <byte> expectedData = stackalloc byte[21]; var pos = 0; expectedData.Write(ref pos, (byte)0x25); // Packet ID expectedData.Write(ref pos, itemInCont.Serial); expectedData.Write(ref pos, (short)itemInCont.ItemID); #if NO_LOCAL_INIT expectedData.Write(ref pos, (byte)0); #else pos++; #endif expectedData.Write(ref pos, (short)itemInCont.Amount); expectedData.Write(ref pos, (short)itemInCont.X); expectedData.Write(ref pos, (short)itemInCont.Y); #if NO_LOCAL_INIT expectedData.Write(ref pos, (byte)0); #else pos++; #endif expectedData.Write(ref pos, m.Serial); expectedData.Write(ref pos, (short)itemInCont.Hue); AssertThat.Equal(data, expectedData); }
public void TestContainerContent6017() { var cont = new Container(World.NewItem); cont.AddItem(new Item(World.NewItem)); cont.Map = Map.Felucca; var m = new Mobile(0x1); m.DefaultMobileInit(); m.AccessLevel = AccessLevel.Administrator; m.Map = Map.Felucca; var expected = new ContainerContent6017(m, cont).Compile(); using var ns = PacketTestUtilities.CreateTestNetState(); ns.ProtocolChanges |= ProtocolChanges.ContainerGridLines; ns.SendContainerContent(m, cont); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestNewSpellbookContent() { Serial serial = 0x1000; ushort graphic = 100; ushort offset = 10; ulong content = 0x123456789ABCDEF0; var data = new NewSpellbookContent(serial, graphic, offset, content).Compile(); Span <byte> expectedData = stackalloc byte[23]; var pos = 0; expectedData.Write(ref pos, (byte)0xBF); // Packet ID expectedData.Write(ref pos, (ushort)0x17); // Length expectedData.Write(ref pos, (ushort)0x1B); // Sub-packet expectedData.Write(ref pos, (ushort)0x1); // Command expectedData.Write(ref pos, serial); expectedData.Write(ref pos, graphic); expectedData.Write(ref pos, offset); expectedData.WriteLE(ref pos, content); AssertThat.Equal(data, expectedData); }
public void TestNewMobileAnimation(int action, int frameCount, byte delay) { Serial mobile = 0x1; var expected = new NewMobileAnimation( mobile, action, frameCount, delay ).Compile(); using var ns = PacketTestUtilities.CreateTestNetState(); ns.SendNewMobileAnimation( mobile, action, frameCount, delay ); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestSecureTradeEquip6017() { var m = new Mobile(0x1); m.DefaultMobileInit(); var cont = new Container(World.NewItem); var itemInCont = new Item(World.NewItem) { Parent = cont }; var expected = new SecureTradeEquip6017(itemInCont, m).Compile(); using var ns = PacketTestUtilities.CreateTestNetState(); ns.ProtocolChanges |= ProtocolChanges.ContainerGridLines; ns.SendSecureTradeEquip(itemInCont, m); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestPartyMemberList() { var leader = new Mobile(0x1024u); leader.DefaultMobileInit(); var member = new Mobile(0x2048u); member.DefaultMobileInit(); var p = new Party(leader); p.Add(member); var expected = new PartyMemberList(p).Compile(); using var ns = PacketTestUtilities.CreateTestNetState(); ns.SendPartyMemberList(p); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestCorpseContainerPacket(ProtocolChanges changes) { var m = new Mobile(0x1); m.DefaultMobileInit(); var weapon = new VikingSword(); m.EquipItem(weapon); var c = new Corpse(m, m.Items); using var ns = PacketTestUtilities.CreateTestNetState(); ns.ProtocolChanges = changes; var expected = (ns.ContainerGridLines ? (Packet) new CorpseContent6017(m, c) : new CorpseContent(m, c)).Compile(); ns.SendCorpseContent(m, c); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }