public void WillKeepLastBetweenCasts() { Engine.Player = new PlayerMobile(0x01); Engine.PacketWaitEntries = new PacketWaitEntries(); AutoResetEvent are = new AutoResetEvent(false); void OnWaitEntryAddedEvent(PacketWaitEntry entry) { PacketWriter target = new PacketWriter(0x19); target.Write((byte)0x6C); target.Fill(); Engine.SendPacketToClient(target); Engine.PacketWaitEntries.CheckWait(target.ToArray(), PacketDirection.Incoming); } Engine.PacketWaitEntries.WaitEntryAddedEvent += OnWaitEntryAddedEvent; void OnInternalPacketSentEvent(byte[] data, int length) { if (data[0] != 0x6C) { return; } int serial = (data[7] << 24) | (data[8] << 16) | (data[9] << 8) | data[10]; if (serial != 0x00aabbcc) { Assert.Fail(); } are.Set(); } Engine.InternalPacketSentEvent += OnInternalPacketSentEvent; Task.Run(() => SpellCommands.Cast("Explosion", 0x00aabbcc)); bool result = are.WaitOne(60000); Assert.AreEqual(0x00aabbcc, AliasCommands.GetAlias("last")); Assert.IsTrue(result); Task.Run(() => SpellCommands.Cast("Explosion", "last")); result = are.WaitOne(60000); Assert.AreEqual(0x00aabbcc, AliasCommands.GetAlias("last")); Assert.IsTrue(result); Assert.AreEqual(0x00aabbcc, Engine.Player.LastTargetSerial); Engine.PacketWaitEntries.WaitEntryAddedEvent -= OnWaitEntryAddedEvent; Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent; Engine.Player = null; }