Files
ClassicAssist.Avalonia/ClassicAssist.Tests/MacroCommands/ActionCommandTests.cs
T
Beyhan Oğur d5f52cc3d3 first commit
2026-09-03 04:45:36 +03:00

368 lines
10 KiB
C#

using System;
using System.Text;
using System.Threading;
using ClassicAssist.Shared;
using ClassicAssist.Data.Macros.Commands;
using ClassicAssist.UO.Data;
using ClassicAssist.UO.Network;
using ClassicAssist.UO.Objects;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace ClassicAssist.Tests.MacroCommands
{
[TestClass]
public class ActionCommandTests
{
[TestInitialize]
public void Initialize()
{
Engine.ClientVersion = new Version( 7, 0, 45, 1 );
}
[TestMethod]
public void AttackWillSendAttackPacket()
{
AutoResetEvent are = new AutoResetEvent( false );
void OnInternalPacketSentEvent( byte[] data, int length )
{
if ( data[0] != 0x05 )
{
return;
}
int serial = ( data[1] << 24 ) | ( data[2] << 16 ) | ( data[3] << 8 ) | data[4];
Assert.AreEqual( 0x00aabbcc, serial );
are.Set();
}
Engine.InternalPacketSentEvent += OnInternalPacketSentEvent;
ActionCommands.Attack( 0x00aabbcc );
bool result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent;
}
[TestMethod]
public void ClearHandsWillSendDragPacket()
{
AutoResetEvent are = new AutoResetEvent( false );
void OnInternalPacketSentEvent( byte[] data, int length )
{
if ( data[0] != 0x07 )
{
return;
}
int serial = ( data[1] << 24 ) | ( data[2] << 16 ) | ( data[3] << 8 ) | data[4];
Assert.AreEqual( 0x00aabbcc, serial );
are.Set();
}
Engine.InternalPacketSentEvent += OnInternalPacketSentEvent;
Engine.Player = new PlayerMobile( 0x01 );
Engine.Player.SetLayer( Layer.OneHanded, 0x00aabbcc );
ActionCommands.ClearHands( "left" );
bool result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent;
Engine.Player = null;
}
[TestMethod]
public void ClickObjectWillSendPacket()
{
AutoResetEvent are = new AutoResetEvent( false );
void OnInternalPacketSentEvent( byte[] data, int length )
{
if ( data[0] != 0x09 )
{
return;
}
int serial = ( data[1] << 24 ) | ( data[2] << 16 ) | ( data[3] << 8 ) | data[4];
Assert.AreEqual( 0x00aabbcc, serial );
are.Set();
}
Engine.InternalPacketSentEvent += OnInternalPacketSentEvent;
AliasCommands.SetAlias( "thing", 0x00aabbcc );
ActionCommands.ClickObject( "thing" );
bool result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent;
Engine.Player = null;
}
[TestMethod]
public void MoveItemWillSendDragPacket()
{
AutoResetEvent are = new AutoResetEvent( false );
void OnInternalPacketSentEvent( byte[] data, int length )
{
if ( data[0] != 0x07 )
{
return;
}
int serial = ( data[1] << 24 ) | ( data[2] << 16 ) | ( data[3] << 8 ) | data[4];
Assert.AreEqual( 0x00aabbcc, serial );
are.Set();
}
Engine.InternalPacketSentEvent += OnInternalPacketSentEvent;
Engine.Items.Add( new Item( 0x00aabbcc ) { Count = 50 } );
ObjectCommands.MoveItem( 0x00aabbcc, 0xaabbdd );
bool result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent;
}
[TestMethod]
public void FeedWillSendDragPacket()
{
PlayerMobile player = new PlayerMobile( 0x01 );
Item backpack = new Item( 0x02 )
{
Container = new ItemCollection( 0x02 ) { new Item( 0x00aabbcc ) { ID = 0xff, Count = 1 } },
Owner = 0x01,
Layer = Layer.Backpack
};
player.SetLayer( Layer.Backpack, 0x02 );
Engine.Player = player;
Engine.Items.Add( backpack );
AutoResetEvent are = new AutoResetEvent( false );
void OnInternalPacketSentEvent( byte[] data, int length )
{
if ( data[0] != 0x07 )
{
return;
}
int serial = ( data[1] << 24 ) | ( data[2] << 16 ) | ( data[3] << 8 ) | data[4];
Assert.AreEqual( 0x00aabbcc, serial );
are.Set();
}
Engine.InternalPacketSentEvent += OnInternalPacketSentEvent;
ActionCommands.Feed( 0x01, 0xff );
bool result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent;
Engine.Items.Clear();
Engine.Player = null;
}
[TestMethod]
public void RenameWillSendRenamePacket()
{
AutoResetEvent are = new AutoResetEvent( false );
void OnInternalPacketSentEvent( byte[] data, int length )
{
int serial = ( data[1] << 24 ) | ( data[2] << 16 ) | ( data[3] << 8 ) | data[4];
Assert.AreEqual( 0x00aabbcc, serial );
string name = Encoding.ASCII.GetString( data, 5, 30 ).TrimEnd( '\0' );
Assert.AreEqual( "Snorlax", name );
are.Set();
}
Engine.InternalPacketSentEvent += OnInternalPacketSentEvent;
ActionCommands.Rename( 0x00aabbcc, "Snorlax" );
bool result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent;
}
[TestMethod]
public void ShowNamesWillSendLookRequest()
{
PlayerMobile player = new PlayerMobile( 0x01 );
Mobile mobile = new Mobile( 0x00aabbcc );
Engine.Player = player;
Engine.Mobiles.Add( mobile );
AutoResetEvent are = new AutoResetEvent( false );
void OnInternalPacketSentEvent( byte[] data, int length )
{
Assert.AreEqual( 0x09, data[0] );
int serial = ( data[1] << 24 ) | ( data[2] << 16 ) | ( data[3] << 8 ) | data[4];
Assert.AreEqual( 0x00aabbcc, serial );
are.Set();
}
Engine.InternalPacketSentEvent += OnInternalPacketSentEvent;
ActionCommands.ShowNames( "mobiles" );
bool result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.Mobiles.Remove( mobile );
Engine.Items.Add( new Item( 0x00aabbcc ) { ID = 0x2006 } );
ActionCommands.ShowNames( "corpses" );
result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent;
Engine.Player = null;
Engine.Mobiles.Clear();
Engine.Items.Clear();
}
[TestMethod]
public void EquipItemWillSendDragPacket()
{
AutoResetEvent are = new AutoResetEvent( false );
void OnInternalPacketSentEvent( byte[] data, int length )
{
if ( data[0] != 0x07 )
{
return;
}
int serial = ( data[1] << 24 ) | ( data[2] << 16 ) | ( data[3] << 8 ) | data[4];
Assert.AreEqual( 0x00aabbcc, serial );
are.Set();
}
Engine.InternalPacketSentEvent += OnInternalPacketSentEvent;
Engine.Items.Add( new Item( 0x00aabbcc ) );
Engine.Player = new PlayerMobile( 0x01 );
ActionCommands.EquipItem( 0x00aabbcc, Layer.OneHanded );
bool result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent;
Engine.Player = null;
Engine.Items.Clear();
}
[TestMethod]
public void EquipTypeWillSendDragPacket()
{
Item backpack = new Item( 0x40000000 ) { Owner = 1, Container = new ItemCollection( 0x40000000 ) };
Engine.Player = new PlayerMobile( 1 ) { Equipment = { backpack } };
Engine.Player.SetLayer( Layer.Backpack, backpack.Serial );
Engine.Items.Add( backpack );
Item item = new Item( 0x40000001, backpack.Serial ) { ID = 0xff };
backpack.Container.Add( item );
AutoResetEvent are = new AutoResetEvent( false );
void OnInternalPacketSentEvent( byte[] data, int length )
{
if ( data[0] != 0x07 )
{
return;
}
int serial = ( data[1] << 24 ) | ( data[2] << 16 ) | ( data[3] << 8 ) | data[4];
Assert.AreEqual( item.Serial, serial );
are.Set();
}
Engine.InternalPacketSentEvent += OnInternalPacketSentEvent;
ActionCommands.EquipType( item.ID, Layer.OneHanded );
bool result = are.WaitOne( 5000 );
Assert.IsTrue( result );
Engine.InternalPacketSentEvent -= OnInternalPacketSentEvent;
Engine.Player = null;
Engine.Items.Clear();
}
[TestMethod]
public void WillFindLayer()
{
Engine.Player = new PlayerMobile( 1 );
Engine.Player.SetLayer( Layer.OneHanded, 0x40000001 );
AliasCommands.SetAlias( "self", Engine.Player.Serial );
Assert.IsTrue( ActionCommands.FindLayer( "OneHanded" ) );
Assert.IsFalse( ActionCommands.FindLayer( "TwoHanded" ) );
AliasCommands.UnsetAlias( "self" );
Engine.Player = null;
}
[TestCleanup]
public void Cleanup()
{
ActionPacketQueue.Clear();
}
}
}