Guides › Development

Start here: developing for LonelyIce

How LonelyIce is put together

LonelyIce is one program, LonelyIce.exe: a launcher, an AzerothCore-based server and a package manager. The server core is a fork of AzerothCore with a plugin loader. A plugin is a folder with a plugin.json and, usually, a shared library of ordinary AzerothCore scripts, built with the core's AddPlugin() CMake function. The loader is part of the core, so the same plugin also runs in a plain worldserver of the fork, without the launcher.

Everything you publish follows three rules:

  • It works in a plain worldserver of the fork, not only under LonelyIce.
  • It never sees the database backend: SQL is written in the AzerothCore (MySQL) dialect and all access goes through the core's database interfaces.
  • It never hard-codes the id of a client DBC row it adds: it names the row in a patch recipe and the installer gives out the id.

What you can build

You want to You build Start with
Add gameplay: hooks, commands, NPCs, spells, tables, settings, a client addon a plugin Your first plugin
Ship an existing AzerothCore module without forking it a wrapped module Wrapping an AzerothCore module
Run the server's databases somewhere else than SQLite files a storage plugin Storage plugins
Add spells or other DBC rows, icons and files for the game client a patch recipe inside a plugin (a plugin may carry only data and client files) Client patches
Offer packages from your own server or folder a catalog Hosting your own catalog
Change the core, the launcher or the package manager a core or launcher change Building the core, Contributing

What you need

  • A LonelyIce installation that has been set up once, and the 3.3.5a game client (build 12340) it uses, to test in.
  • For server code, the build tools of Building LonelyIce. On Windows: Visual Studio 2022, CMake 3.22 or newer, Git, Boost 1.87 and OpenSSL 3. The Linux and macOS builds have not been tested yet.
  • A build of the same LonelyIce release you run. A plugin library only loads into the core build it was compiled against (core.abi, currently lonelyice-ac-2).
  • A text editor for JSON and SQL. A plugin without server code (patch recipes, client addons, SQL only) needs no compiler.

Reading order

1. Understand the pieces.

2. Build a plugin.

3. Look things up.

4. When something goes wrong.

5. Ship it.

Other paths.

Where the code lives

Everything is under github.com/LonelyIceProject:

Repository What it holds
lonelyice The program: launcher, server process, package manager, the release build. Its plugins/ are the shipped plugins, as submodules.
azerothcore-wotlk The core fork with the plugin loader (src/server/shared/Plugins, doc/Plugins.md).
mod-playerbots Playerbots, built as the playerbots plugin.
mod-lonelyice-* LonelyIce's own plugins (qol, waystones, citizens, tactics, mysql): the best examples to copy from.
<module>-plugin Wrappers that build third-party AzerothCore modules as plugins.

The homepage in a mod-lonelyice-* plugin's plugin.json points at its repository; wrappers and playerbots point at the upstream module instead.

Where to ask

Ask on the forum (Forum in the site header): questions, ideas and plugins in progress are all welcome there. Bug reports go to the forum or to the issues of the repository concerned; Support lists what a good report contains.