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); }