private void AddInjury(Injury inj)
        {
            InjuryTimer addInjury = new InjuryTimer(inj, this);
            m_CurrentInjuries.Add(addInjury);
            addInjury.Start();
            m_LastInjury = DateTime.Now;

            if (m_Player is PlayerMobile && ((PlayerMobile)m_Player).Feats.GetFeatLevel(FeatList.Justice) > 0)
            {
                if (((PlayerMobile)m_Player).LastDeath + TimeSpan.FromSeconds(90) > DateTime.Now)
                {
                    if (m_Player.LastKiller != null && !m_Player.LastKiller.Deleted && m_Player.LastKiller.Alive)
                    {
                        HealthAttachment.GetHA(m_Player.LastKiller).TryInjure(m_Player);
                    }
                }
            }

            switch (inj)
            {
                case Injury.Bloodied: m_Player.SendMessage(37, "You have been bloodied!"); break;
                case Injury.BrokenBack: m_Player.SendMessage(37, "Your back is broken!"); break;
                case Injury.BrokenJaw: m_Player.SendMessage(37, "Your jaw is broken!"); break;
                case Injury.BrokenLeftArm: m_Player.SendMessage(37, "Your left arm is broken!"); break;
                case Injury.BrokenLeftLeg: m_Player.SendMessage(37, "Your left leg is broken!"); break;
                case Injury.BrokenNeck: m_Player.SendMessage(37, "Your neck is broken!"); break;
                case Injury.BrokenRightArm: m_Player.SendMessage(37, "Your right arm is broken!"); break;
                case Injury.BrokenRightLeg: m_Player.SendMessage(37, "Your right leg is broken!"); break;
                case Injury.Bruised: m_Player.SendMessage(37, "You are bruised!"); break;
                case Injury.DeepCut: m_Player.SendMessage(37, "You have been deeply cut!"); break;
                case Injury.Exhausted: m_Player.SendMessage(37, "You are exhausted!"); break;
                case Injury.FracturedLeftArm: m_Player.SendMessage(37, "Your left arm is fractured!"); break;
                case Injury.FracturedLeftLeg: m_Player.SendMessage(37, "Your left leg is fractured!"); break;
                case Injury.FracturedRibs: m_Player.SendMessage(37, "Your ribs are fractured!"); break;
                case Injury.FracturedRightArm: m_Player.SendMessage(37, "Your right arm is fractured!"); break;
                case Injury.FracturedRightLeg: m_Player.SendMessage(37, "Your right leg is fractured!"); break;
                case Injury.FracturedSkull: m_Player.SendMessage(37, "Your skull is fractured!"); break;
                case Injury.InternalBleeding: m_Player.SendMessage(37, "You're bleeding internally!"); break;
                case Injury.LaceratedTorso: m_Player.SendMessage(37, "Your torso is lacerated!"); break;
                case Injury.MajorConcussion: m_Player.SendMessage(37, "You are majorly concussed!"); break;
                case Injury.MassiveBleeding: m_Player.SendMessage(37, "You are experiencing massive bleeding!"); break;
                case Injury.MinorConcussion: m_Player.SendMessage(37, "You have a minor concussion!"); break;
                case Injury.MinorCut: m_Player.SendMessage(37, "You have a few minor cuts!"); break;
                case Injury.BrokenSkull: m_Player.SendMessage(37, "Your skull is broken!"); break;
                case Injury.Winded: m_Player.SendMessage(37, "You are winded!"); break;
                default: break;
            }
        }
            protected override void OnTarget(Mobile from, object targeted)
            {
                if (targeted is Mobile)
                {
                    Mobile m = targeted as Mobile;
                    if (!HealthAttachment.GetHA(m).HasInjury(m_Inj))
                    {
                        InjuryTimer timer = new InjuryTimer(m_Inj, HealthAttachment.GetHA(m));
                        timer.Start();
                        HealthAttachment.GetHA(m).CurrentInjuries.Add(timer);
                        from.SendMessage("You have successfully added " + m_Inj.ToString() + " to " + m.Name + "'s injuries.");
                    }
                }

                base.OnTarget(from, targeted);
            }
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
                case 2:
                    {
                        #region Version 2

                        int count = reader.ReadInt();
                        for (int i = 0; i < count; i++)
                        {
                            Disease dis = (Disease)reader.ReadInt();
                            DateTime last = reader.ReadDateTime();
                            m_LastCaught.Add(dis, last);
                        }

                        int dcount = reader.ReadInt();
                        for (int i = 0; i < dcount; i++)
                        {
                            Disease dis = (Disease)reader.ReadInt();
                            int immu = reader.ReadInt();
                            m_DiseaseImmunities.Add(dis, immu);
                        }

                        #endregion
                        goto case 1;
                    }
                case 1:
                    {
                        #region Version 1
                        m_Disfigurement = reader.ReadInt();
                        m_LastAppearanceRecovery = reader.ReadDateTime();
                        int count = reader.ReadInt();
                        if (m_CurrentDiseases == null)
                            m_CurrentDiseases = new List<DiseaseTimer>();
                        for (int i = 0; i < count; i++)
                        {
                            Disease newDisease = (Disease)reader.ReadInt();
                            Mobile newInfected = reader.ReadMobile();
                            int newRecovCount = reader.ReadInt();
                            TimeSpan newIncuLeft = reader.ReadTimeSpan();

                            DiseaseTimer newTimer = new DiseaseTimer(newInfected, newDisease, newIncuLeft);
                            newTimer.RecoveryCount = newRecovCount;
                            newTimer.Start();
                            m_CurrentDiseases.Add(newTimer);
                        }
                        #endregion
                        goto case 0;
                    }
                case 0:
                    {
                        #region Version 0
                        m_Player = (Mobile)reader.ReadMobile();
                        m_LastInjury = reader.ReadDateTime();
                        int count = reader.ReadInt();
                        if(m_CurrentInjuries == null)
                            m_CurrentInjuries = new List<InjuryTimer>();
                        for (int i = 0; i < count; i++)
                        {
                            Injury timerInjury = (Injury)reader.ReadInt();
                            DateTime timerStartTime = reader.ReadDateTime();
                            InjuryTimer newInjuryTimer = new InjuryTimer(timerInjury, this);
                            newInjuryTimer.StartTime = timerStartTime;
                            m_CurrentInjuries.Add(newInjuryTimer);
                            newInjuryTimer.Start();
                        }
                        #endregion
                        break;
                    }
            }
        }