Fix wiki (Closes #1379) (#1383)

This commit is contained in:
2026-02-08 11:41:11 -08:00
parent 3ca5117875
commit 2070ae2689
117 changed files with 257 additions and 1171 deletions
+2
View File
@@ -54,4 +54,6 @@ jobs:
.\Scripts\CompareVersions -currentVersion ${{ env.Version }} -lastVersion ${{ env.LatestReleaseTag }}
env:
LatestReleaseTag: ${{ steps.getLatestTag.outputs.tag }}
shell:
pwsh
+16 -10
View File
@@ -78,19 +78,25 @@
<ProjectReference Include="..\Daybreak.Shared\Daybreak.Shared.csproj" />
</ItemGroup>
<!-- Copy Daybreak.wiki to wwwroot/wiki for both Debug and Release builds -->
<!-- Embed Daybreak.wiki files as embedded resources with web-friendly logical names -->
<PropertyGroup>
<WikiSourcePath>..\Daybreak.wiki</WikiSourcePath>
</PropertyGroup>
<ItemGroup>
<WikiFiles Include="$(WikiSourcePath)\**\*.*" Exclude="$(WikiSourcePath)\.git\**" />
</ItemGroup>
</PropertyGroup>
<Target Name="CopyWikiToWwwroot" BeforeTargets="PrepareForBuild">
<Message Importance="high" Text="📦 Daybreak.wiki -&gt; wwwroot/wiki" />
<Copy SourceFiles="@(WikiFiles)" DestinationFiles="@(WikiFiles->'wwwroot\wiki\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
</Target>
<ItemGroup>
<EmbeddedResource Include="$(WikiSourcePath)\**\*.md" Exclude="$(WikiSourcePath)\.git\**">
<LogicalName>wiki/%(RecursiveDir)%(Filename)%(Extension)</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="$(WikiSourcePath)\**\*.png" Exclude="$(WikiSourcePath)\.git\**">
<LogicalName>wiki/%(RecursiveDir)%(Filename)%(Extension)</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="$(WikiSourcePath)\**\*.jpg" Exclude="$(WikiSourcePath)\.git\**">
<LogicalName>wiki/%(RecursiveDir)%(Filename)%(Extension)</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="$(WikiSourcePath)\**\*.gif" Exclude="$(WikiSourcePath)\.git\**">
<LogicalName>wiki/%(RecursiveDir)%(Filename)%(Extension)</LogicalName>
</EmbeddedResource>
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
<!-- Cross-platform: use Touch task instead of Windows-only echo.> -->
-21
View File
@@ -1,21 +0,0 @@
namespace Daybreak.Utils;
public static class WebRootUtil
{
public static string GetWebRootPath()
{
var releasePath = Path.Combine(AppContext.BaseDirectory, "wwwroot");
if (Directory.Exists(releasePath))
{
return releasePath;
}
var debugPath = Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", "..", "wwwroot");
if (Directory.Exists(debugPath))
{
return debugPath;
}
throw new InvalidOperationException("Could not find web root folder");
}
}
+8 -5
View File
@@ -1,4 +1,3 @@
using Daybreak.Utils;
using System.Extensions;
using TrailBlazr.ViewModels;
@@ -6,6 +5,9 @@ namespace Daybreak.Views;
public sealed class WikiViewModel : ViewModelBase<WikiViewModel, WikiView>
{
private const string WikiPrefix = "wiki/";
private const string MarkdownExtension = ".md";
public string? CurrentPage { get; private set; }
public List<string> Pages { get; } = [];
@@ -18,10 +20,11 @@ public sealed class WikiViewModel : ViewModelBase<WikiViewModel, WikiView>
private static IEnumerable<string> LoadPages()
{
var webRoot = WebRootUtil.GetWebRootPath();
var wikiPath = Path.Combine(webRoot, "wiki");
return Directory.EnumerateFiles(wikiPath, "*.md")
.Select(Path.GetFileNameWithoutExtension)
var assembly = typeof(WikiViewModel).Assembly;
return assembly.GetManifestResourceNames()
.Where(name => name.StartsWith(WikiPrefix, StringComparison.OrdinalIgnoreCase)
&& name.EndsWith(MarkdownExtension, StringComparison.OrdinalIgnoreCase))
.Select(name => Path.GetFileNameWithoutExtension(name[WikiPrefix.Length..]))
.OfType<string>();
}
}
@@ -1,53 +0,0 @@
# Build Management
## Open the Build management view
Expand the Guild Wars menu section and open the Manage builds view
![image](assets/open-build-management.png)
## Delete an existing build
1. Open the [Build management view](#open-the-build-management-view)
2. Find the desired build
3. Click on the bin button to delete the build
## Create a new build
1. Open the [Build management view](#open-the-build-management-view)
2. Click on the add button in left of the titlebar
![image](assets/create-build.png)
## Manage the build list
1. Open the [Build management view](#open-the-build-management-view)
2. Clicking on any build in the list will open the selected build
3. [Search for build](#search-for-a-build)
4. [Delete any build](#delete-an-existing-build)
## Search for a build
Search for build by typing in the Search text box
![image](assets/search-builds.png)
## Edit a build
1. Open the [Build management view](#open-the-build-management-view)
2. Click on the desired build. This opens the build edit view
![image](assets/edit-single-build.png)
3. Adjust the build properties
- Adjust the name by writing in the name text box. Prepend '[Folder Name]\' to add folders to the build path
- Adjust the build code by writing in the build code text box. This code can also be pasted in Guild Wars
- Adjust the professions by expanding the profession selection and clicking on the desired profession
- Adjust the attribute points by pressing the plus and minus buttons on the attribute section. Attribute points are subtracted from the total allocated build points
- Clicking on an skill slot will open a skill list with available skills (filtered by the selected profession). Click on any skill from the skill list to add it to the build
- To remove a skill from the build, click on the remove button in the top right corner of the skill slot
- Save the build by clicking on the save button
![image](assets/save-single-build.png)
### Adjusting team builds/party loadouts
![image](assets/edit-team-build.png)
## Integration with GWToolbox builds
Daybreak supports GWToolbox builds. It can load and save builds managed by GWToolbox as well as export vanilla Guild Wars builds into GWToolbox configuration.
@@ -1,14 +0,0 @@
# Copying a Guild Wars Executable
Daybreak is capable of using an existing Guild Wars installation to create new ones
## Copying from an existing executable
1. Expand the Guild Wars menu section and click on the 'Copy Guild Wars' button
![image](assets/open-copy-guildwars.png)
2. If no executable has been already onboarded into Daybreak, the launcher will ask to first [onboard an executable](Executable-Management#setting-up-an-executable)
3. A list of currently managed executables will be opened. Select one of the executables to use as a source
4. A folder selector will open prompting the user to select the destination folder
5. The launcher will start to copy the files
6. Once the copy has finished, Daybreak will automatically onboard the new executable into the [Executables View](Executable-Management#open-executables-settings-view)
7. To use the new copy, [enable the new executable](Executable-Management#switching-executables)
@@ -1,21 +0,0 @@
# Credential Management
## Open Account settings view
1. Expand the Settings section of the menu
2. Click on the Accounts button
![image](assets/open-accounts.png)
## Setting up a user account
1. [Open Account settings view](#open-account-settings-view)
2. Click on the Add button to add a new account entry
![image](assets/create-credential.png)
3. Fill in the account information
## Credential storage
- Credentials are encrypted at rest using the [Windows DPAPI](https://en.wikipedia.org/wiki/Data_Protection_API) exposed through the [Protected Data API](https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.protecteddata?view=windowsdesktop-8.0)
- Credentials never leave your device
- Credentials are not exposed or logged anywhere in the application
- Credentials are only decrypted when they are being displayed on the screen or when they are passed to the GuildWars executable
@@ -1,93 +0,0 @@
# Daybreak API
## Summary
- **Daybreak API** is a lightweight HTTP service
- Daybreak injects this service into Guild Wars on launch, when **Focus View** is enabled
- Built as a NativeAOTcompiled C# DLL
- Automatically loaded into the game process and hosts a REST+WebSocket API on `http://localhost:5080-5100`
- All endpoints are documented via Swagger UI at [/swagger/index.html](http://localhost:5080/swagger/index.html)
- Can query character select info, in-game state, builds, party loadouts, PvP stats, quest logs, and more—making it easy to build external tools, overlays or bots that integrate seamlessly with your running Guild Wars session
### Base URLs
- `/api/v1/rest/...`
- `/api/v1/ws/...`
### Character Select
`GET api/v1/rest/character-select`
Fetches the list of characters and the one youre currently on
`POST api/v1/rest/character-select/{identifier}`
Switches to another character (by UUID or name)
### Login
`GET api/v1/rest/login`
Retrieves your current login info
### Main Player
`GET api/v1/rest/main-player/state`
Returns a snapshot of your live in-game state
`GET api/v1/rest/main-player/info`
Account & PvP stats
`GET api/v1/rest/main-player/quest-log`
Your current quest and quest backlog
`GET api/v1/rest/main-player/build`
Fetches your equipped build
`POST api/v1/rest/main-player/build?code={buildString}`
Applies a new build by build template
`GET api/v1/rest/main-player/instance-info`
Details about your current map instance
`GET api/v1/rest/main-player/title`
Title progress information (e.g. Luxon/Kurzick)
`GET api/v1/ws/main-player/state`
Connect with a websocket to receive state payloads on each game thread proc
### Party
`GET api/v1/rest/party/loadout`
Get your party loadout. This includes current builds for the player and heroes, hero positioning and hero behavior
`POST api/v1/rest/party/loadout`
Sets your party loadout, including builds, hero positionings and hero behaviors
### Inventory
`GET api/v1/rest/inventory`
Fetches your current inventory items. This includes item IDs, quantities and names
### Service Health
`GET api/v1/rest/health`
Checks that Daybreak.API is up and all sub-components are healthy
### Component Schemas
Schema | Purpose
-- | --
AttributeEntry | Single attribute (id, basePoints, totalPoints)
BuildEntry | Your build export: professions, attributes, skill IDs
CharacterSelectEntry | One character on your account (uuid, name, professions, level, map, etc.)
CharacterSelectInformation | Wrapper for current + available characters
LoginInfo | Your email & active character name
MainPlayerState | Live state: XP, level, currencies, HP/energy, position
MainPlayerInformation | PvP stats: wins, losses, rating, rank, qualifier & reward points
QuestInformation | One quest link (from-map/to-map)
QuestLogInformation | Current quest + quest list
InstanceInfo | Current map instance details
TitleInfo | Title progression (points, tiers)
PartyLoadout | Collection of PartyLoadoutEntry
PartyLoadoutEntry | One hero: hero ID, behavior, embedded BuildEntry
HealthCheckResponse | Overall service health summary
HealthCheckEntryResponse | Per-component health details (status, description, data, tags)
InventoryInformation | List of bags with their items, quantities and names
@@ -1,13 +0,0 @@
# Daybreak Command Line Arguments
When launching Daybreak, you can specify command-line arguments.
Below is a list of supported arguments:
- `-auto-launch`: Auto-launches the launch configuration specified by the provided id.
To retrieve the configuration ID, open the
[Launch Configuration in Daybreak](Launch-configurations#modifying-a-launch-configuration)
and find the ID in the ID row.
Format: `-auto-launch [ConfigurationId]`
- `-reset-window`: Resets the previously saved window position, so that Daybreak will move
to the default position, centered on the first screen.
Format: `-reset-window`
@@ -1,5 +0,0 @@
# Daybreak-On-Arm
Daybreak may exhibit issues when running on an ARM processor.
To ensure that it runs as well as possible, enable compatibility mode:
![image](assets/daybreak-on-arm.png)
@@ -1,165 +0,0 @@
# Daybreak Launcher on Linux Installation Guide (Experimental)
Source: [Reynbow/guildwars](https://github.com/Reynbow/guildwars)
## Overview
This guide will help you install and configure the Daybreak launcher for Guild Wars on Linux using Faugus.
---
### Install Faugus
Install Faugus via your package manager.
**GitHub:** [faugus-launcher](https://github.com/Faugus/faugus-launcher)
---
## Installation Steps
### 1. Create Guild Wars Prefix in Faugus
1. Open Faugus and click the `+` button in the bottom left corner
2. Enter a title for your game
3. The Prefix will automatically fill
4. Add your Guild Wars installer file (`GwSetup.exe`) by clicking the `search` button
5. Optionally add shortcuts using the tick boxes
6. In the **Tools** tab, ensure `Game Mode` is ticked
7. Click `Ok` to close the window
8. Click the `Play` button or double-click to run
![image](assets/daybreak-on-linux/faug0.png)
> **Note:** When the Guild Wars installer window appears, you can either let it complete or close it now. For speed and to ensure Daybreak handles the installation, I recommend closing it at this point.
---
### 2. Install Daybreak Launcher
1. **Download Daybreak** from: [Releases](https://github.com/gwdevhub/Daybreak/releases)
2. **Locate your prefix:**
- Right-click your Guild Wars entry in Faugus
- Click `Open prefix location`
- Open the `drive_c` folder
3. **Create Daybreak folder:**
- Create a new folder named `Daybreak` in `drive_c`
- Extract the Daybreak .zip contents to this folder
![image](assets/daybreak-on-linux/faug4.png)
4. **Update executable path:**
- Right-click your Guild Wars entry in Faugus
- Select `Edit`
- Click the `search` button and select `Daybreak.exe` from the Daybreak folder you created
- The path will be under `/home/<username>/Faugus/`
---
### 3. Initialize Daybreak (Required)
> **⚠️ IMPORTANT - Initialize Daybreak once**
>
> After setting Daybreak.exe as the executable but before continuing:
>
> 1. Launch Daybreak once
> 2. Wait 10 seconds (blank/white window is expected)
> 3. Close it again
>
> This initializes the WebView2 host environment inside the prefix.
---
### 4. Install Microsoft WebView2 Runtime
#### Download WebView2
1. Go to: [webview2](https://developer.microsoft.com/en-us/microsoft-edge/webview2/)
2. Download the **Evergreen Standalone Installer (x64)**
3. Also download the **Fixed Version** (this will be a .cab file)
#### Run the Installer
1. In Faugus, open the **Tools** tab for your game
2. Click the `Run` button
3. Select `MicrosoftEdgeWebView2RuntimeInstallerX64.exe` that you downloaded
4. Run the installer
- It may show an error or close/crash when finished - this is normal
#### Extract Fixed Version Files
1. Extract the .cab file contents to a new folder:
```sh
drive_c/Program Files (x86)/Microsoft/EdgeWebView/
```
![image](assets/daybreak-on-linux/faug7.png)
---
### 5. Configure Registry
#### Download Registry File
1. [Download the registry file](https://github.com/Reynbow/guildwars/blob/main/installer/webview2.reg) and place it in your `drive_c` folder
**Registry file preview:**
```pwsh
[HKEY_LOCAL_MACHINE\Software\Microsoft\EdgeUpdate]
"pv"="143.0.3650.66"
"st"=dword:00000001
"doNotSandbox"=dword:00000001
[HKEY_LOCAL_MACHINE\Software\Microsoft\EdgeWebView]
"pv"="143.0.3650.66"
[HKEY_CURRENT_USER\Software\Microsoft\Edge\WebView\Rendering]
"DisableGpu"=dword:00000001
```
![image](assets/daybreak-on-linux/faug9.png)
#### Import Registry File
1. In Faugus, open the **Tools** tab
2. Click the `Winetricks` button in the bottom right
3. Click `Ok` with `Select the default wineprefix` checked
![image](assets/daybreak-on-linux/faug5.png)
4. Select `regedit` and click `Ok`
![image](assets/daybreak-on-linux/faug8.png)
5. Click **Registry** → **Import Registry File...**
![image](assets/daybreak-on-linux/bottles10.png)
6. Choose the `webview2.reg` file you downloaded earlier
7. After import completes, close the registry
![image](assets/daybreak-on-linux/bottles11.png)
---
### 6. Install .NET Desktop Runtime
1. In Winetricks, select `Install a Windows DLL or component`
![image](assets/daybreak-on-linux/faug10.png)
2. Select `dotnetdesktop9` from the list and click `Ok`
![image](assets/daybreak-on-linux/faug11.png)
---
## You're Done! 🎉
Daybreak should now work under Linux!
### Next Steps
- Point Daybreak to your existing Guild Wars installation, or
- Have Daybreak install Guild Wars for you in its prefix
Daybreak will handle your mods and GWToolbox entirely.
**Mods for gMod:** [Player-made Modifications](https://wiki.guildwars.com/wiki/Player-made_Modifications/Cartography_Index)
@@ -1,9 +0,0 @@
# Download Guild Wars
## Download latest Guild Wars executable
1. Expand the Guild Wars menu section and open the Download Guild Wars view
![image](assets/open-download-guildwars.png)
2. Select the destination folder for the installer
3. Daybreak will automatically launch the installer
4. Once the installation has finished, [set up the new executable](Executable-Management#setting-up-an-executable)
@@ -1,35 +0,0 @@
# Executable Management
## Open Executables settings view
1. Expand the Settings section of the menu
2. Click on the Executables button
![image](assets/open-executables.png)
## Setting up an executable
1. [Open Executables settings view](#open-executables-settings-view)
2. Click on the Add button to add a new executable
![image](assets/add-executable.png)
3. Fill in the path of click on the Open button and choose the Guild Wars executable
## Maintaining an executable
### Version check on Daybreak launch
1. On launch, Daybreak will check that all executables are up to date
2. If an executable is out of date, Daybreak will prompt the user to update
3. Click the notification to start the update process. This will update ALL executables onboarded onto Daybreak
### Version check on Guild Wars launch
1. When launching a Guild Wars instance, Daybreak will check that the executable is up to date
2. If an executable is out of date, Daybreak will prompt the user to update
3. Click the notification to start the update process. This will update only the detected executable
### Version check in Executables View
1. [Open the Executables View](#open-executables-settings-view)
2. If the executable is out of date, a down arrow will appear next to it
3. Click on the down arrow to start the update process
4. If the executable is up to date, a checkmark will appear next to it
-49
View File
@@ -1,49 +0,0 @@
# Focus View
## Intro
Focus View is a feature of Daybreak that replaces the Game Companion view when Guild Wars is running
Focus View collects information about the current running Guild Wars instance and displays it to the user
Please see [Comparison to GwToolboxpp](#comparison-to-gwtoolboxpp) for a comparison between the two tools
![image](assets/focus-view.png)
## Enabling Focus View
1. Open the [Mods view](Mods#open-mod-management-view)
2. Enable the Daybreak API mod
## Switching characters
1. Click on the down arrow to show a list of available characters for your current account
![image](assets/switching-characters.png)
2. Click on the name of the character you want to switch to
## Load the current build / party loadout into Daybreak
1. Click on the single / multiple icon to load your current build / party loadout into Daybreak
![image](assets/load-build-into-daybreak.png)
2. Edit the build following [these steps](Build-Management#edit-a-build)
## Context hyperlinks
- Click on the Title Track to redirect the embedded browser to the wiki page of the Title Track
- Click on the current map name to redirect the embedded browser to the wiki page of the current map
- Click on the current quest to redirect the embedded browser to the wiki page of the current quest
- Click on any quest in the Quest Log to redirect the embedded browser to the wiki page of the quest
![image](assets/focus-view-hyperlinks.png)
## Vanquishing mode
When Daybreak detects that the character is in hard mode on a map, it enables the vanquishing resource bar. This bar displays information regarding the vanquishing progress of the current instance
## Comparison to GWToolboxpp
Focus View is not meant as a replacement to GWToolboxpp. Instead, it provides some functionality QOL functionality that is meant to compliment GWToolboxpp.
Daybreak injects a module into Guild Wars only when Focus View is enabled. This module exposes a REST+WebSocket API that Focus View uses to extract information from the running Guild Wars instance. Similarly, GWToolbox injects its own module into Guild Wars to provide its functionality.
Focus View currently runs exclusively in read mode. That means, it won't facilitate the automation of any action on the running guild wars process. Any information extracted from guild wars can only be displayed to the user, but it can't be changed.
@@ -1,30 +0,0 @@
# gMod Management
Daybreak allows you to install and manage texture mods for Guild Wars. Daybreak will also order your texture packs based on the user selection.
## Open gMod management view
1. Open [mods management view](Mods#open-mod-management-view)
2. Click on manage gMod
![image](assets/manage-gmod.png)
## Load a texture mod
Click on the add button on the titlebar in order to import a new texture pack
![image](assets/load-texture-mods.png)
## Enable/disable a texture pack
To enable/disable a texture pack, flip the switch on the mod row
## Reorder texture packs
gMod only loads a texture override once. This means that once a texture pack loads a texture, subsequent packs will not be able to load the same texture
To ensure best results, Daybreak allows users to reoder texture packs
Use the arrows on the mod row to determine the priority of a texture pack, with the **top being highest priority** and **the bottom being lowest priority**
## Remove a texture pack
To remove a texture pack from Daybreak, click on the bin button on the mod row. This will not delete the actual texture file, it will simply remove it from Daybreak's internal tracking list
@@ -1,53 +0,0 @@
# Getting started
## Download Daybreak
- Go to [latest release](https://github.com/AlexMacocian/Daybreak/releases/latest) to get to the download page of the latest version
- Download and extract the zip archive to any location on your computer
- Open the Daybreak.exe executable to open the launcher
## First time setup
When you first open Daybreak, you're greeted with the `Game Companion` view asking you to create an account. Click on continue to proceed to the [account onboarding](#onboard-an-account)
![image](assets/first-time-setup/landing.png)
### Onboard an account
- Click on continue to onboard your first Guild Wars account
- Click on the add button in the titlebar to add a new account
![image](assets/first-time-setup/add-account.png)
For more details on credential management, go to [Credential Management](Credential-Management)
### Onboard an executable
When you return to the Game Companion view, you'll be prompted to add a Guild Wars executable. You can either [onboard an existing executable](#existing-guild-wars-installation) or you can [download guild wars through Daybreak](#download-guild-wars)
For more details on executable management, go to [Executable Management](Executable-Management)
#### Existing Guild Wars installation
- Click on the add button in the titlebar to add an executable
![image](assets/first-time-setup/add-executable.png)
- Find your existing `Gw.exe` and load it into Daybreak
#### Download Guild Wars
Daybreak can download and install Guild Wars. To do that, navigate to `Download Guild Wars` view, select a destination folder and let Daybreak download and install the game
![image](assets/first-time-setup/download-guildwars.png)
### Setup a launch configuration
The last step of the onboarding process requires that you setup a launch configuration. [Launch Configurations](Launch-Configurations) tell Daybreak how to launch your game.
- Navigate to `Game Companion` to be prompted to create a launch configuration
- Click on continue to go to Launch Configurations view
- Click on the add button in the titlebar to add a new launch configuration
![image](assets/first-time-setup/add-launch-configuration.png)
- Set your desired credential
- Set your desired executable
For more details on launch configurations, go to [Launch Configurations](Launch-Configurations)
### Launch Guild Wars
Once we have a launch configuration set up, go back to `Game Companion` view. This time you should be seeing the launch button with your configuration. Click on the `Launch` button to launch your game
![image](assets/first-time-setup/launch-game.png)
-8
View File
@@ -1,8 +0,0 @@
# Gw Market
Daybreak integrates with [Gw Market](https://gwmarket.net/) to provide automatic inventory scanning and player certification. Thanks to the folks at [Gw Market Discord](https://discord.gg/6GfNaceb) for allowing me to integrate their service into Daybreak.
## Getting started
1. Expand the Services menu section and open Guild Wars Marketplace view
![image](assets/open-gwmarket.png)
-115
View File
@@ -1,115 +0,0 @@
# Project rundown
Daybreak is a custom launcher for the popular online RPG [Guild Wars](https://www.guildwars.com/en/).
## Getting Started
Follow this link to the [Getting Started page](Getting-Started)
## Features
- [Guild Wars REST API](Daybreak-API)
Can inject a REST API into Guild Wars that exposes some Guild Wars information such as builds and character stats over http. Useful for automating some of the features of Daybreak (eg. Character Switching or displaying Faction stats)
- [Build template management](Build-Management)
Can manage the local build templates, create/edit/delete build templates, search and import build templates from the internet. Daybreak support both single build templates as well as team build templates
- [Build template synchronization](Build-Management#build-synchronization)
Can backup/restore build templates from a linked OneDrive account, show differences between local and remote builds and allows individual uploads/downloads
- [Integration with GWToolbox builds](Build-Management#integration-with-gwtoolbox-builds)
Daybreak integrates with GWToolbox builds. Daybreak can load, edit and save builds from GWToolbox config as well as export vanilla builds to GWToolbox config
- [Manage user credentials](Credential-Management)
Can manage multiple user credentials, allows the user to switch between them with the click of a button, stores the credentials encrypted locally and protects them using Windows APIs
- [Download Guild Wars](Download-Guild-Wars)
Can download the Guild Wars installer and launch it
- [Executable Management](Executable-Management)
Can manage multiple Guild Wars executables, allows the user to switch between them with the click of a button. Maintains the executable versions and checks for updates. Daybreak will also verify executables and prompt the user to fix them if it detects any issues
- [Multiple Launch Configurations](Launch-Configurations)
Can manage multiple launch configurations with combinations of credentials and executables. Can attach to configurations once they're launched. Launch configurations support passing arguments to Guild Wars when launching
- [Multi-Box/Multi-Launch Support](Multi-Launch)
Can manage and launch multiple instances of Guild Wars concurrently
- [Guild Wars Live Integration](Focus-View)
Can collect information from the current running executable and shows it in a centralized view with links and shortcuts to useful information. Links current quest to the quest wiki page, current map to the map wiki page, build pages, loads builds from the embedded browser and more features
- [uMod/gMod Integration](GMod-Management)
Can install and manage uMod. Can automatically launch uMod dll when launching Guild Wars. Can download and manage tpf files for uMod
- [GwToolboxpp Integration](Mods#manage-a-mod)
Can install and manage GwToolboxpp. Can automatically launch GwToolboxpp when launching Guild Wars
- [DirectSong Integration](Mods#manage-a-mod)
Can install and manage DirectSong. Can automatically launch DirectSong when launching Guild Wars
- [ReShade Integration](ReShade-Management)
Can install and manage ReShade. Can automatically launch ReShade when launching Guild Wars. Can download and manage ReShade shader packs and deploys them on startup
- [Screen Auto-Placement](Screen-Affinity)
Can auto-place the Guild Wars window on the desired screen and location at launch
- [Auto-Update](Version-Management)
Can monitor for new Daybreak versions and automatically download and install new versions when they are available. Can roll-back to previous versions from the version management view
- [Gw Market](Gwmarket)
Integrates with [Gw Market](https://gwmarket.net/) to provide automatic inventory scanning and player certification
- [Trade Chats](Trade-Chat)
Integrates with [Kamadan](https://kamadan.gwtoolbox.com/)/[Ascalon](https://ascalon.gwtoolbox.com/) Trade Chat to provide access to live trade requests, query for trade requests. Thanks to the folks at [Kamadan-Trade-Chat](https://github.com/3vcloud/kamadan-trade-chat) for providing the functionality and allowing me to integrate it into Daybreak
- [Party Search](Party-Search)
Integrates with [Party Search](https://party.gwtoolbox.com/) to provide access to live party listings
- [Trader Quotes](Trader-Quotes)
Integrates with [Kamadan](https://kamadan.gwtoolbox.com/) to provide material prices and price trends. Provides a view for visualizing the history of prices
- [Notifications](Notifications)
Implements a notification service that can display notifications and perform actions based on them
- [Trade Alerts](Trade-Alerts)
Leverages the [Kamadan](https://kamadan.gwtoolbox.com/)/[Ascalon](https://ascalon.gwtoolbox.com/) Trade Chat integration to set up trade alerts based on rules. Will trigger [notifications](Notifications) when a trade message is found based on the configured rules. Daybreak supports alerts for [Trader Quotes](Trader-Quotes), with alerts when the price is higher or lower than an upper or a lower target
- [Create Guild Wars Copies](Copy-Guild-Wars-Executable)
Can create new Guild Wars executables from existing ones, to be used with features such as [Multi-Launch](Multi-Launch). These copies will be automatically onboarded into Daybreak to be managed as all the other executables
- [Seasonal Events Support](Seasonal-Events)
Daybreak detects when seasonal events are supposed to be active and notifies the user. Daybreak present the user with a Calendar view that shows each event and the days it takes place across days, months and years
- [Plugin Support](Plugins)
Daybreak supports plugins written for the .net runtime. Daybreak can also enable/disable plugins. Please check the [wiki](Plugins) for details about plugin functionality and for a quickstart guide on writing your own plugins
- [Setting Synchronization](Settings-Synchronization)
Daybreak can back up and restore the launcher settings to a OneDrive account. These settings can be shared across devices by logging into OneDrive through the Daybreak launcher
- [Command Line Arguments](Daybreak-Command-Line-Arguments)
Daybreak supports command line arguments when launching. Please check [Command Line Arguments Page](Daybreak-Command-Line-Arguments) for supported arguments
@@ -1,31 +0,0 @@
# Launch configurations
Daybreak allows the creation of multiple launch configurations by combining executables and credentials. These launch configurations are used to tell Daybreak how to launch Guild Wars.
![image](assets/launch-configurations.png)
## Access launch configurations settings
1. Click on the menu button to expand the menu
2. Expand the Setting section
3. Click on Launch configurations
![image](assets/open-launch-configurations.png)
## Creating a launch configuration
1. [Access the launch configuration settings](#access-launch-configurations-settings)
2. Click on the add button
![image](assets/create-launch-configuration.png)
3. [Modify the new configuration](#modifying-a-launch-configuration)
## Deleting a launch configuration
1. [Access the launch configuration settings](#access-launch-configurations-settings)
2. Click on the bin button next to the configuration you want to delete
![image](assets/delete-launch-configuration.png)
## Modifying a launch configuration
1. [Access the launch configuration settings](#access-launch-configurations-settings)
2. Click on the configuration you want to modify
3. Select a set of credentials and an executable
4. Adjust the arguments passed to Guild Wars
@@ -1,11 +0,0 @@
# Place launcher shortcut
Daybreak can auto-manage a shortcut to the launcher
## Enable the shortcut
1. Expand the Settings menu section and open the Launcher settings
![image](assets/open-launcher-settings.png)
2. Choose where the shortcut should be placed
3. Enable/Disable shortcut
![image](assets/daybreak-shortcut.png)
-65
View File
@@ -1,65 +0,0 @@
# Mods
Mods are user-installed modifications that enhance or change the functionality of Guild Wars. They can provide additional features, improve user experience, or add new tools to assist with gameplay
## Open Mod Management view
1. Open mod management view
![image](assets/open-mods.png)
## Enable/Disable a mod
1. Open the [Mod Management view](#open-mod-management-view)
2. Find the desired mod in the list
3. Flip the Enabled switch to enable or disable the mod
![image](assets/enable-disable-mods.png)
## Install a mod
1. Open the [Mod Management view](#open-mod-management-view)
2. Click on the install button and follow the instructions
![image](assets/install-a-mod.png)
## Uninstall a mod
1. Open the [Mod Management view](#open-mod-management-view)
2. Disable the mod
3. Click on the uninstall button
![image](assets/uninstall-a-mod.png)
## Manage a mod
1. Open the [Mod Management view](#open-mod-management-view)
2. Enable the mod
3. Mods that can be managed will have a Manage button next to their Enabled switch
4. Click on the Manage button to open the mod settings view
![image](assets/manage-a-mod.png)
## Supported mod list
- Auto screen placer
- Allows you to automatically position and resize Guild Wars windows on launch
- Daybreak API
- Enables Daybreak to inject a custom API module into Guild Wars
- Exposes functionality that is used by Focus View
- For a detailed explanation, check [Daybreak API documentation](Daybreak-API#summary)
- DirectSong
- Enables custom Guild Wars soundtracks composed by Jeremy Soule
- The files need to be downloaded before they can be used
- Daybreak automatically downloads the files before enabling the mod for the first time
- [gMod](GMod-Management)
- [Developed by gwdevhub](https://github.com/gwdevhub/gMod)
- Texture mod loader for Guild Wars
- Replacement for uMod and texMod
- Daybreak manages the setup and deployment of texture packs
- GuildWars Version Checker
- Checks for updates to the Guild Wars client and notifies you when a new version is available
- Disables launch if the client is out of date
- GWToolbox
- [Developed by gwdevhub](https://github.com/gwdevhub/GWToolboxpp)
- Provides a ton of quality of life features for Guild Wars
- [ReShade](ReShade-Management)
- [Developed by crosire](https://reshade.me/)
- Advanced post-processing injector for games and video software
- Allows you to enhance the graphics of Guild Wars with custom shaders
- Daybreak manages the setup and deployment of ReShade
@@ -1,10 +0,0 @@
# Multi-Launch (Multi-Box) support
By default, Daybreak supports only one Guild Wars executable. You can enable Multi-Launch Support by following these steps:
1. Expand the Settings section of the menu and open the Launcher settings view
![image](assets/open-launcher-settings.png)
2. Enable Multi-Launch Support from the settings list
![image](assets/multi-launch-support.png)
3. Launch executables from Game Companion
![image](assets/game-companion.png)
@@ -1,12 +0,0 @@
# Notification service
Daybreak shows notifications in the top right corner
![image](assets/notifications.png)
## Opening notifications
Click on the notification in order to open it
## Dismiss active notifications
To dismiss active notifications, click on the 'X' button on the notification widget
@@ -1,8 +0,0 @@
# Guild Wars Party Search
Daybreak integrates with [Party Search](https://party.gwtoolbox.com/) to provide access to live party listings.
## Getting started
1. Expand the Services menu section and open the Party Search view
![image](assets/open-party-search.png)
@@ -1,8 +0,0 @@
# Plugin List
This page contains a list of known Daybreak plugins.
To install any of them, follow the plugin installation step and load the plugin as described in [Plugins](Plugins.md#plugins-in-daybreak)
## [Enemy Window Plus](https://github.com/vash-silver/Enemy-Window-Plus-Daybreak-Plugin)
![showcase1](https://private-user-images.githubusercontent.com/3218079/540030105-7ffb0b22-0a65-4c35-ab2f-1a9d0f4f2a1b.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Njk3Nzk1MzUsIm5iZiI6MTc2OTc3OTIzNSwicGF0aCI6Ii8zMjE4MDc5LzU0MDAzMDEwNS03ZmZiMGIyMi0wYTY1LTRjMzUtYWIyZi0xYTlkMGY0ZjJhMWIucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDEzMCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAxMzBUMTMyMDM1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MDM4MDlhNzcxOTAwOTU3MjdhMGZhMGE4NDhmYjI1MWMwOWRhNzY5MjVlMGEyMzFkMmM2NDU2YTE4NTljMGNmYyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.iLaGtCexaUSUsdy8Ht1MBKNm7UWEgxThJ6od_vKg4uY)
![showcase2](https://private-user-images.githubusercontent.com/3218079/540030123-27ddfbe3-2c09-4244-b88a-b5edf20f276e.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Njk3Nzk1MzUsIm5iZiI6MTc2OTc3OTIzNSwicGF0aCI6Ii8zMjE4MDc5LzU0MDAzMDEyMy0yN2RkZmJlMy0yYzA5LTQyNDQtYjg4YS1iNWVkZjIwZjI3NmUucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDEzMCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAxMzBUMTMyMDM1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9OTM5NDQ4NjZiYmE1MGJkZWZmMWQ1ZDgxMjAwMWVkMzE1NTBjOTIxMjE4OTNiNDZhZGMxNjMzNTkzMTkxOWI0ZSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.4GPcvMIhuE2nICbk0upPRTUKKRrFnpkec9Oo4OjVfsI)
-182
View File
@@ -1,182 +0,0 @@
# Daybreak Plugins (alpha)
This page will contain a breakdown of what are Daybreak plugins, how to enable/disable plugins in Daybreak as well as to how to write a custom plugin.
## Introduction
Daybreak plugins are executables that are loaded into the AppDomain of the running Daybreak launcher. They can contain any type of C# code as well as can import their own dependencies and libraries.
Ultimately they can do anything that a C# dotnet application can do.
*Note - Plugin dependency support is still pretty spotty. Future releases will eventually solve the plugin dependency importing*
## Plugins in Daybreak
### Open Plugin Management View
Expand the Menu section and click on the Plugins subsection
![image](assets/open-plugins.png)
### Enable and disable a plugin
1. [Open the Plugin Management View](#open-plugin-management-view)
2. Switch the toggle of the desired plugin
3. Restart Daybreak
![image](assets/plugins-reload-daybreak.png)
### Plugin details
Each entry in the [Plugin Management View](#open-plugin-management-view) shows details about the detected plugin.
## Coding your own plugin
This section contains details about the functionality of the Daybreak code and expects the reader to have some basic understanding of programming, OOP principles, dependency injection, inheritance as well as some basic level of C# and .net knowledge
### Framework basics
Daybreak is written in [Blazor Hybrid](https://learn.microsoft.com/en-us/aspnet/core/blazor/hybrid/?view=aspnetcore-10.0), hosted in [Photino.Blazor](https://github.com/tryphotino/photino.Blazor)
### Quickstart Guide
As an example, check out [SimplePlugin](https://github.com/AlexMacocian/Daybreak/tree/master/Examples/Plugins/SimplePlugin).
*The following guide is written for Visual Studio 2022. You can use any other text editor/IDE, but your steps will differ slightly*
To create a new plugin:
1. Clone the [Daybreak](https://github.com/AlexMacocian/Daybreak.git) repository
2. Create a new .net (preferably .net 10) library in Visual Studio anywhere on your PC
3. Import `Daybreak.Shared.csproj` into your new Solution
4. In your new `.csproj`, add a Project Reference to the Daybreak.Shared.csproj
(*Note: Don't copy the exact path you see in this picture. Modify it to match the path from your .csproj to Daybreak.Shared.csproj*)
![image](assets/plugin-project-reference.png)
If successful, in Visual Studio, you should see Daybreak show up in the Dependencies tab
![image](assets/plugin-project-reference-tree.png)
5. Create a new class and inherit from [PluginConfigurationBase](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Models/Plugins/PluginConfigurationBase.cs) (from Daybreak.Shared.Models.Plugins namespace)
```C#
public sealed class PluginConfiguration : PluginConfigurationBase
{
}
```
6. Build the project
7. Go to the output directory (usually it is in [Project path]/bin/[Debug|Release]/[Chosen .net version]/
8. Copy your .dll(s) into Daybreak/Plugins/[Your plugin name]/
9. Launch Daybreak
### Configuring a plugin / Building the PluginConfigurationBase class
Plugins get access to almost the same setup as the main Daybreak binary.
Since this code is still in alpha, please check [PluginConfigurationBase.cs](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Models/Plugins/PluginConfigurationBase.cs) for the latest functionality.
#### Configuration overrides
Plugins get to pick which configuration steps to override. As of writing this document, the following overrides are exposed
- RegisterServices
- RegisterViews
- RegisterStartupActions
- RegisterPostUpdateActions
- RegisterOptions
- RegisterNotificationHandlers
- RegisterMods
- RegisterBrowserExtensions
- RegisterLaunchArgumentHandlers
- RegisterMenuButtons
- RegisterThemes
- RegisterProviderAssemblies
Plugins also get to use the following methods
- SetupLoggingAndMetrics
- SetupDaybreakUserAgent
- SetupChromeImpersonationUserAgent
#### Configuration overrides continued
1. `RegisterServices` provides a [IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection?view=dotnet-plat-ext-7.0) parameter. This is the standard service collection used by most .net projects that implement DI. Here, a plugin can register its services and setup lifetimes for the services.
2. `RegisterViews` provides a [IViewProducer](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Navigation/IViewProducer.cs) parameter. Here a plugin can register their own views (as a UserControl). Using [IViewManager](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Navigation/IViewManager.cs), the plugin can then later navigate to those views by calling `viewManager.ShowView<TRegisteredViewType>()`
3. `RegisterStartupActions` provides a [IStartupActionsProducer](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Startup/IStartupActionProducer.cs) parameter. Here, the plugin can register a [StartupActionBase](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Models/StartupActionBase.cs) that gets executed by Daybreak on startup.
4. `RegisterPostUpdateActions` provides a [IPostUpdateActionsProducer](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Updater/PostUpdate/IPostUpdateActionProducer.cs) parameter. Here, the plugin can register a [PostUpdateActionBase](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Models/PostUpdateActionBase.cs) that gets executed by Daybreak after an update.
5. `RegisterOptions` provides an [IOptionsProducer](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Options/IOptionsProducer.cs) parameter. Here, the plugin can register options models that can later be retrieved using DI by requesting `IOptions<TOption>`, `ILiveOptions<TOption>`, `IUpdateableOptions<TOption>`, `ILiveUpdateableOptions<TOption>`.
`IOptions` is a readonly value of the option that gets initialized once, meaning that if the options change during runtime, the value will not change unless requested again through DI.
`ILiveOptions` requests the options value every time it is used in code, meaning that if the options change, the code will use the latest option.
`IUpdateableOptions` provides a way for your code to update the options, but it won't always retrieve the latest value of the options.
`ILiveUpdateableOptions` allows to update the options and will also always retrieve the latest value of the options.
6. `RegisterNotificationHandlers` provides a [INotificationHandlerProducer](https://github.com/AlexMacocian/Daybreak/blob/master/Daybreak/Services/Notifications/INotificationHandlerProducer.cs) parameter. Here, the plugin can register a [INotificationHandler](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Notifications/INotificationHandlerProducer.cs). This handler will get called when a notification associated with this handler is being opened. Check [INotificationService.NotifyInformation/NotifyError`<TNotificationHandler`>](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Notifications/INotificationService.cs) for details.
7. `RegisterMods` provides a [IModsManager](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Mods/IModsManager.cs) parameter. Here, the plugin can register a [IModService](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Mods/IModService.cs).
8. `RegisterBrowserExtensions` provides a [IBrowserExtensionsProducer](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Browser/IBrowserExtensionsProducer.cs). Here, the plugin can register a [IBrowserExtension](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Browser/IBrowserExtension.cs). Browser extensions allow the mod to set up Chrome extensions for the embedded browser.
9. `RegisterLaunchArgumentHandlers` provides a [IArgumentHandlerProducer](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak/Services/ApplicationArguments/IArgumentHandlerProducer.cs). Here, the plugin can register a [IArgumentHandler](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/ApplicationArguments/IArgumentHandlerProducer.cs). Argument handlers specify an identifier and expected count of arguments. On startup, if provided arguments match the identifier and expected count, the handler will be called to process the command line arguments.
10. `RegisterMenuButtons` provides a [IMenuServiceProducer](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Menu/IMenuServiceProducer.cs). Menu buttons can be registered per categories, as seen in [ProjectConfiguration.RegisterMenuButtons](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak/Configuration/ProjectConfiguration.cs#L369).
11. `RegisterThemes` provides a [IThemeProducer](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Initialization/IThemeProducer.cs). Plugins can use this to register custom themes for Daybreak. Check out [CoreThemes](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak/Themes/CoreThemes.cs) for examples.
12. `RegisterProviderAssemblies` provides a [IProviderAssemblyProducer](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/FileProviders/IFileProviderProducer.cs). Here, the plugin can register assemblies that contain embedded resources that can be used by Daybreak's web view. Check out [SimplePlugin.csproj](https://github.com/gwdevhub/Daybreak/blob/master/Examples/Plugins/SimplePlugin/SimplePlugin/SimplePlugin.csproj) on how the resources are embedded and used.
### Http Calls
*It is strongly advised that you use the in-built http client implementation as it comes with hooks into the metrics and logging system. As such, once you follow the steps below for configuring and using the client, you'll get metrics on the average latency of your request in the Menu > Diagnostics > Metrics view as well as detailed logging of the request and responses in the Menu > Diagnostics > Logs view.*
Daybreak provides a built-in way of handling http calls. In the `RegisterServices` override, setup your desired http client with
```C#
serviceManager
.RegisterHttpClient<TService>()
.WithMessageHandler(this.SetupLoggingAndMetrics<TService>)
.WithDefaultRequestHeadersSetup(this.SetupDaybreakUserAgent)
.Build()
```
Now that the DI is configured, in your service `TService`, simply take a dependency on `IHttpClient<TService>`.
### Logging
By default, Daybreak comes with a `ILogger<T>` resolver implemented directly into the DI engine.
For an example on how to perform logging, check [InternetCheckingService](https://github.com/AlexMacocian/Daybreak/blob/master/Daybreak/Services/InternetChecker/InternetCheckingService.cs) and the usage of `ILogger<InternetCheckingService>`.
To log messages, take a dependency on `ILogger<TService>` and simply use it to log information.
Your logs will be visible in Menu > Diagnostics > Logs view. You can also use `Ctrl + F` to search for key words through the logs.
### Metrics
*Currently, only metrics of type `double` are supported. Also, Daybreak doesn't currently store metrics across sessions. Once you close the application, your metrics will be lost*
Daybreak exposes an [IMetricsService](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Metrics/IMetricsService.cs) through the DI engine.
Simply take a dependency on `IMetricsService`.
Then, create your histogram by calling `metricsService.CreateHistogram<double>`.
For an example, check out [InternetCheckingService](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak/Services/InternetChecker/InternetCheckingService.cs)
To record metrics, call `myHistogram.Record(value)`.
You can view your metrics in the Menu > Diagnostics > Metrics.
### Notifications
Daybreak provides a service for emitting notifications to the user.
Currently, notifications have two levels, `Information` and `Error`.
To emit notifications, take a dependency on `INotificationService` and call `notificationService.NotifyInformation` or `notificationService.NotifyError`.
Notifications support custom handlers that get triggered when the user opens the notification. For an example, check out the [TradeMessageNotificationHandler](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak/Services/TradeChat/Notifications/TradeMessageNotificationHandler.cs).
To link notifications to your notification handler, implement a `TNotificationHandler` of type `INotificationHandler`, and call `notificationService.NotifyInformation<TNotificationHandler>`. Daybreak will link your handler to your notification, so when the user opens your notification, it triggers your handler.
### Guild Wars Integration
Daybreak currently integrates with Guild Wars through the [Daybreak.API](https://github.com/gwdevhub/Daybreak/tree/master/Daybreak.API) project. The `Daybreak.API` executable is injected into Guild Wars at startup and exposes functionality through a asp.net server. To interact with running Guild Wars instances, use the [IDaybreakApiService](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak/Services/Api/DaybreakApiService.cs) to obtain a [ScopedApiContext](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Api/ScopedApiContext.cs) for a particular Guild Wars session.
### View Navigation
Daybreak provides a centralized way of navigating through views by using `IViewManager`.
First, register your views in `RegisterViews` override.
Then, take a dependency on `IViewManager` and use `viewManager.ShowView<TView>()` to navigate to your view. If you want to pass some data to your view, call `viewManager.ShowView<TView>((parameterName, parameterValue))`. These parameters will be set on the view parameters.
### Privilege Mode
If your plugin requires Daybreak to run in privileged mode (eg. Administrator rights), take a dependency on [IPrivilegeManager](https://github.com/gwdevhub/Daybreak/blob/master/Daybreak.Shared/Services/Privilege/IPrivilegeManager.cs).
Determine if Daybreak is already running in Privileged Mode by using `privilegeManager.AdminPrivileges`.
If you want to escalate Daybreak to administrator, call `privilegeManager.RequestAdminPrivileges<TCancelView>(messageToUser, dataContextOfCancelView)`. In case the user declines the escalation, Daybreak will redirect the user to the `TCancelView` view. If you don't know what view to use, simply use `LauncherView` as a cancel view as this is the landing page of Daybreak.
@@ -1,19 +0,0 @@
# ReShade Management
Daybreak allows you to download and install a set of predefined shaders through the management view. You can also apply custom shaders by copying them inside the `ReShade` folder under `Daybreak` root folder.
## Open ReShade management view
1. Open [mods management view](Mods#open-mod-management-view)
2. Click on manage ReShade
![image](assets/manage-reshade.png)
## Download a shader package
Each shader package contains a list of effects. Click on the package row to make Daybreak download and install that package. Once the installation completes, Daybreak will show a notification
![image](assets/install-shader-package.png)
## Manage ReShade folder
Daybreak installs and sets up ReShade under the Daybreak root folder. For quick access, click on the titlebar button
![image](assets/manage-reshade-folder.png)
@@ -1,11 +0,0 @@
# Screen affinity
## Set Guild Wars window position on launch
Daybreak can auto-place Guild Wars on any desired screen.
1. Expand the Guild Wars menu section and open the Mods settings view
![image](assets/open-mods.png)
2. Enable/disable the [Auto screen placer](Mods#supported-mod-list)
3. Click on the [Manage](Mods#manage-a-mod) button next to the Enabled switch
4. Select the desired screen by clicking on it
@@ -1,24 +0,0 @@
# Seasonal Events Calendar
![image](assets/events-calendar.png)
## Opening Calendar View
1. Expand the Services menu section and open the Event Calendar view
![image](assets/open-event-calendar.png)
## Using Calendar View
- Clicking on any event in the list will move the Calendar to the date when the next start date of the event. The browser will also navigate to the page of the event
- Clicking on any day in the calendar that has an event, will select the event in the list and navigate the browser to the event
## Event notifications
Daybreak checks the current dates for seasonal events. When it detects that a season should be available, it emits a notification for the user.
### Enabling/Disabling seasonal events notifications
1. Expand the Settings menu section and open the Event Notifier settings view
![image](assets/open-event-notifier-settings.png)
2. Switch the toggle to enable/disable the notifications
@@ -1,21 +0,0 @@
# Settings Synchronization
## Opening settings synchronization view
1. Click on the setting synchronization button
![image](assets/open-synchronize-options.png)
2. Log into OneDrive
3. Open the Synchronization view
![image](assets/synchronize-options.png)
## Back-up settings
1. Open the [settings synchronization view](#opening-settings-synchronization-view)
2. Click on the backup button
![image](assets/backup-to-remote.png)
## Restore settings
1. Open the [settings synchronization view](#opening-settings-synchronization-view)
2. Click on Download
![image](assets/restore-from-remote.png)
@@ -1,38 +0,0 @@
# Trade Alerts
Daybreak can monitor the [Kamadan](https://kamadan.gwtoolbox.com) and [Ascalon](https://ascalon.gwtoolbox.com) trade messages and alert the user when a trade message meets certain requirements.
## Accessing Alerts View
1. Expand the Services menu section and click on the Alerts button
![image](assets/open-trade-alerts.png)
2. A list of trade alerts will appear on the main screen
## Creating a new alert
1. [Access the Alerts View](#accessing-alerts-view)
2. Click on the buttons to create a quote or a message alert
![image](assets/create-trade-alerts.png)
3. Adjust the name of the alert
4. Enable the alert by flipping the 'Enabled' toggle to On
## Enabling an alert
1. [Access the Alerts View](#accessing-alerts-view)
2. Click on the desired alert
3. Flip the 'Enabled' toggle to On
## Disabling an alert
1. [Access the Alerts View](#accessing-alerts-view)
2. Click on the desired alert
3. Flip the 'Enabled' toggle to Off
## Deleting an alert
1. [Access the Alerts View](#accessing-alerts-view)
2. Click on the 'Bin' button on the desired alert
## Triggering alerts
Once alerts are Enabled, they will automatically trigger based on the [alert rules](#creating-a-new-alert). When an alert is triggered, a [notification](Notifications) will pop up mentioning the source trade chat (Kamadan/Ascalon) and the trade details
-8
View File
@@ -1,8 +0,0 @@
# Kamadan/Ascalon Trade Chat
Daybreak integrates with [Kamadan](https://kamadan.gwtoolbox.com/) and [Ascalon](https://ascalon.gwtoolbox.com/) trade chats. Get live trades, material quotes and query for specific trades. Thanks to the folks at [Kamadan Trade Chat](https://github.com/3vcloud/kamadan-trade-chat) for allowing me to integrate their service into Daybreak
## Getting started
1. Expand the Services menu section and open Kamadan or Ascalon trade chat views
![image](assets/open-trade-chat.png)
@@ -1,20 +0,0 @@
# Daybreak Version Management
Daybreak can check and perform updates when new versions are available
## Enabling update checking
Daybreak can periodically check for updates
To enable this feature, follow the steps:
1. Expand the Settings menu section and open the Launcher settings
![image](assets/open-launcher-settings.png)
2. Enable Auto-Check For Updates
## Manage version
1. Expand the Daybreak menu section and open the Manage client version view
![image](assets/open-version-management.png)
2. Click on a version button will open the browser and redirect to the github release page of that version
3. Click on the download button of a version to trigger Daybreak to download the specified version
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 596 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 758 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Some files were not shown because too many files have changed in this diff Show More