Exemplo n.º 1
0
        /// <summary>
        /// Create a new ship or starbase at the specified location. Starbases are
        /// handled just like ships except that they cannot move.
        /// </summary>
        /// <param name="design">A ShipDesign to be constructed.</param>
        /// <param name="star">The star system producing the ship.</param>
        private void CreateShips(ShipDesign design, Star star, int countToBuild)
        {
            EmpireData empire = serverState.AllEmpires[star.Owner];

            ShipToken token = new ShipToken(design, countToBuild);

            Fleet fleet = new Fleet(token, star, empire.GetNextFleetKey());

            fleet.Name          = design.Name + " #" + fleet.Id;
            fleet.FuelAvailable = fleet.TotalFuelCapacity;

            Message message = new Message();

            message.Audience = star.Owner;
            message.Text     = star.Name + " has produced " + countToBuild + " new " + design.Name;
            // message.Event = fleet; // will not be persisted unless the Type is implemented.
            // message.Type = "Fleet"; // TODO (priority 5) - need to add a fleet type message so it can save/load.
            serverState.AllMessages.Add(message);

            // Add the fleet to the state data so it can be tracked.
            serverState.AllEmpires[fleet.Owner].AddOrUpdateFleet(fleet);

            if (design.Type == ItemType.Starbase)
            {
                if (star.Starbase != null)
                {
                    // Old starbases are not scrapped. Instead, the reduced
                    // upgrade cost should have already been factored when first
                    // queuing the "upgrade", so the old SB is just
                    // discarded and replaced at this point. -Aeglos 2 Aug 11
                    star.Starbase = null;
                    // waypointTasks.Scrap(star.Starbase, star, false);
                }

                star.Starbase = fleet;
                fleet.Type    = ItemType.Starbase;
                fleet.Name    = star.Name + " " + fleet.Type;
                fleet.InOrbit = star;

                if (empire.Race.HasTrait("ISB"))
                {
                    fleet.Cloaked = 20;
                }
            }
            else
            {
                fleet.InOrbit = star;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Allocate an initial set of resources to a player's "home" star system. for
        /// each player giving it some colonists and initial resources.
        /// </summary>
        /// <param name="star"></param>
        /// <param name="race"></param>
        private void AllocateHomeStarOrbitalInstallations(Star star, EmpireData empire, string player)
        {
            ShipDesign colonyShipDesign = null;

            foreach (ShipDesign design in empire.Designs.Values)
            {
                if (design.Name == "Santa Maria")
                {
                    colonyShipDesign = design;
                }
            }

            if (empire.Race.Traits.Primary.Code != "HE")
            {
                ShipToken cs     = new ShipToken(colonyShipDesign, 1);
                Fleet     fleet1 = new Fleet(cs, star, empire.GetNextFleetKey());
                fleet1.Name = colonyShipDesign.Name + " #1";
                empire.AddOrUpdateFleet(fleet1);
            }
            else
            {
                for (int i = 1; i <= 3; i++)
                {
                    ShipToken cs    = new ShipToken(colonyShipDesign, 1);
                    Fleet     fleet = new Fleet(cs, star, empire.GetNextFleetKey());
                    fleet.Name = string.Format("{0} #{1}", colonyShipDesign.Name, i);
                    empire.AddOrUpdateFleet(fleet);
                }
            }

            ShipDesign scoutDesign = null;

            foreach (ShipDesign design in empire.Designs.Values)
            {
                if (design.Name == "Scout")
                {
                    scoutDesign = design;
                }
            }

            ShipToken scout      = new ShipToken(scoutDesign, 1);
            Fleet     scoutFleet = new Fleet(scout, star, empire.GetNextFleetKey());

            scoutFleet.Name = "Scout #1";
            empire.AddOrUpdateFleet(scoutFleet);

            ShipDesign starbaseDesign = null;

            foreach (ShipDesign design in empire.Designs.Values)
            {
                if (design.Name == "Starbase")
                {
                    starbaseDesign = design;
                }
            }

            ShipToken starbase      = new ShipToken(starbaseDesign, 1);
            Fleet     starbaseFleet = new Fleet(starbase, star, empire.GetNextFleetKey());

            starbaseFleet.Name = star.Name + " Starbase";
            star.Starbase      = starbaseFleet;
            empire.AddOrUpdateFleet(starbaseFleet);
        }