[Obsolete] Basic ML & Elf functionality
No longer supported, update to RunUO 2.0!
ADDITION:
Race Change client 'gump'
Packet structure:
Code example:
No longer supported, update to RunUO 2.0!
ADDITION:
Race Change client 'gump'
Packet structure:
Code:
Server -> Client
BYTE 0xBF
WORD Length ( 7 )
WORD Subcommand - 0x2A
BYTE Gender ( 0 = male, 1 = female )
BYTE Race ( 1 = human, 2 = elf )
Client -> Server
BYTE 0xBF
WORD Length ( 15 )
WORD Subcommand - 0x2A
WORD BodyHue
WORD HairId
WORD HairHue
WORD BeardId
WORD BeardHue
Code example:
Code:
using System;
using Server.Items;
namespace Server.Network
{
public sealed class ChangeRace : Packet
{
public static void Initialize()
{
Commands.Register("Race", AccessLevel.Player, new CommandEventHandler(OnCommand));
PacketHandlers.RegisterExtended(0x2A, true, new OnPacketReceive(Change));
}
private static void Change( NetState state, PacketReader pvSrc )
{
short bodyHue = pvSrc.ReadInt16();
short hairId = pvSrc.ReadInt16();
short hairHue = pvSrc.ReadInt16();
short beardId = pvSrc.ReadInt16();
short beardHue = pvSrc.ReadInt16();
if ( ( bodyHue
| hairId
| hairHue
| beardId
| beardHue )
== 0 ) return;
Mobile sender = state.Mobile;
Item currentHair = sender.FindItemOnLayer( Layer.Hair );
Item currentBeard = sender.FindItemOnLayer( Layer.FacialHair );
if ( currentBeard != null ) currentBeard.Delete();
if ( currentHair != null ) currentHair.Delete();
sender.Body = sender.Female ? ( sender.Elf ? 0x191 : 0x25E ) : ( sender.Elf ? 0x190 : 0x25D );
sender.Hue = bodyHue;
sender.Elf ^= true;
sender.AddItem( Hair.CreateByID( hairId, hairHue ) );
if ( !sender.Female && !sender.Elf ) sender.AddItem( Beard.CreateByID( beardId, beardHue ) );
}
public static void OnCommand(CommandEventArgs e)
{
Mobile m = e.Mobile;
if (m != null)
{
m.Send(new ChangeRace( (byte)(m.Female ? 1 : 0), (byte)(m.Elf ? 1 : 2)));
}
}
public ChangeRace(byte gender, byte race)
: base(0xBF)
{
EnsureCapacity(7);
m_Stream.Write( (short) 0x2A );
m_Stream.Write( (byte) gender );
m_Stream.Write( (byte) race );
}
}
}