# Getting Started
**Referenced Files in This Document**
- [README.md](file://README.md)
- [ClassicAssist.sln](file://ClassicAssist.sln)
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
- [ClassicAssist.Avalonia/Engine.cs](file://ClassicAssist.Avalonia/Engine.cs)
- [ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj](file://ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj)
- [ClassicAssist.Shared/ClassicAssist.Shared.csproj](file://ClassicAssist.Shared/ClassicAssist.Shared.csproj)
- [ClassicAssist.Launcher/MainViewModel.cs](file://ClassicAssist.Launcher/MainViewModel.cs)
- [ClassicAssist.Launcher/ShardManager.cs](file://ClassicAssist.Launcher/ShardManager.cs)
- [ClassicAssist.Shared/Data/Options.cs](file://ClassicAssist.Shared/Data/Options.cs)
- [ClassicAssist.Shared/Data/AssistantOptions.cs](file://ClassicAssist.Shared/Data/AssistantOptions.cs)
- [ClassicAssist.Shared/UO/Data/ShardEntry.cs](file://ClassicAssist.Shared/UO/Data/ShardEntry.cs)
## Table of Contents
1. [Introduction](#introduction)
2. [Project Structure](#project-structure)
3. [Core Components](#core-components)
4. [Architecture Overview](#architecture-overview)
5. [Detailed Component Analysis](#detailed-component-analysis)
6. [Dependency Analysis](#dependency-analysis)
7. [Performance Considerations](#performance-considerations)
8. [Troubleshooting Guide](#troubleshooting-guide)
9. [Conclusion](#conclusion)
## Introduction
ClassicAssist.Avalonia is a cross-platform rewrite of the original WPF-based ClassicAssist Ultima Online client. It brings modern UI and platform support to Windows, macOS, and Linux using Avalonia UI on top of .NET 6+. The project provides a familiar UO assistant experience with enhanced portability and extensibility.
Key goals:
- Modern, cross-platform UI via Avalonia
- Shared game logic and data models across platforms
- Python.NET integration for scripting and macros
- Familiar features from the original WPF client
## Project Structure
The repository is organized into multiple projects:
- ClassicAssist.Avalonia: Avalonia-based UI entry point and platform-specific bootstrapping
- ClassicAssist.Shared: Core game logic, networking, data models, and shared resources
- ClassicAssist.Launcher: WPF-based launcher used to manage shards and profiles (legacy but still present)
- ClassicAssist: Legacy WPF UI components (kept for compatibility)
- ClassicAssist.Tests: Unit tests covering agents, filters, macros, and core functionality
- ClassicAssist.Updater: Update utility
- Tools: Utility tools such as command export
```mermaid
graph TB
subgraph "UI Layer"
A["ClassicAssist.Avalonia
Avalonia UI"]
L["ClassicAssist.Launcher
WPF Launcher"]
C["ClassicAssist
Legacy WPF UI"]
end
subgraph "Shared Core"
S["ClassicAssist.Shared
Game Logic, Data, Networking"]
end
subgraph "Tests & Tools"
T["ClassicAssist.Tests"]
U["ClassicAssist.Updater"]
X["Tools/ExportCommands"]
end
A --> S
L --> S
C --> S
T --> S
U --> S
X --> S
```
**Diagram sources**
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
- [ClassicAssist.Launcher/MainViewModel.cs](file://ClassicAssist.Launcher/MainViewModel.cs)
- [ClassicAssist.Shared/ClassicAssist.Shared.csproj](file://ClassicAssist.Shared/ClassicAssist.Shared.csproj)
**Section sources**
- [README.md](file://README.md)
- [ClassicAssist.sln](file://ClassicAssist.sln)
## Core Components
- Application Entry Point: The Avalonia app initializes the runtime, sets up the dispatcher, and starts the main window.
- Engine Initialization: The Avalonia Engine bridges UI initialization with shared engine startup.
- Shared Game Engine: ClassicAssist.Shared contains networking, packet handling, objects, commands, macros, and configuration.
- Launcher Integration: The WPF launcher manages shard selection and profile management; it can be used alongside or prior to launching the Avalonia client.
What you need to know:
- The Avalonia app depends on ClassicAssist.Shared for all game logic.
- Python.NET integration is part of the macro/scripting subsystem within the shared layer.
- Configuration and options are persisted through shared settings classes.
**Section sources**
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
- [ClassicAssist.Avalonia/Engine.cs](file://ClassicAssist.Avalonia/Engine.cs)
- [ClassicAssist.Shared/ClassicAssist.Shared.csproj](file://ClassicAssist.Shared/ClassicAssist.Shared.csproj)
## Architecture Overview
High-level flow when starting the Avalonia client:
- Program.cs bootstraps the Avalonia application and invokes App.axaml.cs.
- App.axaml.cs initializes the UI and delegates to Engine.cs to start the shared engine.
- ClassicAssist.Shared loads configuration, sets up networking, and prepares the game state.
```mermaid
sequenceDiagram
participant OS as "Operating System"
participant Prog as "Program.cs"
participant App as "App.axaml.cs"
participant Eng as "Engine.cs"
participant Shared as "ClassicAssist.Shared"
OS->>Prog : Launch executable
Prog->>App : Initialize Avalonia app
App->>Eng : Start engine
Eng->>Shared : Load options and config
Shared-->>Eng : Ready
Eng-->>App : UI ready
App-->>OS : Show main window
```
**Diagram sources**
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
- [ClassicAssist.Avalonia/Engine.cs](file://ClassicAssist.Avalonia/Engine.cs)
- [ClassicAssist.Shared/ClassicAssist.Shared.csproj](file://ClassicAssist.Shared/ClassicAssist.Shared.csproj)
## Detailed Component Analysis
### Installation and Build
Prerequisites:
- .NET 6+ SDK installed and available on PATH
- Git (optional, for cloning)
- Platform-specific dependencies:
- Windows: Visual Studio build tools or dotnet CLI
- macOS: Xcode command line tools
- Linux: GTK3 development libraries and other system packages required by Avalonia
Steps:
1. Clone the repository or download source.
2. Restore NuGet packages:
- dotnet restore
3. Build the solution:
- dotnet build ClassicAssist.sln
4. Publish or run the Avalonia app:
- dotnet run --project ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj
- Or publish for your target runtime identifier (e.g., win-x64, osx-x64, linux-x64)
Notes:
- Ensure your environment matches the target framework specified in the project files.
- On Linux, install Avalonia’s required system dependencies (GTK3, etc.).
**Section sources**
- [ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj](file://ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj)
- [ClassicAssist.Shared/ClassicAssist.Shared.csproj](file://ClassicAssist.Shared/ClassicAssist.Shared.csproj)
- [ClassicAssist.sln](file://ClassicAssist.sln)
### First-Time Setup
After building and running the client:
- Profile creation:
- Use the NewProfileWindow to create a new profile if prompted or via the UI controls.
- Shard configuration:
- Configure shard entries using the shared ShardEntry model and options.
- If using the launcher, select a shard before launching the client.
- Initial connection:
- Enter server address, port, and credentials in the connection dialog or options.
- Connect to the selected shard and verify login.
Where to look:
- Options and AssistantOptions define persistent settings.
- ShardEntry defines shard parameters like host, port, and protocol details.
**Section sources**
- [ClassicAssist.Avalonia/Views/NewProfileWindow.axaml.cs](file://ClassicAssist.Avalonia/Views/NewProfileWindow.axaml.cs)
- [ClassicAssist.Shared/Data/Options.cs](file://ClassicAssist.Shared/Data/Options.cs)
- [ClassicAssist.Shared/Data/AssistantOptions.cs](file://ClassicAssist.Shared/Data/AssistantOptions.cs)
- [ClassicAssist.Shared/UO/Data/ShardEntry.cs](file://ClassicAssist.Shared/UO/Data/ShardEntry.cs)
- [ClassicAssist.Launcher/ShardManager.cs](file://ClassicAssist.Launcher/ShardManager.cs)
### Basic Usage Patterns
- Launch the application:
- Run the published binary or use dotnet run against the Avalonia project.
- Connect to UO servers:
- Select a configured shard and enter credentials.
- Click Connect; the shared networking layer handles authentication and session setup.
- Navigate the main interface:
- Use tabs and windows for Agents, Macros, Skills, Chat, Debug, and more.
- Access hotkeys and options from the main menu or control panels.
**Section sources**
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
- [ClassicAssist.Avalonia/Engine.cs](file://ClassicAssist.Avalonia/Engine.cs)
## Dependency Analysis
The Avalonia project depends on ClassicAssist.Shared for core functionality. The Launcher and legacy UI also depend on Shared. Tests validate behavior across agents, filters, and macros.
```mermaid
graph LR
Avalonia["ClassicAssist.Avalonia"] --> Shared["ClassicAssist.Shared"]
Launcher["ClassicAssist.Launcher"] --> Shared
Legacy["ClassicAssist (WPF)"] --> Shared
Tests["ClassicAssist.Tests"] --> Shared
```
**Diagram sources**
- [ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj](file://ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj)
- [ClassicAssist.Shared/ClassicAssist.Shared.csproj](file://ClassicAssist.Shared/ClassicAssist.Shared.csproj)
- [ClassicAssist.Launcher/ClassicAssist.Launcher.csproj](file://ClassicAssist.Launcher/ClassicAssist.Launcher.csproj)
- [ClassicAssist/ClassicAssist.csproj](file://ClassicAssist/ClassicAssist.csproj)
- [ClassicAssist.Tests/ClassicAssist.Tests.csproj](file://ClassicAssist.Tests/ClassicAssist.Tests.csproj)
**Section sources**
- [ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj](file://ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj)
- [ClassicAssist.Shared/ClassicAssist.Shared.csproj](file://ClassicAssist.Shared/ClassicAssist.Shared.csproj)
## Performance Considerations
- Prefer publishing as self-contained for distribution to avoid missing runtime issues.
- Keep macro scripts efficient; heavy computations should be offloaded appropriately.
- Use profiling tools to identify bottlenecks in packet processing or UI rendering.
- Avoid excessive logging in production builds.
[No sources needed since this section provides general guidance]
## Troubleshooting Guide
Common issues and resolutions:
- Missing .NET 6+ runtime:
- Install the correct .NET 6+ runtime for your platform.
- Avalonia system dependencies not found (Linux):
- Install GTK3 and related development packages required by Avalonia.
- NuGet package restore failures:
- Verify network access and ensure dotnet CLI is updated.
- Clear local NuGet cache if necessary.
- Python.NET integration errors:
- Ensure Python is installed and accessible on PATH.
- Confirm compatible Python version and architecture match the target runtime.
- Connection problems:
- Validate shard host/port and credentials.
- Check firewall rules and proxy settings.
- Launcher vs. Client confusion:
- Use the Launcher to manage shards and profiles; then launch the Avalonia client.
Where to look:
- Options and AssistantOptions for configuration persistence.
- ShardEntry for shard parameters.
- Launcher ShardManager for shard management workflows.
**Section sources**
- [ClassicAssist.Shared/Data/Options.cs](file://ClassicAssist.Shared/Data/Options.cs)
- [ClassicAssist.Shared/Data/AssistantOptions.cs](file://ClassicAssist.Shared/Data/AssistantOptions.cs)
- [ClassicAssist.Shared/UO/Data/ShardEntry.cs](file://ClassicAssist.Shared/UO/Data/ShardEntry.cs)
- [ClassicAssist.Launcher/ShardManager.cs](file://ClassicAssist.Launcher/ShardManager.cs)
## Conclusion
ClassicAssist.Avalonia delivers a modern, cross-platform Ultima Online client built on Avalonia and .NET 6+. By following the installation steps, configuring your first profile and shard, and connecting to a server, you can quickly get started. For advanced usage, explore the shared engine capabilities, macros, and agent tools provided by ClassicAssist.Shared.
[No sources needed since this section summarizes without analyzing specific files]