private void TryExecuteCommand(string input) { if (input.ToLower() == "exitmapping") { Session.PopState(); return; } var room = RoomHelper.GetPlayerRoom(Session.Player); if (_status == MappingStatus.Walking) { var direction = DirectionHelper.GetDirectionWord(input); if (string.IsNullOrEmpty(direction)) { Session.WriteLine("That's not a direction."); return; } if (room.HasExit(direction)) { var commandInfo = Server.Current.CommandLookup.FindCommand(direction, Session.Player); commandInfo.Command.Execute(Session, CommandContext.Create(direction)); return; } // set mode to request title Session.WriteLine("`RCreating exit, Please enter a title..."); _status = MappingStatus.NeedsTitle; _direction = direction; } else { // user is inputting a title var checkRoom = Server.Current.Database.Get <Room>(input.ToLower()); var calculatedKey = input.ToLower(); if (checkRoom != null) { calculatedKey = RoomHelper.GenerateKey(input); Session.WriteLine("`RRoom already exists. Using title: `G{0}`R.", calculatedKey); } var newRoom = new Room() { Area = room.Area, Description = RoomHelper.GetDefaultRoomDescription(), Key = calculatedKey.ToLower(), Title = input, }; newRoom.Exits.Add(DirectionHelper.GetOppositeDirection(_direction), new RoomExit() { IsDoor = false, IsOpen = true, LeadsTo = room.Key }); Server.Current.Database.Save(newRoom); room.Exits.Add(_direction, new RoomExit() { IsDoor = false, IsOpen = true, LeadsTo = newRoom.Key }); Server.Current.Database.Save(room); var commandInfo = Server.Current.CommandLookup.FindCommand(_direction, Session.Player); commandInfo.Command.Execute(Session, CommandContext.Create(_direction)); _status = MappingStatus.Walking; } }