示例#1
0
        /// <summary>
        /// Commands a city
        /// </summary>
        /// <param name="cmd"></param>
        public void CommandCity(CityCommand cmd)
        {
            ConsoleManager.Instance.WriteLine($"Commanded {Cities.Find(c => c.InstanceID == cmd.CityID).Name} - {cmd.CommandID}");
            Packet p = new Packet((int)PacketHeader.CityCommand, cmd);

            client.SendData(p);
        }
示例#2
0
        // parses a CityCommand packet
        private void ParseCityCommand(Packet p)
        {
            CityCommand cmd = (CityCommand)p.Item;

            cmd.PlayerID = controllers.Player.GetPlayer(p.Sender).InstanceID;
            controllers.City.CommandCity(cmd);
        }
示例#3
0
        /// <summary>
        /// Commands a city to perform an action
        /// </summary>
        /// <param name="cmd"></param>
        public void CommandCity(CityCommand cmd)
        {
            City city = GetCity(cmd.CityID);

            if (city == null)
            {
                return;
            }

            try
            {
                switch (cmd.CommandID)
                {
                case CityCommandID.Rename:     // renames the city
                    city.Name = (string)cmd.Arguments[0];
                    break;

                case CityCommandID.ChangeProduction:     // changes the city's production
                    ChangeProduction(city, (string)cmd.Arguments[0]);
                    break;

                case CityCommandID.QueueProduction:     // add a production to the end of the city's production queue
                    QueueProduction(city, (string)cmd.Arguments[0]);
                    break;

                case CityCommandID.CancelProduction:     // cancels the given production
                    city.ProductionQueue.Remove((int)cmd.Arguments[0]);
                    break;

                case CityCommandID.ReorderProductionMoveUp:     // moves the given production up the queue
                    LinkedListNode <Production> selectedNode = city.ProductionQueue.GetNode((int)cmd.Arguments[0]);
                    city.ProductionQueue.Swap(selectedNode, selectedNode.Previous);
                    break;

                case CityCommandID.ReorderProductionMoveDown:     // moves the given production down the queue
                    selectedNode = city.ProductionQueue.GetNode((int)cmd.Arguments[0]);
                    city.ProductionQueue.Swap(selectedNode, selectedNode.Next);
                    break;

                case CityCommandID.PurchaseProduction:     // completes a production with gold
                    string prodID = (string)cmd.Arguments[0];
                    PurchaseProduction(city, prodID);
                    break;

                case CityCommandID.ChangeCitizenFocus:     // changes the focus of the citizens in the city
                    city.CitizenFocus = (CityCitizenFocus)cmd.Arguments[0];
                    RelocateCitizens(city);
                    UpdateCity(city);
                    break;

                case CityCommandID.DemolishBuilding:     // removes the given building from the city
                    string   buildingID = (string)cmd.Arguments[0];
                    Building building   = Controllers.Data.Building.GetBuilding(buildingID);
                    if (buildingID == null)
                    {
                        break;
                    }
                    if (!building.Demolishable)     // don't demolish a buildign that can't be demolished
                    {
                        break;
                    }
                    city.Buildings.Remove(buildingID);
                    UpdateCity(city);
                    break;
                }
            }
            catch (Exception)
            {
                //Engine.Console.WriteLine($"CityCommand.{cmd.CommandID.ToString()} Error: malformed data", MsgType.ServerWarning);
            }

            OnCityUpdated(new CityEventArgs(city));
        }