public override DamageResponse Hit()
        {
            if (!(Hitpoints > 0))
            {
                return(new DamageResponse($"{Name} is dead and can't fight", false, 0, this, null));
            }
            Random         random      = new Random(DateTime.Now.Millisecond);
            IDamageDealing weapon      = PickDamageDealing();
            double         baseDamage  = weapon.Power * LevelStrengthModifier(Level);
            double         finalDamage = (baseDamage / 2) + baseDamage * random.NextDouble() * 2;
            int            damage      = Convert.ToInt32(Math.Floor(finalDamage));

            string nameOfWeapon = null;

            foreach (var property in weapon.GetType().GetProperties())
            {
                if (property.Name == "Name")
                {
                    nameOfWeapon = property.GetValue(weapon).ToString();
                }
            }

            return(new DamageResponse(
                       $"{this.GetType().Name} deals {damage} damage with {nameOfWeapon ?? weapon.GetType().Name}",
                       damage > 0,
                       damage > 0 ? damage : 0,
                       this,
                       weapon));
        }
        /// <summary>
        /// Creates a DamageResponse object.
        /// </summary>
        /// <param name="description">Description of the operation.</param>
        /// <param name="successValue">Whether the operation was successful or not.</param>
        /// <param name="damage">How much damage was dealt.</param>
        /// <param name="origin">What entity dealt the damage.</param>
        /// <param name="damageSource">How did the entity deal the damage.</param>
        public DamageResponse(string description, bool successValue, double damage, WorldObject origin, IDamageDealing damageSource)
        {
            Description  = description;
            SuccessValue = successValue;
            Damage       = damage;
            Origin       = origin;
            DamageSource = damageSource;

            TraceSourceSingleton.Ts().TraceEvent(TraceEventType.Information, 104, Description, new object[] { Origin, Damage });
        }
        protected virtual IDamageDealing PickDamageDealing()
        {
            IDamageDealing weapon = (from weapons in ItemManager.GearLoadOut.AttackItems.Values select weapons).First();

            return(weapon);
        }