Skip to content

JuneStepp/OneLauncher

Repository files navigation

OneLauncher window examples

Deutsch | English | Français

Distributed on GitHub, LotroInterface, and NexusMods.


GitHub release (latest SemVer including pre-releases) License: GPL v3

An enhanced launcher for both LOTRO and DDO with many features including an Add-on manager for plugins, skins, and music.

Version 2.0 is on the way with many many changes. The current version is stable and has all major features, though.

Features

  • Plugins, skins, and music manager
  • Multiple accounts support
  • Password saving
  • External scripting support for add-ons
  • Auto WINE setup for Linux
  • Multiple clients support
  • more

Installation

The easiest way to get OneLauncher is with a pre-built installer. Linux users should make sure a recent version of Wine is installed.

Command Line Usage

All settings can be overridden from the command line. This is especially useful for making custom shortcuts. For example, loading the LOTRO preview client in French could be done with --game lotro_preview --locale fr.

 OneLauncher 2.0.dev0                                                                                                                                                               
                                                                                                                                                                                    
  Usage: onelauncher [OPTIONS] COMMAND [ARGS]...                                                                                                                                    
                                                                                                                                                                                    
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --version                       Print version and exit.                                                                                                                          │
│ --install-completion            Install completion for the current shell.                                                                                                        │
│ --show-completion               Show completion for the current shell, to copy it or customize the installation.                                                                 │
│ --help                -h        Show this message and exit.                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Program Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --default-locale                                                               TEXT                               The default language for games and UI                          │
│ --always-use-default-locale-for-ui    --no-always-use-default-locale-for-ui                                       Use default language for UI regardless of game language        │
│ --save-accounts                       --no-save-accounts                                                          Save game accounts                                             │
│ --save-accounts-passwords             --no-save-accounts-passwords                                                Save game account passwords with Keyring                       │
│ --games-sorting-mode                                                           [priority|last_used|alphabetical]  Order to show games in UI                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Game Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --game                                                        GAME_TYPE_OR_UUID          Which game to load. (lotro, lotro_preview, ddo, ddo_preview, or a game UUID)            │
│ --game-directory                                              DIRECTORY                  The game's install directory                                                            │
│ --locale                                                      TEXT                       Language used for game                                                                  │
│ --client-type                                                 [WIN64|WIN32|WIN32Legacy]  Which version of the game client to use                                                 │
│ --high-res-enabled                   --no-high-res-enabled                               If the high resolution game files should be used                                        │
│ --standard-game-launcher-filename                             TEXT                       The name of the standard game launcher executable. Ex. LotroLauncher.exe                │
│ --patch-client-filename                                       TEXT                       Name of the dll used for game patching. Ex. patchclient.dll                             │
│ --newsfeed                                                    TEXT                       URL of the feed (RSS, ATOM, ect) to show in the launcher                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Game WINE Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --builtin-prefix-enabled       --no-builtin-prefix-enabled               If WINE should be automatically managed                                                                 │
│ --user-wine-executable-path                                   FILE       Path to the WINE executable to use when WINE isn't automatically managed                                │
│ --user-prefix-path                                            DIRECTORY  Path to the WINE prefix to use when WINE isn't automatically managed                                    │
│ --wine-debug-level                                            TEXT       WINE debug level to use                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Game Account Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --username                    TEXT  Login username                                                                                                                               │
│ --display-name                TEXT  Name shown instead of account name                                                                                                           │
│ --last-used-world-name        TEXT  World last logged into. Will be the default at next login                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Development Install

OneLauncher uses Poetry for dependency management. To get everything setup, simply run poetry install in the root folder of the OneLauncher source code.

To run from source

poetry run onelauncher

To build

The build ends up in start_onelauncher.dist.

Nuitka can't currently cross-compile, but the InstallBuilder installers can be cross-compiled.

poetry run python compile.py

To translate

OneLauncher uses Weblate for translations. You can make an account and contribute translations through their site. See the project page here.

Add-on Manager Info For Developers

Getting Your Add-on in OneLauncher

I follow the RSS feed on LotroInterface and will add any add-ons that look to be in the correct format. Compendium files are not required. You can open an issue here or email me if you feel your add-on needs to be added.

Archive Format

  • Add-ons must be uploaded as a zip!
  • Archive should have a descriptive name (i.e. not "skin" or "plugin")
  • It's not recommended, but ok if zip has no root folder, multiple root folders, or includes part of the path to the data folder like "ui/skins" or "Plugins".

Compendium Files

Compendium files should be placed inside the top-level directory of your add-on, and their names follow the format:

{NAME}.{plugin/skin/music}compendium An example is Example Plugin.plugincompendium

The contents of compendium files follow the format:

<{Plugin/Skin/Music}Config>
    <Id>{LOTRO INTERFACE ID}</Id>
    <Name>{NAME}</Name>
    <Description>{DESCRIPTION}</Description>
    <Version>{VERSION}</Version>
    <Author>{AUTHOR}</Author>
    <InfoUrl>http://www.lotrointerface.com/downloads/info{LOTRO INTERFACE ID}</InfoUrl>
    <DownloadUrl>http://www.lotrointerface.com/downloads/download{LOTRO INTERFACE ID}</DownloadUrl>
    <!--Descriptors only needed for plugins-->
    <Descriptors>
        <descriptor>{AUTHOR}\{NAME}.plugin</descriptor>
        <!--More descriptors can be added if more plugins are part of the main plugin. This is a representation of the paths to all the .plugin files.-->
    </Descriptors>
    <!--Dependencies can be added for any type of add-on. The dependency doesn't have to be of the same add-on type as what is dependent on it-->
    <Dependencies>
        <dependency>{INTERFACE ID OF DEPENDENCY}</dependency>
        <!--Any amount of dependencies are fine-->
    </Dependencies>
    <!--An add-on can request permission to run a Python script at every game launch.-->
    <StartupScript>{PATH TO PYTHON SCRIPT IN SAME FORMAT AS DESCRIPTORS}</StartupScript>
</{Plugin/Skin/Music}Config>

An example is:

<PluginConfig>
    <Id>314159</Id>
    <Name>Example Plugin</Name>
    <Description>Does example things</Description>
    <Version>4.0.4</Version>
    <Author>June Stepp</Author>
    <InfoUrl>http://www.lotrointerface.com/downloads/info314159</InfoUrl>
    <DownloadUrl>http://www.lotrointerface.com/downloads/download314159</DownloadUrl>
    <Descriptors>
        <descriptor>JuneStepp\Example.plugin</descriptor>
        <descriptor>JuneStepp\Another Example.plugin</descriptor>
    </Descriptors>
    <Dependencies>
        <dependency>0</dependency>
        <dependency>367</dependency>
    </Dependencies>
    <StartupScript>JuneStepp\example.py</StartupScript>
</PluginConfig>

There is a vscode extension by @lunarwtr that can lint compendium and other related files. It includes XML schemas you can manually reference as well.

Patches

Patches must follow the same format as the add-on that is being patched. The most common issue is leaving out folders farther up the tree from what is changed.

Here is a list of possible issues to keep in mind when making a patch:

Make sure patch…

  • Follows the exact same folder structure as the add-on being patched.
  • Doesn't edit the compendium file of the add-on being patched.
  • Is installed after what is being patched.
  • Has clear name.

Collections

Collections of add-ons can be made by listing the add-ons you would like in the collection as dependencies of your add-on. See the Compendium Files section for how to add dependencies to your add-on.

Dependencies

Dependencies will be installed automatically after your add-on. See the Compendium Files section for how to add dependencies to your add-on. Turbine Utilities uses ID 0.

Startup Scripts

Startup scripts are Python scripts that will be run before every game launch. When installing an add-on with a startup script, the user will be prompted for permission for the script to run and shown the contents of the script. It is likely that users will not give permission for your script to run, so make sure to program in a message for that situation. See the Compendium Files section for how to add a startup script to your add-on.

Builtin Variables

These are pre-set variables that you can access in your startup script.

  • __file__: The string path to your startup script.
  • __game_dir__: The string path to the current game directory.
  • __game_config_dir__: The string path to the current game settings folder. This is normally "The Lord of The Rings Online" or "Dungeons and Dragons Online" in the user's documents folder, but it can be configured differently.

Custom Clients

OneLauncher Banner Image

Game banner images are displayed above the newsfeed in OneLauncher. All images are scaled to 136 pixels in height keeping aspect ratio and should ideally should be 300x136. Images following the path {Game Directory}/{Locale Resources Folder}/banner.png will replace the default image for that game and locale. If there is no image for a user's selected locale, the default image will be shown. An example path is C://Program Files/Standing Stone Games/Lord of The Rings Online/en/banner.png.