public MobileStatus(Mobile beholder, Mobile beheld, NetState ns)
			: base(0x11)
		{
			string name = beheld.Name;
			if (name == null)
			{
				name = "";
			}

			int type;

            bool isEnhancedClient = beholder.NetState != null && beholder.NetState.Version.IsEnhanced;

			if (beholder != beheld)
			{
				type = 0;
				EnsureCapacity(43);
			}
            else if (isEnhancedClient)
            {
                type = 7;
                EnsureCapacity(149);
            }
            else if (Core.HS && ns != null && ns.ExtendedStatus)
            {
                type = 6;
                EnsureCapacity(121);
            }
            else if (Core.ML && ns != null && ns.SupportsExpansion(Expansion.ML))
            {
                type = 5;
                EnsureCapacity(91);
            }
            else
            {
                type = Core.AOS ? 4 : 3;
                EnsureCapacity(88);
            }

			m_Stream.Write(beheld.Serial);

			m_Stream.WriteAsciiFixed(name, 30);

			if (beholder == beheld)
			{
				WriteAttr(beheld.Hits, beheld.HitsMax);
			}
			else
			{
				WriteAttrNorm(beheld.Hits, beheld.HitsMax);
			}

			m_Stream.Write(beheld.CanBeRenamedBy(beholder));

			m_Stream.Write((byte)type);

			if (type > 0)
			{
				m_Stream.Write(beheld.Female);

				m_Stream.Write((short)beheld.Str);
				m_Stream.Write((short)beheld.Dex);
				m_Stream.Write((short)beheld.Int);

				WriteAttr(beheld.Stam, beheld.StamMax);
				WriteAttr(beheld.Mana, beheld.ManaMax);

				m_Stream.Write(beheld.TotalGold);
				m_Stream.Write((short)(Core.AOS ? beheld.PhysicalResistance : (int)(beheld.ArmorRating + 0.5)));
				m_Stream.Write((short)(Mobile.BodyWeight + beheld.TotalWeight));

				if (type >= 5)
				{
					m_Stream.Write((short)beheld.MaxWeight);
					m_Stream.Write((byte)(beheld.Race.RaceID + 1)); // Would be 0x00 if it's a non-ML enabled account but...
				}

				m_Stream.Write((short)beheld.StatCap);

				m_Stream.Write((byte)beheld.Followers);
				m_Stream.Write((byte)beheld.FollowersMax);

				if (type >= 4)
				{
					m_Stream.Write((short)beheld.FireResistance); // Fire
					m_Stream.Write((short)beheld.ColdResistance); // Cold
					m_Stream.Write((short)beheld.PoisonResistance); // Poison
					m_Stream.Write((short)beheld.EnergyResistance); // Energy
					m_Stream.Write((short)beheld.Luck); // Luck

					IWeapon weapon = beheld.Weapon;

					int min = 0, max = 0;

					if (weapon != null)
					{
						weapon.GetStatusDamage(beheld, out min, out max);
					}

					m_Stream.Write((short)min); // Damage min
					m_Stream.Write((short)max); // Damage max

					m_Stream.Write(beheld.TithingPoints);
				}

				if (type >= 6)
				{
					for (int i = 0; i < 15; ++i)
					{
						m_Stream.Write((short)beheld.GetAosStatus(i));
					}

                    if (isEnhancedClient)
                    {
                        m_Stream.Write((short)beheld.AttackChance); // Hit Chance Increase
                        m_Stream.Write((short)beheld.WeaponSpeed); // Swing Speed Increase
                        m_Stream.Write((short)beheld.WeaponDamage); // Damage Increase
                        m_Stream.Write((short)beheld.LowerRegCost); // Lower Reagent Cost
                        m_Stream.Write((short)beheld.RegenHits); // Hit Points Regeneration
                        m_Stream.Write((short)beheld.RegenStam); // Stamina Regeneration
                        m_Stream.Write((short)beheld.RegenMana); // Mana Regeneration
                        m_Stream.Write((short)beheld.ReflectPhysical); // Reflect Physical Damage
                        m_Stream.Write((short)beheld.EnhancePotions); // Enhance Potions
                        m_Stream.Write((short)beheld.DefendChance); // Defense Chance Increase
                        m_Stream.Write((short)beheld.SpellDamage); // Spell Damage Increase
                        m_Stream.Write((short)beheld.CastRecovery); // Faster Cast Recovery
                        m_Stream.Write((short)beheld.CastSpeed); // Faster Casting
                        m_Stream.Write((short)beheld.LowerManaCost); // Lower Mana Cost
                        m_Stream.Write((short)beheld.BonusStr); // Strength Increase
                        m_Stream.Write((short)beheld.BonusDex); // Dexterity Increase
                        m_Stream.Write((short)beheld.BonusInt); // Intelligence Increase
                        m_Stream.Write((short)beheld.BonusHits); // Hit Points Increase
                        m_Stream.Write((short)beheld.BonusStam); // Stamina Increase
                        m_Stream.Write((short)beheld.BonusMana); // Mana Increase
                        m_Stream.Write((short)beheld.MaxHitIncrease); // Maximum Hit Points Increase
                        m_Stream.Write((short)beheld.MaxStamIncrease); // Maximum Stamina Increase
                        m_Stream.Write((short)beheld.MaxManaIncrease); // Maximum Mana Increase
                    }
				}
			}
		}
		public MobileStatusExtended(Mobile m, NetState ns)
			: base(0x11)
		{
			string name = m.Name;
			if (name == null)
			{
				name = "";
			}

			int type;

			if (Core.HS && ns != null && ns.ExtendedStatus)
			{
				type = 6;
				EnsureCapacity(121);
			}
			else if (Core.ML && ns != null && ns.SupportsExpansion(Expansion.ML))
			{
				type = 5;
				EnsureCapacity(91);
			}
			else
			{
				type = Core.AOS ? 4 : 3;
				EnsureCapacity(88);
			}

			m_Stream.Write(m.Serial);
			m_Stream.WriteAsciiFixed(name, 30);

			m_Stream.Write((short)m.Hits);
			m_Stream.Write((short)m.HitsMax);

			m_Stream.Write(m.CanBeRenamedBy(m));

			m_Stream.Write((byte)type);

			m_Stream.Write(m.Female);

			m_Stream.Write((short)m.Str);
			m_Stream.Write((short)m.Dex);
			m_Stream.Write((short)m.Int);

			m_Stream.Write((short)m.Stam);
			m_Stream.Write((short)m.StamMax);

			m_Stream.Write((short)m.Mana);
			m_Stream.Write((short)m.ManaMax);

			m_Stream.Write(m.TotalGold);
			m_Stream.Write((short)(Core.AOS ? m.PhysicalResistance : (int)(m.ArmorRating + 0.5)));
			m_Stream.Write((short)(Mobile.BodyWeight + m.TotalWeight));

			if (type >= 5)
			{
				m_Stream.Write((short)m.MaxWeight);
				m_Stream.Write((byte)(m.Race.RaceID + 1)); // Would be 0x00 if it's a non-ML enabled account but...
			}

			m_Stream.Write((short)m.StatCap);

			m_Stream.Write((byte)m.Followers);
			m_Stream.Write((byte)m.FollowersMax);

			if (type >= 4)
			{
				m_Stream.Write((short)m.FireResistance); // Fire
				m_Stream.Write((short)m.ColdResistance); // Cold
				m_Stream.Write((short)m.PoisonResistance); // Poison
				m_Stream.Write((short)m.EnergyResistance); // Energy
				m_Stream.Write((short)m.Luck); // Luck

				IWeapon weapon = m.Weapon;

				int min = 0, max = 0;

				if (weapon != null)
				{
					weapon.GetStatusDamage(m, out min, out max);
				}

				m_Stream.Write((short)min); // Damage min
				m_Stream.Write((short)max); // Damage max

				m_Stream.Write(m.TithingPoints);
			}

			if (type >= 6)
			{
				for (int i = 0; i < 15; ++i)
				{
					m_Stream.Write((short)m.GetAosStatus(i));
				}
			}
		}