Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
        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;
                }
            }
        }
Esempio n. 4
0
 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();
 }
Esempio n. 5
0
        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);
                    }
                }
            }
        }
Esempio n. 6
0
        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];
        }
Esempio n. 7
0
 public TeamOptimizer(Disciple[] fixedDisciples)
 {
     AsyncCombinator<Disciple> combinator;
 }