/// <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); }
// 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); }
/// <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)); }