예제 #1
0
        /// <summary>
        /// Gets the total resource space
        /// </summary>
        /// <remarks>This is the (warehouse - hiding place) * 3</remarks>
        public int GetTotalResourceRoom()
        {
            if (Buildings != null)
            {
                ReportBuilding warehouse = null, hide = null;
                if (Buildings.ContainsKey(BuildingTypes.Warehouse))
                {
                    warehouse = Buildings[BuildingTypes.Warehouse];
                }
                if (Buildings.ContainsKey(BuildingTypes.HidingPlace))
                {
                    hide = Buildings[BuildingTypes.HidingPlace];
                }

                if (warehouse != null)
                {
                    int room = warehouse.GetTotalProduction();
                    if (hide != null)
                    {
                        room -= hide.GetTotalProduction();
                    }
                    return(room * 3);
                }
            }
            return(0);
        }
예제 #2
0
        public virtual void ReadXml(XmlReader r)
        {
            r.MoveToContent();
            string   reportDate = r.GetAttribute(0);
            DateTime reportDateTest;

            if (DateTime.TryParse(reportDate, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out reportDateTest))
            {
                _dateReport = reportDateTest;
            }
            _dateCopied = Convert.ToDateTime(r.GetAttribute(1), System.Globalization.CultureInfo.InvariantCulture);

            r.Read();
            _reportType   = (ReportTypes)Convert.ToInt32(r.ReadElementString("Type"));
            _reportStatus = (ReportStatusses)Convert.ToInt32(r.ReadElementString("Status"));
            _reportFlag   = (ReportFlags)Convert.ToInt32(r.ReadElementString("Flags"));

            r.MoveToContent();
            _loyaltyBegin = Convert.ToInt32(r.GetAttribute(0));
            _loyaltyEnd   = Convert.ToInt32(r.GetAttribute(1));
            r.Read();
            r.MoveToContent();

            _attacker = new ReportVillage();
            _attacker.ReadXml(r);
            //r.ReadEndElement();
            //r.MoveToContent();

            _defender = new ReportVillage();
            _defender.ReadXml(r);
            //r.Read();
            //r.MoveToContent();
            //r.ReadStartElement();
            //r.MoveToContent();

            _resourcesHaul = new Resource();
            r.Read();
            _resourcesHaul.ReadXml(r);
            //r.ReadEndElement();
            _resourceHaulMax = Convert.ToInt32(r.ReadElementString("Max"));
            r.Read();
            r.Read();

            _resourcesLeft = new Resource();
            _resourcesLeft.ReadXml(r);
            r.Read();

            DateTime?tempDate;

            _attack = ReportUnit.LoadXmlList(r, out tempDate);

            _defense = ReportUnit.LoadXmlList(r, out tempDate);

            _buildings = ReportBuilding.LoadXmlList(r, out tempDate);

            r.ReadEndElement();
            r.Read();
        }
예제 #3
0
        public virtual void WriteXml(XmlWriter w)
        {
            w.WriteStartElement("Report");
            if (_dateReport.HasValue)
            {
                w.WriteAttributeString("Report", _dateReport.Value.ToString(System.Globalization.CultureInfo.InvariantCulture));
            }
            else
            {
                w.WriteAttributeString("Report", "");
            }
            w.WriteAttributeString("Copied", _dateCopied.ToString(System.Globalization.CultureInfo.InvariantCulture));

            w.WriteElementString("Type", ((int)_reportType).ToString());
            w.WriteElementString("Status", ((int)_reportStatus).ToString());
            w.WriteElementString("Flags", ((int)_reportFlag).ToString());

            w.WriteStartElement("Loyalty");
            w.WriteAttributeString("Begin", _loyaltyBegin.ToString());
            w.WriteAttributeString("End", _loyaltyEnd.ToString());
            w.WriteEndElement();

            Attacker.WriteXml(w);
            Defender.WriteXml(w);

            w.WriteStartElement("Haul");
            _resourcesHaul.WriteXml(w);
            w.WriteElementString("Max", _resourceHaulMax.ToString());
            w.WriteEndElement();

            w.WriteStartElement("Scouted");
            _resourcesLeft.WriteXml(w);
            w.WriteEndElement();

            ReportUnit.WriteXmlList(w, "Attack", Attack, true, null);
            ReportUnit.WriteXmlList(w, "Defense", Defense, true, null);

            ReportBuilding.WriteXmlList(w, Buildings, null);

            w.WriteEndElement();
        }
예제 #4
0
        /// <summary>
        /// Builds the village buildings dictionary
        /// </summary>
        /// <param name="group">The RegEx group containing the buildings</param>
        /// <param name="points">Out: Calculated points for the building list</param>
        private static Dictionary <BuildingTypes, ReportBuilding> GetBuildings(Group group, out int points)
        {
            points = 0;
            Dictionary <BuildingTypes, ReportBuilding> build = new Dictionary <BuildingTypes, ReportBuilding>();

            string pattern = @"^(?<name>.*) (\<b\>)?\(Level\s*(?<level>\d*)\)(\</b\>\<br /\>)?\s*$";
            Regex  x       = new Regex(pattern);

            for (int i = 0; i < group.Captures.Count; i++)
            {
                Match match = x.Match(group.Captures[i].Value.Trim());
                if (match.Success)
                {
                    string name = match.Groups["name"].Value.Trim();
                    int    level;
                    int.TryParse(match.Groups["level"].Value, out level);
                    ReportBuilding vilbuild = new ReportBuilding(WorldBuildings.Default[name], level);
                    build.Add(vilbuild.Building.Type, vilbuild);
                    points += vilbuild.GetTotalPoints();
                }
            }
            return(build);
        }
예제 #5
0
        public static Dictionary <BuildingTypes, ReportBuilding> LoadXmlList(XmlReader r, out DateTime?date)
        {
            Dictionary <BuildingTypes, ReportBuilding> list = new Dictionary <BuildingTypes, ReportBuilding>();

            if (r.HasAttributes)
            {
                date = System.Convert.ToDateTime(r.GetAttribute(0), System.Globalization.CultureInfo.InvariantCulture);
            }
            else
            {
                date = null;
            }

            r.Read();
            r.MoveToContent();
            if (r.IsStartElement("Building"))
            {
                while (r.IsStartElement("Building"))
                {
                    string typeDesc = r.GetAttribute(0);
                    if (Enum.IsDefined(typeof(BuildingTypes), typeDesc))
                    {
                        BuildingTypes  type  = (BuildingTypes)Enum.Parse(typeof(BuildingTypes), typeDesc);
                        int            level = System.Convert.ToInt32(r.GetAttribute(1));
                        ReportBuilding build = new ReportBuilding(WorldBuildings.Default[type], level);
                        list.Add(type, build);
                    }
                    r.Read();
                    r.Read();
                }
                r.Read();
                r.MoveToContent();
            }

            return(list);
        }
예제 #6
0
 public static void WriteXmlList(XmlWriter w, Dictionary <BuildingTypes, ReportBuilding> list)
 {
     ReportBuilding.WriteXmlList(w, list, null);
 }
예제 #7
0
        public string BbCodeStandard()
        {
            // players
            var str = new StringBuilder(200);

            PrintPlayers(str);

            if (_report.ReportDate.HasValue)
            {
                str.Append(Environment.NewLine);
                TimeSpan span = World.Default.Settings.ServerTime - _report.ReportDate.Value;
                if (span.TotalHours < 1)
                {
                    str.Append(string.Format("Date: {0}", _report.ReportDate.Value));
                }
                else
                {
                    str.Append(string.Format("Date: {0} ({1} hours ago)", _report.ReportDate.Value, Math.Round(span.TotalHours)));
                }
            }

            // resources
            if (_report.ReportOptions.ResourceDetails || true)
            {
                str.Append(PrintResources());
            }

            // Troops
            if (_report.ReportOptions.AttackingTroops)
            {
                str.Append(PrintTroops("Attacker:", _report.Attack, true));
            }
            if (_report.ReportOptions.DefendingTroops)
            {
                str.Append(PrintTroops("Defender:", _report.Defense, false));
            }

            // print free space
            if (_report.ReportOptions.People)
            {
                string space = Environment.NewLine + Resource.FaceBBCodeString;
                space += "[b]" + Report.GetTotalPeople(_report.Defense, TotalPeople.End).ToString("#,0") + "[/b]";
                if (_report.Buildings != null && _report.Buildings.Count > 2)
                {
                    int farmBuildings = _report.GetTotalPeopleInBuildings();

                    if (farmBuildings > 0)
                    {
                        space += string.Format(" + {0:#,0}", farmBuildings);
                    }

                    if (_report.Buildings.ContainsKey(BuildingTypes.Farm))
                    {
                        ReportBuilding farm      = _report.Buildings[BuildingTypes.Farm];
                        int            totalFarm = farm.GetTotalProduction();
                        //space += string.Format(" + {0:#,0}", farmBuildings);
                        space = string.Format("{1} ({0:#,0} free)", totalFarm - farmBuildings - Report.GetTotalPeople(_report.Defense, TotalPeople.End), space);
                    }
                }
                if (space.Length > 0)
                {
                    if (Report.GetTotalPeople(_report.Defense, TotalPeople.Start) == 0)
                    {
                        str.Append(Environment.NewLine + Environment.NewLine + "[b]Defender:[/b]");
                    }
                    str.Append(space);
                }
            }

            // Buildings
            if (_report.ReportOptions.Buildings)
            {
                str.Append(PrintBuildings("Buildings:", _report.Buildings));
            }

            return(str.ToString());
        }
예제 #8
0
        /// <summary>
        /// Builds the village buildings dictionary
        /// </summary>
        /// <param name="group">The RegEx group containing the buildings</param>
        /// <param name="points">Out: Calculated points for the building list</param>
        private static Dictionary<BuildingTypes, ReportBuilding> GetBuildings(Group group, out int points)
        {
            points = 0;
            Dictionary<BuildingTypes, ReportBuilding> build = new Dictionary<BuildingTypes, ReportBuilding>();

            string pattern = @"^(?<name>.*) (\<b\>)?\(Level\s*(?<level>\d*)\)(\</b\>\<br /\>)?\s*$";
            Regex x = new Regex(pattern);
            for (int i = 0; i < group.Captures.Count; i++)
            {
                Match match = x.Match(group.Captures[i].Value.Trim());
                if (match.Success)
                {
                    string name = match.Groups["name"].Value.Trim();
                    int level;
                    int.TryParse(match.Groups["level"].Value, out level);
                    ReportBuilding vilbuild = new ReportBuilding(WorldBuildings.Default[name], level);
                    build.Add(vilbuild.Building.Type, vilbuild);
                    points += vilbuild.GetTotalPoints();
                }
            }
            return build;
        }
예제 #9
0
        public static Dictionary<BuildingTypes, ReportBuilding> LoadXmlList(XmlReader r, out DateTime? date)
        {
            Dictionary<BuildingTypes, ReportBuilding> list = new Dictionary<BuildingTypes, ReportBuilding>();
            if (r.HasAttributes)
                date = System.Convert.ToDateTime(r.GetAttribute(0), System.Globalization.CultureInfo.InvariantCulture);
            else
                date = null;

            r.Read();
            r.MoveToContent();
            if (r.IsStartElement("Building"))
            {
                while (r.IsStartElement("Building"))
                {
                    string typeDesc = r.GetAttribute(0);
                    if (Enum.IsDefined(typeof(BuildingTypes), typeDesc))
                    {
                        BuildingTypes type = (BuildingTypes)Enum.Parse(typeof(BuildingTypes), typeDesc);
                        int level = System.Convert.ToInt32(r.GetAttribute(1));
                        ReportBuilding build = new ReportBuilding(WorldBuildings.Default[type], level);
                        list.Add(type, build);
                    }
                    r.Read();
                    r.Read();
                }
                r.Read();
                r.MoveToContent();
            }

            return list;
        }