示例#1
0
 public string DamageReport(Force force, Force enemy, List<Effect> boosts, bool isEpicBoss, string prefix = "")
 {
     var sb = new StringBuilder();
     sb.AppendFormat(prefix + "{0} [{1}]\r\n", Name, CalculateTotalDamageContribution(force, enemy, boosts, isEpicBoss).ToSimpleString());
     foreach (var ability in Abilities)
     {
         sb.AppendFormat(prefix + " * {0} [{1}]\r\n", ability.Name, ability.CalculateTotalDamageContribution(this.ID, force, enemy, null, isEpicBoss).ToSimpleString());
         foreach (var reinforcement in force.GetReinforcedUnits(ID))
         {
             sb.AppendFormat(prefix + "   * Reinforced - {0}", reinforcement.DamageReport(force, enemy, boosts, isEpicBoss, prefix + "\t  "));
         }
         if(ability.HasEffect(EffectType.Boost))
         {
             sb.AppendFormat(prefix + "   * Boosts units in this force for a total bonus of {0}\r\n", CalculateBoostToForce(force, enemy, isEpicBoss));
         }
         if(ability.HasEffect(EffectType.Rally))
         {
             sb.AppendFormat(prefix + "   * Rallies units in this force for a total bonus of {0}\r\n", CalculateBoostToForce(force, enemy, isEpicBoss));
         }
     }
     return sb.ToString();
 }
示例#2
0
        public string DamageReport(Force force, Force enemy, List<Effect> boosts, bool isEpicBoss, string prefix = "", bool hideNamePrefix = false, double reinforcementRate = 0.0)
        {
            var sb = new StringBuilder();
            if (reinforcementRate > 0.0) // TODO: Better fix for this
            {
                var contrib = CalculateTotalDamageContribution(force, enemy, boosts, isEpicBoss);
                sb.AppendFormat((hideNamePrefix ? "" : prefix) + "{0} [{1}] at {2}% = [{3}]\r\n", Name, contrib.ToSimpleString(), reinforcementRate * 100, contrib.AdjustToProcChance(reinforcementRate).ToSimpleString());
            }
            else
            {
                sb.AppendFormat((hideNamePrefix ? "" : prefix) + "{0} [{1}]\r\n", Name, CalculateTotalDamageContribution(force, enemy, boosts, isEpicBoss).ToSimpleString());
            }

            var useableBoosts = new List<Effect>();
            if (boosts != null)
            {
                useableBoosts.AddRange(boosts.Where(effect => effect.IsBoostEffect() && this.IsClassification(effect.TargetType)).ToList());
            }
            foreach (var ability in Abilities)
            {
                var dmg = ability.CalculateTotalDamageContribution(this.ID, force, enemy, useableBoosts, isEpicBoss);
                sb.AppendFormat(prefix + " * {0} [{1}]\r\n", ability.Name, dmg.ToSimpleString());
                if(dmg.DoneAnything() && useableBoosts.Count > 0)
                {
                    sb.AppendFormat(prefix + "   * Base [{0}]\r\n", ability.CalculateTotalDamageContribution(this.ID, force, enemy, null, isEpicBoss).ToSimpleString());
                }
                foreach (var effect in useableBoosts)
                {
                    if(IsClassification(effect.TargetType))
                    {
                        sb.AppendFormat(prefix + "   + {0} {1} {2}\r\n", ability.CalculateBoostBonus(force, enemy, effect, isEpicBoss), effect.ParentsName,  effect.Type == EffectType.Boost ? "Boost" : "Rally");
                    }
                }
                var repeatedReinforcements = new List<Guid>();
                foreach (var reinforcement in force.GetReinforcedUnits(ID))
                {
                    if (repeatedReinforcements.Contains(reinforcement.ID))
                    {
                        continue;
                    }

                    var count = force.GetReinforcedUnits(ID).Count(x => x.ID == reinforcement.ID);
                    if (reinforcement.Abilities.Any(x => x.HasEffect(EffectType.Reinforce)) == false && count > 1)
                    {
                        repeatedReinforcements.Add(reinforcement.ID);
                        sb.AppendFormat(prefix + "   * {0}x Reinforced - {1}", count, reinforcement.DamageReport(force, enemy, boosts, isEpicBoss, prefix + "\t  ", hideNamePrefix: true, reinforcementRate: 0.5)); // TODO: Better fix for this
                    }
                    else
                    {
                        sb.AppendFormat(prefix + "   * Reinforced - {0}", reinforcement.DamageReport(force, enemy, boosts, isEpicBoss, prefix + "\t  ", hideNamePrefix: true));
                    }
                }
                if (ability.HasEffect(EffectType.Boost))
                {
                    sb.AppendFormat(prefix + "   * Boosts units in this force for a total bonus of {0}\r\n", CalculateBoostToForce(force, enemy, isEpicBoss));
                }
                if (ability.HasEffect(EffectType.Rally))
                {
                    sb.AppendFormat(prefix + "   * Rallies units in this force for a total bonus of {0}\r\n", CalculateBoostToForce(force, enemy, isEpicBoss));
                }
            }
            return sb.ToString();
        }