context: #region References
  using System;
  using System.Collections.Generic;
  using System.Net;
  using System.Net.Sockets;
  using System.Reflection;
  
  using Server.Accounting;
  using Server.Commands;
  using Server.ContextMenus;
  using Server.Guilds;
  using Server.Items;
  using Server.Network;
  #endregion
  
  namespace Server
  {
  	public delegate void OnItemObtainedEventHandler(OnItemObtainedEventArgs e);
  
  	public delegate void CheckEquipItemEventHandler(CheckEquipItemEventArgs e);
  
  	public delegate void ContextMenuEventHandler(ContextMenuEventArgs e);
  
  	public delegate void WorldBroadcastEventHandler(WorldBroadcastEventArgs e);
  
  	public delegate void CharacterCreatedEventHandler(CharacterCreatedEventArgs e);
  
  	public delegate void OpenDoorMacroEventHandler(OpenDoorMacroEventArgs e);
  
  	public delegate void SpeechEventHandler(SpeechEventArgs e);
  
  	public delegate void LoginEventHandler(LoginEventArgs e);
  
  	public delegate void ServerListEventHandler(ServerListEventArgs e);
  
  	public delegate void MovementEventHandler(MovementEventArgs e);
  
  	public delegate void HungerChangedEventHandler(HungerChangedEventArgs e);
  
  	public delegate void CrashedEventHandler(CrashedEventArgs e);
  
  	public delegate void ShutdownEventHandler(ShutdownEventArgs e);
  
  	public delegate void HelpRequestEventHandler(HelpRequestEventArgs e);
  
  	public delegate void DisarmRequestEventHandler(DisarmRequestEventArgs e);
  
  	public delegate void StunRequestEventHandler(StunRequestEventArgs e);
  
  	public delegate void OpenSpellbookRequestEventHandler(OpenSpellbookRequestEventArgs e);
  
  	public delegate void CastSpellRequestEventHandler(CastSpellRequestEventArgs e);
  
  	public delegate void BandageTargetRequestEventHandler(BandageTargetRequestEventArgs e);
  
  	public delegate void AnimateRequestEventHandler(AnimateRequestEventArgs e);
  
  	public delegate void LogoutEventHandler(LogoutEventArgs e);
  
  	public delegate void SocketConnectEventHandler(SocketConnectEventArgs e);
  
  	public delegate void ConnectedEventHandler(ConnectedEventArgs e);
  
  	public delegate void DisconnectedEventHandler(DisconnectedEventArgs e);
  
  	public delegate void RenameRequestEventHandler(RenameRequestEventArgs e);
  
  	public delegate void PlayerDeathEventHandler(PlayerDeathEventArgs e);
  
  	public delegate void CreatureDeathEventHandler(CreatureDeathEventArgs e);
  
  	public delegate void VirtueGumpRequestEventHandler(VirtueGumpRequestEventArgs e);
  
  	public delegate void VirtueItemRequestEventHandler(VirtueItemRequestEventArgs e);
  
  	public delegate void VirtueMacroRequestEventHandler(VirtueMacroRequestEventArgs e);
  
  	public delegate void AccountLoginEventHandler(AccountLoginEventArgs e);
  
  	public delegate void PaperdollRequestEventHandler(PaperdollRequestEventArgs e);
  
  	public delegate void ProfileRequestEventHandler(ProfileRequestEventArgs e);
  
  	public delegate void ChangeProfileRequestEventHandler(ChangeProfileRequestEventArgs e);
  
  	public delegate void AggressiveActionEventHandler(AggressiveActionEventArgs e);
  
  	public delegate void GameLoginEventHandler(GameLoginEventArgs e);
  
  	public delegate void DeleteRequestEventHandler(DeleteRequestEventArgs e);
  
  	public delegate void WorldLoadEventHandler();
  
  	public delegate void WorldSaveEventHandler(WorldSaveEventArgs e);
  
      public delegate void BeforeWorldSaveEventHandler(BeforeWorldSaveEventArgs e);
  
      public delegate void AfterWorldSaveEventHandler(AfterWorldSaveEventArgs e);
  
      public delegate void SetAbilityEventHandler(SetAbilityEventArgs e);
  
  	public delegate void FastWalkEventHandler(FastWalkEventArgs e);
  
  	public delegate void ServerStartedEventHandler();
  
  	public delegate void CreateGuildHandler(CreateGuildEventArgs e);
  
  	public delegate void GuildGumpRequestHandler(GuildGumpRequestArgs e);
  
  	public delegate void QuestGumpRequestHandler(QuestGumpRequestArgs e);
  
  	public delegate void ClientVersionReceivedHandler(ClientVersionReceivedArgs e);
  
      public delegate void ClientTypeReceivedHandler(ClientTypeReceivedArgs e);
  
  	public delegate void OnKilledByEventHandler(OnKilledByEventArgs e);
  
  	public delegate void OnItemUseEventHandler(OnItemUseEventArgs e);
  
  	public delegate void OnEnterRegionEventHandler(OnEnterRegionEventArgs e);
  
  	public delegate void OnConsumeEventHandler(OnConsumeEventArgs e);
  
  	public delegate void OnPropertyChangedEventHandler(OnPropertyChangedEventArgs e);
  
  	public delegate void BODUsedEventHandler(BODUsedEventArgs e);
  
  	public delegate void BODOfferEventHandler(BODOfferEventArgs e);
  
  	public delegate void ResourceHarvestAttemptEventHandler(ResourceHarvestAttemptEventArgs e);
  
  	public delegate void ResourceHarvestSuccessEventHandler(ResourceHarvestSuccessEventArgs e);
  
  	public delegate void CraftSuccessEventHandler(CraftSuccessEventArgs e);
  
      public delegate void SkillGainEventHandler(SkillGainEventArgs e);
  
      public delegate void SkillCheckEventHandler(SkillCheckEventArgs e);
  
      public delegate void SkillCapChangeEventHandler(SkillCapChangeEventArgs e);
  
      public delegate void StatCapChangeEventHandler(StatCapChangeEventArgs e);
  
      public delegate void QuestCompleteEventHandler(QuestCompleteEventArgs e);
  
      public delegate void ItemCreatedEventHandler(ItemCreatedEventArgs e);
  
  	public delegate void ItemDeletedEventHandler(ItemDeletedEventArgs e);
  
  	public delegate void MobileCreatedEventHandler(MobileCreatedEventArgs e);
  
  	public delegate void MobileDeletedEventHandler(MobileDeletedEventArgs e);
  
      public delegate void TargetedSpellEventHandler(TargetedSpellEventArgs e);
  
      public delegate void TargetedSkillEventHandler(TargetedSkillEventArgs e);
  
      public delegate void TargetedItemUseEventHandler(TargetedItemUseEventArgs e);
  
      public delegate void EquipMacroEventHandler(EquipMacroEventArgs e);
  
      public delegate void UnequipMacroEventHandler(UnequipMacroEventArgs e);
  
      public delegate void TargetByResourceMacroEventHandler(TargetByResourceMacroEventArgs e);
  
      public delegate void JoinGuildEventHandler(JoinGuildEventArgs e);
  
      public delegate void TameCreatureEventHandler(TameCreatureEventArgs e);
  
      public delegate void ValidVendorPurchaseEventHandler(ValidVendorPurchaseEventArgs e);
  
      public delegate void ValidVendorSellEventHandler(ValidVendorSellEventArgs e);
  
      public delegate void CorpseLootEventHandler(CorpseLootEventArgs e);
  
      public delegate void RepairItemEventHandler(RepairItemEventArgs e);
  
      public delegate void AlterItemEventHandler(AlterItemEventArgs e);
  
      public delegate void PlacePlayerVendorEventHandler(PlacePlayerVendorEventArgs e);
  
      public delegate void FameChangeEventHandler(FameChangeEventArgs e);
  
      public delegate void KarmaChangeEventHandler(KarmaChangeEventArgs e);
  
      public delegate void VirtueLevelChangeEventHandler(VirtueLevelChangeEventArgs e);
  
      public delegate void PlayerMurderedEventHandler(PlayerMurderedEventArgs e);
  
      public delegate void AccountGoldChangeEventHandler(AccountGoldChangeEventArgs e);
  
      public delegate void ContainerDroppedToEventHandler(ContainerDroppedToEventArgs e);
  
      public delegate void TeleportMovementEventHandler(TeleportMovementEventArgs e);
  
      public delegate void MultiDesignQueryHandler(MultiDesignQueryEventArgs e);
  
      public class OnItemObtainedEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  		private readonly Item m_Item;
  
  		public OnItemObtainedEventArgs(Mobile from, Item item)
  		{
  			m_Mobile = from;
  			m_Item = item;
  		}
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public Item Item { get { return m_Item; } }
  	}
  
  	public class CheckEquipItemEventArgs : EventArgs
  	{
  		public Mobile Mobile { get; private set; }
  		public Item Item { get; private set; }
  		public bool Message { get; private set; }
  
  		public bool Block { get; set; }
  
  		public CheckEquipItemEventArgs(Mobile m, Item item, bool message)
  		{
  			Mobile = m;
  			Item = item;
  			Message = message;
  		}
  	}
  
  	public class ContextMenuEventArgs : EventArgs
  	{
  		public Mobile Mobile { get; private set; }
  		public IEntity Target { get; private set; }
  		public List<ContextMenuEntry> Entries { get; private set; }
  
  		public ContextMenuEventArgs(Mobile m, IEntity target, List<ContextMenuEntry> entries)
  		{
  			Mobile = m;
  			Target = target;
  			Entries = entries;
  		}
  	}
  
  	public class WorldBroadcastEventArgs : EventArgs
  	{
  		public int Hue { get; set; }
  		public bool Ascii { get; set; }
  		public AccessLevel Access { get; set; }
  		public string Text { get; set; }
  
  		public WorldBroadcastEventArgs(int hue, bool ascii, AccessLevel access, string text)
  		{
  			Hue = hue;
  			Ascii = ascii;
  			Access = access;
  			Text = text;
  		}
  	}
  
      public class ClientVersionReceivedArgs : EventArgs
  	{
  		private readonly NetState m_State;
  		private readonly ClientVersion m_Version;
  
  		public NetState State { get { return m_State; } }
  		public ClientVersion Version { get { return m_Version; } }
  
  		public ClientVersionReceivedArgs(NetState state, ClientVersion cv)
  		{
  			m_State = state;
  			m_Version = cv;
  		}
  	}
  
      public class ClientTypeReceivedArgs : EventArgs
      {
          private readonly NetState m_State;
  
          public NetState State { get { return m_State; } }
  
          public ClientTypeReceivedArgs(NetState state)
          {
              m_State = state;
          }
      }
  
  	public class CreateGuildEventArgs : EventArgs
  	{
  		public int Id { get; set; }
  
  		public BaseGuild Guild { get; set; }
  
  		public CreateGuildEventArgs(int id)
  		{
  			Id = id;
  		}
  	}
  
  	public class GuildGumpRequestArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public GuildGumpRequestArgs(Mobile mobile)
  		{
  			m_Mobile = mobile;
  		}
  	}
  
  	public class QuestGumpRequestArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public QuestGumpRequestArgs(Mobile mobile)
  		{
  			m_Mobile = mobile;
  		}
  	}
  
  	public class SetAbilityEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  		private readonly int m_Index;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public int Index { get { return m_Index; } }
  
  		public SetAbilityEventArgs(Mobile mobile, int index)
  		{
  			m_Mobile = mobile;
  			m_Index = index;
  		}
  	}
  
  	public class DeleteRequestEventArgs : EventArgs
  	{
  		private readonly NetState m_State;
  		private readonly int m_Index;
  
  		public NetState State { get { return m_State; } }
  		public int Index { get { return m_Index; } }
  
  		public DeleteRequestEventArgs(NetState state, int index)
  		{
  			m_State = state;
  			m_Index = index;
  		}
  	}
  
  	public class GameLoginEventArgs : EventArgs
  	{
  		private readonly NetState m_State;
  		private readonly string m_Username;
  		private readonly string m_Password;
  
  		public NetState State { get { return m_State; } }
  		public string Username { get { return m_Username; } }
  		public string Password { get { return m_Password; } }
  		public bool Accepted { get; set; }
  		public CityInfo[] CityInfo { get; set; }
  
  		public GameLoginEventArgs(NetState state, string un, string pw)
  		{
  			m_State = state;
  			m_Username = un;
  			m_Password = pw;
  		}
  	}
  
  	public class AggressiveActionEventArgs : EventArgs
  	{
  		private Mobile m_Aggressed;
  		private Mobile m_Aggressor;
  		private bool m_Criminal;
  
  		public Mobile Aggressed { get { return m_Aggressed; } }
  		public Mobile Aggressor { get { return m_Aggressor; } }
  		public bool Criminal { get { return m_Criminal; } }
  
  		private static readonly Queue<AggressiveActionEventArgs> m_Pool = new Queue<AggressiveActionEventArgs>();
  
  		public static AggressiveActionEventArgs Create(Mobile aggressed, Mobile aggressor, bool criminal)
  		{
  			AggressiveActionEventArgs args;
  
  			if (m_Pool.Count > 0)
  			{
  				args = m_Pool.Dequeue();
  
  				args.m_Aggressed = aggressed;
  				args.m_Aggressor = aggressor;
  				args.m_Criminal = criminal;
  			}
  			else
  			{
  				args = new AggressiveActionEventArgs(aggressed, aggressor, criminal);
  			}
  
  			return args;
  		}
  
  		private AggressiveActionEventArgs(Mobile aggressed, Mobile aggressor, bool criminal)
  		{
  			m_Aggressed = aggressed;
  			m_Aggressor = aggressor;
  			m_Criminal = criminal;
  		}
  
  		public void Free()
  		{
  			m_Pool.Enqueue(this);
  		}
  	}
  
  	public class ProfileRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Beholder;
  		private readonly Mobile m_Beheld;
  
  		public Mobile Beholder { get { return m_Beholder; } }
  		public Mobile Beheld { get { return m_Beheld; } }
  
  		public ProfileRequestEventArgs(Mobile beholder, Mobile beheld)
  		{
  			m_Beholder = beholder;
  			m_Beheld = beheld;
  		}
  	}
  
  	public class ChangeProfileRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Beholder;
  		private readonly Mobile m_Beheld;
  		private readonly string m_Text;
  
  		public Mobile Beholder { get { return m_Beholder; } }
  		public Mobile Beheld { get { return m_Beheld; } }
  		public string Text { get { return m_Text; } }
  
  		public ChangeProfileRequestEventArgs(Mobile beholder, Mobile beheld, string text)
  		{
  			m_Beholder = beholder;
  			m_Beheld = beheld;
  			m_Text = text;
  		}
  	}
  
  	public class PaperdollRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Beholder;
  		private readonly Mobile m_Beheld;
  
  		public Mobile Beholder { get { return m_Beholder; } }
  		public Mobile Beheld { get { return m_Beheld; } }
  
  		public PaperdollRequestEventArgs(Mobile beholder, Mobile beheld)
  		{
  			m_Beholder = beholder;
  			m_Beheld = beheld;
  		}
  	}
  
  	public class AccountLoginEventArgs : EventArgs
  	{
  		private readonly NetState m_State;
  		private readonly string m_Username;
  		private readonly string m_Password;
  
  		public NetState State { get { return m_State; } }
  		public string Username { get { return m_Username; } }
  		public string Password { get { return m_Password; } }
  		public bool Accepted { get; set; }
  		public ALRReason RejectReason { get; set; }
  
  		public AccountLoginEventArgs(NetState state, string username, string password)
  		{
  			m_State = state;
  			m_Username = username;
  			m_Password = password;
  			Accepted = true;
  		}
  	}
  
  	public class VirtueItemRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Beholder;
  		private readonly Mobile m_Beheld;
  		private readonly int m_GumpID;
  
  		public Mobile Beholder { get { return m_Beholder; } }
  		public Mobile Beheld { get { return m_Beheld; } }
  		public int GumpID { get { return m_GumpID; } }
  
  		public VirtueItemRequestEventArgs(Mobile beholder, Mobile beheld, int gumpID)
  		{
  			m_Beholder = beholder;
  			m_Beheld = beheld;
  			m_GumpID = gumpID;
  		}
  	}
  
  	public class VirtueGumpRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Beholder;
  		private readonly Mobile m_Beheld;
  
  		public Mobile Beholder { get { return m_Beholder; } }
  		public Mobile Beheld { get { return m_Beheld; } }
  
  		public VirtueGumpRequestEventArgs(Mobile beholder, Mobile beheld)
  		{
  			m_Beholder = beholder;
  			m_Beheld = beheld;
  		}
  	}
  
  	public class VirtueMacroRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  		private readonly int m_VirtueID;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public int VirtueID { get { return m_VirtueID; } }
  
  		public VirtueMacroRequestEventArgs(Mobile mobile, int virtueID)
  		{
  			m_Mobile = mobile;
  			m_VirtueID = virtueID;
  		}
  	}
  
  	public class PlayerDeathEventArgs : EventArgs
  	{
  		public Mobile Mobile { get; private set; }
  		public Mobile Killer { get; private set; }
  		public Container Corpse { get; private set; }
  
  		public PlayerDeathEventArgs(Mobile mobile)
  			: this(mobile, mobile.LastKiller, mobile.Corpse)
  		{ }
  
  		public PlayerDeathEventArgs(Mobile mobile, Mobile killer, Container corpse)
  		{
  			Mobile = mobile;
  			Killer = killer;
  			Corpse = corpse;
  		}
  	}
  
  	public class CreatureDeathEventArgs : EventArgs
  	{
  		public Mobile Creature { get; private set; }
  		public Mobile Killer { get; private set; }
  		public Container Corpse { get; private set; }
  
  		public List<Item> ForcedLoot { get; private set; }
  
  		public bool PreventDefault { get; set; }
  		public bool PreventDelete { get; set; }
  		public bool ClearCorpse { get; set; }
  
  		public CreatureDeathEventArgs(Mobile creature)
  			: this(creature, creature.LastKiller, creature.Corpse)
  		{ }
  
  		public CreatureDeathEventArgs(Mobile creature, Mobile killer, Container corpse)
  		{
  			Creature = creature;
  			Killer = killer;
  			Corpse = corpse;
  
  			ForcedLoot = new List<Item>();
  		}
  
  		public void ClearLoot(bool free)
  		{
  			if (free)
  			{
  				ForcedLoot.Clear();
  				ForcedLoot.TrimExcess();
  			}
  			else
  			{
  				ForcedLoot = new List<Item>();
  			}
  		}
  	}
  
  	public class RenameRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_From;
  		private readonly Mobile m_Target;
  		private readonly string m_Name;
  
  		public Mobile From { get { return m_From; } }
  		public Mobile Target { get { return m_Target; } }
  		public string Name { get { return m_Name; } }
  
  		public RenameRequestEventArgs(Mobile from, Mobile target, string name)
  		{
  			m_From = from;
  			m_Target = target;
  			m_Name = name;
  		}
  	}
  
  	public class LogoutEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public LogoutEventArgs(Mobile m)
  		{
  			m_Mobile = m;
  		}
  	}
  
  	public class SocketConnectEventArgs : EventArgs
  	{
  		private readonly Socket m_Socket;
  
  		public Socket Socket { get { return m_Socket; } }
  		public bool AllowConnection { get; set; }
  
  		public SocketConnectEventArgs(Socket s)
  		{
  			m_Socket = s;
  			AllowConnection = true;
  		}
  	}
  
  	public class ConnectedEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public ConnectedEventArgs(Mobile m)
  		{
  			m_Mobile = m;
  		}
  	}
  
  	public class DisconnectedEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public DisconnectedEventArgs(Mobile m)
  		{
  			m_Mobile = m;
  		}
  	}
  
  	public class AnimateRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  		private readonly string m_Action;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public string Action { get { return m_Action; } }
  
  		public AnimateRequestEventArgs(Mobile m, string action)
  		{
  			m_Mobile = m;
  			m_Action = action;
  		}
  	}
  
  	public class CastSpellRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  		private readonly Item m_Spellbook;
  		private readonly int m_SpellID;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public Item Spellbook { get { return m_Spellbook; } }
  		public int SpellID { get { return m_SpellID; } }
  
  		public CastSpellRequestEventArgs(Mobile m, int spellID, Item book)
  		{
  			m_Mobile = m;
  			m_Spellbook = book;
  			m_SpellID = spellID;
  		}
  	}
  
  	public class BandageTargetRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  		private readonly Item m_Bandage;
  		private readonly Mobile m_Target;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public Item Bandage { get { return m_Bandage; } }
  		public Mobile Target { get { return m_Target; } }
  
  		public BandageTargetRequestEventArgs(Mobile m, Item bandage, Mobile target)
  		{
  			m_Mobile = m;
  			m_Bandage = bandage;
  			m_Target = target;
  		}
  	}
  
  	public class OpenSpellbookRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  		private readonly int m_Type;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public int Type { get { return m_Type; } }
  
  		public OpenSpellbookRequestEventArgs(Mobile m, int type)
  		{
  			m_Mobile = m;
  			m_Type = type;
  		}
  	}
  
  	public class StunRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public StunRequestEventArgs(Mobile m)
  		{
  			m_Mobile = m;
  		}
  	}
  
  	public class DisarmRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public DisarmRequestEventArgs(Mobile m)
  		{
  			m_Mobile = m;
  		}
  	}
  
  	public class HelpRequestEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public HelpRequestEventArgs(Mobile m)
  		{
  			m_Mobile = m;
  		}
  	}
  
  	public class ShutdownEventArgs : EventArgs
  	{ }
  
  	public class CrashedEventArgs : EventArgs
  	{
  		private readonly Exception m_Exception;
  
  		public Exception Exception { get { return m_Exception; } }
  		public bool Close { get; set; }
  
  		public CrashedEventArgs(Exception e)
  		{
  			m_Exception = e;
  		}
  	}
  
  	public class HungerChangedEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  		private readonly int m_OldValue;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public int OldValue { get { return m_OldValue; } }
  
  		public HungerChangedEventArgs(Mobile mobile, int oldValue)
  		{
  			m_Mobile = mobile;
  			m_OldValue = oldValue;
  		}
  	}
  
  	public class MovementEventArgs : EventArgs
  	{
  		private Mobile m_Mobile;
  		private Direction m_Direction;
  		private bool m_Blocked;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public Direction Direction { get { return m_Direction; } }
  		public bool Blocked { get { return m_Blocked; } set { m_Blocked = value; } }
  
  		private static readonly Queue<MovementEventArgs> m_Pool = new Queue<MovementEventArgs>();
  
  		public static MovementEventArgs Create(Mobile mobile, Direction dir)
  		{
  			MovementEventArgs args;
  
  			if (m_Pool.Count > 0)
  			{
  				args = m_Pool.Dequeue();
  
  				args.m_Mobile = mobile;
  				args.m_Direction = dir;
  				args.m_Blocked = false;
  			}
  			else
  			{
  				args = new MovementEventArgs(mobile, dir);
  			}
  
  			return args;
  		}
  
  		public MovementEventArgs(Mobile mobile, Direction dir)
  		{
  			m_Mobile = mobile;
  			m_Direction = dir;
  		}
  
  		public void Free()
  		{
  			m_Pool.Enqueue(this);
  		}
  	}
  
  	public class ServerListEventArgs : EventArgs
  	{
  		private readonly NetState m_State;
  		private readonly IAccount m_Account;
  		private readonly List<ServerInfo> m_Servers;
  
  		public NetState State { get { return m_State; } }
  		public IAccount Account { get { return m_Account; } }
  		public bool Rejected { get; set; }
  		public List<ServerInfo> Servers { get { return m_Servers; } }
  
  		public void AddServer(string name, IPEndPoint address)
  		{
  			AddServer(name, 0, TimeZone.CurrentTimeZone, address);
  		}
  
  		public void AddServer(string name, int fullPercent, TimeZone tz, IPEndPoint address)
  		{
  			m_Servers.Add(new ServerInfo(name, fullPercent, tz, address));
  		}
  
  		public ServerListEventArgs(NetState state, IAccount account)
  		{
  			m_State = state;
  			m_Account = account;
  			m_Servers = new List<ServerInfo>();
  		}
  	}
  
  	public struct SkillNameValue
  	{
  		private readonly SkillName m_Name;
  		private readonly int m_Value;
  
  		public SkillName Name { get { return m_Name; } }
  		public int Value { get { return m_Value; } }
  
  		public SkillNameValue(SkillName name, int value)
  		{
  			m_Name = name;
  			m_Value = value;
  		}
  	}
  
  	public class CharacterCreatedEventArgs : EventArgs
  	{
  		private readonly NetState m_State;
  		private readonly IAccount m_Account;
  		private readonly CityInfo m_City;
  		private readonly SkillNameValue[] m_Skills;
  		private readonly int m_ShirtHue;
  		private readonly int m_PantsHue;
  		private readonly int m_HairID;
  		private readonly int m_HairHue;
  		private readonly int m_BeardID;
  		private readonly int m_BeardHue;
  		private readonly string m_Name;
  		private readonly bool m_Female;
  		private readonly int m_Hue;
  		private readonly int m_Str;
  		private readonly int m_Dex;
  		private readonly int m_Int;
  		private readonly Race m_Race;
          private readonly int m_Face;
          private readonly int m_FaceHue;
  
          public NetState State { get { return m_State; } }
  		public IAccount Account { get { return m_Account; } }
  		public Mobile Mobile { get; set; }
  		public string Name { get { return m_Name; } }
  		public bool Female { get { return m_Female; } }
  		public int Hue { get { return m_Hue; } }
  		public int Str { get { return m_Str; } }
  		public int Dex { get { return m_Dex; } }
  		public int Int { get { return m_Int; } }
  		public CityInfo City { get { return m_City; } }
  		public SkillNameValue[] Skills { get { return m_Skills; } }
  		public int ShirtHue { get { return m_ShirtHue; } }
  		public int PantsHue { get { return m_PantsHue; } }
  		public int HairID { get { return m_HairID; } }
  		public int HairHue { get { return m_HairHue; } }
  		public int BeardID { get { return m_BeardID; } }
  		public int BeardHue { get { return m_BeardHue; } }
  		public int Profession { get; set; }
  		public Race Race { get { return m_Race; } }
          public int FaceID { get { return m_Face; } }
          public int FaceHue { get { return m_FaceHue; } }
  
          public CharacterCreatedEventArgs(
              NetState state,
              IAccount a,
              string name,
              bool female,
              int hue,
              int str,
              int dex,
              int intel,
              CityInfo city,
              SkillNameValue[] skills,
              int shirtHue,
              int pantsHue,
              int hairID,
              int hairHue,
              int beardID,
              int beardHue,
              int profession,
              Race race)
              : this(state, a, name, female, hue, str, dex, intel, city, skills, shirtHue, pantsHue, hairID, hairHue, beardID, beardHue, profession, race, 0, 0)
          {
          }
  
          public CharacterCreatedEventArgs(
  			NetState state,
  			IAccount a,
  			string name,
  			bool female,
  			int hue,
  			int str,
  			int dex,
  			int intel,
  			CityInfo city,
  			SkillNameValue[] skills,
  			int shirtHue,
  			int pantsHue,
  			int hairID,
  			int hairHue,
  			int beardID,
  			int beardHue,
  			int profession,
  			Race race,
              int faceID,
              int faceHue)
  		{
  			m_State = state;
  			m_Account = a;
  			m_Name = name;
  			m_Female = female;
  			m_Hue = hue;
  			m_Str = str;
  			m_Dex = dex;
  			m_Int = intel;
  			m_City = city;
  			m_Skills = skills;
  			m_ShirtHue = shirtHue;
  			m_PantsHue = pantsHue;
  			m_HairID = hairID;
  			m_HairHue = hairHue;
  			m_BeardID = beardID;
  			m_BeardHue = beardHue;
  			Profession = profession;
  			m_Race = race;
              m_Face = faceID;
              m_FaceHue = faceHue;
          }
  	}
  
  	public class OpenDoorMacroEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public OpenDoorMacroEventArgs(Mobile mobile)
  		{
  			m_Mobile = mobile;
  		}
  	}
  
  	public class SpeechEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  		private readonly MessageType m_Type;
  		private readonly int m_Hue;
  		private readonly int[] m_Keywords;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  		public string Speech { get; set; }
  		public MessageType Type { get { return m_Type; } }
  		public int Hue { get { return m_Hue; } }
  		public int[] Keywords { get { return m_Keywords; } }
  		public bool Handled { get; set; }
  		public bool Blocked { get; set; }
  
  		public bool HasKeyword(int keyword)
  		{
  			for (int i = 0; i < m_Keywords.Length; ++i)
  			{
  				if (m_Keywords[i] == keyword)
  				{
  					return true;
  				}
  			}
  
  			return false;
  		}
  
  		public SpeechEventArgs(Mobile mobile, string speech, MessageType type, int hue, int[] keywords)
  		{
  			m_Mobile = mobile;
  			Speech = speech;
  			m_Type = type;
  			m_Hue = hue;
  			m_Keywords = keywords;
  		}
  	}
  
  	public class LoginEventArgs : EventArgs
  	{
  		private readonly Mobile m_Mobile;
  
  		public Mobile Mobile { get { return m_Mobile; } }
  
  		public LoginEventArgs(Mobile mobile)
  		{
  			m_Mobile = mobile;
  		}
  	}
  
  	public class WorldSaveEventArgs : EventArgs
  	{
  		private readonly bool m_Msg;
  
  		public bool Message { get { return m_Msg; } }
  
  		public WorldSaveEventArgs(bool msg)
  		{
  			m_Msg = msg;
  		}
  	}
  
      public class BeforeWorldSaveEventArgs : EventArgs
      {
          public BeforeWorldSaveEventArgs()
          {
          }
      }
  
  
      public class AfterWorldSaveEventArgs : EventArgs
      {
          public AfterWorldSaveEventArgs()
          {
          }
      }
  
  
      public class FastWalkEventArgs : EventArgs
  	{
  		private readonly NetState m_State;
  
  		public FastWalkEventArgs(NetState state)
  		{
  			m_State = state;
  			Blocked = false;
  		}
  
  		public NetState NetState { get { return m_State; } }
  		public bool Blocked { get; set; }
  	}
  
  	public class OnKilledByEventArgs : EventArgs
  	{
  		private readonly Mobile m_Killed;
  		private readonly Mobile m_KilledBy;
  
  		public OnKilledByEventArgs(Mobile killed, Mobile killedBy)
  		{
  			m_Killed = killed;
  			m_KilledBy = killedBy;
  		}
  
  		public Mobile Killed { get { return m_Killed; } }
  		public Mobile KilledBy { get { return m_KilledBy; } }
  	}
  
  	public class OnItemUseEventArgs : EventArgs
  	{
  		private readonly Mobile m_From;
  		private readonly Item m_Item;
  
  		public OnItemUseEventArgs(Mobile from, Item item)
  		{
  			m_From = from;
  			m_Item = item;
  		}
  
  		public Mobile From { get { return m_From; } }
  		public Item Item { get { return m_Item; } }
  	}
  
  	public class OnEnterRegionEventArgs : EventArgs
  	{
  		private readonly Mobile m_From;
          private readonly Region m_OldRegion;
  		private readonly Region m_NewRegion;
  
  		public OnEnterRegionEventArgs(Mobile from, Region oldRegion, Region newRegion)
  		{
  			m_From = from;
              m_OldRegion = oldRegion;
  			m_NewRegion = newRegion;
  		}
  
  		public Mobile From { get { return m_From; } }
  		public Region OldRegion { get { return m_OldRegion; } }
          public Region NewRegion { get { return m_NewRegion; } }
  	}
  
  	public class OnConsumeEventArgs : EventArgs
  	{
  		private readonly Mobile m_Consumer;
  		private readonly Item m_Consumed;
  		private readonly int m_Quantity;
  
  		public OnConsumeEventArgs(Mobile consumer, Item consumed)
  			: this(consumer, consumed, 1)
  		{ }
  
  		public OnConsumeEventArgs(Mobile consumer, Item consumed, int quantity)
  		{
  			m_Consumer = consumer;
  			m_Consumed = consumed;
  			m_Quantity = quantity;
  		}
  
  		public Mobile Consumer { get { return m_Consumer; } }
  
  		public Item Consumed { get { return m_Consumed; } }
  
  		public int Quantity { get { return m_Quantity; } }
  	}
  
  	public class OnPropertyChangedEventArgs : EventArgs
  	{
  		public Mobile Mobile { get; private set; }
  		public PropertyInfo Property { get; private set; }
  		public object Instance { get; private set; }
  		public object OldValue { get; private set; }
  		public object NewValue { get; private set; }
  
  		public OnPropertyChangedEventArgs(Mobile m, object instance, PropertyInfo prop, object oldValue, object newValue)
  		{
  			Mobile = m;
  			Property = prop;
  			Instance = instance;
  			OldValue = oldValue;
  			NewValue = newValue;
  		}
  	}
  
  	public class BODUsedEventArgs : EventArgs
  	{
  		public Mobile User { get; private set; }
  		public Item BODItem { get; private set; }
  
  		public BODUsedEventArgs(Mobile m, Item i)
  		{
  			User = m;
  			BODItem = i;
  		}
  	}
  
  	public class BODOfferEventArgs : EventArgs
  	{
  		public Mobile Player { get; private set; }
  		public Mobile Vendor { get; private set; }
  
  		public BODOfferEventArgs(Mobile p, Mobile v)
  		{
  			Player = p;
  			Vendor = v;
  		}
  	}
  
  	public class ResourceHarvestAttemptEventArgs : EventArgs
  	{
  		public Mobile Harvester { get; private set; }
  		public Item Tool { get; private set; }
  		public object HarvestSystem { get; private set; }
  
  		public ResourceHarvestAttemptEventArgs(Mobile m, Item i, object o)
  		{
  			Harvester = m;
  			Tool = i;
  			HarvestSystem = o;
  		}
  	}
  
  	public class ResourceHarvestSuccessEventArgs : EventArgs
  	{
  		public Mobile Harvester { get; private set; }
  		public Item Tool { get; private set; }
  		public Item Resource { get; private set; }
          public Item BonusResource { get; private set; }
  		public object HarvestSystem { get; private set; }
  
  		public ResourceHarvestSuccessEventArgs(Mobile m, Item i, Item r, Item b, object o)
  		{
  			Harvester = m;
  			Tool = i;
  			Resource = r;
              BonusResource = b;
  			HarvestSystem = o;
  		}
  	}
  
  	public class CraftSuccessEventArgs : EventArgs
  	{
  		public Mobile Crafter { get; private set; }
  		public Item Tool { get; private set; }
  		public Item CraftedItem { get; private set; }
  
  		public CraftSuccessEventArgs(Mobile m, Item i, Item t)
  		{
  			Crafter = m;
  			Tool = t;
  			CraftedItem = i;
  		}
  	}
  
      public class SkillGainEventArgs : EventArgs
      {
          public int Gained { get; private set; }
          public Mobile From { get; private set; }
          public Skill Skill { get; private set; }
  
          public SkillGainEventArgs(Mobile from, Skill skill, int toGain)
          {
              From = from;
              Skill = skill;
              Gained = toGain;
          }
      }
  
      public class SkillCheckEventArgs : EventArgs
      {
          public bool Success { get; set; }
          public Mobile From { get; set; }
          public Skill Skill { get; set; }
  
          public SkillCheckEventArgs(Mobile from, Skill skill, bool success)
          {
              From = from;
              Skill = skill;
              Success = success;
          }
      }
  
      public class SkillCapChangeEventArgs : EventArgs
      {
          public Mobile Mobile { get; private set; }
          public Skill Skill { get; private set; }
          public double OldCap { get; private set; }
          public double NewCap { get; private set; }
  
          public SkillCapChangeEventArgs(Mobile from, Skill skill, double oldCap, double newCap)
          {
              Mobile = from;
              Skill = skill;
              OldCap = oldCap;
              NewCap = newCap;
          }
      }
  
      public class StatCapChangeEventArgs : EventArgs
      {
          public Mobile Mobile { get; private set; }
          public int OldCap { get; private set; }
          public int NewCap { get; private set; }
  
          public StatCapChangeEventArgs(Mobile from, int oldCap, int newCap)
          {
              Mobile = from;
              OldCap = oldCap;
              NewCap = newCap;
          }
      }
  
      public class QuestCompleteEventArgs : EventArgs
      {
          public Type QuestType { get; private set; }
          public Mobile Mobile { get; private set; }
  
          public QuestCompleteEventArgs(Mobile from, Type type)
          {
              Mobile = from;
              QuestType = type;
          }
      }
  
      public class ItemCreatedEventArgs : EventArgs
  	{
  		public Item Item { get; set; }
  
  		public ItemCreatedEventArgs(Item item)
  		{
  			Item = item;
  		}
  	}
  
  	public class ItemDeletedEventArgs : EventArgs
  	{
  		public Item Item { get; set; }
  
  		public ItemDeletedEventArgs(Item item)
  		{
  			Item = item;
  		}
  	}
  
  	public class MobileCreatedEventArgs : EventArgs
  	{
  		public Mobile Mobile { get; set; }
  
  		public MobileCreatedEventArgs(Mobile mobile)
  		{
  			Mobile = mobile;
  		}
  	}
  
  	public class MobileDeletedEventArgs : EventArgs
  	{
  		public Mobile Mobile { get; set; }
  
  		public MobileDeletedEventArgs(Mobile mobile)
  		{
  			Mobile = mobile;
  		}
  	}
  
      public class TargetedSpellEventArgs : EventArgs
      {
          private Mobile m_Mobile;
          private IEntity m_Target;
          private short m_SpellID;
  
          public Mobile Mobile { get { return m_Mobile; } }
          public IEntity Target { get { return m_Target; } }
          public short SpellID { get { return m_SpellID; } }
  
          public TargetedSpellEventArgs(Mobile m, IEntity target, short spellID)
          {
              m_Mobile = m;
              m_Target = target;
              m_SpellID = spellID;
          }
      }
  
      public class TargetedSkillEventArgs : EventArgs
      {
          private Mobile m_Mobile;
          private IEntity m_Target;
          private short m_SkillID;
  
          public Mobile Mobile { get { return m_Mobile; } }
          public IEntity Target { get { return m_Target; } }
          public short SkillID { get { return m_SkillID; } }
  
          public TargetedSkillEventArgs(Mobile m, IEntity target, short skillID)
          {
              m_Mobile = m;
              m_Target = target;
              m_SkillID = skillID;
          }
      }
  
      public class TargetedItemUseEventArgs : EventArgs
      {
          private Mobile m_Mobile;
          private IEntity m_Source;
          private IEntity m_Target;
  
          public Mobile Mobile { get { return m_Mobile; } }
          public IEntity Source { get { return m_Source; } }
          public IEntity Target { get { return m_Target; } }
  
          public TargetedItemUseEventArgs(Mobile mobile, IEntity src, IEntity target)
          {
              m_Mobile = mobile;
              m_Source = src;
              m_Target = target;
          }
      }
  
      public class TargetByResourceMacroEventArgs : EventArgs
      {
          private Mobile m_Mobile;
          private Item m_Tool;
          private int m_ResourceType;
  
          public Mobile Mobile { get { return m_Mobile; } }
          public Item Tool { get { return m_Tool; } }
          public int ResourceType { get { return m_ResourceType; } }
  
          public TargetByResourceMacroEventArgs(Mobile mobile, Item tool, int type)
          {
              m_Mobile = mobile;
              m_Tool = tool;
              m_ResourceType = type;
          }
      }
  
      public class EquipMacroEventArgs : EventArgs
      {
          private Mobile m_Mobile;
          private List<int> m_List;
  
          public Mobile Mobile { get { return m_Mobile; } }
          public List<int> List { get { return m_List; } }
  
          public EquipMacroEventArgs(Mobile mobile, List<int> list)
          {
              m_Mobile = mobile;
              m_List = list;
          }
      }
  
      public class UnequipMacroEventArgs : EventArgs
      {
          private Mobile m_Mobile;
          private List<int> m_List;
  
          public Mobile Mobile { get { return m_Mobile; } }
          public List<int> List { get { return m_List; } }
  
          public UnequipMacroEventArgs(Mobile mobile, List<int> list)
          {
              m_Mobile = mobile;
              m_List = list;
          }
      }
  
      public class JoinGuildEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public BaseGuild Guild { get; set; }
  
          public JoinGuildEventArgs(Mobile m, BaseGuild g)
          {
              Mobile = m;
              Guild = g;
          }
      }
  
      public class TameCreatureEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public Mobile Creature { get; set; }
  
          public TameCreatureEventArgs(Mobile m, Mobile creature)
          {
              Mobile = m;
              Creature = creature;
          }
      }
  
      public class ValidVendorPurchaseEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public Mobile Vendor { get; set; }
          public IEntity Bought { get; set; }
          public int AmountPerUnit { get; set; }
  
          public ValidVendorPurchaseEventArgs(Mobile m, Mobile vendor, IEntity bought, int costPer)
          {
              Mobile = m;
              Vendor = vendor;
              Bought = bought;
              AmountPerUnit = costPer;
          }
      }
  
      public class ValidVendorSellEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public Mobile Vendor { get; set; }
          public IEntity Sold { get; set; }
          public int AmountPerUnit { get; set; }
  
          public ValidVendorSellEventArgs(Mobile m, Mobile vendor, IEntity sold, int costPer)
          {
              Mobile = m;
              Vendor = vendor;
              Sold = sold;
              AmountPerUnit = costPer;
          }
      }
  
      public class CorpseLootEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public Container Corpse { get; set; }
          public Item Looted { get; set; }
  
          public CorpseLootEventArgs(Mobile m, Container c, Item looted)
          {
              Mobile = m;
              Corpse = c;
              Looted = looted;
          }
      }
  
      public class RepairItemEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public Item Tool { get; set; }
          public IEntity Repaired { get; set; }
  
          public RepairItemEventArgs(Mobile m, Item tool, IEntity repaired)
          {
              Mobile = m;
              Tool = tool;
              Repaired = repaired;
          }
      }
  
      public class AlterItemEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public Item Tool { get; set; }
          public Item OldItem { get; set; }
          public Item NewItem { get; set; }
  
          public AlterItemEventArgs(Mobile m, Item tool, Item oldItem, Item newItem)
          {
              Mobile = m;
              Tool = tool;
              OldItem = oldItem;
              NewItem = newItem;
          }
      }
  
      public class PlacePlayerVendorEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public Mobile Vendor { get; set; }
  
          public PlacePlayerVendorEventArgs(Mobile m, Mobile vendor)
          {
              Mobile = m;
              Vendor = vendor;
          }
      }
  
      public class FameChangeEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public int OldValue { get; set; }
          public int NewValue { get; set; }
  
          public FameChangeEventArgs(Mobile m, int oldValue, int newValue)
          {
              Mobile = m;
              OldValue = oldValue;
              NewValue = newValue;
          }
      }
  
      public class KarmaChangeEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public int OldValue { get; set; }
          public int NewValue { get; set; }
  
          public KarmaChangeEventArgs(Mobile m, int oldValue, int newValue)
          {
              Mobile = m;
              OldValue = oldValue;
              NewValue = newValue;
          }
      }
  
      public class VirtueLevelChangeEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public int OldLevel { get; set; }
          public int NewLevel { get; set; }
          public int Virtue { get; set; }
  
          public VirtueLevelChangeEventArgs(Mobile m, int oldLevel, int newLevel, int virtue)
          {
              Mobile = m;
              OldLevel = oldLevel;
              NewLevel = newLevel;
              Virtue = virtue;
          }
      }
  
      public class PlayerMurderedEventArgs : EventArgs
      {
          public Mobile Murderer { get; set; }
          public Mobile Victim { get; set; }
  
          public PlayerMurderedEventArgs(Mobile murderer, Mobile victim)
          {
              Murderer = murderer;
              Victim = victim;
          }
      }
  
      public class AccountGoldChangeEventArgs : EventArgs
      {
          public IAccount Account { get; set; }
          public double OldAmount { get; set; }
          public double NewAmount { get; set; }
  
          public AccountGoldChangeEventArgs(IAccount account, double oldAmount, double newAmount)
          {
              Account = account;
              OldAmount = oldAmount;
              NewAmount = newAmount;
          }
      }
  
      public class ContainerDroppedToEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public Container Container { get; set; }
          public Item Dropped { get; set; }
  
          public ContainerDroppedToEventArgs(Mobile m, Container container, Item dropped)
          {
              Mobile = m;
              Container = container;
              Dropped = dropped;
          }
      }
  
      public class TeleportMovementEventArgs : EventArgs
      {
          public Mobile Mobile { get; set; }
          public Point3D OldLocation { get; set; }
          public Point3D NewLocation { get; set; }
  
          public TeleportMovementEventArgs(Mobile m, Point3D oldLoc, Point3D newLoc)
          {
              Mobile = m;
              OldLocation = oldLoc;
              NewLocation = newLoc;
          }
      }
  
      public class MultiDesignQueryEventArgs : EventArgs
      {
          public NetState State { get; set; }
          public BaseMulti Multi { get; set; }
  
          public MultiDesignQueryEventArgs(NetState state, BaseMulti multi)
          {
              State = state;
              Multi = multi;
          }
      }
  
      public static class EventSink
  	{
  		public static event OnItemObtainedEventHandler OnItemObtained;
  		public static event CheckEquipItemEventHandler CheckEquipItem;
  		public static event ContextMenuEventHandler ContextMenu;
  		public static event WorldBroadcastEventHandler WorldBroadcast;
  		public static event CharacterCreatedEventHandler CharacterCreated;
  		public static event OpenDoorMacroEventHandler OpenDoorMacroUsed;
  		public static event SpeechEventHandler Speech;
  		public static event LoginEventHandler Login;
  		public static event ServerListEventHandler ServerList;
  		public static event MovementEventHandler Movement;
  		public static event HungerChangedEventHandler HungerChanged;
  		public static event CrashedEventHandler Crashed;
  		public static event ShutdownEventHandler Shutdown;
  		public static event HelpRequestEventHandler HelpRequest;
  		public static event DisarmRequestEventHandler DisarmRequest;
  		public static event StunRequestEventHandler StunRequest;
  		public static event OpenSpellbookRequestEventHandler OpenSpellbookRequest;
  		public static event CastSpellRequestEventHandler CastSpellRequest;
  		public static event BandageTargetRequestEventHandler BandageTargetRequest;
  		public static event AnimateRequestEventHandler AnimateRequest;
  		public static event LogoutEventHandler Logout;
  		public static event SocketConnectEventHandler SocketConnect;
  		public static event ConnectedEventHandler Connected;
  		public static event DisconnectedEventHandler Disconnected;
  		public static event RenameRequestEventHandler RenameRequest;
  		public static event PlayerDeathEventHandler PlayerDeath;
  		public static event CreatureDeathEventHandler CreatureDeath;
  		public static event VirtueGumpRequestEventHandler VirtueGumpRequest;
  		public static event VirtueItemRequestEventHandler VirtueItemRequest;
  		public static event VirtueMacroRequestEventHandler VirtueMacroRequest;
  		public static event AccountLoginEventHandler AccountLogin;
  		public static event PaperdollRequestEventHandler PaperdollRequest;
  		public static event ProfileRequestEventHandler ProfileRequest;
  		public static event ChangeProfileRequestEventHandler ChangeProfileRequest;
  		public static event AggressiveActionEventHandler AggressiveAction;
  		public static event CommandEventHandler Command;
  		public static event GameLoginEventHandler GameLogin;
  		public static event DeleteRequestEventHandler DeleteRequest;
  		public static event WorldLoadEventHandler WorldLoad;
  		public static event WorldSaveEventHandler WorldSave;
          public static event BeforeWorldSaveEventHandler BeforeWorldSave;
          public static event AfterWorldSaveEventHandler AfterWorldSave;
          public static event SetAbilityEventHandler SetAbility;
  		public static event FastWalkEventHandler FastWalk;
  		public static event CreateGuildHandler CreateGuild;
  		public static event ServerStartedEventHandler ServerStarted;
  		public static event GuildGumpRequestHandler GuildGumpRequest;
  		public static event QuestGumpRequestHandler QuestGumpRequest;
  		public static event ClientVersionReceivedHandler ClientVersionReceived;
          public static event ClientTypeReceivedHandler ClientTypeReceived;
  		public static event OnKilledByEventHandler OnKilledBy;
  		public static event OnItemUseEventHandler OnItemUse;
  		public static event OnEnterRegionEventHandler OnEnterRegion;
  		public static event OnConsumeEventHandler OnConsume;
  		public static event OnPropertyChangedEventHandler OnPropertyChanged;
  		public static event BODUsedEventHandler BODUsed;
  		public static event BODOfferEventHandler BODOffered;
  		public static event ResourceHarvestAttemptEventHandler ResourceHarvestAttempt;
  		public static event ResourceHarvestSuccessEventHandler ResourceHarvestSuccess;
  		public static event CraftSuccessEventHandler CraftSuccess;
          public static event SkillGainEventHandler SkillGain;
          public static event SkillCheckEventHandler SkillCheck;
          public static event SkillCapChangeEventHandler SkillCapChange;
          public static event StatCapChangeEventHandler StatCapChange;
          public static event QuestCompleteEventHandler QuestComplete;
  
          public static event ItemCreatedEventHandler ItemCreated;
  		public static event ItemDeletedEventHandler ItemDeleted;
  		public static event MobileCreatedEventHandler MobileCreated;
  		public static event MobileDeletedEventHandler MobileDeleted;
  
          public static event TargetedSpellEventHandler TargetedSpell;
          public static event TargetedSkillEventHandler TargetedSkill;
          public static event TargetedItemUseEventHandler TargetedItemUse;
          public static event EquipMacroEventHandler EquipMacro;
          public static event UnequipMacroEventHandler UnequipMacro;
          public static event TargetByResourceMacroEventHandler TargetByResourceMacro;
  
          public static event JoinGuildEventHandler JoinGuild;
          public static event TameCreatureEventHandler TameCreature;
          public static event ValidVendorPurchaseEventHandler ValidVendorPurchase;
          public static event ValidVendorSellEventHandler ValidVendorSell;
          public static event CorpseLootEventHandler CorpseLoot;
          public static event RepairItemEventHandler RepairItem;
          public static event AlterItemEventHandler AlterItem;
          public static event PlacePlayerVendorEventHandler PlacePlayerVendor;
          public static event FameChangeEventHandler FameChange;
          public static event KarmaChangeEventHandler KarmaChange;
          public static event VirtueLevelChangeEventHandler VirtueLevelChange;
          public static event PlayerMurderedEventHandler PlayerMurdered;
          public static event AccountGoldChangeEventHandler AccountGoldChange;
          public static event ContainerDroppedToEventHandler ContainerDroppedTo;
          public static event TeleportMovementEventHandler TeleportMovement;
          public static event MultiDesignQueryHandler MultiDesign;
  
          public static void InvokeOnItemObtained(OnItemObtainedEventArgs e)
  		{
  			if (OnItemObtained != null)
  			{
  				OnItemObtained(e);
  			}
  		}
  
  		public static void InvokeCheckEquipItem(CheckEquipItemEventArgs e)
  		{
  			if (CheckEquipItem != null)
  			{
  				CheckEquipItem(e);
  			}
  		}
  
  		public static void InvokeContextMenu(ContextMenuEventArgs e)
  		{
  			if (ContextMenu != null)
  			{
  				ContextMenu(e);
  			}
  		}
  
  		public static void InvokeWorldBroadcast(WorldBroadcastEventArgs e)
  		{
  			if (WorldBroadcast != null)
  			{
  				WorldBroadcast(e);
  			}
  		}
  
          public static void InvokeClientVersionReceived(ClientVersionReceivedArgs e)
  		{
  			if (ClientVersionReceived != null)
  			{
  				ClientVersionReceived(e);
  			}
  		}
  
          public static void InvokeClientTypeReceived(ClientTypeReceivedArgs e)
          {
              if (ClientTypeReceived != null)
              {
                  ClientTypeReceived(e);
              }
          }
  
  		public static void InvokeServerStarted()
  		{
  			if (ServerStarted != null)
  			{
  				ServerStarted();
  			}
  		}
  
  		public static void InvokeCreateGuild(CreateGuildEventArgs e)
  		{
  			if (CreateGuild != null)
  			{
  				CreateGuild(e);
  			}
  		}
  
  		public static void InvokeSetAbility(SetAbilityEventArgs e)
  		{
  			if (SetAbility != null)
  			{
  				SetAbility(e);
  			}
  		}
  
  		public static void InvokeGuildGumpRequest(GuildGumpRequestArgs e)
  		{
  			if (GuildGumpRequest != null)
  			{
  				GuildGumpRequest(e);
  			}
  		}
  
  		public static void InvokeQuestGumpRequest(QuestGumpRequestArgs e)
  		{
  			if (QuestGumpRequest != null)
  			{
  				QuestGumpRequest(e);
  			}
  		}
  
  		public static void InvokeFastWalk(FastWalkEventArgs e)
  		{
  			if (FastWalk != null)
  			{
  				FastWalk(e);
  			}
  		}
  
  		public static void InvokeDeleteRequest(DeleteRequestEventArgs e)
  		{
  			if (DeleteRequest != null)
  			{
  				DeleteRequest(e);
  			}
  		}
  
  		public static void InvokeGameLogin(GameLoginEventArgs e)
  		{
  			if (GameLogin != null)
  			{
  				GameLogin(e);
  			}
  		}
  
  		public static void InvokeCommand(CommandEventArgs e)
  		{
  			if (Command != null)
  			{
  				Command(e);
  			}
  		}
  
  		public static void InvokeAggressiveAction(AggressiveActionEventArgs e)
  		{
  			if (AggressiveAction != null)
  			{
  				AggressiveAction(e);
  			}
  		}
  
  		public static void InvokeProfileRequest(ProfileRequestEventArgs e)
  		{
  			if (ProfileRequest != null)
  			{
  				ProfileRequest(e);
  			}
  		}
  
  		public static void InvokeChangeProfileRequest(ChangeProfileRequestEventArgs e)
  		{
  			if (ChangeProfileRequest != null)
  			{
  				ChangeProfileRequest(e);
  			}
  		}
  
  		public static void InvokePaperdollRequest(PaperdollRequestEventArgs e)
  		{
  			if (PaperdollRequest != null)
  			{
  				PaperdollRequest(e);
  			}
  		}
  
  		public static void InvokeAccountLogin(AccountLoginEventArgs e)
  		{
  			if (AccountLogin != null)
  			{
  				AccountLogin(e);
  			}
  		}
  
  		public static void InvokeVirtueItemRequest(VirtueItemRequestEventArgs e)
  		{
  			if (VirtueItemRequest != null)
  			{
  				VirtueItemRequest(e);
  			}
  		}
  
  		public static void InvokeVirtueGumpRequest(VirtueGumpRequestEventArgs e)
  		{
  			if (VirtueGumpRequest != null)
  			{
  				VirtueGumpRequest(e);
  			}
  		}
  
  		public static void InvokeVirtueMacroRequest(VirtueMacroRequestEventArgs e)
  		{
  			if (VirtueMacroRequest != null)
  			{
  				VirtueMacroRequest(e);
  			}
  		}
  
  		public static void InvokePlayerDeath(PlayerDeathEventArgs e)
  		{
  			if (PlayerDeath != null)
  			{
  				PlayerDeath(e);
  			}
  		}
  
  		public static void InvokeCreatureDeath(CreatureDeathEventArgs e)
  		{
  			if (CreatureDeath != null)
  			{
  				CreatureDeath(e);
  			}
  		}
  
  		public static void InvokeRenameRequest(RenameRequestEventArgs e)
  		{
  			if (RenameRequest != null)
  			{
  				RenameRequest(e);
  			}
  		}
  
  		public static void InvokeLogout(LogoutEventArgs e)
  		{
  			if (Logout != null)
  			{
  				Logout(e);
  			}
  		}
  
  		public static void InvokeSocketConnect(SocketConnectEventArgs e)
  		{
  			if (SocketConnect != null)
  			{
  				SocketConnect(e);
  			}
  		}
  
  		public static void InvokeConnected(ConnectedEventArgs e)
  		{
  			if (Connected != null)
  			{
  				Connected(e);
  			}
  		}
  
  		public static void InvokeDisconnected(DisconnectedEventArgs e)
  		{
  			if (Disconnected != null)
  			{
  				Disconnected(e);
  			}
  		}
  
  		public static void InvokeAnimateRequest(AnimateRequestEventArgs e)
  		{
  			if (AnimateRequest != null)
  			{
  				AnimateRequest(e);
  			}
  		}
  
  		public static void InvokeCastSpellRequest(CastSpellRequestEventArgs e)
  		{
  			if (CastSpellRequest != null)
  			{
  				CastSpellRequest(e);
  			}
  		}
  
  		public static void InvokeBandageTargetRequest(BandageTargetRequestEventArgs e)
  		{
  			if (BandageTargetRequest != null)
  			{
  				BandageTargetRequest(e);
  			}
  		}
  
  		public static void InvokeOpenSpellbookRequest(OpenSpellbookRequestEventArgs e)
  		{
  			if (OpenSpellbookRequest != null)
  			{
  				OpenSpellbookRequest(e);
  			}
  		}
  
  		public static void InvokeDisarmRequest(DisarmRequestEventArgs e)
  		{
  			if (DisarmRequest != null)
  			{
  				DisarmRequest(e);
  			}
  		}
  
  		public static void InvokeStunRequest(StunRequestEventArgs e)
  		{
  			if (StunRequest != null)
  			{
  				StunRequest(e);
  			}
  		}
  
  		public static void InvokeHelpRequest(HelpRequestEventArgs e)
  		{
  			if (HelpRequest != null)
  			{
  				HelpRequest(e);
  			}
  		}
  
  		public static void InvokeShutdown(ShutdownEventArgs e)
  		{
  			if (Shutdown != null)
  			{
  				Shutdown(e);
  			}
  		}
  
  		public static void InvokeCrashed(CrashedEventArgs e)
  		{
  			if (Crashed != null)
  			{
  				Crashed(e);
  			}
  		}
  
  		public static void InvokeHungerChanged(HungerChangedEventArgs e)
  		{
  			if (HungerChanged != null)
  			{
  				HungerChanged(e);
  			}
  		}
  
  		public static void InvokeMovement(MovementEventArgs e)
  		{
  			if (Movement != null)
  			{
  				Movement(e);
  			}
  		}
  
  		public static void InvokeServerList(ServerListEventArgs e)
  		{
  			if (ServerList != null)
  			{
  				ServerList(e);
  			}
  		}
  
  		public static void InvokeLogin(LoginEventArgs e)
  		{
  			if (Login != null)
  			{
  				Login(e);
  			}
  		}
  
  		public static void InvokeSpeech(SpeechEventArgs e)
  		{
  			if (Speech != null)
  			{
  				Speech(e);
  			}
  		}
  
  		public static void InvokeCharacterCreated(CharacterCreatedEventArgs e)
  		{
  			if (CharacterCreated != null)
  			{
  				CharacterCreated(e);
  			}
  		}
  
  		public static void InvokeOpenDoorMacroUsed(OpenDoorMacroEventArgs e)
  		{
  			if (OpenDoorMacroUsed != null)
  			{
  				OpenDoorMacroUsed(e);
  			}
  		}
  
  		public static void InvokeWorldLoad()
  		{
  			if (WorldLoad != null)
  			{
  				WorldLoad();
  			}
  		}
  
  		public static void InvokeWorldSave(WorldSaveEventArgs e)
  		{
  			if (WorldSave != null)
  			{
  				WorldSave(e);
  			}
  		}
  
          public static void InvokeBeforeWorldSave(BeforeWorldSaveEventArgs e)
          {
              if (BeforeWorldSave != null)
              {
                  BeforeWorldSave(e);
              }
          }
  
          public static void InvokeAfterWorldSave(AfterWorldSaveEventArgs e)
          {
              if (AfterWorldSave != null)
              {
                  AfterWorldSave(e);
              }
          }
  
          public static void InvokeOnKilledBy(OnKilledByEventArgs e)
  		{
  			if (OnKilledBy != null)
  			{
  				OnKilledBy(e);
  			}
  		}
  
  		public static void InvokeOnItemUse(OnItemUseEventArgs e)
  		{
  			if (OnItemUse != null)
  			{
  				OnItemUse(e);
  			}
  		}
  
  		public static void InvokeOnEnterRegion(OnEnterRegionEventArgs e)
  		{
  			if (OnEnterRegion != null)
  			{
  				OnEnterRegion(e);
  			}
  		}
  
  		public static void InvokeOnConsume(OnConsumeEventArgs e)
  		{
  			if (OnConsume != null)
  			{
  				OnConsume(e);
  			}
  		}
  
  		public static void InvokeOnPropertyChanged(OnPropertyChangedEventArgs e)
  		{
  			if (OnPropertyChanged != null)
  			{
  				OnPropertyChanged(e);
  			}
  		}
  
  		public static void InvokeBODUsed(BODUsedEventArgs e)
  		{
  			if(BODUsed != null)
  			{
  				BODUsed(e);
  			}
  		}
  
  		public static void InvokeBODOffered(BODOfferEventArgs e)
  		{
  			if(BODOffered != null)
  			{
  				BODOffered(e);
  			}
  		}
  
  		public static void InvokeResourceHarvestAttempt(ResourceHarvestAttemptEventArgs e)
  		{
  			if(ResourceHarvestAttempt != null)
  			{
  				ResourceHarvestAttempt(e);
  			}
  		}
  
  		public static void InvokeResourceHarvestSuccess(ResourceHarvestSuccessEventArgs e)
  		{
  			if (ResourceHarvestSuccess != null)
  			{
  				ResourceHarvestSuccess(e);
  			}
  		}
  
          public static void InvokeCraftSuccess(CraftSuccessEventArgs e)
  		{
  			if (CraftSuccess != null)
  			{
  				CraftSuccess(e);
  			}
  		}
  
          public static void InvokeSkillGain(SkillGainEventArgs e)
          {
              if(SkillGain != null)
              {
                  SkillGain(e);
              }
          }
  
          public static void InvokeSkillCheck(SkillCheckEventArgs e)
          {
              if (SkillCheck != null)
              {
                  SkillCheck(e);
              }
          }
  
          public static void InvokeSkillCapChange(SkillCapChangeEventArgs e)
          {
              if (SkillCapChange != null)
              {
                  SkillCapChange(e);
              }
          }
  
          public static void InvokeStatCapChange(StatCapChangeEventArgs e)
          {
              if (StatCapChange != null)
              {
                  StatCapChange(e);
              }
          }
  
          public static void InvokeQuestComplete(QuestCompleteEventArgs e)
          {
              if (QuestComplete != null)
              {
                  QuestComplete(e);
              }
          }
  
  		public static void InvokeItemCreated(ItemCreatedEventArgs e)
  		{
  
gt: 			if (ItemCreated != null)