64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using System.Linq;
|
|
using ClassicAssist.Shared;
|
|
using ClassicAssist.Shared.Resources;
|
|
using ClassicAssist.UO.Network.PacketFilter;
|
|
using ClassicAssist.UO.Network.Packets;
|
|
using ClassicAssist.UO.Objects;
|
|
using static ClassicAssist.Shared.UO.Commands;
|
|
|
|
namespace ClassicAssist.Data.Macros.Commands
|
|
{
|
|
public static class ConsumeCommands
|
|
{
|
|
private const int TIMEOUT = 5000;
|
|
private static readonly int[] _bandageTypes = { 0xe21 };
|
|
|
|
[CommandsDisplay( Category = nameof( Strings.Actions ) )]
|
|
public static bool BandageSelf()
|
|
{
|
|
PlayerMobile player = Engine.Player;
|
|
|
|
if ( player == null )
|
|
{
|
|
SystemMessage( Strings.Error__No_Player );
|
|
return false;
|
|
}
|
|
|
|
Item backpack = player.Backpack;
|
|
|
|
if ( backpack == null )
|
|
{
|
|
SystemMessage( Strings.Error__Cannot_find_player_backpack );
|
|
return false;
|
|
}
|
|
|
|
Item bandage = backpack.Container?.SelectEntity( i => _bandageTypes.Contains( i.ID ) );
|
|
|
|
if ( bandage == null )
|
|
{
|
|
SystemMessage( Strings.Error__Cannot_find_type );
|
|
return false;
|
|
}
|
|
|
|
ObjectCommands.UseObject( bandage.Serial );
|
|
|
|
PacketWaitEntry we = Engine.PacketWaitEntries.Add( new PacketFilterInfo( 0x6C ), PacketDirection.Incoming );
|
|
|
|
bool result = we.Lock.WaitOne( TIMEOUT );
|
|
|
|
if ( !result )
|
|
{
|
|
SystemMessage( Strings.Target_timeout___ );
|
|
return false;
|
|
}
|
|
|
|
byte[] packet = we.Packet;
|
|
|
|
int senderSerial = ( packet[2] << 24 ) | ( packet[3] << 16 ) | ( packet[4] << 8 ) | packet[5];
|
|
|
|
Engine.SendPacketToServer( new Target( senderSerial, player, true ) );
|
|
|
|
return true;
|
|
}
|
|
}
|
|
} |