CODE |
using System; using Server.Items; using Server.Network; namespace Server.Items { public class RaceChangeCrystal : Item { [Constructable] public RaceChangeCrystal() : base( 0x240 ) { base.Weight = 1.0; base.Hue = 1076; base.Name = "magical race change crystal"; } public RaceChangeCrystal( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } public override void OnDoubleClick( Mobile from ) { if ( !IsChildOf( from.Backpack ) ) { from.SendLocalizedMessage( 1042001 );// That must be in your pack for you to use it. } else { Mobile m = from; byte gender = Convert.ToByte(m.Female); byte race = (byte)(m.Race == Race.Elf ? 1 : 2); if (m != null && m.Alive) { m.Send(new ChangeRace(gender, race)); this.Delete(); } } } } public sealed class ChangeRace : Packet { 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 ); } public static void Initialize() { 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; byte senderFlags = (byte)(Convert.ToByte(sender.Female) | (Convert.ToByte(sender.Race == Race.Elf ? 1 : 2) << 1)); // Item currentHair = sender.FindItemOnLayer(Layer.Hair); // Item currentBeard = sender.FindItemOnLayer(Layer.FacialHair); // if ( currentBeard != null ) currentBeard.Delete(); // if ( currentHair != null ) currentHair.Delete(); switch (senderFlags) { case 0: // human male -> elf male { sender.Body = 0x25D; sender.Hue = bodyHue; // sender.AddItem( Hair.CreateByID( hairId, hairHue ) ); sender.Race = Race.Elf; sender.Title = "the Elf"; break; } case 1: // human female -> elf female { sender.Body = 0x25E; sender.Hue = bodyHue; // sender.AddItem( Hair.CreateByID( hairId, hairHue ) ); sender.Race = Race.Elf; sender.Title = "the Elf"; break; } case 2: // elf male -> human male { sender.Body = 0x190; sender.Hue = bodyHue; // sender.AddItem( Hair.CreateByID( hairId, hairHue ) ); // sender.AddItem( Beard.CreateByID( beardId, beardHue ) ); sender.Race = Race.Human; sender.Title = ""; break; } case 3: // elf female -> human female { sender.Body = 0x191; sender.Hue = bodyHue; // sender.AddItem( Hair.CreateByID( hairId, hairHue ) ); sender.Race = Race.Human; sender.Title = ""; break; } } } } } |
CODE |
byte senderFlags = (byte)(Convert.ToByte(sender.Female) | (Convert.ToByte(sender.Race == Race.Elf ? 1 : 2) << 1)); |
CODE |
byte senderFlags = (byte)(Convert.ToByte(sender.Female) | (Convert.ToByte(sender.Race == Race.Elf ? 1 : 0) << 1)); |