示例#1
0
        public void UpdateTroopTab()
        {
            var acc  = getSelectedAcc();
            var vill = getSelectedVillage(acc);

            if (acc.AccInfo.Tribe != null)
            {
                if (vill.Troops.TroopToTrain != null)
                {
                    labelTroopsToTrain.Text = $"Selected: {VillageHelper.EnumStrToString(vill.Troops.TroopToTrain.ToString() ?? "")}";
                }
                else
                {
                    labelTroopsToTrain.Text = "Selected:";
                }

                comboBoxTroopsToTrain.Items.Clear();
                int troopsEnum = ((int)acc.AccInfo.Tribe - 1) * 10;
                for (var i = troopsEnum + 1; i < troopsEnum + 11; i++)
                {
                    Classificator.TroopsEnum troop = (Classificator.TroopsEnum)i;
                    comboBoxTroopsToTrain.Items.Add(VillageHelper.EnumStrToString(troop.ToString()));
                }
                if (comboBoxTroopsToTrain.Items.Count > 0)
                {
                    comboBoxTroopsToTrain.SelectedIndex = 0;
                }
            }
            else
            {
                labelTroopsToTrain.Text = "Selected:";
                comboBoxTroopsToTrain.Items.Clear();
            }
        }
示例#2
0
        public static bool IsTroopOffensive(Classificator.TroopsEnum troop)
        {
            switch (troop)
            {
            case TroopsEnum.Legionnaire:
            case TroopsEnum.Imperian:
            case TroopsEnum.EquitesCaesaris:
            case TroopsEnum.EquitesImperatoris:
            case TroopsEnum.Swordsman:
            case TroopsEnum.TheutatesThunder:
            case TroopsEnum.Haeduan:
            case TroopsEnum.Clubswinger:
            case TroopsEnum.Axeman:
            case TroopsEnum.TeutonicKnight:
            case TroopsEnum.Mercenary:
            case TroopsEnum.Marksman:
            case TroopsEnum.Bowman:
            case TroopsEnum.SteppeRider:
            case TroopsEnum.Marauder:
            case TroopsEnum.SlaveMilitia:
            case TroopsEnum.AshWarden:
            case TroopsEnum.KhopeshWarrior:
            case TroopsEnum.ReshephChariot:
                return(true);

            default:
                return(false);
            }
        }
示例#3
0
 private void RepeatTask(Village vill, Classificator.TroopsEnum troop, DateTime nextExecute)
 {
     vill.Troops.ToResearch.Remove(troop);
     //Next research when this one finishes
     if (0 < vill.Troops.ToResearch.Count)
     {
         this.NextExecute = nextExecute;
     }
 }
示例#4
0
        public static bool IsTroopRam(Classificator.TroopsEnum troop)
        {
            switch (troop)
            {
            case TroopsEnum.EgyptianRam:
            case TroopsEnum.GaulRam:
            case TroopsEnum.HunRam:
            case TroopsEnum.RomanRam:
            case TroopsEnum.TeutonRam:
                return(true);

            default:
                return(false);
            }
        }
示例#5
0
        //You would probably have to take into account ally training bonus, artifacts, helmets, horse fountain...
        public static TimeSpan GetTrainingTime(Account acc, Village vill, Classificator.TroopsEnum troop, bool great)
        {
            var buildingType = TroopsHelper.GetTroopBuilding(troop, great);
            var building     = vill.Build.Buildings.FirstOrDefault(x => x.Type == buildingType);
            var troopId      = (int)troop;

            if (troopId > 40)
            {
                troopId -= 20;               //since we don't have values for nature/natars
            }
            var baseTime     = TrainTime[troopId];
            var sec          = Math.Pow(0.9, building.Level - 1) * baseTime;
            var millis       = sec % 1;
            var baseTimespan = new TimeSpan(0, 0, 0, (int)sec, (int)millis * 1000);

            return(new TimeSpan(baseTimespan.Ticks / acc.AccInfo.ServerSpeed));
        }
示例#6
0
 private string[] GetPossibleTroops(Classificator.BuildingEnum building)
 {
     List<string> ret = new List<string>();
     ret.Add("None");
     var acc = getSelectedAcc();
     if (acc.Villages.Count == 0) return ret.ToArray(); //Acc has now been initialised
     int troopsEnum = ((int)acc.AccInfo.Tribe - 1) * 10;
     for (var i = troopsEnum + 1; i < troopsEnum + 11; i++)
     {
         Classificator.TroopsEnum troop = (Classificator.TroopsEnum)i;
         if (TroopsHelper.GetTroopBuilding(troop, false) == building)
         {
             ret.Add(VillageHelper.EnumStrToString(troop.ToString()));
         }
     }
     return ret.ToArray();
 }
示例#7
0
        public static int[] GetResourceCost(Classificator.TroopsEnum troop, bool great)
        {
            var troopId = (int)troop;

            if (troopId > 40)
            {
                troopId -= 20;               //since we don't have values for nature/natars
            }
            var res = Cost.GetRow(troopId);

            if (great) //if we are training in GB/GS, cost of each troop is 3 times as much.
            {
                for (int i = 0; i < res.Length; i++)
                {
                    res[i] *= 3;
                }
            }
            return(res);
        }
示例#8
0
        //  Return how long troop trains (in ms) and how much it costs
        public static (TimeSpan, Resources) GetTrainCost(HtmlDocument htmlDoc, Classificator.TroopsEnum troop)
        {
            var troopNode = htmlDoc.DocumentNode.Descendants("img").FirstOrDefault(x => x.HasClass("u" + (int)troop));

            if (troopNode == null)
            {
                return(new TimeSpan(), null);
            }
            while (!troopNode.HasClass("details"))
            {
                troopNode = troopNode.ParentNode;
            }

            var      duration = troopNode.Descendants("div").FirstOrDefault(x => x.HasClass("duration"));
            TimeSpan dur      = TimeParser.ParseDuration(duration);

            var       resWrapper = troopNode.Descendants("div").FirstOrDefault(x => x.HasClass("resourceWrapper"));
            Resources res        = ResourceParser.GetResourceCost(resWrapper);

            return(dur, res);
        }
        private string[] GetPossibleTroops(Classificator.BuildingEnum building)
        {
            List <string> ret = new List <string>();

            ret.Add("None");
            var acc = GetSelectedAcc();

            if (acc.Villages.Count == 0)
            {
                return(ret.ToArray());                         //Acc has now been initialised
            }
            var tribes = new List <Classificator.TribeEnum>(5);

            if (NYS.Checked)
            {
                tribes.Add(Classificator.TribeEnum.Egyptians);
                tribes.Add(Classificator.TribeEnum.Gauls);
                tribes.Add(Classificator.TribeEnum.Huns);
                tribes.Add(Classificator.TribeEnum.Romans);
                tribes.Add(Classificator.TribeEnum.Teutons);
            }
            else
            {
                tribes.Add(acc.AccInfo.Tribe ?? Classificator.TribeEnum.Any);
            }

            foreach (var tribe in tribes)
            {
                int troopsEnum = ((int)tribe - 1) * 10;
                for (var i = troopsEnum + 1; i < troopsEnum + 11; i++)
                {
                    Classificator.TroopsEnum troop = (Classificator.TroopsEnum)i;
                    if (TroopsHelper.GetTroopBuilding(troop, false) == building)
                    {
                        ret.Add(VillageHelper.EnumStrToString(troop.ToString()));
                    }
                }
            }
            return(ret.ToArray());
        }
示例#10
0
        public static bool IsTroopDefensive(Classificator.TroopsEnum troop)
        {
            switch (troop)
            {
            case TroopsEnum.Legionnaire:
            case TroopsEnum.Praetorian:
            case TroopsEnum.Spearman:
            case TroopsEnum.Paladin:
            case TroopsEnum.Phalanx:
            case TroopsEnum.Druidrider:
            case TroopsEnum.SlaveMilitia:
            case TroopsEnum.AshWarden:
            case TroopsEnum.AnhurGuard:
            case TroopsEnum.ReshephChariot:
            case TroopsEnum.Mercenary:
            case TroopsEnum.Marksman:
                return(true);

            default:
                return(false);
            }
        }
示例#11
0
        /// <summary>
        /// For getting building requirements for troop research
        /// This is for academy research only, for training check for training building!
        /// </summary>
        /// <param name="troop">Troop to get building prerequisites for</param>
        /// <returns>List of prerequisites</returns>
        public static List <Prerequisite> GetBuildingPrerequisites(Classificator.TroopsEnum troop)
        {
            var ret = new List <Prerequisite>();

            switch (troop)
            {
            //romans
            case TroopsEnum.Praetorian:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 1
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Smithy, Level = 1
                });
                return(ret);

            case TroopsEnum.Imperian:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Smithy, Level = 1
                });
                return(ret);

            case TroopsEnum.EquitesLegati:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 1
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                return(ret);

            case TroopsEnum.EquitesImperatoris:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                return(ret);

            case TroopsEnum.EquitesCaesaris:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 10
                });
                return(ret);

            case TroopsEnum.RomanRam:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 10
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 1
                });
                return(ret);

            case TroopsEnum.RomanCatapult:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 10
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 15
                });
                return(ret);

            case TroopsEnum.RomanChief:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.RallyPoint, Level = 10
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 20
                });
                return(ret);

            //Teutons
            case TroopsEnum.Spearman:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 1
                });
                return(ret);

            case TroopsEnum.Axeman:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 3
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Smithy, Level = 1
                });
                return(ret);

            case TroopsEnum.Scout:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 1
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.MainBuilding, Level = 5
                });
                return(ret);

            case TroopsEnum.Paladin:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 3
                });
                return(ret);

            case TroopsEnum.TeutonicKnight:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 15
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 10
                });
                return(ret);

            case TroopsEnum.TeutonRam:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 10
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 1
                });
                return(ret);

            case TroopsEnum.TeutonCatapult:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 15
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 10
                });
                return(ret);

            case TroopsEnum.TeutonChief:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 20
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.RallyPoint, Level = 5
                });
                return(ret);

            //Gauls
            case TroopsEnum.Swordsman:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 1
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Smithy, Level = 1
                });
                return(ret);

            case TroopsEnum.Pathfinder:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 1
                });
                return(ret);

            case TroopsEnum.TheutatesThunder:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 3
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                return(ret);

            case TroopsEnum.Druidrider:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 5
                });
                return(ret);

            case TroopsEnum.Haeduan:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 15
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 10
                });
                return(ret);

            case TroopsEnum.GaulRam:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 10
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 1
                });
                return(ret);

            case TroopsEnum.GaulCatapult:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 15
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 10
                });
                return(ret);

            case TroopsEnum.GaulChief:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 20
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.RallyPoint, Level = 10
                });
                return(ret);

            //Egyptians
            case TroopsEnum.AshWarden:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Barracks, Level = 1
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Smithy, Level = 1
                });
                return(ret);

            case TroopsEnum.KhopeshWarrior:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Smithy, Level = 1
                });
                return(ret);

            case TroopsEnum.SopduExplorer:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 1
                });
                return(ret);

            case TroopsEnum.AnhurGuard:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 5
                });
                return(ret);

            case TroopsEnum.ReshephChariot:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 10
                });
                return(ret);

            case TroopsEnum.EgyptianRam:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 10
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 5
                });
                return(ret);

            case TroopsEnum.EgyptianCatapult:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 15
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 10
                });
                return(ret);

            case TroopsEnum.EgyptianChief:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 20
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.RallyPoint, Level = 10
                });
                return(ret);

            //Huns
            case TroopsEnum.Bowman:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 3
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Smithy, Level = 1
                });
                return(ret);

            case TroopsEnum.Spotter:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 1
                });
                return(ret);

            case TroopsEnum.SteppeRider:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 3
                });
                return(ret);

            case TroopsEnum.Marksman:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 5
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 5
                });
                return(ret);

            case TroopsEnum.Marauder:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 15
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Stable, Level = 10
                });
                return(ret);

            case TroopsEnum.HunRam:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 10
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 1
                });
                return(ret);

            case TroopsEnum.HunCatapult:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 15
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Workshop, Level = 10
                });
                return(ret);

            case TroopsEnum.HunChief:
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.Academy, Level = 20
                });
                ret.Add(new Prerequisite()
                {
                    Building = BuildingEnum.RallyPoint, Level = 10
                });
                return(ret);

            default: return(ret);
            }
        }
示例#12
0
        public void UpdateUc()
        {
            var acc  = GetSelectedAcc();
            var vill = GetSelectedVillage(acc);

            if (acc.AccInfo.Tribe != null)
            {
                if (vill.Troops.TroopToTrain != null)
                {
                    labelTroopsToTrain.Text = $"Selected: {VillageHelper.EnumStrToString(vill.Troops.TroopToTrain.ToString() ?? "")}";
                }
                else
                {
                    labelTroopsToTrain.Text = "Selected:";
                }

                comboBoxTroopsToTrain.Items.Clear();
                int troopsEnum = ((int)acc.AccInfo.Tribe - 1) * 10;
                for (var i = troopsEnum + 1; i < troopsEnum + 11; i++)
                {
                    Classificator.TroopsEnum troop = (Classificator.TroopsEnum)i;
                    comboBoxTroopsToTrain.Items.Add(VillageHelper.EnumStrToString(troop.ToString()));
                }
                if (comboBoxTroopsToTrain.Items.Count > 0)
                {
                    comboBoxTroopsToTrain.SelectedIndex = 0;
                }
            }
            else
            {
                labelTroopsToTrain.Text = "Selected:";
                comboBoxTroopsToTrain.Items.Clear();
            }

            // Village troops info
            string infoText = "-- Troops already researched:\n";

            infoText += string.Join(", ", vill.Troops.Researched) + "\n";
            infoText += "-- Troops to be researched:\n";
            infoText += string.Join(", ", vill.Troops.ToResearch) + "\n";
            infoText += "-- Troop smithy levels:\n";

            List <string> levels = new List <string>();

            foreach (var level in vill.Troops.Levels)
            {
                levels.Add(level.Troop + ": " + level.Level);
            }
            infoText += string.Join(", ", levels) + "\n";

            infoText += "-- Troop to be improved:\n";
            infoText += string.Join(", ", vill.Troops.ToImprove) + "\n";
            infoText += $"-- Settlers already trained: {vill.Troops.Settlers}";

            //List<string> ctStr = new List<string>();
            //foreach(var ct in vill.Troops.CurrentlyTraining.)
            //{
            //    ctStr.Add(ct.)
            //}

            troopsInfo.Text = infoText;
        }
示例#13
0
        public static int GetTroopSpeed(Classificator.TroopsEnum troop)
        {
            var troopId = (int)troop;

            return(speed[troopId]);
        }
示例#14
0
        public static int GetTroopUpkeep(Classificator.TroopsEnum troop)
        {
            var troopId = (int)troop;

            return(upkeep[troopId]);
        }