public SureBond(Disciple src, string equip, int hp, int atk, int def, int spi) { Source = src; Equipped = equip; HpAdd = hp; AttackAdd = atk; DefenseAdd = def; SpiritAdd = spi; }
public DiscipleBond(Disciple src, int hpAdd, int atkAdd, int defAdd, int spiAdd, params Disciple[] required) { Source = src; HpAdd = hpAdd; AttackAdd = atkAdd; DefenseAdd = defAdd; SpiritAdd = spiAdd; Required = required; }
private void CalculateTempBonds(ref Disciple[] disciples) { for (int i=0;i < disciples.Length;i++) { int hpAdd = 0; int attackAdd = 0; int defAdd = 0; int spiritAdd = 0; foreach (DiscipleBond bond in disciples[i].Bonds) { bool requirementsMet = true; foreach (Disciple requiredDisciple in bond.Required) { if (!disciples.Contains(requiredDisciple)) { requirementsMet = false; break; } } if (requirementsMet) { hpAdd += bond.HpAdd; attackAdd += bond.AttackAdd; defAdd += bond.DefenseAdd; spiritAdd += bond.SpiritAdd; } } Disciple tempDisciple = Disciple.FindById(disciples[i].Id); disciples[i].Hp = (int)(tempDisciple.Hp * (1 + hpAdd * 0.01f)); disciples[i].Attack = (int)(tempDisciple.Attack * (1 + attackAdd * 0.01f)); disciples[i].Defense = (int)(tempDisciple.Defense * (1 + defAdd * 0.01f)); disciples[i].Spirit = (int)(tempDisciple.Spirit * (1 + spiritAdd * 0.01f)); if (disciples[i].Defense > 20000) { int a = 2; } } }
private Disciple[] GetFilter(Disciple[] t) { List<Disciple> filter = new List<Disciple>(); foreach (Disciple d in t.Where(d => d != null)) { foreach (DiscipleBond db in d.Bonds) { foreach (Disciple d2 in db.Required) { if (!t.Contains(d2) && !filter.Contains(d2)) filter.Add(d2); } } foreach (Disciple d2 in Disciple.All.Where(d2 => d2 != null)) { foreach (DiscipleBond db in d2.Bonds) { foreach (Disciple d3 in db.Required) { if (d3.Equals(d) && !t.Contains(d2) && !filter.Contains(d2)) filter.Add(d2); } } } } return filter.Distinct().ToArray(); }
private void OptimizeDisciples(Disciple[] t, int c, int s) { foreach (Disciple d in YieldDisciples(searchRarity, GetFilter(t))) { t[c + s] = d.DeepClone(); if (c + s < t.Length - 1) { OptimizeDisciples(t, c + 1, s); } else { CalculateTempBonds(ref t); // calc if max int hpSum = t.Select(disc => disc.Hp).Sum(); int atkSum = t.Select(disc => disc.Attack).Sum(); int defSum = t.Select(disc => disc.Defense).Sum(); int spiSum = t.Select(disc => disc.Spirit).Sum(); int overall = hpSum + atkSum + defSum + spiSum; if (overall > max.Item1) { max = new Tuple<int, List<Disciple>>(overall, t.ToList()); } cc++; if (cc % 10000 == 0) { Console.WriteLine(cc); } } } }
public void InitializeBonds() { string[] bonds = bondsString.Split(';'); Bonds = new DiscipleBond[bonds.Length]; for (int i = 0; i < bonds.Length; i++) { string bondString = bonds[i].Trim(); Match match = Regex.Match(bondString, BONDS_REGEX_PATTERN); if (match.Success) { string[] names = match.Groups[1].Captures[0].Value.Split(','); string attr = match.Groups[2].Captures[0].Value; int add = int.Parse(match.Groups[3].Captures[0].Value); int hpAdd = 0, atkAdd = 0, defAdd = 0, spiAdd = 0; GetAddings(attr, add, ref hpAdd, ref atkAdd, ref defAdd, ref spiAdd); Disciple[] required = new Disciple[names.Length]; for (int j = 0; j < names.Length; j++) { required[j] = FindByName(names[j].Trim()); } DiscipleBond bond = new DiscipleBond(this, hpAdd, atkAdd, defAdd, spiAdd, required); Bonds[i] = bond; } else { throw new Exception(string.Format("Error while regex matching for Disciple '{0}'", this.Name)); } } BondsAchieved = new bool[bonds.Length]; if (!sureBondsString.Equals("")) { string[] sureBonds = sureBondsString.Split(';'); SureBonds = new SureBond[sureBonds.Length]; for (int i = 0; i < sureBonds.Length; i++) { string sureBondString = sureBonds[i].Trim(); Match match = Regex.Match(sureBondString, BONDS_REGEX_PATTERN); if (match.Success) { string equip = match.Groups[1].Value.Trim(); string attr = match.Groups[2].Value; int add = int.Parse(match.Groups[3].Value); int hpAdd = 0, atkAdd = 0, defAdd = 0, spiAdd = 0; GetAddings(attr, add, ref hpAdd, ref atkAdd, ref defAdd, ref spiAdd); SureBond sbond = new SureBond(this, equip, hpAdd, atkAdd, defAdd, spiAdd); SureBonds[i] = sbond; } else { throw new Exception(string.Format("Error while regex matching for Disciple '{0}'", this.Name)); } } } SureBondsActivated = new bool[2]; }
public TeamOptimizer(Disciple[] fixedDisciples) { AsyncCombinator<Disciple> combinator; }