Esempio n. 1
0
        private string Create(Session session, string[] parms)
        {
            bool help      = false;
            byte?level     = null;
            int? campCount = null;
            uint?x         = null;
            uint?y         = null;

            try
            {
                var p = new OptionSet
                {
                    { "?|help|h", v => help = true },
                    { "x=", v => x = uint.Parse(v.TrimMatchingQuotes()) },
                    { "y=", v => y = uint.Parse(v.TrimMatchingQuotes()) },
                    { "camps=", v => campCount = int.Parse(v.TrimMatchingQuotes()) },
                    { "level=", v => level = byte.Parse(v.TrimMatchingQuotes()) },
                };
                p.Parse(parms);
            }
            catch (Exception)
            {
                help = true;
            }

            if (help ||
                x == null ||
                y == null ||
                level == null ||
                campCount == null ||
                !x.HasValue ||
                !y.HasValue ||
                !campCount.HasValue ||
                !level.HasValue)
            {
                return("BarbarianTribeCreate --x=x --y=y --level=level --camps=camps");
            }

            var success = false;

            locker.Lock(session.Player).Do(() =>
            {
                world.Regions.LockRegion(x.Value, y.Value);
                success = barbarianTribeManager.CreateBarbarianTribeNear(level.Value, campCount.Value, x.Value, y.Value, 0);
                world.Regions.UnlockRegion(x.Value, y.Value);
            });

            return(success ? "OK" : "Unable to find empty spot");
        }
Esempio n. 2
0
        /// <summary>
        ///     Creates a city under the specified player with initial troop and main building
        /// </summary>
        public virtual void CreateCity(ICityFactory cityFactory, IPlayer player, string cityName, byte level, Position cityPosition, IBarbarianTribeManager barbarianTribeManager, out ICity city)
        {
            city = cityFactory.CreateCity(world.Cities.GetNextCityId(),
                                          player,
                                          cityName,
                                          cityPosition,
                                          formula.GetInitialCityResources(),
                                          formula.GetInitialCityRadius(),
                                          formula.GetInitialAp(),
                                          Theme.DEFAULT_THEME_ID,
                                          Theme.DEFAULT_THEME_ID,
                                          Theme.DEFAULT_THEME_ID,
                                          Theme.DEFAULT_THEME_ID);

            var        mainBuildingPosition = cityPosition.Left();
            IStructure mainBuilding         = city.CreateStructure(2000, level, mainBuildingPosition.X, mainBuildingPosition.Y);

            player.Add(city);

            world.Cities.Add(city);

            city.BeginUpdate();

            mainBuilding.BeginUpdate();
            world.Regions.Add(mainBuilding);
            mainBuilding.EndUpdate();

            var defaultTroop = city.CreateTroopStub();

            defaultTroop.BeginUpdate();
            defaultTroop.AddFormation(FormationType.Normal);
            defaultTroop.AddFormation(FormationType.Garrison);
            defaultTroop.AddFormation(FormationType.InBattle);
            defaultTroop.EndUpdate();

            RecalculateCityResourceRates(city);
            SetResourceCap(city);

            city.EndUpdate();

            if (player.GetCityCount() == 1)
            {
                barbarianTribeManager.CreateBarbarianTribeNear(1, 10, city.PrimaryPosition.X, city.PrimaryPosition.Y, 10);
            }
        }